diff --git a/DOAN.Service/MES/SmartScreen/Product/ProductSmartScreenService.cs b/DOAN.Service/MES/SmartScreen/Product/ProductSmartScreenService.cs index 90ff88a..a26128b 100644 --- a/DOAN.Service/MES/SmartScreen/Product/ProductSmartScreenService.cs +++ b/DOAN.Service/MES/SmartScreen/Product/ProductSmartScreenService.cs @@ -1,18 +1,18 @@ -using DOAN.Model.MES.product; -using DOAN.Service.MES.product.IService; -using Infrastructure.Attribute; -using System; +using System; using System.Collections.Generic; +using System.Data; 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 DOAN.Model.MES.product; +using DOAN.Model.MES.SmartScreen; +using DOAN.Model.MES.SmartScreen.Product; +using DOAN.Service.MES.product.IService; +using DOAN.Service.MES.SmartScreen.Product.IService; +using Infrastructure.Attribute; using MathNet.Numerics; -using System.Data; +using Microsoft.Data.SqlClient; using NPOI.SS.Formula.Atp; namespace DOAN.Service.MES.SmartScreen.Product @@ -20,7 +20,10 @@ namespace DOAN.Service.MES.SmartScreen.Product /// /// 生产智慧屏 /// - [AppService(ServiceType = typeof(IProductSmartScreenService), ServiceLifetime = LifeTime.Transient)] + [AppService( + ServiceType = typeof(IProductSmartScreenService), + ServiceLifetime = LifeTime.Transient + )] public class ProductSmartScreenService : BaseService, IProductSmartScreenService { /// @@ -30,7 +33,10 @@ namespace DOAN.Service.MES.SmartScreen.Product public DigitalTurntableModel DigitalTurntable() { DigitalTurntableModel digital = new DigitalTurntableModel(); - digital.WorkorderQuantity = Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today).Count(); + 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) @@ -40,31 +46,51 @@ namespace DOAN.Service.MES.SmartScreen.Product // .Where(it => it.Status <2) // .Count(); - digital.ProductionPlanQuantity = Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today).Sum(it => it.PlanNum ?? 0); - + 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.MaterialRequisitionQuantity = Context.Queryable().Where(it => it.ProcessId == 10 && it.JobDateTime >= DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1)).Sum(it => it.FinishNum ?? 0); + digital.MaterialRequisitionQuantity = Context + .Queryable() + .Where(it => + it.ProcessId == 10 + && it.JobDateTime >= DateTime.Today + && it.JobDateTime < DateTime.Today.AddDays(1) + ) + .Sum(it => it.FinishNum ?? 0); + digital.ShipmentQuantity = Context + .Queryable() + .Where(it => + it.ProcessId == 90 + && it.JobDateTime >= DateTime.Today + && it.JobDateTime < DateTime.Today.AddDays(1) + ) + .Sum(it => it.FinishNum ?? 0); - digital.ShipmentQuantity = Context.Queryable().Where(it => it.ProcessId == 90 && it.JobDateTime >= DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1)).Sum(it => it.FinishNum ?? 0); - - digital.GroupQuantity = Context.Queryable().Where(it => it.WorkorderDate == DateTime.Today).Select(it => it.GroupCode).Distinct().Count(); - + digital.GroupQuantity = Context + .Queryable() + .Where(it => it.WorkorderDate == DateTime.Today) + .Select(it => it.GroupCode) + .Distinct() + .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) + xAxis.Data = Context + .Queryable() + .LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) @@ -73,20 +99,31 @@ namespace DOAN.Service.MES.SmartScreen.Product //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "今日各个工序累计报工数"; - List Data = Context.Queryable() + List Data = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1)) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .Select( + (it, w) => + new EchartsSeriesData() + { + Name = w.Name, + Value = SqlFunc.AggregateSum(it.FinishNum ?? 0), + } + ) + .ToList(); List NewData = new List(); foreach (var item in xAxis.Data) { - - decimal value = Data.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault(); + decimal value = Data.Where(it => it.Name == item) + .Select(it => it.Value) + .FirstOrDefault(); if (value == 0) { NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 }); @@ -95,29 +132,37 @@ namespace DOAN.Service.MES.SmartScreen.Product { NewData.Add(new EchartsSeriesData() { Name = item, Value = value }); } - } echartsSeries.Data = NewData; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "今日各个工序累计计划数"; - List Data2 = Context.Queryable() + List Data2 = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= DateTime.Today && it.JobDateTime <= DateTime.Today.AddDays(1)) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .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() { // 获取当前时间 @@ -132,12 +177,13 @@ namespace DOAN.Service.MES.SmartScreen.Product // 获取本周日午夜(实际上是下周一开始时间) 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) + xAxis.Data = Context + .Queryable() + .LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => r.FkWorkRoute == 32 && p.Status == 1) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) @@ -146,20 +192,31 @@ namespace DOAN.Service.MES.SmartScreen.Product //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "本周各个工序累计报工数"; - List Data = Context.Queryable() + List Data = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .Select( + (it, w) => + new EchartsSeriesData() + { + Name = w.Name, + Value = SqlFunc.AggregateSum(it.FinishNum ?? 0), + } + ) + .ToList(); List NewData = new List(); foreach (var item in xAxis.Data) { - - decimal value = Data.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault(); + decimal value = Data.Where(it => it.Name == item) + .Select(it => it.Value) + .FirstOrDefault(); if (value == 0) { NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 }); @@ -168,29 +225,37 @@ namespace DOAN.Service.MES.SmartScreen.Product { NewData.Add(new EchartsSeriesData() { Name = item, Value = value }); } - } echartsSeries.Data = NewData; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "本周各个工序累计计划数"; - List Data2 = Context.Queryable() + List Data2 = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= mondayMorning && it.JobDateTime <= sundayMidnight) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .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() { // 获取当前日期时间 @@ -203,12 +268,13 @@ namespace DOAN.Service.MES.SmartScreen.Product 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) + xAxis.Data = Context + .Queryable() + .LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => p.Status == 1 && r.FkWorkRoute == 32) .OrderBy((r, p) => p.Id) .Select((r, p) => p.Name) @@ -217,20 +283,31 @@ namespace DOAN.Service.MES.SmartScreen.Product //获取各个工序今日累计报工值 EchartsSeries echartsSeries = new EchartsSeries(); echartsSeries.Name = "本月各个工序今日累计报工数"; - List Data = Context.Queryable() + List Data = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .Select( + (it, w) => + new EchartsSeriesData() + { + Name = w.Name, + Value = SqlFunc.AggregateSum(it.FinishNum ?? 0), + } + ) + .ToList(); List NewData = new List(); foreach (var item in xAxis.Data) { - - decimal value = Data.Where(it => it.Name == item).Select(it => it.Value).FirstOrDefault(); + decimal value = Data.Where(it => it.Name == item) + .Select(it => it.Value) + .FirstOrDefault(); if (value == 0) { NewData.Add(new EchartsSeriesData() { Name = item, Value = 0 }); @@ -239,27 +316,34 @@ namespace DOAN.Service.MES.SmartScreen.Product { NewData.Add(new EchartsSeriesData() { Name = item, Value = value }); } - } echartsSeries.Data = NewData; echartsOptions.Series.Add(echartsSeries); //获取各个工序今日累计计划值 EchartsSeries echartsSeries2 = new EchartsSeries(); echartsSeries2.Name = "本月各个工序今日累计计划数"; - List Data2 = Context.Queryable() + List Data2 = Context + .Queryable() .LeftJoin((it, w) => it.ProcessId == w.Id) - .Where((it, w) => w.Status == 1 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth) + .Where( + (it, w) => + w.Status == 1 + && 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(); + .Select( + (it, w) => + new EchartsSeriesData() + { + Name = w.Name, + Value = SqlFunc.AggregateSum(it.PlanNum ?? 0), + } + ) + .ToList(); // echartsSeries2.Data = Data2; // echartsOptions.Series.Add(echartsSeries2); - - return echartsOptions; } @@ -268,15 +352,18 @@ namespace DOAN.Service.MES.SmartScreen.Product /// /// 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)); + DateTime lastDayOfMonth = new DateTime( + today.Year, + today.Month, + DateTime.DaysInMonth(today.Year, today.Month) + ); EchartsOptions echartsOptions = new EchartsOptions(); EchartsTitle Title = new EchartsTitle("本月每天产量", "本月每天产量"); @@ -294,13 +381,11 @@ namespace DOAN.Service.MES.SmartScreen.Product 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) =>r.ProcessId==70&&w.Status == 1 && w.WorkorderDate >= firstDayOfMonth && w.WorkorderDate <= lastDayOfMonth) @@ -319,33 +404,46 @@ namespace DOAN.Service.MES.SmartScreen.Product // Name = it.JobDateTime.Value.ToString("MM-dd"),// 获取日期部分 // Value = SqlFunc.AggregateSum(it.FinishNum ?? 0) // 聚合求和 // }).ToList(); - var result = Context.Queryable() - .Where(it => it.ProcessId == 20 && it.JobDateTime >= firstDayOfMonth && it.JobDateTime <= lastDayOfMonth.AddDays(1)) - .GroupBy(it => SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day)) // 按天分组 - .Select(it => new - { - Name = SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day), // 获取日期部分 - Value = SqlFunc.AggregateSum(it.FinishNum ?? 0) // 聚合求和 - }) - .ToList(); + var result = Context + .Queryable() + .Where(it => + it.ProcessId == 20 + && it.JobDateTime >= firstDayOfMonth + && it.JobDateTime <= lastDayOfMonth.AddDays(1) + ) + .GroupBy(it => SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day)) // 按天分组 + .Select(it => new + { + Name = SqlFunc.DateValue(it.JobDateTime ?? DateTime.MinValue, DateType.Day), // 获取日期部分 + Value = SqlFunc.AggregateSum(it.FinishNum ?? 0), // 聚合求和 + }) + .ToList(); List LineSeriesData = new List(); foreach (var item in xData) { - LineSeriesData.Add(new EchartsSeriesData() - { - Name = item, - Value = result.Where(it => it.Name==int.Parse (item)).Select(it => it.Value).FirstOrDefault(), - }); + LineSeriesData.Add( + new EchartsSeriesData() + { + Name = item, + Value = result + .Where(it => it.Name == int.Parse(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) + string[] groupArray = Context + .Queryable() + .Where(it => it.Status == 1) + .OrderBy(it => it.Id) + .Select(it => it.GroupCode) .ToArray(); if (groupArray.Length > 0) { @@ -361,18 +459,40 @@ namespace DOAN.Service.MES.SmartScreen.Product // Value = SqlFunc.AggregateSum(r.FinishNum ?? 0) // }).ToList(); - - var GroupresultList = Context.Queryable().LeftJoin((r, w) => r.Workorder == w.Workorder) + var GroupresultList = Context + .Queryable() + .LeftJoin((r, w) => r.Workorder == w.Workorder) .Where((r, w) => groupArray.Contains(w.GroupCode)) - .Where((r, w) => r.ProcessId == 20 && r.JobDateTime >= firstDayOfMonth && r.JobDateTime <= lastDayOfMonth.AddDays(1)) - .GroupBy((r, w) => new { w.GroupCode, Day = SqlFunc.DateValue(r.JobDateTime ?? DateTime.MinValue, DateType.Day) }) // 按天分组 - .Select((r, w) => new - { - groupCode = w.GroupCode, - Name = SqlFunc.DateValue(r.JobDateTime ?? DateTime.MinValue, DateType.Day),// 获取日期部分 - Value = SqlFunc.AggregateSum(r.FinishNum ?? 0) // 聚合求和 - }).ToList(); - + .Where( + (r, w) => + r.ProcessId == 20 + && r.JobDateTime >= firstDayOfMonth + && r.JobDateTime <= lastDayOfMonth.AddDays(1) + ) + .GroupBy( + (r, w) => + new + { + w.GroupCode, + Day = SqlFunc.DateValue( + r.JobDateTime ?? DateTime.MinValue, + DateType.Day + ), + } + ) // 按天分组 + .Select( + (r, w) => + new + { + groupCode = w.GroupCode, + Name = SqlFunc.DateValue( + r.JobDateTime ?? DateTime.MinValue, + DateType.Day + ), // 获取日期部分 + Value = SqlFunc.AggregateSum(r.FinishNum ?? 0), // 聚合求和 + } + ) + .ToList(); foreach (var group in groupArray) { @@ -380,16 +500,21 @@ namespace DOAN.Service.MES.SmartScreen.Product 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 ==int.Parse(item)).Where(it => it.groupCode == group).Select(it => it.Value).FirstOrDefault(), - }); + LineSeriesData01.Add( + new EchartsSeriesData() + { + Name = item, + Value = GroupresultList + .Where(it => it.Name == int.Parse(item)) + .Where(it => it.groupCode == group) + .Select(it => it.Value) + .FirstOrDefault(), + } + ); } groupSeries.Data = LineSeriesData01; @@ -398,27 +523,30 @@ namespace DOAN.Service.MES.SmartScreen.Product } return echartsOptions; - } - public EchartsOptions AccumulatedReport() { EchartsOptions echartsOptions = new EchartsOptions(); - echartsOptions.Title = new EchartsTitle("昨日-今日各工序实时累计完工数折线图", "昨日-今日各工序实时累计完工数折线图"); + echartsOptions.Title = new EchartsTitle( + "昨日-今日各工序实时累计完工数折线图", + "昨日-今日各工序实时累计完工数折线图" + ); //1.查询各个工序 - int[] processArray = Context.Queryable() - .Where(it => it.JobDateTime > DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1)) - .OrderBy(it => it.ProcessId) - .Select(it => it.ProcessId) - .Distinct() - .ToArray(); + int[] processArray = Context + .Queryable() + .Where(it => + it.JobDateTime > DateTime.Today && it.JobDateTime < DateTime.Today.AddDays(1) + ) + .OrderBy(it => it.ProcessId) + .Select(it => it.ProcessId) + .Distinct() + .ToArray(); //1 X轴 List DateTimeArray = new List(); - // 定义起始时间和结束时间 // 获取当前日期和时间 DateTime now = DateTime.Now; @@ -427,22 +555,46 @@ namespace DOAN.Service.MES.SmartScreen.Product DateTime yesterday = now.AddDays(-1); // 设置时间为 20:00 - DateTime startTime = new DateTime(yesterday.Year, yesterday.Month, yesterday.Day, 20, 0, 0); + DateTime startTime = new DateTime( + yesterday.Year, + yesterday.Month, + yesterday.Day, + 20, + 0, + 0 + ); //DateTime startTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day., 8, 0, 0); // DateTime startTime = DateTime.Today; - DateTime endTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 20, 0, 0); // 8 AM + 12 hours = 8 PM + DateTime endTime = new DateTime( + DateTime.Today.Year, + DateTime.Today.Month, + DateTime.Today.Day, + 20, + 0, + 0 + ); // 8 AM + 12 hours = 8 PM // 使用循环生成每30分钟的时间戳 - for (DateTime currentTime = startTime; currentTime <= endTime; currentTime = currentTime.AddMinutes(30)) + for ( + DateTime currentTime = startTime; + currentTime <= endTime; + currentTime = currentTime.AddMinutes(30) + ) { DateTimeArray.Add(currentTime); } - List DateTimeArrayString = DateTimeArray.Select(it => it.ToString("dd-HH:mm")).ToList(); + List DateTimeArrayString = DateTimeArray + .Select(it => it.ToString("dd-HH:mm")) + .ToList(); echartsOptions.XAxis = new EchartsXAxis() { Data = DateTimeArrayString }; //2 系列值-这组 今日实时累计完成数(每30分钟) for (int i = 0; i < processArray.Length; i++) { - string ProcessName = Context.Queryable().Where(it => it.Id == processArray[i]).Select(it => it.Name).First(); + string ProcessName = Context + .Queryable() + .Where(it => it.Id == processArray[i]) + .Select(it => it.Name) + .First(); EchartsSeries echartsSeries = new EchartsSeries(); //echartsSeries.Name = ProcessName + "工序今日实时累计完成数(每10分钟)"; @@ -450,55 +602,67 @@ namespace DOAN.Service.MES.SmartScreen.Product echartsSeries.Type = "line"; List echartsSeriesDatas = new List(); - string sql = "SELECT" + - " FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP(job_datetime) / 600 ) * 600 ) AS time_period," + - " SUM( finish_num ) AS count " + - " FROM" + - " pro_reportwork " + - " WHERE" + - " DATE(job_datetime) = CURDATE() AND @process_id=process_id " + - " GROUP BY" + - " FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 )" + - " ORDER BY" + - " time_period"; - string sql2 = "SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 ) * 600 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE DATE(job_datetime) = CURDATE() AND @process_id=process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period"; - string sql3 = "SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 1800 ) * 1800 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE job_datetime>=@SearchDateTime01 AND job_datetime<=@SearchDateTime02 AND process_id=@process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period"; + string sql = + "SELECT" + + " FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP(job_datetime) / 600 ) * 600 ) AS time_period," + + " SUM( finish_num ) AS count " + + " FROM" + + " pro_reportwork " + + " WHERE" + + " DATE(job_datetime) = CURDATE() AND @process_id=process_id " + + " GROUP BY" + + " FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 )" + + " ORDER BY" + + " time_period"; + string sql2 = + "SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 600 ) * 600 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE DATE(job_datetime) = CURDATE() AND @process_id=process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period"; + string sql3 = + "SELECT time_period, SUM(finish_num) AS count\r\nFROM (\r\n SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( job_datetime ) / 1800 ) * 1800 ) AS time_period,\r\n finish_num\r\n FROM pro_reportwork\r\n WHERE job_datetime>=@SearchDateTime01 AND job_datetime<=@SearchDateTime02 AND process_id=@process_id\r\n) AS subquery\r\nGROUP BY time_period\r\nORDER BY time_period"; - DataTable result = Context.Ado.GetDataTable(sql3, new { SearchDateTime01 = startTime, SearchDateTime02 = endTime, process_id = processArray[i], }); + DataTable result = Context.Ado.GetDataTable( + sql3, + new + { + SearchDateTime01 = startTime, + SearchDateTime02 = endTime, + process_id = processArray[i], + } + ); int sum = 0; - foreach (DataRow row in result.Rows) { // DateTime value =(DateTime)row["time_period"]; - DateTime value = row["time_period"] != DBNull.Value ? Convert.ToDateTime(row["time_period"]) : DateTime.MinValue; + DateTime value = + row["time_period"] != DBNull.Value + ? Convert.ToDateTime(row["time_period"]) + : DateTime.MinValue; int count = Convert.ToInt32(row["count"]); sum = sum + count; EchartsSeriesData echartsSeriesData = new EchartsSeriesData() { Name = value.ToString("dd-HH:mm"), - Value = sum + Value = sum, }; echartsSeriesDatas.Add(echartsSeriesData); } - - // 和X轴一 一对应 - int currentNum = Array.IndexOf(DateTimeArrayString.ToArray(), echartsSeriesDatas.Select(it => it.Name).LastOrDefault()); + int currentNum = Array.IndexOf( + DateTimeArrayString.ToArray(), + echartsSeriesDatas.Select(it => it.Name).LastOrDefault() + ); for (int j = 0; j < currentNum; j++) { int point = 0; foreach (var item in echartsSeriesDatas) { - if (item.Name == DateTimeArrayString[j]) { continue; } point++; - } if (point == echartsSeriesDatas.Count()) @@ -507,26 +671,30 @@ namespace DOAN.Service.MES.SmartScreen.Product decimal productNum = 0; if (j >= 1) { - productNum = echartsSeriesDatas.Where(it => it.Name == DateTimeArrayString[j - 1]).Select(it => it.Value).FirstOrDefault(); + productNum = echartsSeriesDatas + .Where(it => it.Name == DateTimeArrayString[j - 1]) + .Select(it => it.Value) + .FirstOrDefault(); } else { productNum = 0; } - - echartsSeriesDatas.Add(new EchartsSeriesData() { Name = DateTimeArrayString[j], Value = productNum }); - + echartsSeriesDatas.Add( + new EchartsSeriesData() + { + Name = DateTimeArrayString[j], + Value = productNum, + } + ); } } echartsSeries.Data = echartsSeriesDatas.OrderBy(it => it.Name).ToList(); echartsOptions.Series.Add(echartsSeries); - } - return echartsOptions; - } } } diff --git a/DOAN.Service/Mobile/ReportFlowService.cs b/DOAN.Service/Mobile/ReportFlowService.cs index 93fecb7..e0eaf93 100644 --- a/DOAN.Service/Mobile/ReportFlowService.cs +++ b/DOAN.Service/Mobile/ReportFlowService.cs @@ -1,5 +1,7 @@ using System.Diagnostics; using DOAN.Model; +using DOAN.Model.BZFM; +using DOAN.Model.BZFM.Dto; using DOAN.Model.MES.base_; using DOAN.Model.MES.base_.Dto; using DOAN.Model.MES.order; @@ -8,6 +10,7 @@ using DOAN.Model.Mobile.ReportFlow.Dto; using DOAN.Model.Public; using DOAN.Model.System; using DOAN.Repository; +using DOAN.Service.BZFM; using DOAN.Service.Mobile.IService; using DOAN.Service.Public.IPublicService; using Infrastructure.Attribute; @@ -48,7 +51,7 @@ public class ReportFlowService : BaseService, IReportFlowServic } /// - /// 首工序报工 + /// 首工序报工(领料报工) /// /// /// @@ -67,6 +70,7 @@ public class ReportFlowService : BaseService, IReportFlowServic ) { int result = 0; + // 是否首次提交 bool Exist = Context .Queryable() .Where(it => it.Workorder == workorder && it.ProcessId == processId) @@ -96,6 +100,94 @@ public class ReportFlowService : BaseService, IReportFlowServic .SetColumns(it => it.StoveCode == stove_code) .SetColumns(it => it.FeedOrder == feed_order) .ExecuteCommand(); + //XXX 触发修改领料出库操作(上边代码先不动) + MmRecordOutbound outRecordbound = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); + // 为空时依旧触发新建物料操作 + ProWorkorder proWorkorder = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); + if (proWorkorder == null) + { + throw new Exception($"工单异常,原材料无法出库:{workorder}"); + } + if (outRecordbound == null) + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = proWorkorder.MaterialCode, + BatchNo = feed_order, + LocationCode = "YCL001", + WarehouseCode = "WH003", + OrderNo = proWorkorder.CustomerOrder, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "领料出库", + Remarks = $"生产领料,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + else + { + // 否则触发修改操作 + // 检查物料是否发生变动 + bool isUpdate = outRecordbound.Quantity != finish_num; + if (isUpdate) + { + // 检查是增加了还是减少了 + bool isAdd = (finish_num - outRecordbound.Quantity) > 0; + if (isAdd) + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = proWorkorder.MaterialCode, + BatchNo = feed_order, + LocationCode = "YCL001", + WarehouseCode = "WH003", + OrderNo = proWorkorder.CustomerOrder, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "领料出库", + Remarks = $"生产领料,数额调整,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + else + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 2, + MaterialCode = proWorkorder.MaterialCode, + BatchNo = feed_order, + LocationCode = "YCL001", + WarehouseCode = "WH003", + OrderNo = proWorkorder.CustomerOrder, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "出库红单", + Remarks = $"生产领料,数额调整,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + } + } } else { @@ -116,10 +208,45 @@ public class ReportFlowService : BaseService, IReportFlowServic .SetColumns(it => it.StoveCode == stove_code) .SetColumns(it => it.FeedOrder == feed_order) .ExecuteCommand(); + //XXX 触发创建领料出库单操作(上边代码先不动) + // 做原材料库出库操作 + ProWorkorder proWorkorder = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); + if (proWorkorder == null) + { + throw new Exception($"工单异常,原材料无法出库:{workorder}"); + } + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = proWorkorder.MaterialCode, + BatchNo = feed_order, + LocationCode = "YCL001", + WarehouseCode = "WH003", + OrderNo = proWorkorder.CustomerOrder, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "领料出库", + Remarks = $"生产领料,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt(revokeRecepitDto); } return result > 0; } + /// + /// 普通工序报工 + /// + /// + /// + /// + /// + /// + /// public bool ProcessReportWork( string workorder, int process, @@ -168,6 +295,41 @@ public class ReportFlowService : BaseService, IReportFlowServic proReportwork01.CreatedTime = DateTime.Now; result = Context.Insertable(proReportwork01).ExecuteCommand(); } + + // XXX TODO 成品入库(临时使用) + + if (process == 70) + { + // 成品入库 + ProWorkorder proWorkorder = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); + if (proWorkorder == null) + { + throw new Exception($"工单异常,无法成品入库:{workorder}"); + } + + //做出库红单 + InboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = proWorkorder.productionCode, + BatchNo = proWorkorder.FeedOrder, + LocationCode = "CP001", + WarehouseCode = "WH001", + SupplierCode = "", + StoveCode = proWorkorder.StoveCode, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "生产入库", + Remarks = $"成品入库,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateInboundReceipt(revokeRecepitDto); + } + return result > 0; } @@ -205,18 +367,17 @@ public class ReportFlowService : BaseService, IReportFlowServic return 2; } // 判断工单是否存在 - ProWorkorder workorderInfo = - Context - .Queryable() - .Where(it => it.Workorder == workorder) - .First(); + ProWorkorder workorderInfo = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); if (workorderInfo == null) { // 工单不存在 return 4; } // 判断工单主体型号和订单物料号是否匹配 - if(workorderInfo.productionCode != orderPurchase.MaterialCode) + if (workorderInfo.productionCode != orderPurchase.MaterialCode) { return 5; } @@ -240,21 +401,39 @@ public class ReportFlowService : BaseService, IReportFlowServic if (ReportWorkOrderDetail == null) { // 新增 - ProReportwork01 proReportwork01 = - new() - { - Id = XueHua, - Workorder = workorder, - ProcessId = processId, - FinishNum = finish_num, - BadNum = bad_num, - Worker = Worker, - RouteId = 32, - JobDateTime = DateTime.Now, - CreatedBy = Worker, - CreatedTime = DateTime.Now - }; + ProReportwork01 proReportwork01 = new() + { + Id = XueHua, + Workorder = workorder, + ProcessId = processId, + FinishNum = finish_num, + BadNum = bad_num, + Worker = Worker, + RouteId = 32, + JobDateTime = DateTime.Now, + CreatedBy = Worker, + CreatedTime = DateTime.Now, + }; result = Context.Insertable(proReportwork01).ExecuteCommand(); + // XXX 成品库出库 + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = workorderInfo.productionCode, + BatchNo = workorderInfo.FeedOrder, + LocationCode = "CP001", + WarehouseCode = "WH001", + OrderNo = customer_order, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "出货出库", + Remarks = $"出货出库,工单号:{workorder},订单号{customer_order}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); } else { @@ -265,6 +444,86 @@ public class ReportFlowService : BaseService, IReportFlowServic ReportWorkOrderDetail.UpdatedBy = Worker; ReportWorkOrderDetail.UpdatedTime = DateTime.Now; result = Context.Updateable(ReportWorkOrderDetail).ExecuteCommand(); + //XXX 修改成品库出库 + MmRecordOutbound outRecordbound = Context + .Queryable() + .Where(it => it.Workorder == workorder) + .First(); + if (outRecordbound == null) + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = workorderInfo.productionCode, + BatchNo = workorderInfo.FeedOrder, + LocationCode = "CP001", + WarehouseCode = "WH001", + OrderNo = customer_order, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "出货出库", + Remarks = $"出货出库,工单号:{workorder},订单号{customer_order}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + else + { + // 否则触发修改操作 + // 检查物料是否发生变动 + bool isUpdate = outRecordbound.Quantity != finish_num; + if (isUpdate) + { + // 检查是增加了还是减少了 + bool isAdd = (finish_num - outRecordbound.Quantity) > 0; + if (isAdd) + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 1, + MaterialCode = workorderInfo.productionCode, + BatchNo = workorderInfo.FeedOrder, + LocationCode = "CP001", + WarehouseCode = "WH001", + OrderNo = customer_order, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "出货出库", + Remarks = + $"出货出库,数额调整,工单号:{workorder},订单号{customer_order}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + else + { + OutboundReceiptDto revokeRecepitDto = new() + { + ReceiptType = 2, + MaterialCode = workorderInfo.productionCode, + BatchNo = workorderInfo.FeedOrder, + LocationCode = "CP001", + WarehouseCode = "WH001", + OrderNo = customer_order, + Workorder = workorder, + Operator = Worker, + Quantity = finish_num, + TransactionType = "出库红单", + Remarks = $"出货出库,数额调整,工单号:{workorder}", + }; + MmInventoryService mmInventoryService = new(); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); + } + } + } } // 修改工单信息 Context @@ -278,7 +537,8 @@ public class ReportFlowService : BaseService, IReportFlowServic Context .Queryable() .Where(it => it.CustomerOrder == customer_order) - .Sum(it => it.ShipmentNum) ?? 0; + .Sum(it => it.ShipmentNum) + ?? 0; orderPurchase.DeliveryQuantity = newQuantity; if (orderPurchase.DeliveryQuantity > orderPurchase.DemandQuantity) { @@ -312,7 +572,7 @@ public class ReportFlowService : BaseService, IReportFlowServic .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) .Where((rw, wp) => rw.Workorder == workorder) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) + .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) .ToList(); } @@ -335,7 +595,7 @@ public class ReportFlowService : BaseService, IReportFlowServic && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) + .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) .ToPage_NO_Convert(query); } @@ -362,7 +622,7 @@ public class ReportFlowService : BaseService, IReportFlowServic && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) + .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) .ToPage_NO_Convert(query); } }