From 9e03dbe9defe85e8aeb335354ba89dcb7d9e52ef Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 27 Apr 2026 13:23:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wms):=20=E4=BC=98=E5=8C=96=E7=82=89?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E9=92=A2=E5=8D=B7=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 WmsFurnacePlanCoilVo 中的实际库位相关字段 - 添加 WmsMaterialCoilVo 类型的 coil 字段用于存储钢卷完整信息 - 将查询逻辑重构为分步骤处理:查询计划钢卷、批量获取钢卷信息、构建库区映射、填充数据 - 使用 WmsMaterialCoilVo 替代 WmsMaterialCoil 进行数据传输 - 新增 buildLogicWarehouseNameMap 和 fillCoilInfo 辅助方法提升代码可读性 - 通过批量查询减少数据库访问次数,提升查询性能 --- .../klp/domain/vo/WmsFurnacePlanCoilVo.java | 8 +- .../impl/WmsFurnacePlanServiceImpl.java | 116 ++++++++++-------- 2 files changed, 70 insertions(+), 54 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java index 71bd7617..d313c176 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsFurnacePlanCoilVo.java @@ -37,12 +37,10 @@ public class WmsFurnacePlanCoilVo { @ExcelProperty(value = "入场钢卷号") private String enterCoilNo; - @ExcelProperty(value = "实际库位ID") - private Long actualWarehouseId; - - @ExcelProperty(value = "实际库位") - private String actualWarehouseName; @ExcelProperty(value = "创建时间") private Date createTime; + + // 钢卷全部信息 + private WmsMaterialCoilVo coil; } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java index dfae3d67..c754bf05 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsFurnacePlanServiceImpl.java @@ -15,6 +15,7 @@ import com.klp.domain.bo.WmsFurnacePlanCoilBo; import com.klp.domain.bo.WmsMaterialCoilBo; import com.klp.domain.vo.WmsFurnacePlanCoilVo; import com.klp.domain.vo.WmsFurnacePlanVo; +import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.mapper.*; import com.klp.service.IWmsFurnacePlanService; import com.klp.service.IWmsMaterialCoilService; @@ -23,10 +24,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -176,59 +174,79 @@ public class WmsFurnacePlanServiceImpl implements IWmsFurnacePlanService { @Override public List queryPlanCoils(Long planId) { - List list = planCoilMapper.selectVoList(Wrappers.lambdaQuery() - .eq(WmsFurnacePlanCoil::getPlanId, planId)); - if (list == null || list.isEmpty()) { - return list; + // 1. 查询计划钢卷关联记录 + List planCoils = planCoilMapper.selectVoList( + Wrappers.lambdaQuery() + .eq(WmsFurnacePlanCoil::getPlanId, planId) + ); + if (planCoils == null || planCoils.isEmpty()) { + return planCoils; } - List coilIds = list.stream() + + // 2. 收集钢卷ID并批量查询钢卷信息 + List coilIds = planCoils.stream() .map(WmsFurnacePlanCoilVo::getCoilId) - .filter(id -> id != null) + .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); if (coilIds.isEmpty()) { - return list; + return planCoils; } - List materialCoils = materialCoilMapper.selectBatchIds(coilIds); - java.util.Map coilMap = materialCoils.stream() - .collect(Collectors.toMap(WmsMaterialCoil::getCoilId, item -> item, (a, b) -> a)); - List actualWarehouseIds = materialCoils.stream() - .map(WmsMaterialCoil::getActualWarehouseId) - .filter(id -> id != null) - .distinct() - .collect(Collectors.toList()); - java.util.Map warehouseMap = actualWarehouseIds.isEmpty() - ? java.util.Collections.emptyMap() - : actualWarehouseMapper.selectBatchIds(actualWarehouseIds).stream() - .collect(Collectors.toMap(WmsActualWarehouse::getActualWarehouseId, - WmsActualWarehouse::getActualWarehouseName, (a, b) -> a)); - // 查询逻辑库区信息 - List logicWarehouseIds = list.stream() - .map(WmsFurnacePlanCoilVo::getLogicWarehouseId) - .filter(id -> id != null) - .distinct() - .collect(Collectors.toList()); - java.util.Map logicWarehouseMap = logicWarehouseIds.isEmpty() - ? java.util.Collections.emptyMap() - : warehouseMapper.selectBatchIds(logicWarehouseIds).stream() - .collect(Collectors.toMap(WmsWarehouse::getWarehouseId, - WmsWarehouse::getWarehouseName, (a, b) -> a)); + String coilIdsStr = coilIds.stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo(); + coilBo.setCoilIds(coilIdsStr); + List materialCoils = materialCoilService.queryList(coilBo); + Map coilMap = materialCoils.stream() + .collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, item -> item, (a, b) -> a)); - list.forEach(item -> { - WmsMaterialCoil coil = coilMap.get(item.getCoilId()); - if (coil != null) { - item.setEnterCoilNo(coil.getEnterCoilNo()); - item.setActualWarehouseId(coil.getActualWarehouseId()); - item.setActualWarehouseName(warehouseMap.get(coil.getActualWarehouseId())); - } - // 设置逻辑库区名称 - if (item.getLogicWarehouseId() != null) { - item.setLogicWarehouseId(item.getLogicWarehouseId()); - item.setLogicWarehouseName(logicWarehouseMap.get(item.getLogicWarehouseId())); - } - }); - return list; + // 3. 批量查询逻辑库区名称 + Map logicWarehouseMap = buildLogicWarehouseNameMap( + planCoils.stream() + .map(WmsFurnacePlanCoilVo::getLogicWarehouseId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()) + ); + + // 4. 填充钢卷信息 + planCoils.forEach(planCoil -> fillCoilInfo(planCoil, coilMap, logicWarehouseMap)); + + return planCoils; + } + + /** + * 构建逻辑库区ID到名称的映射 + */ + private Map buildLogicWarehouseNameMap(List warehouseIds) { + if (warehouseIds.isEmpty()) { + return Collections.emptyMap(); + } + return warehouseMapper.selectBatchIds(warehouseIds).stream() + .collect(Collectors.toMap(WmsWarehouse::getWarehouseId, + WmsWarehouse::getWarehouseName, (a, b) -> a)); + } + + /** + * 填充钢卷信息 + */ + private void fillCoilInfo( + WmsFurnacePlanCoilVo planCoil, + Map coilMap, + Map logicWarehouseMap) { + // 填充钢卷基本信息(实际库区名称已在钢卷信息中) + WmsMaterialCoilVo coil = coilMap.get(planCoil.getCoilId()); + if (coil != null) { + planCoil.setEnterCoilNo(coil.getEnterCoilNo()); + planCoil.setCoil(coil); + } + + // 填充逻辑库区名称 + if (planCoil.getLogicWarehouseId() != null) { + planCoil.setLogicWarehouseName(logicWarehouseMap.get(planCoil.getLogicWarehouseId())); + } } @Override