实现GetProductSummary方法核心统计逻辑

完善GetProductSummary方法,支持完成品在库、在制品、机加工及研磨在制品等多项统计,增加参数判空处理和异常兜底。修正参数注释名并补充必要using引用。
This commit is contained in:
2026-03-26 20:34:22 +08:00
parent 62e39aac06
commit e9c48f19ce

View File

@@ -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
/// <summary>
/// 获取成品综合数据
/// </summary>
/// <param name="query">查询参数</param>
/// <param name="parm">查询参数</param>
/// <returns>成品综合数据</returns>
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<ProWorkorder>()
.WhereIF(!string.IsNullOrEmpty(parm.ProductionCode), it => it.productionCode == parm.ProductionCode)
.Where(it => (it.ProductNum - it.ShipmentNum) > 0)
.Sum<int?>(it => it.ProductNum - it.ShipmentNum);
int total = totalNullable ?? 0;
// 根据时间范围过滤(若提供)
var reportQuery = Context.Queryable<ProReportwork01>();
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<int?>(r => r.FinishNum) ?? 0;
// 机加工在制品BaseWorkProcesses.DictWorkType 包含关键字的报工总和
var machiningSum = Context
.Queryable<ProReportwork01>()
.WhereIF(parm.StartTime != DateTime.MinValue && parm.EndTime != DateTime.MinValue, r => r.JobDateTime >= parm.StartTime && r.JobDateTime <= parm.EndTime)
.Where(r => SqlFunc.Subqueryable<BaseWorkProcesses>()
.Where(p => p.Id == r.ProcessId && (p.DictWorkType.Contains("机") || p.DictWorkType.Contains("machin")))
.Any())
.Sum<int?>(r => r.FinishNum) ?? 0;
// 研磨在制品DictWorkType 包含关键字的报工总和
var grindingSum = Context
.Queryable<ProReportwork01>()
.WhereIF(parm.StartTime != DateTime.MinValue && parm.EndTime != DateTime.MinValue, r => r.JobDateTime >= parm.StartTime && r.JobDateTime <= parm.EndTime)
.Where(r => SqlFunc.Subqueryable<BaseWorkProcesses>()
.Where(p => p.Id == r.ProcessId && (p.DictWorkType.Contains("研") || p.DictWorkType.Contains("grind")))
.Any())
.Sum<int?>(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;
}