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;
}