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