refactor(wms): 优化物料卷管理逻辑

- 移除重复的原材料和产品字段映射
- 使用 CASE 表达式统一处理不同类型的物料属性
- 简化 Java 服务层中的物料对象构建逻辑
- 删除冗余的 fillItemObject 方法
- 统一通过 itemType 判断设置对应物料信息
This commit is contained in:
2025-11-18 10:42:05 +08:00
parent ed80b11007
commit a3b8a74430
2 changed files with 48 additions and 88 deletions

View File

@@ -371,67 +371,31 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
}
// 构建原材料对象
if ("raw_material".equals(vo.getItemType()) && vo.getRawMaterialId() != null) {
if ("raw_material".equals(vo.getItemType())) {
WmsRawMaterialVo rawMaterial = new WmsRawMaterialVo();
rawMaterial.setRawMaterialId(vo.getRawMaterialId());
rawMaterial.setRawMaterialCode(vo.getRawMaterialCode());
rawMaterial.setRawMaterialName(vo.getRawMaterialName());
rawMaterial.setSpecification(vo.getRawMaterialSpecification());
rawMaterial.setSteelGrade(vo.getRawMaterialSteelGrade());
rawMaterial.setThickness(vo.getRawMaterialThickness());
rawMaterial.setWidth(vo.getRawMaterialWidth());
rawMaterial.setBomId(vo.getRawMaterialBomId());
rawMaterial.setRawMaterialId(vo.getItemId());
rawMaterial.setRawMaterialCode(vo.getItemCode());
rawMaterial.setRawMaterialName(vo.getItemName());
rawMaterial.setSpecification(vo.getSpecification());
rawMaterial.setMaterial(vo.getMaterial());
rawMaterial.setManufacturer(vo.getManufacturer());
rawMaterial.setSurfaceTreatmentDesc(vo.getSurfaceTreatmentDesc());
rawMaterial.setZincLayer(vo.getZincLayer());
vo.setRawMaterial(rawMaterial);
}
// 构建产品对象
if ("product".equals(vo.getItemType()) && vo.getProductId() != null) {
WmsProductVo product = new WmsProductVo();
product.setProductId(vo.getProductId());
product.setProductCode(vo.getProductCode());
product.setProductName(vo.getProductName());
product.setSpecification(vo.getProductSpecification());
product.setThickness(vo.getProductThickness());
product.setWidth(vo.getProductWidth());
product.setBomId(vo.getProductBomId());
vo.setProduct(product);
}
}
/**
* 填充物品对象(产品或原材料)- 保留作为备用方法
*/
private void fillItemObject(WmsMaterialCoilVo vo) {
if (vo.getItemId() == null || vo.getItemType() == null) {
return;
}
// 查询原材料信息
if ("raw_material".equals(vo.getItemType())) {
WmsRawMaterialVo rawMaterial = rawMaterialService.queryById(vo.getItemId());
vo.setRawMaterial(rawMaterial);
// 查询原材料对应的BOM信息
if (rawMaterial != null && rawMaterial.getBomId() != null) {
WmsBomItemBo bomItemBo = new WmsBomItemBo();
bomItemBo.setBomId(rawMaterial.getBomId());
List<WmsBomItemVo> bomItemList = bomItemService.queryList(bomItemBo);
vo.setBomItemList(bomItemList);
}
}
// 查询产品信息
if ("product".equals(vo.getItemType())) {
WmsProductVo product = productService.queryById(vo.getItemId());
WmsProductVo product = new WmsProductVo();
product.setProductId(vo.getItemId());
product.setProductCode(vo.getItemCode());
product.setProductName(vo.getItemName());
product.setSpecification(vo.getSpecification());
product.setMaterial(vo.getMaterial());
product.setManufacturer(vo.getManufacturer());
product.setSurfaceTreatmentDesc(vo.getSurfaceTreatmentDesc());
product.setZincLayer(vo.getZincLayer());
vo.setProduct(product);
// 查询产品对应的BOM信息
if (product != null && product.getBomId() != null) {
WmsBomItemBo bomItemBo = new WmsBomItemBo();
bomItemBo.setBomId(product.getBomId());
List<WmsBomItemVo> bomItemList = bomItemService.queryList(bomItemBo);
vo.setBomItemList(bomItemList);
}
}
}

View File

@@ -95,23 +95,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
mc.packing_status,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
-- 原材料字段
rm.raw_material_id AS rawMaterialId,
rm.raw_material_code AS rawMaterialCode,
rm.raw_material_name AS rawMaterialName,
rm.specification AS rawMaterialSpecification,
rm.steel_grade AS rawMaterialSteelGrade,
rm.thickness AS rawMaterialThickness,
rm.width AS rawMaterialWidth,
rm.bom_id AS rawMaterialBomId,
-- 产品字段
p.product_id AS productId,
p.product_code AS productCode,
p.product_name AS productName,
p.specification AS productSpecification,
p.thickness AS productThickness,
p.width AS productWidth,
p.bom_id AS productBomId,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
-- 物品名称和编号(用于兼容)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
@@ -198,23 +196,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT mc.*,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
-- 原材料字段
rm.raw_material_id AS rawMaterialId,
rm.raw_material_code AS rawMaterialCode,
rm.raw_material_name AS rawMaterialName,
rm.specification AS rawMaterialSpecification,
rm.steel_grade AS rawMaterialSteelGrade,
rm.thickness AS rawMaterialThickness,
rm.width AS rawMaterialWidth,
rm.bom_id AS rawMaterialBomId,
-- 产品字段
p.product_id AS productId,
p.product_code AS productCode,
p.product_name AS productName,
p.specification AS productSpecification,
p.thickness AS productThickness,
p.width AS productWidth,
p.bom_id AS productBomId,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
-- 物品名称和编号(用于兼容)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name