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