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 8c0da049..e0157d0a 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 @@ -3119,6 +3119,17 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("部分原始钢卷不存在,无法回滚"); } + // 检查恢复的钢卷的当前钢卷号是否重复 + for (WmsMaterialCoil originalCoil : originalCoils) { + Map duplicateCheck = checkCoilNoDuplicate(originalCoil.getCoilId(), originalCoil.getEnterCoilNo(), originalCoil.getCurrentCoilNo()); + boolean currentCoilNoDuplicate = (boolean) duplicateCheck.get("currentCoilNoDuplicate"); + if (currentCoilNoDuplicate) { + String errorMsg = "无法恢复原始钢卷,存在重复的钢卷号:原始钢卷的当前钢卷号[" + originalCoil.getCurrentCoilNo() + "]重复。"; + errorMsg += "重复的钢卷无法进行回滚操作。"; + throw new RuntimeException(errorMsg); + } + } + // 释放当前合卷钢卷占用的实际库区 if (currentCoil.getActualWarehouseId() != null) { WmsActualWarehouseBo releaseBo = new WmsActualWarehouseBo(); @@ -3137,6 +3148,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { .set(WmsMaterialCoil::getDataType, 1) .set(WmsMaterialCoil::getActualWarehouseId, (Long) null); baseMapper.update(null, updateWrapper); + + // 删除操作记录 + deletePendingActionForRollback(originalCoil.getCoilId()); } // 更新二维码记录 @@ -3204,6 +3218,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("以下钢卷不是现存钢卷,无法回滚:" + String.join(", ", invalidCoilNos)); } + // 检查恢复的母卷的当前钢卷号是否重复 + if (motherCoilId != null) { + WmsMaterialCoil motherCoil = baseMapper.selectById(motherCoilId); + if (motherCoil != null) { + Map duplicateCheck = checkCoilNoDuplicate(motherCoilId, motherCoil.getEnterCoilNo(), motherCoil.getCurrentCoilNo()); + boolean currentCoilNoDuplicate = (boolean) duplicateCheck.get("currentCoilNoDuplicate"); + if (currentCoilNoDuplicate) { + String errorMsg = "无法恢复母卷,存在重复的钢卷号:母卷的当前钢卷号[" + motherCoil.getCurrentCoilNo() + "]重复。"; + errorMsg += "重复的钢卷无法进行回滚操作。"; + throw new RuntimeException(errorMsg); + } + } + } + // 释放所有子钢卷占用的实际库区并删除所有子钢卷 for (WmsMaterialCoil childCoil : childCoils) { if (childCoil.getActualWarehouseId() != null) { @@ -3223,6 +3251,9 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { .set(WmsMaterialCoil::getActualWarehouseId, (Long) null); baseMapper.update(null, updateWrapper); + // 删除母卷的操作记录 + deletePendingActionForRollback(motherCoilId); + // 更新二维码记录 updateQrcodeForSplitRollback(qrcodeRecord, currentCoil, motherCoilId); } @@ -3237,6 +3268,25 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return result; } + /** + * 删除回滚操作记录 + * 删除最晚的一条且actionType不在401-405范围内,并且coilId等于指定ID的操作记录 + */ + private void deletePendingActionForRollback(Long coilId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(WmsCoilPendingAction::getCoilId, coilId) + .notIn(WmsCoilPendingAction::getActionType, Arrays.asList(401, 402, 403, 404, 405)) + .eq(WmsCoilPendingAction::getDelFlag, 0) + .eq(WmsCoilPendingAction::getActionStatus, 2) + .orderByDesc(WmsCoilPendingAction::getCreateTime) + .last("LIMIT 1"); + + WmsCoilPendingAction latestAction = coilPendingActionMapper.selectOne(queryWrapper); + if (latestAction != null) { + coilPendingActionMapper.deleteById(latestAction.getActionId()); + } + } + /** * 回滚普通更新操作(原有逻辑) */