fix(wms): 修复钢卷号重复校验问题

- 添加注释说明子卷与母卷钢卷号冲突的处理逻辑
- 在查询条件中增加exclusiveStatus字段过滤,避免正在处理的数据被误判为重复
- 修复入场钢卷号、当前钢卷号和供应商钢卷号的重复检查逻辑
- 确保历史数据和排他状态数据不会影响重复性校验结果
This commit is contained in:
2026-06-11 11:39:29 +08:00
parent 196e628665
commit b9b6ae7e79

View File

@@ -3916,6 +3916,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
// 2. 如果查询到钢卷且dataType==0说明是历史记录直接返回无重复
// 为了防止历史的入场钢卷号问题因为排除自身也没用, 回滚本身操作的就是历史钢卷,但是它不应该跳过因为它要变成现存卷了
// 回滚卷要校验钢卷号 所以回滚是不需要传递coilId 加上本身是历史卷 所以也不会被查出来 .eq(WmsMaterialCoil::getDataType, 1);已经过滤掉自身了 所以也能修改
// 由于子卷一定有一个和母卷的钢卷号一样但是单步分条母卷又是现存卷 所以除了过滤自身还要过滤母卷 但是简单更新没法拿到母卷Id 而且方法还要在加参数去排除
// 故此处加上排除所有母卷 这样会导致子卷可以填正在加工的母卷的当前钢卷号 但是母卷即将变成历史所以这里是可以加的 这样又引出一个问题
// 母卷是可以取消分卷的 这样就会导致当前钢卷号重复 这样又引出一个问题 回滚也是没有加校验的也会导致当前钢卷号重复
// 如果想做到当前钢卷号绝对唯一需要在所有 新增和修改上都去校验当前钢卷号是否重复 同时还要处理单步分条这种情况 传motherId
if (coil != null && coil.getDataType() == 0) {
result.put("duplicateType", "none");
result.put("enterCoilNoDuplicate", false);
@@ -3934,7 +3938,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
LambdaQueryWrapper<WmsMaterialCoil> enterWrapper = Wrappers.lambdaQuery();
enterWrapper.eq(WmsMaterialCoil::getEnterCoilNo, enterCoilNo)
.eq(WmsMaterialCoil::getDelFlag, 0)
.eq(WmsMaterialCoil::getDataType, 1); // 过滤历史数据
.eq(WmsMaterialCoil::getDataType, 1)
.eq(WmsMaterialCoil::getExclusiveStatus, 0); // 过滤历史数据
// 如果是修改操作,排除自身
if (coilId != null) {
enterWrapper.ne(WmsMaterialCoil::getCoilId, coilId);
@@ -3948,7 +3953,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
LambdaQueryWrapper<WmsMaterialCoil> currentWrapper = Wrappers.lambdaQuery();
currentWrapper.eq(WmsMaterialCoil::getCurrentCoilNo, currentCoilNo)
.eq(WmsMaterialCoil::getDelFlag, 0)
.eq(WmsMaterialCoil::getDataType, 1);
.eq(WmsMaterialCoil::getDataType, 1).eq(WmsMaterialCoil::getExclusiveStatus, 0);
// 如果是修改操作,排除自身
if (coilId != null) {
currentWrapper.ne(WmsMaterialCoil::getCoilId, coilId);
@@ -3963,7 +3968,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
LambdaQueryWrapper<WmsMaterialCoil> supplierWrapper = Wrappers.lambdaQuery();
supplierWrapper.eq(WmsMaterialCoil::getSupplierCoilNo, supplierCoilNo)
.eq(WmsMaterialCoil::getDelFlag, 0)
.eq(WmsMaterialCoil::getDataType, 1);
.eq(WmsMaterialCoil::getDataType, 1).eq(WmsMaterialCoil::getExclusiveStatus, 0);
// 如果是修改操作,排除自身
if (coilId != null) {
supplierWrapper.ne(WmsMaterialCoil::getCoilId, coilId);