diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java index 5b6d58f6..f25a673b 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilVo.java @@ -346,6 +346,11 @@ public class WmsMaterialCoilVo extends BaseEntity { */ private Integer exclusiveStatus; + /** + * 炉火层级(1=一层,2=二层,3=三层) + */ + private Integer furnaceLevel; + // ========== 发货绑定信息(由发货单明细占用) ========== /** diff --git a/klp-wms/src/main/java/com/klp/domain/vo/anneal/WmsAnnealPerformanceDetailVo.java b/klp-wms/src/main/java/com/klp/domain/vo/anneal/WmsAnnealPerformanceDetailVo.java index 82f8e4d6..cc2ecd09 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/anneal/WmsAnnealPerformanceDetailVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/anneal/WmsAnnealPerformanceDetailVo.java @@ -1,9 +1,11 @@ package com.klp.domain.vo.anneal; +import com.klp.domain.vo.WmsMaterialCoilVo; import lombok.Data; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * 炉火实绩明细视图对象 @@ -33,4 +35,12 @@ public class WmsAnnealPerformanceDetailVo { private String currentCoilNo; private BigDecimal netWeight; + + private Long logicWarehouseId; + + private String logicWarehouseName; + + private Integer furnaceLevel; + + private List coils; } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java index 293c15c0..1fce3cd8 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAnnealPerformanceServiceImpl.java @@ -1,15 +1,28 @@ package com.klp.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.page.TableDataInfo; import com.klp.domain.bo.WmsAnnealPerformanceBo; +import com.klp.domain.bo.WmsMaterialCoilBo; +import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceDetailVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceSummaryVo; import com.klp.domain.vo.anneal.WmsAnnealPerformanceVo; +import com.klp.domain.WmsFurnacePlanCoil; +import com.klp.domain.WmsWarehouse; import com.klp.mapper.WmsAnnealPerformanceMapper; +import com.klp.mapper.WmsFurnacePlanCoilMapper; +import com.klp.mapper.WmsWarehouseMapper; import com.klp.service.IWmsAnnealPerformanceService; +import com.klp.service.IWmsMaterialCoilService; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 炉火实绩Service业务层处理 @@ -22,11 +35,112 @@ import java.util.List; public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceService { private final WmsAnnealPerformanceMapper performanceMapper; + private final WmsFurnacePlanCoilMapper planCoilMapper; + private final WmsWarehouseMapper warehouseMapper; + private final IWmsMaterialCoilService materialCoilService; @Override public WmsAnnealPerformanceVo queryPerformance(WmsAnnealPerformanceBo bo) { WmsAnnealPerformanceSummaryVo summary = performanceMapper.selectSummary(bo); List details = performanceMapper.selectDetails(bo); + + if (details != null && !details.isEmpty()) { + // 收集所有计划ID + List planIds = details.stream() + .map(WmsAnnealPerformanceDetailVo::getPlanId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + if (!planIds.isEmpty()) { + // 批量查询所有计划的钢卷关联记录 + List allPlanCoils = planCoilMapper.selectList( + new LambdaQueryWrapper() + .in(WmsFurnacePlanCoil::getPlanId, planIds) + .eq(WmsFurnacePlanCoil::getDelFlag, 0) + ); + + // 按planId分组 + Map> planCoilsMap = allPlanCoils.stream() + .collect(Collectors.groupingBy(WmsFurnacePlanCoil::getPlanId)); + + // 收集所有逻辑库区ID + Set allLogicWarehouseIds = allPlanCoils.stream() + .map(WmsFurnacePlanCoil::getLogicWarehouseId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + // 批量查询逻辑库区名称 + Map logicWarehouseNameMap = new HashMap<>(); + if (!allLogicWarehouseIds.isEmpty()) { + List warehouses = warehouseMapper.selectBatchIds(allLogicWarehouseIds); + for (WmsWarehouse warehouse : warehouses) { + logicWarehouseNameMap.put(warehouse.getWarehouseId(), warehouse.getWarehouseName()); + } + } + + // 收集所有钢卷ID + Set allCoilIds = allPlanCoils.stream() + .map(WmsFurnacePlanCoil::getCoilId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + // 批量查询钢卷信息 + Map coilVoMap = new HashMap<>(); + if (!allCoilIds.isEmpty()) { + WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo(); + coilBo.setCoilIds(allCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(1); + pageQuery.setPageSize(Integer.MAX_VALUE); + TableDataInfo coilPage = materialCoilService.queryPageList(coilBo, pageQuery); + if (coilPage != null && coilPage.getRows() != null) { + for (WmsMaterialCoilVo coilVo : coilPage.getRows()) { + if (coilVo.getCoilId() != null) { + coilVoMap.put(coilVo.getCoilId(), coilVo); + } + } + } + } + + // 处理每个计划 + for (WmsAnnealPerformanceDetailVo detail : details) { + Long planId = detail.getPlanId(); + List planCoils = planCoilsMap.get(planId); + + if (planCoils == null || planCoils.isEmpty()) { + continue; + } + + // 为每个钢卷设置逻辑库区ID、层级和钢卷信息 + List coilVos = new ArrayList<>(); + for (WmsFurnacePlanCoil planCoil : planCoils) { + Long coilId = planCoil.getCoilId(); + if (coilId == null) { + continue; + } + + WmsMaterialCoilVo coilVo = coilVoMap.get(coilId); + if (coilVo == null) { + coilVo = new WmsMaterialCoilVo(); + coilVo.setCoilId(coilId); + } + + // 设置逻辑库区ID和层级(每个钢卷可能不同) + if (planCoil.getLogicWarehouseId() != null) { + coilVo.setWarehouseId(planCoil.getLogicWarehouseId()); + coilVo.setWarehouseName(logicWarehouseNameMap.get(planCoil.getLogicWarehouseId())); + } + // 设置炉火层级 + coilVo.setFurnaceLevel(planCoil.getFurnaceLevel()); + + coilVos.add(coilVo); + } + detail.setCoils(coilVos); + } + } + } + WmsAnnealPerformanceVo vo = new WmsAnnealPerformanceVo(); vo.setSummary(summary); vo.setDetails(details); diff --git a/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml b/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml index 6e490b79..9a08eff7 100644 --- a/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml +++ b/klp-wms/src/main/resources/mapper/WmsAnnealPerformanceMapper.xml @@ -39,16 +39,11 @@ p.target_furnace_id AS targetFurnaceId, f.furnace_name AS targetFurnaceName, p.actual_start_time AS actualStartTime, - p.end_time AS endTime, - mc.coil_id AS coilId, - mc.enter_coil_no AS enterCoilNo, - mc.current_coil_no AS currentCoilNo, - mc.net_weight AS netWeight + p.end_time AS endTime FROM wms_furnace_plan p - INNER JOIN wms_furnace_plan_coil pc ON pc.plan_id = p.plan_id AND pc.del_flag = 0 - INNER JOIN wms_material_coil mc ON mc.coil_id = pc.coil_id AND mc.del_flag = 0 LEFT JOIN wms_furnace f ON f.furnace_id = p.target_furnace_id + GROUP BY p.plan_id, p.plan_no, p.target_furnace_id, f.furnace_name, p.actual_start_time, p.end_time ORDER BY p.actual_start_time DESC, p.plan_no DESC