From 5e1416ce0317cabaa2dbba5137eb266cb5125cfe Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 12 Jan 2026 15:51:43 +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=92=8C?= =?UTF-8?q?=E6=9C=80=E5=A4=A7=E9=92=A2=E5=8D=B7=E5=8F=B7=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了钢卷号重复检查接口,支持检查入场钢卷号和当前钢卷号是否重复 - 添加了根据入场钢卷号前缀查询最大入场钢卷号的功能 - 在服务层新增了 checkCoilNoDuplicate 方法用于重复验证逻辑 - 在服务层新增了 getMaxEnterCoilNoByPrefix 方法用于获取最大钢卷号 - 在控制器层暴露了对应的 REST API 接口 - 完善了相关方法的文档注释和参数校验 --- .../controller/WmsMaterialCoilController.java | 35 ++++++++ .../klp/service/IWmsMaterialCoilService.java | 24 ++++++ .../impl/WmsMaterialCoilServiceImpl.java | 82 +++++++++++++++++++ 3 files changed, 141 insertions(+) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index 2740e07a..c918b80d 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -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> checkCoilNoDuplicate( + @RequestParam(required = false) String enterCoilNo, + @RequestParam(required = false) String currentCoilNo) { + Map result = iWmsMaterialCoilService.checkCoilNoDuplicate(enterCoilNo, currentCoilNo); + return R.ok(result); + } + + /** + * 根据入场钢卷号前缀查询最大的入场钢卷号 + * 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值 + * + * @param enterCoilNoPrefix 入场钢卷号前缀(前四位) + * @return 返回结果,包含: + * - maxEnterCoilNo: 最大的入场钢卷号 + * - prefix: 前缀值 + */ + @GetMapping("/getMaxEnterCoilNo") + public R> getMaxEnterCoilNoByPrefix( + @RequestParam @NotBlank(message = "入场钢卷号前缀不能为空") String enterCoilNoPrefix) { + Map result = iWmsMaterialCoilService.getMaxEnterCoilNoByPrefix(enterCoilNoPrefix); + return R.ok(result); + } + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index be612b0c..eef0c0c4 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -113,5 +113,29 @@ public interface IWmsMaterialCoilService { Map getUpdatedCoilIdsByOldCoilIds(List 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 checkCoilNoDuplicate(String enterCoilNo, String currentCoilNo); + + /** + * 根据入场钢卷号前缀查询最大的入场钢卷号 + * 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值 + * + * @param enterCoilNoPrefix 入场钢卷号前缀(前四位) + * @return 返回结果Map,包含: + * - maxEnterCoilNo: 最大的入场钢卷号 + * - prefix: 前缀值 + */ + Map getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix); } 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 bfbece08..15954133 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 @@ -2252,4 +2252,86 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return old2NextCoilIdMap; } + /** + * 检查钢卷号是否重复 + * 根据入场钢卷号和当前钢卷号查询数据库,判断哪个钢卷号重复 + */ + @Override + public Map checkCoilNoDuplicate(String enterCoilNo, String currentCoilNo) { + Map result = new HashMap<>(); + + boolean enterCoilNoDuplicate = false; + boolean currentCoilNoDuplicate = false; + + // 检查入场钢卷号是否重复 + if (StringUtils.isNotBlank(enterCoilNo)) { + LambdaQueryWrapper 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 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 getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix) { + Map result = new HashMap<>(); + + if (StringUtils.isBlank(enterCoilNoPrefix)) { + result.put("maxEnterCoilNo", null); + result.put("prefix", enterCoilNoPrefix); + return result; + } + + // 查询所有以该前缀开头的入场钢卷号 + LambdaQueryWrapper 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; + } + }