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 2e77a062..561c88c4 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 @@ -624,70 +624,50 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { @Override public Map getDuplicateCoilGroups() { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(WmsMaterialCoil::getDataType, 1); - lqw.eq(WmsMaterialCoil::getDelFlag, 0); - List all = baseMapper.selectList(lqw); + // 使用优化的数据库查询方法,直接获取重复入场卷号的钢卷信息 + List enterDuplicates = baseMapper.selectDuplicateEnterCoilNoList(); - Map> enterGrouped = all.stream() + // 使用优化的数据库查询方法,直接获取重复当前卷号的钢卷信息 + List currentDuplicates = baseMapper.selectDuplicateCurrentCoilNoList(); + + // 按入场卷号分组重复项 + Map> enterGrouped = enterDuplicates.stream() .filter(e -> StringUtils.isNotBlank(e.getEnterCoilNo())) - .collect(Collectors.groupingBy(WmsMaterialCoil::getEnterCoilNo)); - Map> currentGrouped = all.stream() + .collect(Collectors.groupingBy(WmsMaterialCoilVo::getEnterCoilNo)); + + // 按当前卷号分组重复项 + Map> currentGrouped = currentDuplicates.stream() .filter(e -> StringUtils.isNotBlank(e.getCurrentCoilNo())) - .collect(Collectors.groupingBy(WmsMaterialCoil::getCurrentCoilNo)); + .collect(Collectors.groupingBy(WmsMaterialCoilVo::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; + .filter(entry -> entry.getValue() != null && entry.getValue().size() > 1) + .map(entry -> { + Map group = new HashMap<>(); + group.put("enterCoilNo", entry.getKey()); + group.put("coils", entry.getValue()); + return group; }) .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; + .filter(entry -> entry.getValue() != null && entry.getValue().size() > 1) + .map(entry -> { + Map group = new HashMap<>(); + group.put("currentCoilNo", entry.getKey()); + group.put("coils", entry.getValue()); + return group; }) .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})"