From 0e3d578e9c325b0f7cce1cbe2ab87cee717e58e3 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 20 Jan 2026 10:59:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wms):=20=E4=BC=98=E5=8C=96=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E5=88=86=E5=8D=B7=E6=93=8D=E4=BD=9C=E7=9A=84=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除循环中的重复更新操作,改为一次性批量处理所有子钢卷的child_coil_ids - 新增带childCoilIdsStr参数的updateQrcodeCoilId重载方法 - 在二维码内容中增加对分卷步骤new_coil_id和child_coil_ids字段的更新支持 - 重构初始新增操作检查逻辑的位置,提升代码可读性 - 添加详细的参数注释和方法说明文档 --- .../impl/WmsMaterialCoilServiceImpl.java | 89 ++++++++++++++----- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 93daf32c..b52f284b 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -1337,6 +1337,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 更新实际库区的启用状态 updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), newCoilBo.getActualWarehouseId()); } + // ✅ 批量更新所有子钢卷的child_coil_ids(移出循环,只执行一次) + List newCoilIds = newCoils.stream() + .map(WmsMaterialCoil::getCoilId) + .collect(Collectors.toList()); + String childCoilIdsStr = newCoilIds.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + + for (WmsMaterialCoil newChildCoil : newCoils) { + if (newChildCoil.getQrcodeRecordId() != null) { + // 传入childCoilIdsStr,更新所有子钢卷ID + updateQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr); + } + } } else if (isMerge) { // 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷 // 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据 @@ -1616,9 +1630,19 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } /** - * 更新二维码内容中的coilId + * 兼容原有调用的重载方法(无childCoilIdsStr参数) */ private void updateQrcodeCoilId(Long qrcodeRecordId, Long coilId) { + updateQrcodeCoilId(qrcodeRecordId, coilId, null); + } + + /** + * 更新二维码内容中的coilId,支持更新子钢卷ID + * @param qrcodeRecordId 二维码记录ID + * @param coilId 当前钢卷ID + * @param childCoilIdsStr 所有子钢卷ID字符串(逗号分隔,分卷场景使用) + */ + private void updateQrcodeCoilId(Long qrcodeRecordId, Long coilId, String childCoilIdsStr) { try { // 获取二维码记录 WmsGenerateRecordVo record = generateRecordService.queryById(qrcodeRecordId); @@ -1630,15 +1654,34 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { ObjectMapper objectMapper = new ObjectMapper(); Map contentMap = objectMapper.readValue(record.getContent(), Map.class); - // 如果是第一次设置coilId(从"null"变为实际ID),则同时设置coil_id和current_coil_id + // 1. 原有逻辑:更新顶层的coil_id和current_coil_id if ("null".equals(contentMap.get("coil_id"))) { contentMap.put("coil_id", String.valueOf(coilId)); // 初始ID,不再改变 } - - // 始终更新current_coil_id为最新的钢卷ID contentMap.put("current_coil_id", String.valueOf(coilId)); - // 更新二维码记录 + // 2. 新增逻辑:更新分卷步骤中的new_coil_id和child_coil_ids + List> steps = (List>) contentMap.get("steps"); + if (steps != null && !steps.isEmpty()) { + // 遍历所有步骤,找到分卷操作 + for (Map step : steps) { + String operation = (String) step.get("operation"); + if ("分卷".equals(operation)) { + // 更新当前子钢卷的new_coil_id + step.put("new_coil_id", String.valueOf(coilId)); + + // 如果传入了所有子钢卷ID,更新child_coil_ids + if (childCoilIdsStr != null && !childCoilIdsStr.isEmpty()) { + step.put("child_coil_ids", childCoilIdsStr); + // 可选:替换原有child_coils为ID(如果业务需要) + // step.put("child_coils", childCoilIdsStr); + } + break; // 分卷步骤只会有一个,找到后退出循环 + } + } + } + + // 3. 更新二维码记录 String newContentJson = objectMapper.writeValueAsString(contentMap); WmsGenerateRecordBo updateBo = new WmsGenerateRecordBo(); updateBo.setRecordId(qrcodeRecordId); @@ -2985,23 +3028,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { String currentCoilIdStr = currentCoilId.toString(); - // 首先检查是否为初始新增操作 - Map firstStep = steps.get(0); - String action = (String) firstStep.get("action"); - if ("新增".equals(action)) { - Object coilIdObj = contentMap.get("coil_id"); - Object currentCoilIdObj = contentMap.get("current_coil_id"); - - if (coilIdObj != null && currentCoilIdObj != null) { - String coilIdStr = coilIdObj.toString(); - String currentCoilIdStrInContent = currentCoilIdObj.toString(); - - if (coilIdStr.equals(currentCoilIdStrInContent) && coilIdStr.equals(currentCoilIdStr)) { - return "INITIAL_CREATE"; - } - } - } - // 检查是否为合卷或分卷的产物 // 2. 从后往前遍历steps(最新操作优先),检查合卷/分卷产物 // 倒序遍历,确保取到最新的操作状态 @@ -3027,6 +3053,25 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } } + // 首先检查是否为初始新增操作 + Map firstStep = steps.get(0); + String action = (String) firstStep.get("action"); + if ("新增".equals(action)) { + Object coilIdObj = contentMap.get("coil_id"); + Object currentCoilIdObj = contentMap.get("current_coil_id"); + + if (coilIdObj != null && currentCoilIdObj != null) { + String coilIdStr = coilIdObj.toString(); + String currentCoilIdStrInContent = currentCoilIdObj.toString(); + + if (coilIdStr.equals(currentCoilIdStrInContent) && coilIdStr.equals(currentCoilIdStr)) { + return "INITIAL_CREATE"; + } + } + } + + + return "UNKNOWN"; } catch (Exception e) { log.error("检查回滚阻止原因失败", e);