From 7f3693e11c27b681127e1a7d679c460bc768aa6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A2=E6=B1=9F=E6=B5=B7?= <18360817963@163.com> Date: Wed, 26 Mar 2025 17:27:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SmartScreen/Order/OrderSmartController.cs | 12 ++++ DOAN.Model/MES/Product/ProReportwork.cs | 15 +++-- .../Order/Dto/LargeScreenOrderDto.cs | 42 ++++++++++++++ .../SmartScreen/Order/Dto/OrderProgressDto.cs | 41 +++++++++++++ .../SmartScreen/Order/LargeScreenOrderDto.cs | 42 -------------- .../Order/IService/IOrderSmartService.cs | 12 ++-- .../SmartScreen/Order/OrderSmartService.cs | 57 +++++++++++++++++-- 7 files changed, 165 insertions(+), 56 deletions(-) create mode 100644 DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs create mode 100644 DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs delete mode 100644 DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs b/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs index 96a7a43..50601b4 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs @@ -38,5 +38,17 @@ namespace DOAN.Admin.WebApi.Controllers.MES.SmartScreen.Order var response = _OrderSmartService.GetLargeScreenOrder(); return SUCCESS(response); } + + /// + /// 订单进度 + /// + /// + [HttpGet("GetOrderProgress")] + public IActionResult GetOrderProgress() + { + + var response = _OrderSmartService.GetOrderProgress(); + return SUCCESS(response); + } } } diff --git a/DOAN.Model/MES/Product/ProReportwork.cs b/DOAN.Model/MES/Product/ProReportwork.cs index 463d9b7..cbe54e9 100644 --- a/DOAN.Model/MES/Product/ProReportwork.cs +++ b/DOAN.Model/MES/Product/ProReportwork.cs @@ -18,10 +18,17 @@ namespace DOAN.Model.MES.product [SugarColumn(IsPrimaryKey = true, IsIdentity = false)] public string Id { get; set; } - /// - /// 工单号 - /// - [SugarColumn(ColumnName = "fk_workorder")] + + + /// + /// 工序id + /// + [SugarColumn(ColumnName = "process_id")] + public int? ProcessId { get; set; } + /// + /// 工单号 + /// + [SugarColumn(ColumnName = "fk_workorder")] public string FkWorkorder { get; set; } /// diff --git a/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs b/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs new file mode 100644 index 0000000..0d14d7f --- /dev/null +++ b/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.MES.SmartScreen.Order.Dto +{ + public class LargeScreenOrderDto + { + /// + /// 订单总数 + /// + public int OrderTotalNum { get; set; } + + /// + /// 未完成订单总数 + /// + public int IncompleteOrderNum { get; set; } + + /// + /// 已完成订单总数 + /// + public int CompletedOrderNum { get; set; } + + /// + /// 本月订单总数 + /// + public int MonthOrderTotalNum { get; set; } + + /// + /// 本月已完成订单总数 + /// + public int MonthIncompleteOrderNum { get; set; } + + /// + /// 本月未完成订单总数 + /// + public int MonthCompletedOrderNum { get; set; } + + } +} diff --git a/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs new file mode 100644 index 0000000..b581e1f --- /dev/null +++ b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.MES.SmartScreen.Order.Dto +{ + public class OrderProgressDto + { + /// + /// 订单号 + /// + public string OrderNo { get; set; } + + /// + /// 物料名称 + /// + public string MaterialName { get; set; } + + /// + /// 计划数量 + /// + public int? PlanNum { get; set; } + + /// + /// 工序集合 + /// + public List productionProcesses { get; set; } + } + + public class ProductionProcesses + { + public string OrderNo { get; set; } + public string ProcessName { get; set; } + + + public int? Num { get; set; } + + } +} diff --git a/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs b/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs deleted file mode 100644 index aaa7ce0..0000000 --- a/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DOAN.Model.MES.SmartScreen.Order -{ - public class LargeScreenOrderDto - { - /// - /// 订单总数 - /// - public int OrderTotalNum { get; set; } - - /// - /// 未完成订单总数 - /// - public int IncompleteOrderNum { get; set; } - - /// - /// 已完成订单总数 - /// - public int CompletedOrderNum { get; set; } - - /// - /// 本月订单总数 - /// - public int MonthOrderTotalNum { get; set; } - - /// - /// 本月已完成订单总数 - /// - public int MonthIncompleteOrderNum { get; set; } - - /// - /// 本月未完成订单总数 - /// - public int MonthCompletedOrderNum { get; set; } - - } -} diff --git a/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs b/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs index 9a37829..d1bfa21 100644 --- a/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs +++ b/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs @@ -1,6 +1,6 @@ using DOAN.Model.MES.order; using DOAN.Model.MES.order.Dto; -using DOAN.Model.MES.SmartScreen.Order; +using DOAN.Model.MES.SmartScreen.Order.Dto; using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using System; @@ -11,12 +11,14 @@ using System.Threading.Tasks; namespace DOAN.Service.MES.SmartScreen.Order.IService { - /// - /// 采购订单service接口 - /// - public interface IOrderSmartService : IBaseService + /// + /// 采购订单service接口 + /// + public interface IOrderSmartService : IBaseService { LargeScreenOrderDto GetLargeScreenOrder(); + + List GetOrderProgress(); } } diff --git a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs index 266e6ee..c8610e8 100644 --- a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs +++ b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs @@ -8,16 +8,18 @@ using System.Text; using System.Threading.Tasks; using DOAN.Service.MES.SmartScreen.Order.IService; using DOAN.Model.MES.order.Dto; -using DOAN.Model.MES.SmartScreen.Order; using MathNet.Numerics.Distributions; using NPOI.SS.Formula.Functions; +using DOAN.Model.MES.SmartScreen.Order.Dto; +using DOAN.Model.MES.product; +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 { @@ -41,5 +43,50 @@ namespace DOAN.Service.MES.SmartScreen.Order 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.FkWorkorder) + .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.FkWorkorder) + .InnerJoin((order, pw, pr, bp) => pr.ProcessId == bp.Id) + .Select((order, pw, pr, bp) => new ProductionProcesses + { + OrderNo = order.OrderNoMes, // 必须包含关联字段 + ProcessName = bp.Name, + Num = pr.FinishedNum + }); + // 使用 Mapper 进行结果合并 + var result = mainQuery.MergeTable() // 合并主查询 + .Mapper(mainResult => + { + // 根据 OrderNo 关联子查询 + mainResult.productionProcesses = subQuery + .Where(sub => sub.OrderNo == mainResult.OrderNo) + .ToList(); + }).ToList(); + + return result; + } } }