From 364ecb3ab0599807f7c89946c5de722b7dd05b6b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 15 Jan 2026 15:14:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E9=87=8D=E5=A4=8D=E6=95=B0=E6=8D=AE=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 IWmsMaterialCoilService 中新增 getDuplicateCoilGroups 方法定义 - 在 WmsMaterialCoilController 中添加 /duplicateGroups 接口 - 在 WmsMaterialCoilServiceImpl 中实现重复钢卷分组逻辑 - 支持按入场钢卷号和当前钢卷号分别进行重复分组 - 返回结构包含 enterGroups 和 currentGroups 两个分组数组 - 自动过滤 data_type=1 且未删除的数据记录 - 批量填充关联对象信息以提高查询效率 --- .../controller/WmsMaterialCoilController.java | 11 ++++ .../klp/service/IWmsMaterialCoilService.java | 11 ++++ .../impl/WmsMaterialCoilServiceImpl.java | 66 +++++++++++++++++++ 3 files changed, 88 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 c918b80d..6cc72830 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -288,5 +288,16 @@ public class WmsMaterialCoilController extends BaseController { return R.ok(result); } + /** + * 查询data_type=1的重复钢卷分组 + * - 入场钢卷号重复分组 + * - 当前钢卷号重复分组 + */ + @GetMapping("/duplicateGroups") + public R> getDuplicateCoilGroups() { + Map result = iWmsMaterialCoilService.getDuplicateCoilGroups(); + 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 eef0c0c4..289c60da 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -137,5 +137,16 @@ public interface IWmsMaterialCoilService { * - prefix: 前缀值 */ Map getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix); + + /** + * 查询data_type=1时的重复钢卷分组 + * 将入场钢卷号重复的分为一组,将当前钢卷号重复的分为一组 + * 返回结构: + * { + * enterGroups: [ { enterCoilNo: "xxx", coils: [WmsMaterialCoilVo...] }, ...], + * currentGroups: [ { currentCoilNo: "yyy", coils: [WmsMaterialCoilVo...] }, ...] + * } + */ + Map getDuplicateCoilGroups(); } 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 825a19ac..dde057d3 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 @@ -540,6 +540,72 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return qw; } + @Override + public Map getDuplicateCoilGroups() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(WmsMaterialCoil::getDataType, 1); + lqw.eq(WmsMaterialCoil::getDelFlag, 0); + List all = baseMapper.selectList(lqw); + + Map> enterGrouped = all.stream() + .filter(e -> StringUtils.isNotBlank(e.getEnterCoilNo())) + .collect(Collectors.groupingBy(WmsMaterialCoil::getEnterCoilNo)); + Map> currentGrouped = all.stream() + .filter(e -> StringUtils.isNotBlank(e.getCurrentCoilNo())) + .collect(Collectors.groupingBy(WmsMaterialCoil::getCurrentCoilNo)); + + List> enterGroups = enterGrouped.entrySet().stream() + .filter(en -> en.getValue() != null && en.getValue().size() > 1) + .map(en -> { + List vos = en.getValue().stream().map(this::toVoBasic).collect(Collectors.toList()); + Map m = new HashMap<>(); + m.put("enterCoilNo", en.getKey()); + m.put("coils", vos); + return m; + }) + .collect(Collectors.toList()); + + List> currentGroups = currentGrouped.entrySet().stream() + .filter(en -> en.getValue() != null && en.getValue().size() > 1) + .map(en -> { + List vos = en.getValue().stream().map(this::toVoBasic).collect(Collectors.toList()); + Map m = new HashMap<>(); + m.put("currentCoilNo", en.getKey()); + m.put("coils", vos); + return m; + }) + .collect(Collectors.toList()); + + // 可选:批量填充关联对象信息 + List allVos = new ArrayList<>(); + for (Map g : enterGroups) { + Object list = g.get("coils"); + if (list instanceof List) { + allVos.addAll((List) list); + } + } + for (Map g : currentGroups) { + Object list = g.get("coils"); + if (list instanceof List) { + allVos.addAll((List) list); + } + } + if (!allVos.isEmpty()) { + fillRelatedObjectsBatch(allVos); + } + + Map result = new HashMap<>(); + result.put("enterGroups", enterGroups); + result.put("currentGroups", currentGroups); + return result; + } + + private WmsMaterialCoilVo toVoBasic(WmsMaterialCoil e) { + WmsMaterialCoilVo vo = new WmsMaterialCoilVo(); + BeanUtils.copyProperties(e, vo); + return vo; + } + /** * 构建 OR 连接的 LIKE 子句,使用 MyBatis-Plus apply 的 {index} 占位符并将参数加入 args。 * 例如:column = "p.product_name", values = "A,B" -> 返回 "(p.product_name LIKE {0} OR p.product_name LIKE {1})"