refactor(WmsMaterialCoilService): 优化合卷操作的待办事项处理流程
- 调整代码执行顺序,先创建待操作记录再执行合卷操作 - 引入中间步骤收集原始钢卷与操作ID的映射关系 - 修改待办事项状态更新时机,在合卷完成后统一更新为已完成 - 为新创建的待办事项设置初始状态为处理中而不是直接完成 - 修复空指针检查逻辑,同时验证coilId和actionType非空 - 重构操作记录更新流程,确保在合卷成功后再更新processedCoilIds
This commit is contained in:
@@ -2570,7 +2570,49 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
throw new RuntimeException("合卷操作需要提供参与合卷的钢卷列表");
|
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);
|
Boolean batchResult = updateByBatch(bo);
|
||||||
if (!Boolean.TRUE.equals(batchResult)) {
|
if (!Boolean.TRUE.equals(batchResult)) {
|
||||||
throw new RuntimeException("合卷操作失败");
|
throw new RuntimeException("合卷操作失败");
|
||||||
@@ -2582,46 +2624,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
throw new RuntimeException("未找到合卷后的新钢卷ID");
|
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();
|
WmsCoilPendingActionBo pendingActionBo = new WmsCoilPendingActionBo();
|
||||||
pendingActionBo.setActionId(actionId);
|
pendingActionBo.setActionId(actionId);
|
||||||
pendingActionBo.setActionStatus(2);
|
pendingActionBo.setActionStatus(2); // 已完成
|
||||||
pendingActionBo.setCompleteTime(now);
|
pendingActionBo.setCompleteTime(now);
|
||||||
// 将合卷后的钢卷ID添加到processedCoilIds
|
|
||||||
pendingActionBo.setProcessedCoilIds(mergedCoilId.toString());
|
pendingActionBo.setProcessedCoilIds(mergedCoilId.toString());
|
||||||
coilPendingActionService.updateByBo(pendingActionBo);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user