refactor(stock): 优化库存查询逻辑并调整分组策略

- 修改 XML 中的查询语句,将 CASE 表达式包裹在 MIN 函数内以适配 GROUP BY
- 显式添加 GROUP BY 子句到 SQL 查询中
- 在 Java 代码中将模糊查询优化为前缀匹配,提高索引使用效率
- 移除 QueryWrapper 中冗余的 groupBy 字段,改由 SQL 层统一控制分组逻辑
- 简化 Java 层动态条件构造,提升可读性和维护性
This commit is contained in:
2025-12-17 17:14:55 +08:00
parent 0e1f9fe113
commit eb429ad7f1
2 changed files with 36 additions and 62 deletions

View File

@@ -81,23 +81,10 @@ public class WmsStockServiceImpl implements IWmsStockService {
}
qw.eq(StringUtils.isNotBlank(bo.getItemType()), "mc.item_type", bo.getItemType());
qw.eq(bo.getItemId() != null, "mc.item_id", bo.getItemId());
qw.like(StringUtils.isNotBlank(bo.getBatchNo()), "mc.enter_coil_no", bo.getBatchNo());
// 优化模糊查询为前缀匹配,便于走索引(若有)
qw.likeRight(StringUtils.isNotBlank(bo.getBatchNo()), "mc.enter_coil_no", bo.getBatchNo());
// 使用 groupBy 进行分组
qw.groupBy(
"mc.actual_warehouse_id",
"mc.item_type",
"mc.item_id",
"w.actual_warehouse_name",
"CASE WHEN mc.item_type = 'product' THEN p.product_name WHEN mc.item_type = 'raw_material' THEN r.raw_material_name ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.product_code WHEN mc.item_type = 'raw_material' THEN r.raw_material_code ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.specification WHEN mc.item_type = 'raw_material' THEN r.specification ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.material WHEN mc.item_type = 'raw_material' THEN r.material ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.surface_treatment_desc WHEN mc.item_type = 'raw_material' THEN r.surface_treatment_desc ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.zinc_layer WHEN mc.item_type = 'raw_material' THEN r.zinc_layer ELSE NULL END",
"CASE WHEN mc.item_type = 'product' THEN p.manufacturer WHEN mc.item_type = 'raw_material' THEN r.manufacturer ELSE NULL END"
);
// 分组改由 SQL 中显式控制,避免在 Wrapper 中拼装大量分组字段
return qw;
}