From c9c7aafe844c1f7b4d8b217c65da932f1f73ada0 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 15 Jan 2026 10:54:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor(WmsMaterialCoilService):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9D=90=E6=96=99=E5=8D=B7=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 简化selectType条件判断逻辑,提前设置item_type过滤条件 - 调整EXISTS子查询结构,提高SQL执行效率 - 保持原有的产品和原材料筛选功能不变 - 修复原代码中的逻辑嵌套问题 --- .../impl/WmsMaterialCoilServiceImpl.java | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) 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 1ee85295..01840c53 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 @@ -412,44 +412,47 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } // 使用 EXISTS 针对 selectType 的细粒度筛选(使用参数占位符防注入) - if (hasSelectType && hasAnyItemFilter) { - StringBuilder existsSql = new StringBuilder(); - List existsArgs = new ArrayList<>(); - if ("product".equals(bo.getSelectType())) { - existsSql.append(" EXISTS (SELECT 1 FROM wms_product p WHERE p.del_flag = 0 AND p.product_id = mc.item_id"); - String clause; - clause = buildOrLikeClause("p.product_name", bo.getItemName(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("p.material", bo.getItemMaterial(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("p.manufacturer", bo.getItemManufacturer(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("p.surface_treatment_desc", bo.getItemSurfaceTreatmentDesc(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("p.zinc_layer", bo.getItemZincLayer(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("p.specification", bo.getItemSpecification(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - existsSql.append(")"); - } else if ("raw_material".equals(bo.getSelectType())) { - existsSql.append(" EXISTS (SELECT 1 FROM wms_raw_material r WHERE r.del_flag = 0 AND r.raw_material_id = mc.item_id"); - String clause; - clause = buildOrLikeClause("r.raw_material_name", bo.getItemName(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("r.material", bo.getItemMaterial(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("r.manufacturer", bo.getItemManufacturer(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("r.surface_treatment_desc", bo.getItemSurfaceTreatmentDesc(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("r.zinc_layer", bo.getItemZincLayer(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - clause = buildOrLikeClause("r.specification", bo.getItemSpecification(), existsArgs); - if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); - existsSql.append(")"); - } - if (existsSql.length() > 0) { - qw.apply(existsSql.toString(), existsArgs.toArray()); + if (hasSelectType) { + qw.eq("mc.item_type", bo.getSelectType()); + if (hasAnyItemFilter) { + StringBuilder existsSql = new StringBuilder(); + List existsArgs = new ArrayList<>(); + if ("product".equals(bo.getSelectType())) { + existsSql.append(" EXISTS (SELECT 1 FROM wms_product p WHERE p.del_flag = 0 AND p.product_id = mc.item_id"); + String clause; + clause = buildOrLikeClause("p.product_name", bo.getItemName(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("p.material", bo.getItemMaterial(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("p.manufacturer", bo.getItemManufacturer(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("p.surface_treatment_desc", bo.getItemSurfaceTreatmentDesc(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("p.zinc_layer", bo.getItemZincLayer(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("p.specification", bo.getItemSpecification(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + existsSql.append(")"); + } else if ("raw_material".equals(bo.getSelectType())) { + existsSql.append(" EXISTS (SELECT 1 FROM wms_raw_material r WHERE r.del_flag = 0 AND r.raw_material_id = mc.item_id"); + String clause; + clause = buildOrLikeClause("r.raw_material_name", bo.getItemName(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("r.material", bo.getItemMaterial(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("r.manufacturer", bo.getItemManufacturer(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("r.surface_treatment_desc", bo.getItemSurfaceTreatmentDesc(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("r.zinc_layer", bo.getItemZincLayer(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + clause = buildOrLikeClause("r.specification", bo.getItemSpecification(), existsArgs); + if (!clause.isEmpty()) existsSql.append(" AND ").append(clause); + existsSql.append(")"); + } + if (existsSql.length() > 0) { + qw.apply(existsSql.toString(), existsArgs.toArray()); + } } }