using DOAN.Model.MES.base_; using DOAN.Model.MES.bigscreen.Dto; using DOAN.Model.mes.echarts; using DOAN.Model.MES.exception; using DOAN.Model.MES.product; using DOAN.Service.MES.bigScreen.IService; using Infrastructure.Attribute; using Mapster; using SqlSugar.SplitTableExtensions; namespace DOAN.Service.MES.bigScreen { /// /// 生产大屏 2 /// [AppService(ServiceType = typeof(IProduct2BigScreenService), ServiceLifetime = LifeTime.Transient)] public class Product2BigScreenService : BaseService, IProduct2BigScreenService { public ProductBigScreenMoudle02Dto GetMoudle01() { ProductBigScreenMoudle02Dto productBigScreen = new ProductBigScreenMoudle02Dto(); //今日班组 productBigScreen.TodayGroupQuantity = Context.Queryable() .Where(it => it.WorkorderDate == DateTime.Today) .GroupBy(it => it.GroupCode).Select(it => it.GroupCode).ToArray().Length; //今天产线 productBigScreen.TodayLineQuantity = Context.Queryable() .Where(it => it.WorkorderDate == DateTime.Today) .GroupBy(it => it.LineCode).Select(it => it.LineCode).ToArray().Length; //今日计划产量 productBigScreen.TodayPlanQuantity = Context.Queryable() .Where(it => it.WorkorderDate == DateTime.Today) .Sum(it => it.DeliveryNum ?? 0); //今日实际产量 productBigScreen.TodayActionProductionQuantity = Context.Queryable() .LeftJoin((p, r) => p.Workorder == r.FkWorkorder) .Where((p, r) => p.WorkorderDate == DateTime.Today) .Sum((p, r) => r.FinishedNum ?? 0); //今日产成品种类 productBigScreen.TodayProductTypeQuantity = Context.Queryable() .Where(it => it.WorkorderDate == DateTime.Today) .GroupBy(it => it.ProductionCode) .Select(it => it.ProductionCode).ToArray().Length; // 七日变更计划 productBigScreen.SevenDaysPriorPlanQuantity = Context.Queryable() .Where(it => it.ChangeTime <= DateTime.Today && it.ChangeTime >= DateTime.Today.AddDays(-7)) .Count(); return productBigScreen; } public List GetMoudle02() { return Context.Queryable().LeftJoin((w, r) => w.Workorder == r.FkWorkorder) .LeftJoin((w, r, g)=>w.GroupCode==g.GroupCode) .Where((w, r,g) => w.WorkorderDate == DateTime.Today&&g.Status==1) .GroupBy((w, r,g) => w.GroupCode) .OrderBy((w,r,g)=>g.Id) .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 Data = Context.Queryable().Where(it=>it.Status==1).OrderBy(it => it.Id).Select(it => it.GroupCode).ToList(); XAxis.Data = Data; echartsOptions.XAxis = XAxis; //值 EchartsSeries Series1 = new EchartsSeries(); List Data1 = Context.Queryable() .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 insertData = new List(); 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 Data2 = Context.Queryable() .LeftJoin((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 insertData2 = new List(); 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 Series = new List { Series2, Series1 }; echartsOptions.Series = Series; return echartsOptions; } public EchartsOptions GetMoudle09() { EchartsOptions echartsOptions = new EchartsOptions(); echartsOptions.Title = new EchartsTitle("昨天班组报工数和计划数对比折线图不完成TOP", "昨天班组报工数和计划数对比折线图不完成TOP"); //x轴 EchartsXAxis XAxis = new EchartsXAxis(); echartsOptions.XAxis = XAxis; //值 EchartsSeries Series2 = new EchartsSeries(); List Data2 = Context.Queryable() .LeftJoin((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)/SqlFunc.AggregateSum(r.DispatchNum ?? 0) }).ToList(); List insertData2 = new List(); insertData2 = Data2.Select(it => new EchartsSeriesData() { Name = it.Name, Value =Math.Round(it.Value,2)}).OrderBy(it=>it.Value).ToList(); XAxis.Data = insertData2.Select(it=>it.Name).ToList(); Series2.Data = insertData2; Series2.Name = "报工数/计划数"; Series2.Type = "line"; List Series = new List { Series2 }; 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 Data = Context.Queryable().Where(it=>it.Status==1).OrderBy(it => it.Id).Select(it => it.GroupCode).ToList(); XAxis.Data = Data; echartsOptions.XAxis = XAxis; //值 EchartsSeries Series1 = new EchartsSeries(); List Data1 = Context.Queryable() .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 insertData = new List(); 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 Data2 = Context.Queryable() .LeftJoin((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 insertData2 = new List(); 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 Series = new List { Series2, Series1 }; echartsOptions.Series = Series; return echartsOptions; } public List GetMoudle05() { return Context.Queryable().Where(it => it.ChangeTime > DateTime.Today&&it.ChangeTime<=DateTime.Today.AddDays(1)) .Select(it => new TodayExceptionWorkOrder() { workorder = it.Workorder, description = it.Log }).ToList(); } /// /// 本月工单达成率 /// /// 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 = "pie"; //达成 int Reached = Context.Queryable() .Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth.AddDays(1)) .Where(it => it.DispatchNum <= it.FinishedNum).Count(); //不达成 int UnReached = Context.Queryable() .Where(it => it.CreatedTime >= firstDayOfMonth && it.CreatedTime <= lastDayOfMonth.AddDays(1)) .Where(it => it.DispatchNum > it.FinishedNum).Count(); List Data = new List() { new EchartsSeriesData() { Name = "达成", Value = Reached }, new EchartsSeriesData() { Name = "不达成", Value = UnReached }, }; pieSeries.Data = Data; echartsOptions.Series = new List() { pieSeries }; return echartsOptions; } //本月 生产产品 top10 public EchartsOptions GetMoudle07() { // 获取当前日期 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("本月生产产品TOP10", "本月生产产品TOP10"); echartsOptions.Title = Title; EchartsSeries LineSeries = new EchartsSeries(); LineSeries.Name = "不同产品的本月生产的数量"; LineSeries.Type = "bar"; LineSeries.Data = Context.Queryable() .LeftJoin((it, wr) => it.Workorder == wr.FkWorkorder) .Where((it, wr) => it.WorkorderDate >= firstDayOfMonth && it.WorkorderDate <= lastDayOfMonth.AddDays(1)) .GroupBy((it, wr) => it.ProductionCode) .Select((it, wr) => new EchartsSeriesData() { Name = it.ProductionCode, Value = SqlFunc.AggregateSum(wr.FinishedNum ?? 0) }) .MergeTable() .OrderByDescending(it => it.Value) .Take(10).ToList(); ; echartsOptions.Series = new List() { LineSeries }; EchartsYAxis YAxis = new EchartsYAxis(); YAxis.Data = LineSeries.Data.Select(it => it.Name).ToList(); echartsOptions.YAxis = YAxis; return echartsOptions; } public EchartsOptions GetMoudle08() { // 获取当前日期 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; // 横坐标 EchartsXAxis xAxis = new EchartsXAxis(); List xData = new List(); DateTime index = firstDayOfMonth; do { xData.Add(index.ToString("yyyy-MM-dd")); index = index.AddDays(1); } while (index < lastDayOfMonth.AddDays(1)); xAxis.Data = xData; echartsOptions.XAxis = xAxis; //折线系列 EchartsSeries LineSeries = new EchartsSeries(); LineSeries.Name = "本月每天产量"; LineSeries.Type = "line"; var result = Context.Queryable() .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) .Where((w, r) => w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth) .GroupBy((w, r) => w.WorkorderDate) .Select((w, r) => new EchartsSeriesData() { Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"), Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0) }).ToList(); List LineSeriesData = new List(); foreach (var item in xData) { LineSeriesData.Add(new EchartsSeriesData() { Name = item, Value = result.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault(), }); } LineSeries.Data = LineSeriesData; echartsOptions.Series = new List() { LineSeries }; // 各个组的产量系列 string[] groupArray = Context.Queryable().Where(it=>it.Status==1).OrderBy(it => it.Id).Select(it => it.GroupCode) .ToArray(); if (groupArray.Length > 0) { var GroupresultList = Context.Queryable() .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) .Where((w, r) => groupArray.Contains(w.GroupCode)) .Where((w, r) => w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth) .GroupBy((w, r) => new { w.GroupCode, w.WorkorderDate }) .Select((w, r) => new { groupCode = w.GroupCode, Name = w.WorkorderDate.Value.ToString("yyyy-MM-dd"), Value = SqlFunc.AggregateSum(r.FinishedNum ?? 0) }).ToList(); foreach (var group in groupArray) { EchartsSeries groupSeries = new EchartsSeries(); groupSeries.Name = group + "组"; groupSeries.Type = "bar"; List LineSeriesData01 = new List(); foreach (var item in xData) { LineSeriesData01.Add(new EchartsSeriesData() { Name = item, Value = GroupresultList.Where(it => it.Name == item).Where(it=>it.groupCode==group).Select(it => it.Value).FirstOrDefault(), }); } groupSeries.Data = LineSeriesData01; echartsOptions.Series.Add(groupSeries); } } return echartsOptions; } } }