From 4cf6aa02a9bf38d9a8bf92d384cdcf09e05ca8d9 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 20 Jan 2026 13:00:15 +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=E4=BA=8C?= =?UTF-8?q?=E7=BB=B4=E7=A0=81=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的注释标记 - 添加分卷操作的日志记录和调试信息 - 将原updateQrcodeCoilId方法拆分为专门的updateChildCoilIdsQrcodeCoilId方法 - 移除二维码内容中分卷步骤的复杂处理逻辑 - 新增独立方法处理子钢卷二维码的child_coil_ids字段更新 - 添加参数校验和异常处理机制 - 优化日志输出和错误处理流程 --- .../impl/WmsMaterialCoilServiceImpl.java | 111 ++++++++++++------ 1 file changed, 75 insertions(+), 36 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 359305e9..3bab6e37 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,7 +1337,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 更新实际库区的启用状态 updateActualWarehouseEnableStatus(oldCoil.getActualWarehouseId(), newCoilBo.getActualWarehouseId()); } - // ✅ 批量更新所有子钢卷的child_coil_ids(移出循环,只执行一次) + // 批量更新所有子钢卷的child_coil_ids List newCoilIds = newCoils.stream() .map(WmsMaterialCoil::getCoilId) .collect(Collectors.toList()); @@ -1345,12 +1345,19 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { .map(String::valueOf) .collect(Collectors.joining(",")); + log.info("分卷操作:准备更新{}个子钢卷的child_coil_ids,子钢卷IDs: {}", newCoils.size(), childCoilIdsStr); + for (WmsMaterialCoil newChildCoil : newCoils) { if (newChildCoil.getQrcodeRecordId() != null) { // 传入childCoilIdsStr,更新所有子钢卷ID - updateQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr); + log.debug("更新子钢卷二维码,coilId: {}, qrcodeRecordId: {}", newChildCoil.getCoilId(), newChildCoil.getQrcodeRecordId()); + updateChildCoilIdsQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr); + } else { + log.warn("子钢卷缺少二维码记录ID,跳过child_coil_ids更新,coilId: {}", newChildCoil.getCoilId()); } } + + log.info("分卷操作:所有子钢卷的child_coil_ids更新完成"); } else if (isMerge) { // 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷 // 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据 @@ -1630,19 +1637,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } /** - * 兼容原有调用的重载方法(无childCoilIdsStr参数) + * 更新二维码内容中的coilId */ 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); @@ -1654,34 +1651,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { ObjectMapper objectMapper = new ObjectMapper(); Map contentMap = objectMapper.readValue(record.getContent(), Map.class); - // 1. 原有逻辑:更新顶层的coil_id和current_coil_id + // 如果是第一次设置coilId(从"null"变为实际ID),则同时设置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); @@ -3070,6 +3048,67 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } } + /** + * 更新分卷子钢卷的二维码记录中的child_coil_ids字段 + * 用于让每个子钢卷知道其他兄弟子钢卷的ID + * + * @param qrcodeRecordId 二维码记录ID + * @param currentCoilId 当前子钢卷ID + * @param childCoilIdsStr 所有子钢卷ID的逗号分隔字符串 + */ + private void updateChildCoilIdsQrcodeCoilId(Long qrcodeRecordId, Long currentCoilId, String childCoilIdsStr) { + log.info("开始更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + qrcodeRecordId, currentCoilId, childCoilIdsStr); + + try { + // 参数校验 + if (qrcodeRecordId == null || currentCoilId == null) { + throw new RuntimeException("二维码记录ID和当前钢卷ID不能为空"); + } + if (StringUtils.isBlank(childCoilIdsStr)) { + log.warn("childCoilIdsStr为空,跳过更新,qrcodeRecordId: {}, currentCoilId: {}", qrcodeRecordId, currentCoilId); + return; + } + + // 获取二维码记录 + WmsGenerateRecordVo record = generateRecordService.queryById(qrcodeRecordId); + if (record == null) { + throw new RuntimeException("二维码记录不存在,recordId: " + qrcodeRecordId); + } + + log.debug("获取到二维码记录,recordId: {}, 原始content长度: {}", qrcodeRecordId, record.getContent().length()); + + // 解析现有content + ObjectMapper objectMapper = new ObjectMapper(); + Map contentMap = objectMapper.readValue(record.getContent(), Map.class); + + // 更新child_coil_ids字段 + contentMap.put("child_coil_ids", childCoilIdsStr); + log.debug("已设置child_coil_ids字段: {}", childCoilIdsStr); + + // 确保current_coil_id已设置(虽然在前面应该已经设置过了,但这里再确认一下) + if (!contentMap.containsKey("current_coil_id") || "null".equals(contentMap.get("current_coil_id"))) { + contentMap.put("current_coil_id", String.valueOf(currentCoilId)); + log.debug("已设置current_coil_id字段: {}", currentCoilId); + } + + // 更新二维码记录 + String newContentJson = objectMapper.writeValueAsString(contentMap); + WmsGenerateRecordBo updateBo = new WmsGenerateRecordBo(); + updateBo.setRecordId(qrcodeRecordId); + updateBo.setContent(newContentJson); + generateRecordService.updateByBo(updateBo); + + log.info("成功更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + qrcodeRecordId, currentCoilId, childCoilIdsStr); + + } catch (Exception e) { + log.error("更新子钢卷二维码的child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + qrcodeRecordId, currentCoilId, childCoilIdsStr, e); + throw new RuntimeException("更新子钢卷二维码失败: " + e.getMessage()); + } + } + /** * 更新二维码记录以记录回滚操作 */