From 809a4506e7770d567e09e472c1f6b7ce3a88f53e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 4 Mar 2026 10:42:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(wms):=20=E8=A7=A3=E5=86=B3=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E5=9B=9E=E6=BB=9A=E6=93=8D=E4=BD=9C=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=8F=B7=E6=A3=80=E6=9F=A5=E5=92=8C=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E8=AE=B0=E5=BD=95=E6=B8=85=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加原始钢卷当前钢卷号重复检查,防止回滚时出现重复钢卷号冲突 - 在回滚操作完成后删除对应的操作记录,保持数据一致性 - 添加母卷当前钢卷号重复检查,确保拆分回滚时的数据完整性 - 实现删除回滚操作记录的辅助方法,清理不需要的待处理动作记录 --- .../impl/WmsMaterialCoilServiceImpl.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) 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()); + } + } + /** * 回滚普通更新操作(原有逻辑) */