From 1cf1b23ca2c0b3e7f132f307fd5445b48eb7c4d5 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 15 Dec 2025 10:39:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(service):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E7=89=A9=E6=96=99=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E6=9D=A1=E4=BB=B6=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将产品和原材料的筛选逻辑提取到独立方法 queryMatchedItemIds - 支持对多个字段使用逗号分隔的多值查询 - 统一处理规格、材料、制造商等字段的模糊匹配 - 添加去重逻辑避免重复 ID 影响查询性能 - 简化主查询流程,提高代码可读性和维护性 --- .../com/klp/domain/bo/WmsMaterialCoilBo.java | 1 - .../impl/WmsMaterialCoilServiceImpl.java | 318 +++++++++++++----- 2 files changed, 236 insertions(+), 83 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index 86ea469a..344db00b 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -178,7 +178,6 @@ public class WmsMaterialCoilBo extends BaseEntity { private String itemSurfaceTreatmentDesc; // 锌层厚度(两表通用字段名:zinc_layer) private String itemZincLayer; - //规格 private String itemSpecification; 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 9e0e4f2c..9ddc87bb 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 @@ -350,93 +350,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (hasAnyItemFilter) { try { - if ("product".equals(bo.getSelectType())) { - QueryWrapper pq = new QueryWrapper<>(); - pq.eq("del_flag", 0); - if (StringUtils.isNotBlank(bo.getItemName())) { - pq.like("product_name", bo.getItemName()); - } - if (StringUtils.isNotBlank(bo.getItemMaterial())) { - pq.like("material", bo.getItemMaterial()); - } - if (StringUtils.isNotBlank(bo.getItemManufacturer())) { - pq.like("manufacturer", bo.getItemManufacturer()); - } - if (StringUtils.isNotBlank(bo.getItemSurfaceTreatmentDesc())) { - pq.like("surface_treatment_desc", bo.getItemSurfaceTreatmentDesc()); - } - if (StringUtils.isNotBlank(bo.getItemZincLayer())) { - pq.like("zinc_layer", bo.getItemZincLayer()); - } - // 添加规格筛选条件,支持逗号分隔的多个规格 - if (StringUtils.isNotBlank(bo.getItemSpecification())) { - String[] specs = bo.getItemSpecification().split(","); - if (specs.length == 1) { - pq.like("specification", specs[0].trim()); - } else { - pq.and(wrapper -> { - for (int i = 0; i < specs.length; i++) { - if (i == 0) { - wrapper.like("specification", specs[i].trim()); - } else { - wrapper.or().like("specification", specs[i].trim()); - } - } - }); - } - } - // MyBatis selectList默认返回空列表,无需判null,直接流式提取ID - matchedItemIds = productMapper.selectList(pq).stream() - .map(WmsProduct::getProductId) - .filter(Objects::nonNull) // 过滤null的productId - .collect(Collectors.toList()); - } else if ("raw_material".equals(bo.getSelectType())) { - QueryWrapper rq = new QueryWrapper<>(); - rq.eq("del_flag", 0); - if (StringUtils.isNotBlank(bo.getItemName())) { - rq.like("raw_material_name", bo.getItemName()); - } - if (StringUtils.isNotBlank(bo.getItemMaterial())) { - rq.like("material", bo.getItemMaterial()); - } - if (StringUtils.isNotBlank(bo.getItemManufacturer())) { - rq.like("manufacturer", bo.getItemManufacturer()); - } - if (StringUtils.isNotBlank(bo.getItemSurfaceTreatmentDesc())) { - rq.like("surface_treatment_desc", bo.getItemSurfaceTreatmentDesc()); - } - if (StringUtils.isNotBlank(bo.getItemZincLayer())) { - rq.like("zinc_layer", bo.getItemZincLayer()); - } - // 添加规格筛选条件,支持逗号分隔的多个规格 - if (StringUtils.isNotBlank(bo.getItemSpecification())) { - String[] specs = bo.getItemSpecification().split(","); - if (specs.length == 1) { - rq.like("specification", specs[0].trim()); - } else { - rq.and(wrapper -> { - for (int i = 0; i < specs.length; i++) { - if (i == 0) { - wrapper.like("specification", specs[i].trim()); - } else { - wrapper.or().like("specification", specs[i].trim()); - } - } - }); - } - } - // 流式提取rawMaterialId,过滤null - matchedItemIds = rawMaterialMapper.selectList(rq).stream() - .map(WmsRawMaterial::getRawMaterialId) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } + matchedItemIds = queryMatchedItemIds(bo.getSelectType(), bo); } catch (Exception e) { // 异常时强制返回空结果,避免查询报错 Log.error("筛选产品/原材料ID失败", e); matchedItemIds = Collections.emptyList(); - } + } + // 去重,避免生成过长的IN列表和重复ID + matchedItemIds = matchedItemIds.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); if (matchedItemIds.isEmpty()) { // 强制无结果 qw.apply("1 = 0"); @@ -512,6 +434,238 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return qw; } + public List queryMatchedItemIds(String selectType, WmsMaterialCoilBo bo) { + List result = new ArrayList<>(); + if ("product".equals(selectType)) { + QueryWrapper pq = new QueryWrapper<>(); + pq.eq("del_flag", 0); + if (StringUtils.isNotBlank(bo.getItemName())) { + String[] vals = bo.getItemName().split(","); + if (vals.length == 1) { + pq.like("product_name", vals[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("product_name", v); + } else { + wrapper.or().like("product_name", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemMaterial())) { + String[] vals = bo.getItemMaterial().split(","); + if (vals.length == 1) { + pq.like("material", vals[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("material", v); + } else { + wrapper.or().like("material", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemManufacturer())) { + String[] vals = bo.getItemManufacturer().split(","); + if (vals.length == 1) { + pq.like("manufacturer", vals[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("manufacturer", v); + } else { + wrapper.or().like("manufacturer", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemSurfaceTreatmentDesc())) { + String[] vals = bo.getItemSurfaceTreatmentDesc().split(","); + if (vals.length == 1) { + pq.like("surface_treatment_desc", vals[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("surface_treatment_desc", v); + } else { + wrapper.or().like("surface_treatment_desc", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemZincLayer())) { + String[] vals = bo.getItemZincLayer().split(","); + if (vals.length == 1) { + pq.like("zinc_layer", vals[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("zinc_layer", v); + } else { + wrapper.or().like("zinc_layer", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemSpecification())) { + String[] specs = bo.getItemSpecification().split(","); + if (specs.length == 1) { + pq.like("specification", specs[0].trim()); + } else { + pq.and(wrapper -> { + for (int i = 0; i < specs.length; i++) { + if (i == 0) { + wrapper.like("specification", specs[i].trim()); + } else { + wrapper.or().like("specification", specs[i].trim()); + } + } + }); + } + } + result = productMapper.selectList(pq).stream() + .map(WmsProduct::getProductId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } else if ("raw_material".equals(selectType)) { + QueryWrapper rq = new QueryWrapper<>(); + rq.eq("del_flag", 0); + if (StringUtils.isNotBlank(bo.getItemName())) { + String[] vals = bo.getItemName().split(","); + if (vals.length == 1) { + rq.like("raw_material_name", vals[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("raw_material_name", v); + } else { + wrapper.or().like("raw_material_name", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemMaterial())) { + String[] vals = bo.getItemMaterial().split(","); + if (vals.length == 1) { + rq.like("material", vals[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("material", v); + } else { + wrapper.or().like("material", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemManufacturer())) { + String[] vals = bo.getItemManufacturer().split(","); + if (vals.length == 1) { + rq.like("manufacturer", vals[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("manufacturer", v); + } else { + wrapper.or().like("manufacturer", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemSurfaceTreatmentDesc())) { + String[] vals = bo.getItemSurfaceTreatmentDesc().split(","); + if (vals.length == 1) { + rq.like("surface_treatment_desc", vals[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("surface_treatment_desc", v); + } else { + wrapper.or().like("surface_treatment_desc", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemZincLayer())) { + String[] vals = bo.getItemZincLayer().split(","); + if (vals.length == 1) { + rq.like("zinc_layer", vals[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < vals.length; i++) { + String v = vals[i].trim(); + if (v.isEmpty()) continue; + if (i == 0) { + wrapper.like("zinc_layer", v); + } else { + wrapper.or().like("zinc_layer", v); + } + } + }); + } + } + if (StringUtils.isNotBlank(bo.getItemSpecification())) { + String[] specs = bo.getItemSpecification().split(","); + if (specs.length == 1) { + rq.like("specification", specs[0].trim()); + } else { + rq.and(wrapper -> { + for (int i = 0; i < specs.length; i++) { + if (i == 0) { + wrapper.like("specification", specs[i].trim()); + } else { + wrapper.or().like("specification", specs[i].trim()); + } + } + }); + } + } + result = rawMaterialMapper.selectList(rq).stream() + .map(WmsRawMaterial::getRawMaterialId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + return result; + } + /** * 查询钢卷物料表列表 */