feat(wms): 添加退火性能查询中的双重库区筛选功能
- 在 WmsAnnealPerformanceBo 中新增 coilWarehouseId 字段用于钢卷本身库区筛选 - 更新数据库查询映射,支持出炉时逻辑库区和钢卷本身库区的分别筛选 - 修改服务实现逻辑,区分出炉时逻辑库区和钢卷本身库区的数据处理 - 优化查询条件判断,支持多种筛选条件组合的统计信息重新计算
This commit is contained in:
@@ -35,6 +35,9 @@ public class WmsAnnealPerformanceBo {
|
||||
// 当前钢卷号
|
||||
private String currentCoilNo;
|
||||
|
||||
// 逻辑库区id
|
||||
// 逻辑库区id(出炉时的逻辑库区,对应wms_furnace_plan_coil.logic_warehouse_id)
|
||||
private Long warehouseId;
|
||||
|
||||
// 钢卷所在库区id(钢卷本身的逻辑库区,对应wms_material_coil.warehouse_id)
|
||||
private Long coilWarehouseId;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,16 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
||||
continue;
|
||||
}
|
||||
|
||||
// 为每个钢卷设置逻辑库区ID、层级和钢卷信息
|
||||
// 设置出炉时的逻辑库区到detail级别(取第一个非空的logicWarehouseId)
|
||||
for (WmsFurnacePlanCoil planCoil : planCoils) {
|
||||
if (planCoil.getLogicWarehouseId() != null) {
|
||||
detail.setLogicWarehouseId(planCoil.getLogicWarehouseId());
|
||||
detail.setLogicWarehouseName(logicWarehouseNameMap.get(planCoil.getLogicWarehouseId()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 为每个钢卷设置炉火层级和钢卷信息(不覆盖钢卷本身的逻辑库区)
|
||||
List<WmsMaterialCoilVo> coilVos = new ArrayList<>();
|
||||
for (WmsFurnacePlanCoil planCoil : planCoils) {
|
||||
Long coilId = planCoil.getCoilId();
|
||||
@@ -132,11 +141,8 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
||||
coilVo.setCoilId(coilId);
|
||||
}
|
||||
|
||||
// 设置逻辑库区ID和层级(每个钢卷可能不同)
|
||||
if (planCoil.getLogicWarehouseId() != null) {
|
||||
coilVo.setWarehouseId(planCoil.getLogicWarehouseId());
|
||||
coilVo.setWarehouseName(logicWarehouseNameMap.get(planCoil.getLogicWarehouseId()));
|
||||
}
|
||||
// 保持钢卷本身的warehouseId/warehouseName不变,不覆盖
|
||||
|
||||
// 设置炉火层级
|
||||
coilVo.setFurnaceLevel(planCoil.getFurnaceLevel());
|
||||
|
||||
@@ -153,9 +159,10 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
||||
continue; // 跳过不匹配的钢卷
|
||||
}
|
||||
}
|
||||
if (bo.getWarehouseId() != null) {
|
||||
// 钢卷本身的逻辑库区筛选(coilVo.warehouseId保持不变)
|
||||
if (bo.getCoilWarehouseId() != null) {
|
||||
if (coilVo.getWarehouseId() == null ||
|
||||
!coilVo.getWarehouseId().equals(bo.getWarehouseId())) {
|
||||
!coilVo.getWarehouseId().equals(bo.getCoilWarehouseId())) {
|
||||
continue; // 跳过不匹配的钢卷
|
||||
}
|
||||
}
|
||||
@@ -178,8 +185,11 @@ public class WmsAnnealPerformanceServiceImpl implements IWmsAnnealPerformanceSer
|
||||
// 移除没有钢卷的计划
|
||||
details.removeIf(detail -> detail.getCoils() == null || detail.getCoils().isEmpty());
|
||||
|
||||
// 如果传入了enterCoilNo筛选条件,重新计算统计信息
|
||||
if (bo.getEnterCoilNo() != null && !bo.getEnterCoilNo().isEmpty()) {
|
||||
// 如果传入了筛选条件,重新计算统计信息
|
||||
if ((bo.getEnterCoilNo() != null && !bo.getEnterCoilNo().isEmpty())
|
||||
|| (bo.getCurrentCoilNo() != null && !bo.getCurrentCoilNo().isEmpty())
|
||||
|| bo.getWarehouseId() != null
|
||||
|| bo.getCoilWarehouseId() != null) {
|
||||
summary.setPlanCount(filteredPlanCount);
|
||||
summary.setCoilCount(filteredCoilCount);
|
||||
summary.setTotalWeight(filteredTotalWeight);
|
||||
|
||||
@@ -20,12 +20,17 @@
|
||||
<if test="enterCoilNo != null and enterCoilNo != ''">
|
||||
AND mc.enter_coil_no LIKE CONCAT('%', #{enterCoilNo}, '%')
|
||||
</if>
|
||||
<!-- 当前钢卷号和逻辑库区id匹配 -->
|
||||
<!-- 当前钢卷号匹配 -->
|
||||
<if test="currentCoilNo != null and currentCoilNo != ''">
|
||||
AND mc.current_coil_no LIKE CONCAT('%', #{currentCoilNo}, '%')
|
||||
</if>
|
||||
<!-- 出炉时的逻辑库区筛选(wms_furnace_plan_coil.logic_warehouse_id) -->
|
||||
<if test="warehouseId != null">
|
||||
AND mc.warehouse_id = #{warehouseId}
|
||||
AND pc.logic_warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
<!-- 钢卷本身的逻辑库区筛选(wms_material_coil.warehouse_id) -->
|
||||
<if test="coilWarehouseId != null">
|
||||
AND mc.warehouse_id = #{coilWarehouseId}
|
||||
</if>
|
||||
</where>
|
||||
</sql>
|
||||
@@ -49,7 +54,7 @@
|
||||
p.end_time AS endTime
|
||||
FROM wms_furnace_plan p
|
||||
LEFT JOIN wms_furnace f ON f.furnace_id = p.target_furnace_id
|
||||
<if test="enterCoilNo != null and enterCoilNo != '' or currentCoilNo != null and currentCoilNo != '' or warehouseId != null">
|
||||
<if test="enterCoilNo != null and enterCoilNo != '' or currentCoilNo != null and currentCoilNo != '' or warehouseId != null or coilWarehouseId != null">
|
||||
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
|
||||
</if>
|
||||
|
||||
Reference in New Issue
Block a user