From 10a28f8c62af555299084f93773bd5645e8de65e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 16 Mar 2026 15:58:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(analytics):=20=E6=9B=B4=E6=96=B0=E7=82=89?= =?UTF-8?q?=E7=81=AB=E5=AE=9E=E7=BB=A9=E5=8A=9F=E8=83=BD=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=AF=A6=E7=BB=86=E7=9A=84=E9=92=A2=E5=8D=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BB=A5=E5=8F=8A=E5=B1=82=E7=BA=A7=E5=92=8C=E5=BA=93?= =?UTF-8?q?=E5=8C=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 WmsAnnealPerformanceDetailVo 中新增逻辑库区ID、库区名称、炉火层级和钢卷列表字段 - 修改 WmsAnnealPerformanceMapper.xml 查询语句以优化性能并移除冗余字段 - 在 WmsAnnealPerformanceServiceImpl 中实现批量查询逻辑,包括钢卷关联、库区信息和钢卷详情 - 新增仓库映射器和服务依赖注入以支持数据获取 - 在 WmsMaterialCoilVo 中添加炉火层级字段以存储钢卷在炉内的层数信息 - 实现按计划ID分组处理钢卷数据并设置相应的库区和层级属性 --- .../com/klp/domain/vo/WmsMaterialCoilVo.java | 5 + .../anneal/WmsAnnealPerformanceDetailVo.java | 10 ++ .../impl/WmsAnnealPerformanceServiceImpl.java | 116 +++++++++++++++++- .../mapper/WmsAnnealPerformanceMapper.xml | 9 +- 4 files changed, 132 insertions(+), 8 deletions(-) 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