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 materialType;
|
||||||
|
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 质量状态(0=正常,1=待检,2=不合格)
|
* 质量状态(0=正常,1=待检,2=不合格)
|
||||||
@@ -165,5 +167,14 @@ public class WmsMaterialCoilBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private String coilIds;
|
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 cn.hutool.core.bean.BeanUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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.domain.entity.SysUser;
|
||||||
import com.klp.common.core.page.TableDataInfo;
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
import com.klp.common.core.domain.PageQuery;
|
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.StringUtils;
|
||||||
import com.klp.common.utils.spring.SpringUtils;
|
import com.klp.common.utils.spring.SpringUtils;
|
||||||
import com.klp.domain.WmsDeliveryPlan;
|
import com.klp.domain.WmsDeliveryPlan;
|
||||||
|
import com.klp.domain.WmsProduct;
|
||||||
|
import com.klp.domain.WmsRawMaterial;
|
||||||
import com.klp.domain.bo.*;
|
import com.klp.domain.bo.*;
|
||||||
import com.klp.domain.vo.*;
|
import com.klp.domain.vo.*;
|
||||||
import com.klp.mapper.WmsDeliveryPlanMapper;
|
import com.klp.mapper.WmsDeliveryPlanMapper;
|
||||||
@@ -23,6 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import com.klp.domain.WmsMaterialCoil;
|
import com.klp.domain.WmsMaterialCoil;
|
||||||
import com.klp.mapper.WmsMaterialCoilMapper;
|
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||||
import com.klp.mapper.WmsStockMapper;
|
import com.klp.mapper.WmsStockMapper;
|
||||||
|
import com.klp.mapper.WmsProductMapper;
|
||||||
|
import com.klp.mapper.WmsRawMaterialMapper;
|
||||||
import com.klp.mapper.WmsGenerateRecordMapper;
|
import com.klp.mapper.WmsGenerateRecordMapper;
|
||||||
import com.klp.service.IWmsMaterialCoilService;
|
import com.klp.service.IWmsMaterialCoilService;
|
||||||
import com.klp.service.IWmsStockService;
|
import com.klp.service.IWmsStockService;
|
||||||
@@ -59,6 +64,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
|||||||
private final IWmsProductService productService;
|
private final IWmsProductService productService;
|
||||||
private final ISysUserService userService;
|
private final ISysUserService userService;
|
||||||
private final WmsDeliveryPlanMapper deliveryPlanMapper;
|
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.getStatus() != null, "mc.status", bo.getStatus());
|
||||||
qw.eq(bo.getActualWarehouseId() != null, "mc.actual_warehouse_id", bo.getActualWarehouseId());
|
qw.eq(bo.getActualWarehouseId() != null, "mc.actual_warehouse_id", bo.getActualWarehouseId());
|
||||||
qw.eq(StringUtils.isNotBlank(bo.getItemType()), "mc.item_type", bo.getItemType());
|
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查询
|
// 修改itemId筛选逻辑,支持逗号分隔的多个ID查询
|
||||||
if (StringUtils.isNotBlank(bo.getItemIds())) {
|
if (StringUtils.isNotBlank(bo.getItemIds())) {
|
||||||
String[] itemIdArray = bo.getItemIds().split(",");
|
String[] itemIdArray = bo.getItemIds().split(",");
|
||||||
|
|||||||
Reference in New Issue
Block a user