refactor(WmsMaterialCoilService): 优化合卷操作的待办事项处理流程

- 调整代码执行顺序,先创建待操作记录再执行合卷操作
- 引入中间步骤收集原始钢卷与操作ID的映射关系
- 修改待办事项状态更新时机,在合卷完成后统一更新为已完成
- 为新创建的待办事项设置初始状态为处理中而不是直接完成
- 修复空指针检查逻辑,同时验证coilId和actionType非空
- 重构操作记录更新流程,确保在合卷成功后再更新processedCoilIds
This commit is contained in:
2026-03-16 15:29:05 +08:00
parent a51c5a4d88
commit d8821db4b2

View File

@@ -2570,7 +2570,49 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表");
}
// 先执行批量更新逻辑(分卷/合卷)
Date now = new Date();
// 第一步:先为每个原始钢卷创建待操作记录(状态为处理中)
// 收集创建成功的actionId用于后续更新
Map<Long, Long> 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<Long, Long> 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;