feat(wms): 新增钢卷物料查询细粒度筛选功能

- 在WmsMaterialCoilBo中增加itemName、itemMaterial等字段用于细粒度查询
- 引入WmsProduct和WmsRawMaterial相关依赖及Mapper支持
- 实现根据itemType动态关联查询产品或原材料表进行高级筛选
- 支持按材质、厂家、表面处理、锌层厚度等字段模糊匹配
- 增加异常处理机制确保筛选过程稳定性
- 优化itemId多ID查询逻辑,提升查询灵活性
This commit is contained in:
2025-12-09 16:11:28 +08:00
parent d4e882610b
commit 5c71471f98
2 changed files with 94 additions and 0 deletions

View File

@@ -134,6 +134,8 @@ public class WmsMaterialCoilBo extends BaseEntity {
//材料类型
private String materialType;
private String itemName;
/**
* 质量状态0=正常1=待检2=不合格)
@@ -165,5 +167,14 @@ public class WmsMaterialCoilBo extends BaseEntity {
*/
private String coilIds;
// 材质两表通用字段名product.material / raw_material.material
private String itemMaterial;
// 厂家两表通用字段名product.manufacturer / raw_material.manufacturer
private String itemManufacturer;
// 表面处理详情两表通用字段名surface_treatment_desc
private String itemSurfaceTreatmentDesc;
// 锌层厚度两表通用字段名zinc_layer
private String itemZincLayer;
}

View File

@@ -2,6 +2,7 @@ package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.esotericsoftware.minlog.Log;
import com.klp.common.core.domain.entity.SysUser;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
@@ -13,6 +14,8 @@ import com.klp.common.helper.LoginHelper;
import com.klp.common.utils.StringUtils;
import com.klp.common.utils.spring.SpringUtils;
import com.klp.domain.WmsDeliveryPlan;
import com.klp.domain.WmsProduct;
import com.klp.domain.WmsRawMaterial;
import com.klp.domain.bo.*;
import com.klp.domain.vo.*;
import com.klp.mapper.WmsDeliveryPlanMapper;
@@ -23,6 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsMaterialCoilMapper;
import com.klp.mapper.WmsStockMapper;
import com.klp.mapper.WmsProductMapper;
import com.klp.mapper.WmsRawMaterialMapper;
import com.klp.mapper.WmsGenerateRecordMapper;
import com.klp.service.IWmsMaterialCoilService;
import com.klp.service.IWmsStockService;
@@ -59,6 +64,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
private final IWmsProductService productService;
private final ISysUserService userService;
private final WmsDeliveryPlanMapper deliveryPlanMapper;
private final WmsProductMapper productMapper;
private final WmsRawMaterialMapper rawMaterialMapper;
/**
* 查询钢卷物料表
@@ -330,6 +337,82 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
qw.eq(bo.getStatus() != null, "mc.status", bo.getStatus());
qw.eq(bo.getActualWarehouseId() != null, "mc.actual_warehouse_id", bo.getActualWarehouseId());
qw.eq(StringUtils.isNotBlank(bo.getItemType()), "mc.item_type", bo.getItemType());
// 按 itemType + 细粒度字段筛选(若对应字段非空则拼接条件;为空则不拼)
if (StringUtils.isNotBlank(bo.getItemType())) {
List<Long> matchedItemIds = new ArrayList<>();
boolean hasAnyItemFilter = StringUtils.isNotBlank(bo.getItemMaterial())
|| StringUtils.isNotBlank(bo.getItemManufacturer())
|| StringUtils.isNotBlank(bo.getItemSurfaceTreatmentDesc())
|| StringUtils.isNotBlank(bo.getItemZincLayer())
|| StringUtils.isNotBlank(bo.getItemName()); // 兼容性关键字
if (hasAnyItemFilter) {
try {
if ("product".equals(bo.getItemType())) {
QueryWrapper<WmsProduct> 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());
}
// 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.getItemType())) {
QueryWrapper<WmsRawMaterial> 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());
}
// 流式提取rawMaterialId过滤null
matchedItemIds = rawMaterialMapper.selectList(rq).stream()
.map(WmsRawMaterial::getRawMaterialId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
} catch (Exception e) {
// 异常时强制返回空结果,避免查询报错
Log.error("筛选产品/原材料ID失败", e);
matchedItemIds = Collections.emptyList();
}
if (matchedItemIds.isEmpty()) {
// 强制无结果
qw.apply("1 = 0");
return qw;
} else {
// 1. 先排除item_id为null的钢卷若业务需要
qw.isNotNull("mc.item_id");
qw.in("mc.item_id", matchedItemIds);
}
}
}
// 修改itemId筛选逻辑支持逗号分隔的多个ID查询
if (StringUtils.isNotBlank(bo.getItemIds())) {
String[] itemIdArray = bo.getItemIds().split(",");