From e9c48f19ce37eb047966f5589318bd40da6de89c Mon Sep 17 00:00:00 2001 From: Carl Date: Thu, 26 Mar 2026 20:34:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0GetProductSummary=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=A0=B8=E5=BF=83=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善GetProductSummary方法,支持完成品在库、在制品、机加工及研磨在制品等多项统计,增加参数判空处理和异常兜底。修正参数注释名并补充必要using引用。 --- .../Product/ProWorkorderMaterialService.cs | 76 ++++++++++++++++--- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs b/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs index 900c1f0..899257b 100644 --- a/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs +++ b/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs @@ -1,9 +1,11 @@ +using System; using System.Collections.Generic; using Aliyun.OSS; using DOAN.Model.BZFM; using DOAN.Model.MES.order; using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.product; +using DOAN.Model.MES.base_; using DOAN.Model.MES.product.Dto; using DOAN.Model.Mobile.Dto; using DOAN.Repository; @@ -766,21 +768,75 @@ namespace DOAN.Service.MES.product /// /// 获取成品综合数据 /// - /// 查询参数 + /// 查询参数 /// 成品综合数据 - public ProductSummaryDto GetProductSummary(ProductSummaryQueryDto query) + public ProductSummaryDto GetProductSummary(ProductSummaryQueryDto parm) { try { - // 业务逻辑留空,待后续实现 - // 此处应实现查询完成品在库总数,在制品总数,机加工在制品数,研磨在制品数 - var result = new ProductSummaryDto + if (parm == null) { - FinishedProductStockTotal = 0, - WorkInProgressTotal = 0, - MachiningWorkInProgress = 0, - GrindingWorkInProgress = 0 - }; + parm = new ProductSummaryQueryDto + { + StartTime = DateTime.Today, + EndTime = DateTime.Today, + ProductionCode = string.Empty + }; + } + + var result = new ProductSummaryDto(); + + try + { + // 统计完成品在库总数:基于工单表中 (ProductNum - ShipmentNum) 的和,忽略分页 + var totalNullable = Context + .Queryable() + .WhereIF(!string.IsNullOrEmpty(parm.ProductionCode), it => it.productionCode == parm.ProductionCode) + .Where(it => (it.ProductNum - it.ShipmentNum) > 0) + .Sum(it => it.ProductNum - it.ShipmentNum); + + int total = totalNullable ?? 0; + + // 根据时间范围过滤(若提供) + var reportQuery = Context.Queryable(); + if (parm.StartTime != DateTime.MinValue && parm.EndTime != DateTime.MinValue) + { + reportQuery = reportQuery.Where(r => r.JobDateTime >= parm.StartTime && r.JobDateTime <= parm.EndTime); + } + + // 总在制品(排除最终工序 70) + var wipSum = reportQuery.Where(r => r.ProcessId <= 70).Sum(r => r.FinishNum) ?? 0; + + // 机加工在制品:BaseWorkProcesses.DictWorkType 包含关键字的报工总和 + var machiningSum = Context + .Queryable() + .WhereIF(parm.StartTime != DateTime.MinValue && parm.EndTime != DateTime.MinValue, r => r.JobDateTime >= parm.StartTime && r.JobDateTime <= parm.EndTime) + .Where(r => SqlFunc.Subqueryable() + .Where(p => p.Id == r.ProcessId && (p.DictWorkType.Contains("机") || p.DictWorkType.Contains("machin"))) + .Any()) + .Sum(r => r.FinishNum) ?? 0; + + // 研磨在制品:DictWorkType 包含关键字的报工总和 + var grindingSum = Context + .Queryable() + .WhereIF(parm.StartTime != DateTime.MinValue && parm.EndTime != DateTime.MinValue, r => r.JobDateTime >= parm.StartTime && r.JobDateTime <= parm.EndTime) + .Where(r => SqlFunc.Subqueryable() + .Where(p => p.Id == r.ProcessId && (p.DictWorkType.Contains("研") || p.DictWorkType.Contains("grind"))) + .Any()) + .Sum(r => r.FinishNum) ?? 0; + + result.FinishedProductStockTotal = total; + result.WorkInProgressTotal = wipSum; + result.MachiningWorkInProgress = machiningSum; + result.GrindingWorkInProgress = grindingSum; + } + catch + { + result.FinishedProductStockTotal = 0; + result.WorkInProgressTotal = 0; + result.MachiningWorkInProgress = 0; + result.GrindingWorkInProgress = 0; + } return result; }