287 lines
11 KiB
C#
287 lines
11 KiB
C#
using DOAN.Model.MES.base_;
|
|
using DOAN.Model.MES.bigscreen.Dto;
|
|
using DOAN.Model.mes.echarts;
|
|
using DOAN.Model.MES.product;
|
|
using DOAN.Service.MES.bigScreen.IService;
|
|
using Infrastructure.Attribute;
|
|
using Mapster;
|
|
using SqlSugar.SplitTableExtensions;
|
|
|
|
namespace DOAN.Service.MES.bigScreen
|
|
{
|
|
/// <summary>
|
|
/// 生产大屏 2
|
|
/// </summary>
|
|
[AppService(ServiceType = typeof(IProduct2BigScreenService), ServiceLifetime = LifeTime.Transient)]
|
|
public class Product2BigScreenService : BaseService<ProWorkorder>, IProduct2BigScreenService
|
|
{
|
|
public ProductBigScreenMoudle02Dto GetMoudle01()
|
|
{
|
|
ProductBigScreenMoudle02Dto productBigScreen = new ProductBigScreenMoudle02Dto();
|
|
|
|
//今日班组
|
|
productBigScreen.TodayGroupQuantity = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate == DateTime.Today)
|
|
.GroupBy(it => it.GroupCode).Select(it => it.GroupCode).ToArray().Length;
|
|
|
|
|
|
//今天产线
|
|
productBigScreen.TodayLineQuantity = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate == DateTime.Today)
|
|
.GroupBy(it => it.LineCode).Select(it => it.LineCode).ToArray().Length;
|
|
|
|
|
|
//今日计划产量
|
|
productBigScreen.TodayPlanQuantity = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate == DateTime.Today)
|
|
.Sum(it => it.DeliveryNum ?? 0);
|
|
|
|
|
|
//今日实际产量
|
|
productBigScreen.TodayActionProductionQuantity = Context.Queryable<ProWorkorder>()
|
|
.LeftJoin<ProReportwork>((p, r) => p.Workorder == r.FkWorkorder)
|
|
.Where((p, r) => p.WorkorderDate == DateTime.Today)
|
|
.Sum((p, r) => r.FinishedNum ?? 0);
|
|
|
|
|
|
//今日产成品种类
|
|
productBigScreen.TodayProductTypeQuantity = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate == DateTime.Today)
|
|
.GroupBy(it => it.ProductionCode)
|
|
.Select(it => it.ProductionCode).ToArray().Length;
|
|
|
|
|
|
// 七日变更计划
|
|
productBigScreen.SevenDaysPriorPlanQuantity = Context.Queryable<ProWorkorderUpdateLog>()
|
|
.Where(it => it.ChangeTime <= DateTime.Today && it.ChangeTime >= DateTime.Today.AddDays(-7))
|
|
.Count();
|
|
return productBigScreen;
|
|
}
|
|
|
|
public List<TodayGroupProductionProgress> GetMoudle02()
|
|
{
|
|
return Context.Queryable<ProWorkorder>().LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
|
|
.Where((w, r) => w.WorkorderDate == DateTime.Today)
|
|
.GroupBy((w, r) => w.GroupCode)
|
|
.Select((w, r) => new TodayGroupProductionProgress()
|
|
{
|
|
GroupCode = w.GroupCode,
|
|
PlanQuantity = SqlFunc.AggregateSum(w.DeliveryNum ?? 0),
|
|
ReportQuantity = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
|
|
}).ToList();
|
|
}
|
|
|
|
public EchartsOptions GetMoudle03()
|
|
{
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
echartsOptions.Title = new EchartsTitle("昨天各组报工数和计划数直方图", "昨天各组报工数和计划数直方图");
|
|
|
|
//x轴
|
|
EchartsXAxis XAxis = new EchartsXAxis();
|
|
|
|
List<string> Data = Context.Queryable<BaseGroup>().OrderBy(it => it.Id).Select(it => it.GroupCode).ToList();
|
|
|
|
XAxis.Data = Data;
|
|
echartsOptions.XAxis = XAxis;
|
|
|
|
//值
|
|
|
|
|
|
EchartsSeries Series1 = new EchartsSeries();
|
|
List<EchartsSeriesData> Data1 = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate == DateTime.Today.AddDays(-1))
|
|
.GroupBy(it => it.GroupCode)
|
|
.Select(it => new EchartsSeriesData()
|
|
{
|
|
Name = it.GroupCode,
|
|
Value = SqlFunc.AggregateSum(it.DeliveryNum ?? 0)
|
|
}).ToList();
|
|
List<EchartsSeriesData> insertData = new List<EchartsSeriesData>();
|
|
foreach (var item in Data)
|
|
{
|
|
insertData.Add(new EchartsSeriesData()
|
|
{
|
|
Name = item, Value = Data1.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
|
|
});
|
|
}
|
|
|
|
Series1.Data = insertData;
|
|
Series1.Name = "计划数";
|
|
|
|
|
|
EchartsSeries Series2 = new EchartsSeries();
|
|
List<EchartsSeriesData> Data2 = Context.Queryable<ProWorkorder>()
|
|
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
|
|
.Where((w, r) => w.WorkorderDate == DateTime.Today.AddDays(-1))
|
|
.GroupBy((w, r) => w.GroupCode)
|
|
.Select((w, r) => new EchartsSeriesData()
|
|
{
|
|
Name = w.GroupCode,
|
|
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
|
|
}).ToList();
|
|
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
|
|
foreach (var item in Data)
|
|
{
|
|
insertData2.Add(new EchartsSeriesData()
|
|
{
|
|
Name = item, Value = Data2.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
|
|
});
|
|
}
|
|
|
|
Series2.Data = insertData2;
|
|
|
|
Series2.Name = "报工数";
|
|
|
|
List<EchartsSeries> Series = new List<EchartsSeries> { Series2, Series1 };
|
|
echartsOptions.Series = Series;
|
|
return echartsOptions;
|
|
}
|
|
|
|
public EchartsOptions GetMoudle04()
|
|
{
|
|
// 获取今天的日期
|
|
DateTime today = DateTime.Today;
|
|
|
|
// 计算上周一的日期
|
|
DateTime lastMonday = today.AddDays(-(int)today.DayOfWeek - 6);
|
|
|
|
// 计算上周日的日期
|
|
DateTime lastSunday = lastMonday.AddDays(6);
|
|
|
|
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
echartsOptions.Title = new EchartsTitle("上周各组报工数和计划数直方图", "上周各组报工数和计划数直方图");
|
|
|
|
//x轴
|
|
EchartsXAxis XAxis = new EchartsXAxis();
|
|
|
|
List<string> Data = Context.Queryable<BaseGroup>().OrderBy(it => it.Id).Select(it => it.GroupCode).ToList();
|
|
|
|
XAxis.Data = Data;
|
|
echartsOptions.XAxis = XAxis;
|
|
|
|
//值
|
|
|
|
EchartsSeries Series1 = new EchartsSeries();
|
|
List<EchartsSeriesData> Data1 = Context.Queryable<ProWorkorder>()
|
|
.Where(it => it.WorkorderDate >= lastMonday && it.WorkorderDate <= lastSunday)
|
|
.GroupBy(it => it.GroupCode)
|
|
.Select(it => new EchartsSeriesData()
|
|
{
|
|
Name = it.GroupCode,
|
|
Value = SqlFunc.AggregateSum(it.DeliveryNum ?? 0)
|
|
}).ToList();
|
|
List<EchartsSeriesData> insertData = new List<EchartsSeriesData>();
|
|
foreach (var item in Data)
|
|
{
|
|
insertData.Add(new EchartsSeriesData()
|
|
{
|
|
Name = item, Value = Data1.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
|
|
});
|
|
}
|
|
|
|
Series1.Data = insertData;
|
|
Series1.Name = "计划数";
|
|
|
|
|
|
EchartsSeries Series2 = new EchartsSeries();
|
|
List<EchartsSeriesData> Data2 = Context.Queryable<ProWorkorder>()
|
|
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
|
|
.Where((w, r) => w.WorkorderDate >= lastMonday && w.WorkorderDate <= lastSunday)
|
|
.GroupBy((w, r) => w.GroupCode)
|
|
.Select((w, r) => new EchartsSeriesData()
|
|
{
|
|
Name = w.GroupCode,
|
|
Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0)
|
|
}).ToList();
|
|
List<EchartsSeriesData> insertData2 = new List<EchartsSeriesData>();
|
|
foreach (var item in Data)
|
|
{
|
|
insertData2.Add(new EchartsSeriesData()
|
|
{
|
|
Name = item, Value = Data2.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault()
|
|
});
|
|
}
|
|
|
|
Series2.Data = insertData2;
|
|
|
|
Series2.Name = "报工数";
|
|
|
|
List<EchartsSeries> Series = new List<EchartsSeries> { Series2, Series1 };
|
|
echartsOptions.Series = Series;
|
|
return echartsOptions;
|
|
}
|
|
|
|
public List<TodayExceptionWorkOrder> GetMoudle05()
|
|
{
|
|
return Context.Queryable<ProWorkorderUpdateLog>().Where(it => it.ChangeTime == DateTime.Today)
|
|
|
|
.Select(it => new TodayExceptionWorkOrder()
|
|
{
|
|
|
|
workorder = it.Workorder,
|
|
description = it.Log
|
|
}).ToList();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 本月工单达成率
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public EchartsOptions GetMoudle06()
|
|
{
|
|
// 获取当前日期
|
|
DateTime today = DateTime.Today;
|
|
|
|
// 获取当前月的第一天
|
|
DateTime firstDayOfMonth = new DateTime(today.Year, today.Month, 1);
|
|
|
|
// 获取当前月的最后一天
|
|
DateTime lastDayOfMonth = new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month));
|
|
|
|
EchartsOptions echartsOptions = new EchartsOptions();
|
|
EchartsTitle Title=new EchartsTitle("本月工单达成率","本月工单达成率");
|
|
echartsOptions.Title = Title;
|
|
EchartsSeries pieSeries = new EchartsSeries();
|
|
pieSeries.Name = "本月工单达成率";
|
|
pieSeries.Type = "bar";
|
|
//达成
|
|
int Reached= Context.Queryable<ProReportwork>()
|
|
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth)
|
|
.Where(it => it.DispatchNum <= it.FinishedNum).Count();
|
|
//不达成
|
|
int UnReached= Context.Queryable<ProReportwork>()
|
|
.Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth)
|
|
.Where(it => it.DispatchNum > it.FinishedNum).Count();
|
|
List<EchartsSeriesData> Data = new List<EchartsSeriesData>()
|
|
{
|
|
new EchartsSeriesData() { Name = "达成", Value = Reached },
|
|
new EchartsSeriesData() { Name = "不达成", Value = UnReached },
|
|
};
|
|
pieSeries.Data=Data;
|
|
echartsOptions.Series = new List<EchartsSeries>() { pieSeries };
|
|
return echartsOptions;
|
|
}
|
|
|
|
public EchartsOptions GetMoudle07()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public EchartsOptions GetMoudle08()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public EchartsOptions GetMoudle09()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public EchartsOptions GetMoudle10()
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
} |