From 0724a6b0a8ba6ffe8ad15231ca3920dcdbc7e12e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 21 Jan 2026 17:18:47 +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=AD=A5=E9=AA=A4=E4=B8=ADchild=5Fc?= =?UTF-8?q?oil=5Fids=E7=9A=84=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设置到对应的分卷步骤中,而不是最外层 - 支持多次分卷,每次的child_coil_ids都会记录在各自的分卷步骤中 - 修改注释明确更新的是分卷步骤中的child_coil_ids字段 - 添加查找最新分卷步骤的逻辑,确保在正确的步骤中设置child_coil_ids - 更新日志信息以反映分卷步骤的child_coil_ids更新 - 添加对分卷步骤不存在时的警告处理 --- .../impl/WmsMaterialCoilServiceImpl.java | 54 ++++++++++++++----- 1 file changed, 40 insertions(+), 14 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 4ac0b8d0..9ff8eea6 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,19 +1345,16 @@ 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 - log.debug("更新子钢卷二维码,coilId: {}, qrcodeRecordId: {}", newChildCoil.getCoilId(), newChildCoil.getQrcodeRecordId()); + // 更新该子钢卷的分卷步骤中的child_coil_ids字段 updateChildCoilIdsQrcodeCoilId(newChildCoil.getQrcodeRecordId(), newChildCoil.getCoilId(), childCoilIdsStr); } else { - log.warn("子钢卷缺少二维码记录ID,跳过child_coil_ids更新,coilId: {}", newChildCoil.getCoilId()); + log.warn("子钢卷缺少二维码记录ID,跳过分卷步骤child_coil_ids更新,coilId: {}", newChildCoil.getCoilId()); } } - log.info("分卷操作:所有子钢卷的child_coil_ids更新完成"); } else if (isMerge) { // 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷 // 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据 @@ -1517,6 +1514,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { splitStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId())); splitStep.put("new_current_coil_nos", String.join(",", allNewCoilNos)); splitStep.put("child_coils", allNewCoilNos); + // 分卷产生的子钢卷ID将在后续步骤中设置 splitStep.put("operator", LoginHelper.getUsername()); // 操作者 steps.add(splitStep); @@ -1892,6 +1890,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { extractCoilId(step, "coil_id", allCoilNos); extractCoilId(step, "old_coil_id", allCoilNos); extractCoilId(step, "parent_coil_ids", allCoilNos); + // 从分卷步骤中提取子钢卷IDs + extractCoilId(step, "child_coil_ids", allCoilNos); } } } @@ -3046,14 +3046,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { /** * 更新分卷子钢卷的二维码记录中的child_coil_ids字段 - * 用于让每个子钢卷知道其他兄弟子钢卷的ID + * 将child_coil_ids设置到对应的分卷步骤中,而不是最外层 + * 支持多次分卷,每次的child_coil_ids都会记录在各自的分卷步骤中 * * @param qrcodeRecordId 二维码记录ID * @param currentCoilId 当前子钢卷ID - * @param childCoilIdsStr 所有子钢卷ID的逗号分隔字符串 + * @param childCoilIdsStr 本次分卷产生的所有子钢卷ID的逗号分隔字符串 */ private void updateChildCoilIdsQrcodeCoilId(Long qrcodeRecordId, Long currentCoilId, String childCoilIdsStr) { - log.info("开始更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + log.info("开始更新子钢卷二维码的分卷步骤child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", qrcodeRecordId, currentCoilId, childCoilIdsStr); try { @@ -3076,11 +3077,36 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 解析现有content ObjectMapper objectMapper = new ObjectMapper(); + @SuppressWarnings("unchecked") Map contentMap = objectMapper.readValue(record.getContent(), Map.class); - // 更新child_coil_ids字段 - contentMap.put("child_coil_ids", childCoilIdsStr); - log.debug("已设置child_coil_ids字段: {}", childCoilIdsStr); + // 获取steps数组 + @SuppressWarnings("unchecked") + List> steps = (List>) contentMap.get("steps"); + if (steps == null || steps.isEmpty()) { + log.warn("二维码记录中没有steps信息,跳过child_coil_ids更新,qrcodeRecordId: {}", qrcodeRecordId); + return; + } + + // 找到最后一个分卷步骤(最新的分卷操作) + Map lastSplitStep = null; + for (int i = steps.size() - 1; i >= 0; i--) { + Map step = steps.get(i); + String operation = (String) step.get("operation"); + if ("分卷".equals(operation)) { + lastSplitStep = step; + break; // 找到最新的分卷步骤就停止 + } + } + + if (lastSplitStep == null) { + log.warn("未找到分卷步骤,无法设置child_coil_ids,qrcodeRecordId: {}", qrcodeRecordId); + return; + } + + // 在分卷步骤中设置child_coil_ids + lastSplitStep.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"))) { @@ -3095,11 +3121,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { updateBo.setContent(newContentJson); generateRecordService.updateByBo(updateBo); - log.info("成功更新子钢卷二维码的child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + log.info("成功更新子钢卷二维码的分卷步骤child_coil_ids,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", qrcodeRecordId, currentCoilId, childCoilIdsStr); } catch (Exception e) { - log.error("更新子钢卷二维码的child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", + log.error("更新子钢卷二维码的分卷步骤child_coil_ids失败,qrcodeRecordId: {}, currentCoilId: {}, childCoilIdsStr: {}", qrcodeRecordId, currentCoilId, childCoilIdsStr, e); throw new RuntimeException("更新子钢卷二维码失败: " + e.getMessage()); }