实现GetProductSummary方法核心统计逻辑
完善GetProductSummary方法,支持完成品在库、在制品、机加工及研磨在制品等多项统计,增加参数判空处理和异常兜底。修正参数注释名并补充必要using引用。
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user