From 4f4506e7d2a46e71903130c780248aea345dbb70 Mon Sep 17 00:00:00 2001 From: qiankanghui Date: Tue, 21 Jul 2026 14:34:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(production):=20=E4=BF=AE=E5=A4=8D=E4=B8=B4?= =?UTF-8?q?=E6=9C=9F=E5=93=81=E7=B1=BB=E5=9E=8B=E5=88=A4=E6=96=AD=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=B9=B6=E4=BC=98=E5=8C=96=E5=88=86=E7=BB=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修正SQL映射中的类型判断条件,将'过期品'改为'临期品' - 在分组处理逻辑中优先处理临期品,避免同一物料重复生成检验任务 - 添加日志记录以跟踪类型提取和数据插入过程 - 移除过期的注释文档 - 优化物料分组算法,确保临期品优先处理,呆滞品不重复处理 --- .../impl/StagnationInspectionServiceImpl.java | 26 ++++++++++++++----- .../production/StagnationDetailMapper.xml | 4 +-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/heai/modules/production/service/impl/StagnationInspectionServiceImpl.java b/src/main/java/com/heai/modules/production/service/impl/StagnationInspectionServiceImpl.java index 36a5e34..469caf6 100644 --- a/src/main/java/com/heai/modules/production/service/impl/StagnationInspectionServiceImpl.java +++ b/src/main/java/com/heai/modules/production/service/impl/StagnationInspectionServiceImpl.java @@ -67,6 +67,7 @@ public class StagnationInspectionServiceImpl implements StagnationInspectionServ try { // 4.1 从key中提取类型 String type = extractTypeFromKey(key); + log.info("🔑 从分组 key [{}] 提取类型: {}", key, type); // 4.2 先生成SQC检验任务,获取检验单信息 InspectionInfo inspectionInfo = generateSqcInspectionTask(labels, type); @@ -99,11 +100,6 @@ public class StagnationInspectionServiceImpl implements StagnationInspectionServ } } - /** - * 按 site + part_no + type 分组(不包含 batch_no) - *

- * 注意:呆滞品和临期品分开处理,不混合在同一组 - */ private Map> groupLabelsBySitePartBatch( List stagnationLabels, List expiredLabels) { @@ -111,16 +107,31 @@ public class StagnationInspectionServiceImpl implements StagnationInspectionServ Map> groupedMap = new HashMap<>(); Set processedIds = new HashSet<>(); - // 处理呆滞品(标记为呆滞品类型) + // 1. 先找出所有临期品的 site+partNo 组合 + Set expiredPartKeys = new HashSet<>(); + for (PrintLabelRecord label : expiredLabels) { + String key = label.getSite() + "_" + label.getPartNo(); + expiredPartKeys.add(key); + } + + // 2. 处理呆滞品:排除掉同时也是临期品的物料 for (PrintLabelRecord label : stagnationLabels) { if (!processedIds.contains(label.getId())) { + String partKey = label.getSite() + "_" + label.getPartNo(); + + // 如果这个物料也是临期品,跳过,后面会优先生成临期品任务 + if (expiredPartKeys.contains(partKey)) { + log.debug("⚠️ 物料 [{}] 既是呆滞品又是临期品,跳过呆滞品处理,优先生成临期品任务", partKey); + continue; + } + String key = buildGroupKey(label.getSite(), label.getPartNo(), "呆滞品"); groupedMap.computeIfAbsent(key, k -> new ArrayList<>()).add(label); processedIds.add(label.getId()); } } - // 处理临期品(标记为过期类型,即使同一批号也单独分组) + // 3. 处理临期品(优先处理,包括那些既是呆滞品又是临期品的物料) for (PrintLabelRecord label : expiredLabels) { if (!processedIds.contains(label.getId())) { String key = buildGroupKey(label.getSite(), label.getPartNo(), "临期品"); @@ -372,6 +383,7 @@ public class StagnationInspectionServiceImpl implements StagnationInspectionServ String partNo, String batchNo, BigDecimal totalQty, String type) { try { // 插入单据头 + log.info("🔍 准备插入 SOOpsTransferHeader - transNo: {}, type: {}", transNo, type); stagnationDetailMapper.insertSOOpsTransferHeader(transNo, site, "SYSTEM", batchNo, type); log.debug("插入 SOOpsTransferHeader 成功: {}, type: {}", transNo, type); diff --git a/src/main/resources/mapper/production/StagnationDetailMapper.xml b/src/main/resources/mapper/production/StagnationDetailMapper.xml index a3ce01e..9617aae 100644 --- a/src/main/resources/mapper/production/StagnationDetailMapper.xml +++ b/src/main/resources/mapper/production/StagnationDetailMapper.xml @@ -100,8 +100,8 @@ #{userId}, GETDATE(), GETDATE(), '', #{userId}, '', '', 'N', 'N', '', '0', '已入库', - CASE WHEN #{type} = '过期品' THEN 'G' ELSE 'D' END, - CASE WHEN #{type} = '过期品' THEN N'过期品送检' ELSE N'呆滞品送检' END, + CASE WHEN #{type} = '临期品' THEN 'G' ELSE 'D' END, + CASE WHEN #{type} = '临期品' THEN N'临期品送检' ELSE N'呆滞品送检' END, '', 'Y', 'N', #{batchNo} )