From c4eab467ee44f575987dc2592f50a580e08e465b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 10 Jun 2026 15:54:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E5=8F=B7=E9=87=8D=E5=A4=8D=E6=A3=80=E6=9F=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在新增钢卷时检查当前钢卷号是否重复 - 在简单更新时检查当前钢卷号是否重复并排除自身 - 在单个更新时检查当前钢卷号是否重复并排除自身 - 在分卷操作时检查每个子钢卷号是否重复 - 在合卷操作时检查新钢卷号是否重复 - 在子钢卷创建时检查子钢卷号是否重复 - 在退货操作时检查当前钢卷号是否重复并排除自身 - 修复历史钢卷恢复时的重复检查参数传递问题 --- .../impl/WmsMaterialCoilServiceImpl.java | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) 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 1387e8fb..7b0a5256 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 @@ -1490,6 +1490,12 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { @Override @Transactional(rollbackFor = Exception.class) public WmsMaterialCoilVo insertByBo(WmsMaterialCoilBo bo) { + // 检查当前钢卷号是否重复(新增) + Map duplicateCheck = checkCoilNoDuplicate(null, null, bo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("新增失败:当前钢卷号[" + bo.getCurrentCoilNo() + "]已存在"); + } + // 1. 生成二维码 Long qrcodeRecordId = generateQrcodeForInsert(bo); bo.setQrcodeRecordId(qrcodeRecordId); @@ -1669,6 +1675,12 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("钢卷ID不能为空"); } + // 检查当前钢卷号是否重复(简单更新,传入coilId排除自身) + Map duplicateCheck = checkCoilNoDuplicate(bo.getCoilId(), null, bo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("更新失败:当前钢卷号[" + bo.getCurrentCoilNo() + "]已存在"); + } + // 检查独占状态 validateCoilOperationPermission(bo.getCoilId(), "简单更新"); @@ -1801,6 +1813,12 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("原钢卷已被更新"); } + // 检查当前钢卷号是否重复(单个更新,传入coilId排除自身) + Map duplicateCheck = checkCoilNoDuplicate(bo.getCoilId(), null, bo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("更新失败:当前钢卷号[" + bo.getCurrentCoilNo() + "]已存在"); + } + // 若修改实际库位,先进行校验 if (bo.getActualWarehouseId() != null) { Long ignoreOccupiedId = Objects.equals(bo.getActualWarehouseId(), oldCoil.getActualWarehouseId()) @@ -2046,6 +2064,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("分卷操作需要原钢卷信息"); } + // 检查每个子钢卷的当前钢卷号是否重复 + for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) { + Map duplicateCheck = checkCoilNoDuplicate(null, null, newCoilBo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("分卷失败:子钢卷号[" + newCoilBo.getCurrentCoilNo() + "]已存在"); + } + } + // 1. 将原始钢卷的二维码标记为失效(status=0) if (oldCoil.getQrcodeRecordId() != null) { WmsGenerateRecordBo oldQrBo = new WmsGenerateRecordBo(); @@ -2166,6 +2192,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据 //在合卷之前需要判断前端传来的bo.getNewCoils()中的所有原始钢卷的coilId是否已经是历史卷 validateOriginalCoilsForMerge(bo.getNewCoils()); + + // 检查合卷后新钢卷的当前钢卷号是否重复 + if (StringUtils.isNotBlank(bo.getCurrentCoilNo())) { + Map duplicateCheck = checkCoilNoDuplicate(null, null, bo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("合卷失败:当前钢卷号[" + bo.getCurrentCoilNo() + "]已存在"); + } + } for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) { if (originalCoilBo.getCoilId() != null) { WmsMaterialCoil originalCoil = baseMapper.selectById(originalCoilBo.getCoilId()); @@ -4290,7 +4324,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // // 检查恢复的钢卷的当前钢卷号是否重复 // for (WmsMaterialCoil originalCoil : originalCoils) { -// Map duplicateCheck = checkCoilNoDuplicate(originalCoil.getCoilId(), originalCoil.getEnterCoilNo(), originalCoil.getCurrentCoilNo()); +// Map duplicateCheck = checkCoilNoDuplicate(originalCoil.getCoilId(), null, originalCoil.getCurrentCoilNo(), null); // boolean currentCoilNoDuplicate = (boolean) duplicateCheck.get("currentCoilNoDuplicate"); // if (currentCoilNoDuplicate) { // String errorMsg = "无法恢复原始钢卷,存在重复的钢卷号:原始钢卷的当前钢卷号[" + originalCoil.getCurrentCoilNo() + "]重复。"; @@ -5036,11 +5070,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("待操作记录不存在或不匹配"); } -// // 4. 检查子钢卷号是否重复 -// Map duplicateCheck = checkCoilNoDuplicate(null, parentCoil.getEnterCoilNo(), childCoilBo.getCurrentCoilNo()); -// if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { -// throw new RuntimeException("子钢卷号[" + childCoilBo.getCurrentCoilNo() + "]已存在"); -// } + // 4. 检查子钢卷号是否重复 + Map duplicateCheck = checkCoilNoDuplicate(null, null, childCoilBo.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("子钢卷号[" + childCoilBo.getCurrentCoilNo() + "]已存在"); + } // 校验每个子卷的实际库位 if (childCoilBo.getActualWarehouseId() != null) { @@ -5351,6 +5385,12 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("该钢卷是历史钢卷"); } + // 检查当前钢卷号是否重复(退货时用原钢卷号创建新钢卷,传入coilId排除自身) + Map duplicateCheck = checkCoilNoDuplicate(coilId, null, oldCoil.getCurrentCoilNo(), null); + if ("current".equals(duplicateCheck.get("duplicateType")) || "both".equals(duplicateCheck.get("duplicateType"))) { + throw new RuntimeException("退货失败:当前钢卷号[" + oldCoil.getCurrentCoilNo() + "]已存在"); + } + WmsWarehouseBo warehouseBo = new WmsWarehouseBo(); warehouseBo.setWarehouseName("退货仓"); warehouseBo.setWarehouseCode("return");