feat(analytics): 更新炉火实绩功能以支持详细的钢卷信息以及层级和库区信息

- 在 WmsAnnealPerformanceDetailVo 中新增逻辑库区ID、库区名称、炉火层级和钢卷列表字段
- 修改 WmsAnnealPerformanceMapper.xml 查询语句以优化性能并移除冗余字段
- 在 WmsAnnealPerformanceServiceImpl 中实现批量查询逻辑,包括钢卷关联、库区信息和钢卷详情
- 新增仓库映射器和服务依赖注入以支持数据获取
- 在 WmsMaterialCoilVo 中添加炉火层级字段以存储钢卷在炉内的层数信息
- 实现按计划ID分组处理钢卷数据并设置相应的库区和层级属性
This commit is contained in:
2026-03-16 15:58:10 +08:00
parent d8821db4b2
commit 10a28f8c62
4 changed files with 132 additions and 8 deletions

View File

@@ -346,6 +346,11 @@ public class WmsMaterialCoilVo extends BaseEntity {
*/
private Integer exclusiveStatus;
/**
* 炉火层级1=一层2=二层3=三层)
*/
private Integer furnaceLevel;
// ========== 发货绑定信息(由发货单明细占用) ==========
/**

View File

@@ -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<WmsMaterialCoilVo> coils;
}

View File

@@ -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<WmsAnnealPerformanceDetailVo> details = performanceMapper.selectDetails(bo);
if (details != null && !details.isEmpty()) {
// 收集所有计划ID
List<Long> planIds = details.stream()
.map(WmsAnnealPerformanceDetailVo::getPlanId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
if (!planIds.isEmpty()) {
// 批量查询所有计划的钢卷关联记录
List<WmsFurnacePlanCoil> allPlanCoils = planCoilMapper.selectList(
new LambdaQueryWrapper<WmsFurnacePlanCoil>()
.in(WmsFurnacePlanCoil::getPlanId, planIds)
.eq(WmsFurnacePlanCoil::getDelFlag, 0)
);
// 按planId分组
Map<Long, List<WmsFurnacePlanCoil>> planCoilsMap = allPlanCoils.stream()
.collect(Collectors.groupingBy(WmsFurnacePlanCoil::getPlanId));
// 收集所有逻辑库区ID
Set<Long> allLogicWarehouseIds = allPlanCoils.stream()
.map(WmsFurnacePlanCoil::getLogicWarehouseId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 批量查询逻辑库区名称
Map<Long, String> logicWarehouseNameMap = new HashMap<>();
if (!allLogicWarehouseIds.isEmpty()) {
List<WmsWarehouse> warehouses = warehouseMapper.selectBatchIds(allLogicWarehouseIds);
for (WmsWarehouse warehouse : warehouses) {
logicWarehouseNameMap.put(warehouse.getWarehouseId(), warehouse.getWarehouseName());
}
}
// 收集所有钢卷ID
Set<Long> allCoilIds = allPlanCoils.stream()
.map(WmsFurnacePlanCoil::getCoilId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 批量查询钢卷信息
Map<Long, WmsMaterialCoilVo> 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<WmsMaterialCoilVo> 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<WmsFurnacePlanCoil> planCoils = planCoilsMap.get(planId);
if (planCoils == null || planCoils.isEmpty()) {
continue;
}
// 为每个钢卷设置逻辑库区ID、层级和钢卷信息
List<WmsMaterialCoilVo> 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);