吉安感知网项目-后端
linwei
2026-04-07 ceb8e68df3012e9b621219c28fa0f10505313ca4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.sxkj.fw.record.mapper.FwDroneAlarmRecordMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="fwDroneAlarmRecordResultMap" type="org.sxkj.fw.record.entity.FwDroneAlarmRecordEntity">
        <result column="id" property="id"/>
        <result column="device_id" property="deviceId"/>
        <result column="drone_name" property="droneName"/>
        <result column="drone_serial_no" property="droneSerialNo"/>
        <result column="drone_type" property="droneType"/>
        <result column="alarm_type" property="alarmType"/>
        <result column="alarm_time" property="alarmTime"/>
        <result column="trigger_reason" property="triggerReason"/>
        <result column="flight_status" property="flightStatus"/>
        <result column="longitude" property="longitude"/>
        <result column="latitude" property="latitude"/>
        <result column="signal_freq_mhz" property="signalFreqMhz"/>
        <result column="flight_height_m" property="flightHeightM"/>
        <result column="flight_speed_ms" property="flightSpeedMs"/>
        <result column="stay_duration" property="stayDuration"/>
        <result column="counter_way" property="counterWay"/>
        <result column="area_divide_id" property="areaDivideId"/>
        <result column="defense_scene_id" property="defenseSceneId"/>
        <result column="area_code" property="areaCode"/>
        <result column="create_user" property="createUser"/>
        <result column="create_dept" property="createDept"/>
        <result column="create_time" property="createTime"/>
        <result column="update_user" property="updateUser"/>
        <result column="update_time" property="updateTime"/>
        <result column="status" property="status"/>
        <result column="is_deleted" property="isDeleted"/>
    </resultMap>
 
 
    <select id="selectFwDroneAlarmRecordPage" resultType="org.sxkj.fw.record.vo.FwDroneAlarmRecordVO">
        select
        dar.*,
        d.device_name,
        d.status deviceStatus,
        d.final_outbound_area,
        /* 1=已关注,0=未关注 */
        EXISTS (
        SELECT 1 FROM ja_fw_alarm_favorite f
        WHERE f.alarm_record_id::text = dar.id::text
        AND f.user_id = #{param2.currentUserId}::bigint
        AND f.is_deleted = 0
        ) AS favorited
        from
        ja_fw_drone_alarm_record dar
        left join
        ja_fw_device d on dar.device_id::text = d.id::text
        <where>
            dar.is_deleted = 0
            and d.is_enabled = 1
 
            <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 dar.device_id::text in (
                    SELECT device_id::text FROM ja_fw_device_per_share
                    WHERE loan_to_dept_id = #{param2.currentDeptId}::bigint
                    AND is_deleted = 0
                    )
                </if>
                )
            </if>
 
            <if test="param2.deviceId != null and param2.deviceId != ''">
                and dar.device_id::text = #{param2.deviceId}::text
            </if>
 
            <if test="param2.droneName != null and param2.droneName != '' or (param2.droneSerialNo != null and param2.droneSerialNo != '')">
                and (
                1=2 <if test="param2.droneName != null and param2.droneName != ''">
                or dar.drone_name like CONCAT('%', #{param2.droneName}, '%')
            </if>
                <if test="param2.droneSerialNo != null and param2.droneSerialNo != ''">
                    or dar.drone_serial_no like CONCAT('%', #{param2.droneSerialNo}, '%')
                </if>
                )
            </if>
 
            <if test="param2.areaDivideId != null and param2.areaDivideId != ''">
                and dar.area_divide_id::text = #{param2.areaDivideId}::text
            </if>
 
            <if test="param2.defenseSceneId != null and param2.defenseSceneId != ''">
                and dar.defense_scene_id::text = #{param2.defenseSceneId}::text
            </if>
 
            <if test="param2.startTime != null and param2.startTime != '' and param2.endTime != null and param2.endTime != ''">
                and dar.alarm_time BETWEEN #{param2.startTime} AND #{param2.endTime}
            </if>
 
            <if test="param2.deviceType != null and param2.deviceType != ''">
                and dar.device_type::text = #{param2.deviceType}::text
            </if>
 
            <if test="param2.areaName != null and param2.areaName != ''">
                and dar.area_name like CONCAT('%', #{param2.areaName}, '%')
            </if>
        </where>
        order by favorited desc, dar.alarm_time desc
    </select>
 
 
    <select id="exportFwDroneAlarmRecord" resultType="org.sxkj.fw.record.excel.FwDroneAlarmRecordExcel">
        select
        dar.*,
        d.device_name,
        d.status deviceStatus
        from
        ja_fw_drone_alarm_record dar
        left join ja_fw_device d on dar.device_id::text = d.id::text
        <where>
            dar.is_deleted = 0
            <if test="ids != null and ids.size() > 0">
                and dar.id in
                <foreach item="item" collection="ids" separator="," open="(" close=")">
                    #{item}::bigint
                </foreach>
            </if>
            <if test="regionCode != null and regionCode != ''">
                and (d.final_outbound_area_code::text like CONCAT(#{regionCode}::text, '%')
                <if test="currentDeptId != null and currentDeptId != '' ">
                    or dar.device_id in (
                    SELECT device_id FROM ja_fw_device_per_share
                    WHERE
                    loan_to_dept_id = #{currentDeptId}::bigint
                    AND is_deleted = 0
                    )
                </if>
                )
            </if>
        </where>
    </select>
 
    <select id="alarmTypeStatistics" resultType="org.sxkj.fw.cockpit.vo.AlarmStatisticsVO">
        SELECT
        /* 1 和 2 如果是字符类型请加单引号 '1',如果是数字则保持现状 */
        COUNT(CASE WHEN alarm_type::text = '1' THEN 1 END) AS realTimeAlarmCount,
        COUNT(CASE WHEN alarm_type::text = '2' THEN 2 END) AS historyAlarmCount
        FROM
        ja_fw_drone_alarm_record dar
        left join
        /* 修改点1:JOIN 两端对齐转为 text */
        ja_fw_device d on dar.device_id::text = d.id::text
        WHERE dar.is_deleted = 0
        AND d.is_deleted = 0
        and d.is_enabled = 1
        <if test="regionCode != null and regionCode != ''">
            and (d.final_outbound_area_code::text like CONCAT(#{regionCode}, '%')
            <if test="currentDeptId != null and currentDeptId != '' ">
                /* 修改点2:dar.device_id 转 text 以匹配子查询返回的文本数组 */
                or dar.device_id::text in (
                SELECT device_id::text
                FROM ja_fw_device_per_share
                /* 修改点3:参数强转为 bigint 匹配数据库字段类型 */
                WHERE loan_to_dept_id = #{currentDeptId}::bigint
                AND is_deleted = 0
                )
            </if>
            )
        </if>
    </select>
 
</mapper>