diff --git a/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs index 6f90778..91ab8c2 100644 --- a/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs +++ b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs @@ -11,7 +11,7 @@ namespace DOAN.Model.MES.SmartScreen.Order.Dto /// /// 订单号 /// - public string OrderNo { get; set; } + public string OrderNoMes { get; set; } /// /// 物料名称 @@ -36,10 +36,9 @@ namespace DOAN.Model.MES.SmartScreen.Order.Dto public class ProductionProcesses { - public string OrderNo { get; set; } + public int? Id { get; set; } + public string ProcessName { get; set; } - - public int? Num { get; set; } } diff --git a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs index b50e534..746dff5 100644 --- a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs +++ b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs @@ -16,10 +16,10 @@ using DOAN.Model.MES.base_; namespace DOAN.Service.MES.SmartScreen.Order { - /// - /// 采购订单Service业务层处理 - /// - [AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)] + /// + /// 采购订单Service业务层处理 + /// + [AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)] public class OrderSmartService : BaseService, IOrderSmartService { @@ -36,57 +36,54 @@ namespace DOAN.Service.MES.SmartScreen.Order var response = Queryable().ToList(); LargeScreenOrderDto largeScreenOrderDto = new LargeScreenOrderDto(); largeScreenOrderDto.OrderTotalNum = response.Count; - largeScreenOrderDto.IncompleteOrderNum = response.Where(o=>o.Orderindicator!=1).Count(); + largeScreenOrderDto.IncompleteOrderNum = response.Where(o => o.Orderindicator != 1).Count(); largeScreenOrderDto.CompletedOrderNum = response.Where(o => o.Orderindicator == 1).Count(); - largeScreenOrderDto.MonthOrderTotalNum = response.Where(o=>o.DeliveryDate>= firstDayOfMonth&&o.DeliveryDate <= lastDayOfMonth).Count(); - largeScreenOrderDto.MonthIncompleteOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator !=1).Count(); + largeScreenOrderDto.MonthOrderTotalNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth).Count(); + largeScreenOrderDto.MonthIncompleteOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator != 1).Count(); largeScreenOrderDto.MonthCompletedOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator == 1).Count(); return largeScreenOrderDto; } - + public List GetOrderProgress() { - var mainQuery = Queryable() - // 使用链式 Join 并明确指定别名和关联条件 - .InnerJoin((order, pw) => order.OrderNoMes == pw.CustomerOrder) - .InnerJoin((order, pw, pr) => pw.Workorder == pr.Workorder) - .InnerJoin((order, pw, pr, bp) => pr.ProcessId == bp.Id) - // 按订单号分组 - .GroupBy((order, pw, pr, bp) => order.OrderNoMes) - // 主查询字段选择 - .Select((order, pw, pr, bp) => new OrderProgressDto - { - OrderNo = order.OrderNoMes, - MaterialName = order.MaterialName, - PlanNum = order.DemandQuantity, - // 保留子查询占位符,后续通过 SplitTable 填充 - productionProcesses = new List() - }); - // 子查询(获取工序明细) - var subQuery = Queryable() - .InnerJoin((order, pw) => order.OrderNoMes == pw.CustomerOrder) - .InnerJoin((order, pw, pr) => pw.Workorder == pr.Workorder) - .InnerJoin((order, pw, pr, bp) => pr.ProcessId == bp.Id) - .Select((order, pw, pr, bp) => new ProductionProcesses - { - OrderNo = order.OrderNoMes, // 必须包含关联字段 - ProcessName = bp.Name, - Num = pr.FinishNum - }); - // 使用 Mapper 进行结果合并 - var result = mainQuery.MergeTable() // 合并主查询 - .Mapper(mainResult => - { - // 根据 OrderNo 关联子查询 - mainResult.productionProcesses = subQuery - .Where(order => order.OrderNo == mainResult.OrderNo) - .ToList(); - }).ToList(); + List orderProgressDtos = new List(); - return result; + //获取全部的订单计划表 + List orderPurchaseList = Queryable().Where(o=>o.Orderindicator!=1).ToList(); + List ordernomes = new List(); + ordernomes=orderPurchaseList.Select(o=>o.OrderNoMes).Distinct().ToList(); + + + //工序基础表 + List baseWorkProcesses = Context.Queryable().Where(o => o.Status==1).ToList(); + + foreach (var orderPurchase in orderPurchaseList) + { + OrderProgressDto orderProgressDto = new OrderProgressDto(); + orderProgressDto.productionProcesses = new List(); + orderProgressDto.OrderNoMes = orderPurchase.OrderNoMes; + orderProgressDto.PlanNum = orderPurchase.DemandQuantity; + orderProgressDto.FinishNum = orderPurchase.DeliveryQuantity; + orderProgressDto.MaterialName = orderPurchase.MaterialName; + + List proWorkorders = Context.Queryable().Where(o => o.CustomerOrder == orderPurchase.OrderNoMes).ToList(); + List workorders = proWorkorders.Select(o=>o.Workorder).Distinct().ToList(); + + //获取全部的ProReportwork01 + List proReportwork01s = Context.Queryable().Where(o => workorders.Contains(o.Workorder)).ToList(); + foreach (var baseWorkProcesse in baseWorkProcesses) + { + ProductionProcesses productionProcesses = new ProductionProcesses(); + productionProcesses.Id= baseWorkProcesse.Id; + productionProcesses.Num = proReportwork01s.Where(o=>o.ProcessId== baseWorkProcesse.Id).Sum(o=>o.FinishNum); + orderProgressDto.productionProcesses.Add(productionProcesses); + } + orderProgressDtos.Add(orderProgressDto); + } + return orderProgressDtos; } } }