feat(wms): 添加钢卷号重复检查和最大钢卷号查询功能

- 实现了钢卷号重复检查接口,支持检查入场钢卷号和当前钢卷号是否重复
- 添加了根据入场钢卷号前缀查询最大入场钢卷号的功能
- 在服务层新增了 checkCoilNoDuplicate 方法用于重复验证逻辑
- 在服务层新增了 getMaxEnterCoilNoByPrefix 方法用于获取最大钢卷号
- 在控制器层暴露了对应的 REST API 接口
- 完善了相关方法的文档注释和参数校验
This commit is contained in:
2026-01-12 15:51:43 +08:00
parent c19fee0909
commit 5e1416ce03
3 changed files with 141 additions and 0 deletions

View File

@@ -253,5 +253,40 @@ public class WmsMaterialCoilController extends BaseController {
}
}
/**
* 检查钢卷号是否重复
* 前端传入入场钢卷号和当前钢卷号,返回哪个钢卷号重复
*
* @param enterCoilNo 入场钢卷号
* @param currentCoilNo 当前钢卷号
* @return 返回结果,包含:
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "both" (都重复), "none" (都不重复)
* - enterCoilNoDuplicate: 入场钢卷号是否重复
* - currentCoilNoDuplicate: 当前钢卷号是否重复
*/
@GetMapping("/checkCoilNoDuplicate")
public R<Map<String, Object>> checkCoilNoDuplicate(
@RequestParam(required = false) String enterCoilNo,
@RequestParam(required = false) String currentCoilNo) {
Map<String, Object> result = iWmsMaterialCoilService.checkCoilNoDuplicate(enterCoilNo, currentCoilNo);
return R.ok(result);
}
/**
* 根据入场钢卷号前缀查询最大的入场钢卷号
* 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值
*
* @param enterCoilNoPrefix 入场钢卷号前缀(前四位)
* @return 返回结果,包含:
* - maxEnterCoilNo: 最大的入场钢卷号
* - prefix: 前缀值
*/
@GetMapping("/getMaxEnterCoilNo")
public R<Map<String, Object>> getMaxEnterCoilNoByPrefix(
@RequestParam @NotBlank(message = "入场钢卷号前缀不能为空") String enterCoilNoPrefix) {
Map<String, Object> result = iWmsMaterialCoilService.getMaxEnterCoilNoByPrefix(enterCoilNoPrefix);
return R.ok(result);
}
}

View File

@@ -113,5 +113,29 @@ public interface IWmsMaterialCoilService {
Map<Long, String> getUpdatedCoilIdsByOldCoilIds(List<Long> oldCoilIds);
int withdrawExportCoil(@NotNull(message = "主键不能为空") Long coilId);
/**
* 检查钢卷号是否重复
* 根据入场钢卷号和当前钢卷号查询数据库,判断哪个钢卷号重复
*
* @param enterCoilNo 入场钢卷号
* @param currentCoilNo 当前钢卷号
* @return 返回结果Map包含
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "both" (都重复), "none" (都不重复)
* - enterCoilNoDuplicate: 入场钢卷号是否重复 (true/false)
* - currentCoilNoDuplicate: 当前钢卷号是否重复 (true/false)
*/
Map<String, Object> checkCoilNoDuplicate(String enterCoilNo, String currentCoilNo);
/**
* 根据入场钢卷号前缀查询最大的入场钢卷号
* 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值
*
* @param enterCoilNoPrefix 入场钢卷号前缀(前四位)
* @return 返回结果Map包含
* - maxEnterCoilNo: 最大的入场钢卷号
* - prefix: 前缀值
*/
Map<String, Object> getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix);
}

View File

@@ -2252,4 +2252,86 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
return old2NextCoilIdMap;
}
/**
* 检查钢卷号是否重复
* 根据入场钢卷号和当前钢卷号查询数据库,判断哪个钢卷号重复
*/
@Override
public Map<String, Object> checkCoilNoDuplicate(String enterCoilNo, String currentCoilNo) {
Map<String, Object> result = new HashMap<>();
boolean enterCoilNoDuplicate = false;
boolean currentCoilNoDuplicate = false;
// 检查入场钢卷号是否重复
if (StringUtils.isNotBlank(enterCoilNo)) {
LambdaQueryWrapper<WmsMaterialCoil> enterWrapper = Wrappers.lambdaQuery();
enterWrapper.eq(WmsMaterialCoil::getEnterCoilNo, enterCoilNo)
.eq(WmsMaterialCoil::getDelFlag, 0);
long enterCount = baseMapper.selectCount(enterWrapper);
enterCoilNoDuplicate = enterCount > 0;
}
// 检查当前钢卷号是否重复
if (StringUtils.isNotBlank(currentCoilNo)) {
LambdaQueryWrapper<WmsMaterialCoil> currentWrapper = Wrappers.lambdaQuery();
currentWrapper.eq(WmsMaterialCoil::getCurrentCoilNo, currentCoilNo)
.eq(WmsMaterialCoil::getDelFlag, 0);
long currentCount = baseMapper.selectCount(currentWrapper);
currentCoilNoDuplicate = currentCount > 0;
}
// 判断重复类型
String duplicateType;
if (enterCoilNoDuplicate && currentCoilNoDuplicate) {
duplicateType = "both";
} else if (enterCoilNoDuplicate) {
duplicateType = "enter";
} else if (currentCoilNoDuplicate) {
duplicateType = "current";
} else {
duplicateType = "none";
}
result.put("duplicateType", duplicateType);
result.put("enterCoilNoDuplicate", enterCoilNoDuplicate);
result.put("currentCoilNoDuplicate", currentCoilNoDuplicate);
return result;
}
/**
* 根据入场钢卷号前缀查询最大的入场钢卷号
* 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值
*/
@Override
public Map<String, Object> getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix) {
Map<String, Object> result = new HashMap<>();
if (StringUtils.isBlank(enterCoilNoPrefix)) {
result.put("maxEnterCoilNo", null);
result.put("prefix", enterCoilNoPrefix);
return result;
}
// 查询所有以该前缀开头的入场钢卷号
LambdaQueryWrapper<WmsMaterialCoil> wrapper = Wrappers.lambdaQuery();
wrapper.likeRight(WmsMaterialCoil::getEnterCoilNo, enterCoilNoPrefix)
.eq(WmsMaterialCoil::getDelFlag, 0)
.orderByDesc(WmsMaterialCoil::getEnterCoilNo)
.last("LIMIT 1");
WmsMaterialCoil maxCoil = baseMapper.selectOne(wrapper);
String maxEnterCoilNo = null;
if (maxCoil != null && StringUtils.isNotBlank(maxCoil.getEnterCoilNo())) {
maxEnterCoilNo = maxCoil.getEnterCoilNo();
}
result.put("maxEnterCoilNo", maxEnterCoilNo);
result.put("prefix", enterCoilNoPrefix);
return result;
}
}