feat(wms-u8): 添加物料编码聚合功能并优化出库订单匹配逻辑

在ERP_WMS_interactiveService中添加物料编码聚合功能,通过配置控制是否启用
优化WmOutOrderService中的物料匹配逻辑,支持处理多个零件号
This commit is contained in:
2025-08-08 16:04:25 +08:00
parent 42de49629b
commit 1be5945f2f
2 changed files with 58 additions and 4 deletions

View File

@@ -31,6 +31,49 @@ namespace ZR.Service.mes.wms_u8
{
return ProcessSyncRequest(urlBase, models, "outbounded", isInbound: false);
}
/// <summary>
/// 根据物料编码聚合模型数据
/// </summary>
/// <param name="models">原始模型列表</param>
/// <returns>聚合后的模型列表</returns>
private List<ERP_WMS_interactiveModelQuery> AggregateModelsByMaterialCode(List<ERP_WMS_interactiveModelQuery> models)
{
if (models == null || models.Count == 0)
return models;
// 按物料编码分组并计算总数量
var aggregatedModels = models
.GroupBy(m => m.materialCode)
.Select(g =>
{
// 获取分组内的第一个模型
var firstModel = g.First();
return new ERP_WMS_interactiveModelQuery
{
customerCode = firstModel.customerCode, // 使用分组内第一个模型的客户编码
materialCode = g.Key,
location = firstModel.location, // 位置留空
Qty = g.Sum(m =>
{
// 确保数量可以转换为数字
if (decimal.TryParse(m.Qty, out decimal qty))
return qty;
return 0;
}).ToString(),
LotNo = firstModel.LotNo,
createTime = firstModel.createTime,
userID = firstModel.userID,
guid = Guid.NewGuid().ToString(),
lineno = firstModel.lineno,
};
})
.ToList();
return aggregatedModels;
}
#endregion
#region
@@ -83,6 +126,9 @@ namespace ZR.Service.mes.wms_u8
/// <summary>
/// 异步请求处理(抽取公共逻辑)
/// </summary>
// 配置项:控制是否启用物料编码聚合功能
private static bool EnableMaterialAggregation = true; // 默认为false不启用聚合
private async Task<ERP_WMS_interactiveModelResult> ProcessAsyncRequest(string urlBase, List<ERP_WMS_interactiveModelQuery> models, string action, bool isInbound)
{
var operation = isInbound ? "异步入库" : "异步出库";
@@ -95,9 +141,17 @@ namespace ZR.Service.mes.wms_u8
return null;
}
// 2. 构建URL和请求数据
string url = BuildUrl(urlBase, action, models);
string requestData = JsonConvert.SerializeObject(models);
// 2. 根据配置决定是否聚合数据
List<ERP_WMS_interactiveModelQuery> processedModels = models;
if (EnableMaterialAggregation)
{
processedModels = AggregateModelsByMaterialCode(models);
_logger.Info($"{operation}请求数据已聚合 - 聚合前记录数: {models.Count}, 聚合后记录数: {processedModels.Count}");
}
// 3. 构建URL和请求数据
string url = BuildUrl(urlBase, action, processedModels);
string requestData = JsonConvert.SerializeObject(processedModels);
_logger.Debug($"{operation}请求数据: {requestData}");
try

View File

@@ -851,7 +851,7 @@ namespace ZR.Service.mes.wms
.ToList();
foreach (WmMaterial materialOption in materialOutorders)
{
if (materialOption.Partnumber == resultionPackage.PartNumner)
if (materialOption.Partnumber == processedPartnumber || materialOption.Partnumber == checkPartnumber)
{
flag1 = true;
}