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;