refactor(WmsMaterialCoilService): 优化材料卷查询逻辑
- 简化selectType条件判断逻辑,提前设置item_type过滤条件 - 调整EXISTS子查询结构,提高SQL执行效率 - 保持原有的产品和原材料筛选功能不变 - 修复原代码中的逻辑嵌套问题
This commit is contained in:
@@ -412,44 +412,47 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
}
|
||||
|
||||
// 使用 EXISTS 针对 selectType 的细粒度筛选(使用参数占位符防注入)
|
||||
if (hasSelectType && hasAnyItemFilter) {
|
||||
StringBuilder existsSql = new StringBuilder();
|
||||
List<Object> 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<Object> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user