From d8821db4b2f6ae9ad035a40e18225a7ac1ff2e3b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 16 Mar 2026 15:29:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(WmsMaterialCoilService):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=90=88=E5=8D=B7=E6=93=8D=E4=BD=9C=E7=9A=84=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E4=BA=8B=E9=A1=B9=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整代码执行顺序,先创建待操作记录再执行合卷操作 - 引入中间步骤收集原始钢卷与操作ID的映射关系 - 修改待办事项状态更新时机,在合卷完成后统一更新为已完成 - 为新创建的待办事项设置初始状态为处理中而不是直接完成 - 修复空指针检查逻辑,同时验证coilId和actionType非空 - 重构操作记录更新流程,确保在合卷成功后再更新processedCoilIds --- .../impl/WmsMaterialCoilServiceImpl.java | 92 +++++++++++-------- 1 file changed, 52 insertions(+), 40 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 72f033a4..9b0d4cc2 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 @@ -2570,7 +2570,49 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表"); } - // 先执行批量更新逻辑(分卷/合卷) + Date now = new Date(); + + // 第一步:先为每个原始钢卷创建待操作记录(状态为处理中) + // 收集创建成功的actionId,用于后续更新 + Map coilToActionIdMap = new HashMap<>(); + + for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) { + Long coilId = originalCoilBo.getCoilId(); + Integer actionType = originalCoilBo.getActionType(); + Long actionId = originalCoilBo.getActionId(); + + if (coilId == null || actionType == null) { + continue; + } + + if (actionId != null) { + // 如果传递了actionId,记录下来 + coilToActionIdMap.put(coilId, actionId); + } else { + // 如果未传actionId,则创建新的待操作记录 + // 获取原始钢卷信息 + WmsMaterialCoil originalCoil = baseMapper.selectById(coilId); + if (originalCoil == null) { + continue; + } + + WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); + pendingActionBo.setCoilId(coilId); + pendingActionBo.setCurrentCoilNo(originalCoil.getCurrentCoilNo()); + pendingActionBo.setActionType(actionType); + pendingActionBo.setActionStatus(0); // 处理中 + pendingActionBo.setSourceType("manual"); + pendingActionBo.setPriority(0); + coilPendingActionService.insertByBo(pendingActionBo); + + // insertByBo 会自动设置 actionId 到 bo 中 + if (pendingActionBo.getActionId() != null) { + coilToActionIdMap.put(coilId, pendingActionBo.getActionId()); + } + } + } + + // 第二步:执行合卷操作 Boolean batchResult = updateByBatch(bo); if (!Boolean.TRUE.equals(batchResult)) { throw new RuntimeException("合卷操作失败"); @@ -2582,46 +2624,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("未找到合卷后的新钢卷ID"); } - Date now = new Date(); + // 第三步:更新所有待操作记录状态为已完成,并设置processedCoilIds + for (Map.Entry entry : coilToActionIdMap.entrySet()) { + Long actionId = entry.getValue(); - // 为newCoils中的每个被合的卷处理操作记录 - for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) { - Long coilId = originalCoilBo.getCoilId(); - Integer actionType = originalCoilBo.getActionType(); - Long actionId = originalCoilBo.getActionId(); - - if (coilId == null) { - continue; - } - - // 获取原始钢卷信息 - WmsMaterialCoil originalCoil = baseMapper.selectById(coilId); - if (originalCoil == null) { - continue; - } - - if (actionId != null) { - // 如果传递了actionId,则更新操作记录状态为已完成 - WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); - pendingActionBo.setActionId(actionId); - pendingActionBo.setActionStatus(2); - pendingActionBo.setCompleteTime(now); - // 将合卷后的钢卷ID添加到processedCoilIds - pendingActionBo.setProcessedCoilIds(mergedCoilId.toString()); - coilPendingActionService.updateByBo(pendingActionBo); - } else if (actionType != null) { - // 如果未传actionId,则创建新的操作记录 - WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); - pendingActionBo.setCoilId(coilId); - pendingActionBo.setCurrentCoilNo(originalCoil.getCurrentCoilNo()); - pendingActionBo.setActionType(actionType); - pendingActionBo.setActionStatus(2); - pendingActionBo.setSourceType("manual"); - pendingActionBo.setPriority(0); - pendingActionBo.setCompleteTime(now); - pendingActionBo.setProcessedCoilIds(mergedCoilId.toString()); - coilPendingActionService.insertByBo(pendingActionBo); - } + WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo(); + pendingActionBo.setActionId(actionId); + pendingActionBo.setActionStatus(2); // 已完成 + pendingActionBo.setCompleteTime(now); + pendingActionBo.setProcessedCoilIds(mergedCoilId.toString()); + coilPendingActionService.updateByBo(pendingActionBo); } return true;