perf: 优化已装轮胎查询排除报废逻辑

master
zch 6 days ago
parent 10c6f7c111
commit 5ddbcd7e8e

@ -58,6 +58,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectMountedTyres" parameterType="CarLifecycleQuery" resultType="CarMountedTyreDTO">
with mounted_tyre as (
select bt.tyre_id,
bt.tyre_no,
bt.self_no,
bt.tyre_epc,
bt.tyre_brand,
bt.tyre_model,
bt.wheel_postion
from base_tyre bt
where bt.car_no = #{carNo}
<!-- 先把当前车辆候选胎收缩到最小集合,后续花纹/报废判断都围绕这个小集合计算。 -->
and (bt.tyre_type is null or bt.tyre_type not in ('scrap', '报废'))
),
latest_mileage as (
select tyre_rfid, pattern_depth
from (
select rtm.tyre_rfid,
rtm.pattern_depth,
row_number() over (partition by rtm.tyre_rfid order by rtm.create_time desc, rtm.id desc) as rn
from record_tyre_mileage rtm
inner join mounted_tyre mt on mt.tyre_epc = rtm.tyre_rfid
where rtm.pattern_depth is not null
and rtm.pattern_depth &lt;&gt; ''
) ranked
where rn = 1
),
scrapped_tyre as (
select scrap_detail.tire_id
from biz_order_tire_detail scrap_detail
inner join mounted_tyre mt on mt.tyre_id = scrap_detail.tire_id
inner join biz_maintenance_order scrap_order on scrap_order.order_id = scrap_detail.order_id
where scrap_detail.tire_status = '报废'
and scrap_order.type_code = '7'
and scrap_order.status = 'COMPLETED'
group by scrap_detail.tire_id
)
select bt.tyre_id as tyreId,
bt.tyre_no as tyreNo,
bt.self_no as selfNo,
@ -66,19 +102,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bt.tyre_model as tyreModel,
bt.wheel_postion as wheelPostion,
maint.pattern_depth as patternDepth
from base_tyre bt
left join (
select tyre_rfid, pattern_depth
from (
select tyre_rfid, pattern_depth,
row_number() over (partition by tyre_rfid order by create_time desc, id desc) as rn
from record_tyre_mileage
where pattern_depth is not null
and pattern_depth &lt;&gt; ''
) ranked
where rn = 1
) maint on maint.tyre_rfid = bt.tyre_epc
where bt.car_no = #{carNo}
from mounted_tyre bt
left join latest_mileage maint on maint.tyre_rfid = bt.tyre_epc
left join scrapped_tyre on scrapped_tyre.tire_id = bt.tyre_id
<!-- 报废集合已限定为当前车辆候选胎,反连接只需判空,不再逐轮位扫描报废明细。 -->
where scrapped_tyre.tire_id is null
order by bt.wheel_postion, bt.tyre_id
</select>

Loading…
Cancel
Save