From 24cb6204688e5c5878dce6e62b237dd88c2961c3 Mon Sep 17 00:00:00 2001
From: linwei <872216696@qq.com>
Date: Thu, 02 Apr 2026 14:55:04 +0800
Subject: [PATCH] opt: sql改造其他模块改造9
---
drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml | 59 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml b/drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml
index c3f6a22..31c20b1 100644
--- a/drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml
+++ b/drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml
@@ -638,50 +638,54 @@
<select id="selectCockpitDevicePage" resultType="org.sxkj.fw.device.vo.CockpitFwDeviceVO">
select
- d.*,
- min(ad.id) as area_divide_id,
- min(dsm.id) as defense_scene_manage_id
+ d.*,
+ min(ad.id) as area_divide_id,
+ min(dsm.id) as defense_scene_manage_id
from
- ja_fw_device d
+ ja_fw_device d
left join ja_fw_area_divide ad
- on d.id::VARCHAR = ANY(string_to_array(ad.device_ids, ','))
- and ad.is_deleted = 0
+ /* 修改点1:统一使用 VARCHAR 匹配,去掉容易报错的 ::bigint[] */
+ on d.id::VARCHAR = ANY(string_to_array(ad.device_ids, ','))
+ and ad.is_deleted = 0
left join ja_fw_defense_scene ds
- on ad.id = ANY(string_to_array(ds.area_divide_ids, ',')::bigint[])
- and ds.is_deleted = 0
+ /* 修改点2:ad.id 是 bigint,需转 VARCHAR */
+ on ad.id::VARCHAR = ANY(string_to_array(ds.area_divide_ids, ','))
+ and ds.is_deleted = 0
left join ja_fw_defense_scene_manage dsm
- on dsm.defense_scene_id::VARCHAR = ds.id::VARCHAR
- and dsm.is_deleted = 0
+ on dsm.defense_scene_id::VARCHAR = ds.id::VARCHAR
+ and dsm.is_deleted = 0
<where>
- d.is_deleted = 0
- and d.is_enabled = 1
+ d.is_deleted = 0
+ and d.is_enabled = 1
<if test=" param2.flyTime != null">
and exists (
select 1
- from ja_fw_defense_scene ds
- join ja_fw_defense_scene_manage dsm on dsm.defense_scene_id::VARCHAR = ds.id::VARCHAR and dsm.is_deleted = 0
- where ds.is_deleted = 0
- and ds.area_divide_ids is not null
- and ds.area_divide_ids != ''
- and ad.id = ANY(string_to_array(replace(ds.area_divide_ids, ' ', ''), ',')::bigint[])
- and (dsm.effective_date_start is null or dsm.effective_date_start <= #{param2.flyTime})
- and (dsm.effective_date_end is null or dsm.effective_date_end >= #{param2.flyTime})
+ from ja_fw_defense_scene ds_sub
+ join ja_fw_defense_scene_manage dsm_sub on dsm_sub.defense_scene_id::VARCHAR = ds_sub.id::VARCHAR and dsm_sub.is_deleted = 0
+ where ds_sub.is_deleted = 0
+ and ds_sub.area_divide_ids is not null
+ and ds_sub.area_divide_ids != ''
+ /* 修改点3:子查询中的 ad.id 同样需要转 VARCHAR */
+ and ad.id::VARCHAR = ANY(string_to_array(replace(ds_sub.area_divide_ids, ' ', ''), ','))
+ /* 修改点4:日期/时间参数建议显式强转,视数据库类型决定 ::bigint 或 ::timestamp */
+ and (dsm_sub.effective_date_start is null or dsm_sub.effective_date_start <= #{param2.flyTime})
+ and (dsm_sub.effective_date_end is null or dsm_sub.effective_date_end >= #{param2.flyTime})
)
</if>
<if test="param2.regionCode != null and param2.regionCode != ''">
and (d.final_outbound_area_code like concat(#{param2.regionCode},'%')
- <!-- 或者设备是共享给当前部门的 -->
<if test="param2.currentDeptId != null and param2.currentDeptId != '' ">
or d.id in (
SELECT device_id FROM ja_fw_device_per_share
- WHERE loan_to_dept_id = #{param2.currentDeptId}
+ /* 修改点5:loan_to_dept_id 如果是数字,参数需转 bigint */
+ WHERE loan_to_dept_id = #{param2.currentDeptId}::bigint
AND is_deleted = 0
)
</if>
)
</if>
<if test="param2.id != null and param2.id != ''">
- and d.id = #{param2.id}
+ and d.id = #{param2.id}::bigint
</if>
<if test="param2.deviceName != null and param2.deviceName != ''">
and d.device_name like concat('%',#{param2.deviceName},'%')
@@ -709,24 +713,23 @@
<foreach collection="param2.deptList" item="deptId" open="(" separator="," close=")">
#{deptId}
</foreach>
- <!-- 或者设备是共享给当前部门的 -->
<if test="param2.currentDeptId != null and param2.currentDeptId != '' ">
or d.id in (
SELECT device_id FROM ja_fw_device_per_share
- WHERE loan_to_dept_id = #{param2.currentDeptId}
+ WHERE loan_to_dept_id = #{param2.currentDeptId}::bigint
AND is_deleted = 0
)
</if>
)
</if>
- <if test="param2.deviceStatusList != null and param2.deviceStatusList != ''">
+ <if test="param2.deviceStatusList != null and param2.deviceStatusList.size > 0">
and d.status in
<foreach item="item" collection="param2.deviceStatusList" separator="," open="(" close=")" index="">
- #{item}
+ #{item}::varchar
</foreach>
</if>
</where>
- group by d.id
+ group by d.id
</select>
<update id="updateTrackStatusByDeviceId">
--
Gitblit v1.9.3