diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index 7ed360e4..e7cf5004 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -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; + } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 4dda2338..cc65113d 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -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 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 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 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(",");