using DOAN.Model.MES.product; using DOAN.Service.MES.product.IService; using Infrastructure.Attribute; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DOAN.Service.MES.SmartScreen.Product.IService; using DOAN.Model.MES.SmartScreen.Product; using DOAN.Model.MES.SmartScreen; using Microsoft.Data.SqlClient; using DOAN.Model.MES.base_; using MathNet.Numerics; namespace DOAN.Service.MES.SmartScreen.Product { /// /// 生产智慧屏 /// [AppService(ServiceType = typeof(IProductSmartScreenService), ServiceLifetime = LifeTime.Transient)] public class ProductSmartScreenService : BaseService, IProductSmartScreenService { /// /// 数字翻牌器 /// /// public DigitalTurntableModel DigitalTurntable() { DigitalTurntableModel digital=new DigitalTurntableModel(); digital.WorkorderQuantity = Context.Queryable().Where(it=>it.WorkorderDate==DateTime.Today).Count(); digital.FinishedWorkorderQuantity=Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today) .Where(it=>it.Status==2) .Count(); digital.UnFinishedWorkorderQuantity = Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today) .Where(it => it.Status <2) .Count(); digital.ProductionPlanQuantity = Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today).Sum(it=>it.PlanNum??0); digital.ProductionFinishQuantity = Context.Queryable().Where(it => it.JobDateTime >= DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1)) .Where(it => it.ProcessId == 90).Sum(it => it.FinishNum??0); digital.GroupQuantity=Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today).GroupBy(it=>it.GroupCode).Count(); return digital; } public EchartsOptions BarProcessProductStatistic() { EchartsOptions echartsOptions = new EchartsOptions(); echartsOptions.Title = new EchartsTitle("今日各工序产量统计", "今日各工序产量统计"); EchartsXAxis xAxis = new EchartsXAxis(); xAxis.Data = Context.Queryable().LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => r.FkWorkRoute == 32) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) .ToList(); echartsOptions.XAxis=xAxis; //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "今日各个工序累计报工数"; List Data = Context.Queryable() .LeftJoin((it,w)=>it.ProcessId==w.Id) .Where((it, w) => it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1)) .GroupBy((it, w) => new {it.ProcessId,w.Name}) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value=SqlFunc.AggregateSum(it.FinishNum??0) }).ToList(); echartsSeries.Data = Data; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "今日各个工序累计计划数"; List Data2 = Context.Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) .Where((it, w) => it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1)) .GroupBy((it, w) => new { it.ProcessId, w.Name }) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value = SqlFunc.AggregateSum(it.PlanNum ?? 0) }).ToList(); echartsSeries2.Data = Data2; echartsOptions.Series.Add(echartsSeries2); return echartsOptions; } public EchartsOptions BarProcessProductStatisticWeek() { // 获取当前时间 DateTime now = DateTime.Now; // 计算到本周一需要减去的天数 int daysToSubtract = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7; // 获取本周一的日期 DateTime mondayMorning = now.AddDays(-daysToSubtract).Date; // .Date将时间设置为00:00:00 // 获取本周日午夜(实际上是下周一开始时间) DateTime sundayMidnight = mondayMorning.AddDays(7); EchartsOptions echartsOptions = new EchartsOptions(); echartsOptions.Title = new EchartsTitle("本周各工序产量统计", "本周各工序产量统计"); EchartsXAxis xAxis = new EchartsXAxis(); xAxis.Data = Context.Queryable().LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => r.FkWorkRoute == 32) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) .ToList(); echartsOptions.XAxis = xAxis; //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "本周各个工序累计报工数"; List Data = Context.Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) .Where((it, w) => it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight) .GroupBy((it, w) => new { it.ProcessId, w.Name }) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value = SqlFunc.AggregateSum(it.FinishNum ?? 0) }).ToList(); echartsSeries.Data = Data; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "本周各个工序累计计划数"; List Data2 = Context.Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) .Where((it, w) => it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight) .GroupBy((it, w) => new { it.ProcessId, w.Name }) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value = SqlFunc.AggregateSum(it.PlanNum ?? 0) }).ToList(); echartsSeries2.Data = Data2; echartsOptions.Series.Add(echartsSeries2); return echartsOptions; } public EchartsOptions BarProcessProductStatisticMonth() { // 获取当前日期时间 DateTime now = DateTime.Now; // 获取本月第一天的日期时间(凌晨) DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1, 0, 0, 0); // 获取本月最后一天的日期时间(午夜) int daysInMonth = DateTime.DaysInMonth(now.Year, now.Month); DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, daysInMonth, 23, 59, 59); EchartsOptions echartsOptions = new EchartsOptions(); echartsOptions.Title = new EchartsTitle("本月各工序产量统计", "本月各工序产量统计"); EchartsXAxis xAxis = new EchartsXAxis(); xAxis.Data = Context.Queryable().LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => r.FkWorkRoute == 32) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) .ToList(); echartsOptions.XAxis = xAxis; //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "本月各个工序今日累计报工数"; List Data = Context.Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) .Where((it, w) => it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth) .GroupBy((it, w) => new { it.ProcessId, w.Name }) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value = SqlFunc.AggregateSum(it.FinishNum ?? 0) }).ToList(); echartsSeries.Data = Data; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "本月各个工序今日累计计划数"; List Data2 = Context.Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) .Where((it, w) => it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth) .GroupBy((it, w) => new { it.ProcessId, w.Name }) .Select((it, w) => new EchartsSeriesData() { Name = w.Name, Value = SqlFunc.AggregateSum(it.PlanNum ?? 0) }).ToList(); echartsSeries2.Data = Data2; echartsOptions.Series.Add(echartsSeries2); return echartsOptions; } /// /// 本月每天产量 /// /// public EchartsOptions OutputOfCurrentmonth() { // 获取当前日期 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("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.Workorder) .Where((w, r) => w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth) .GroupBy((w, r) => w.WorkorderDate) .Select((w, r) => new EchartsSeriesData() { Name = w.WorkorderDate.Value.ToString("MM-dd"), Value = SqlFunc.AggregateSum(r.FinishNum ?? 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.Workorder) .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("MM-dd"), Value = SqlFunc.AggregateSum(r.FinishNum ?? 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; } } }