refactor(WmsMaterialCoilService): 优化合卷操作的待办事项处理流程
- 调整代码执行顺序,先创建待操作记录再执行合卷操作 - 引入中间步骤收集原始钢卷与操作ID的映射关系 - 修改待办事项状态更新时机,在合卷完成后统一更新为已完成 - 为新创建的待办事项设置初始状态为处理中而不是直接完成 - 修复空指针检查逻辑,同时验证coilId和actionType非空 - 重构操作记录更新流程,确保在合卷成功后再更新processedCoilIds
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user