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");