feat(wms-u8): 添加物料编码聚合功能并优化出库订单匹配逻辑
在ERP_WMS_interactiveService中添加物料编码聚合功能,通过配置控制是否启用 优化WmOutOrderService中的物料匹配逻辑,支持处理多个零件号
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user