feat(wms): 新增钢卷物料查询细粒度筛选功能
- 在WmsMaterialCoilBo中增加itemName、itemMaterial等字段用于细粒度查询 - 引入WmsProduct和WmsRawMaterial相关依赖及Mapper支持 - 实现根据itemType动态关联查询产品或原材料表进行高级筛选 - 支持按材质、厂家、表面处理、锌层厚度等字段模糊匹配 - 增加异常处理机制确保筛选过程稳定性 - 优化itemId多ID查询逻辑,提升查询灵活性
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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(",");
|
||||
|
||||
Reference in New Issue
Block a user