吉安感知网项目-后端
linwei
2 days ago 08ddfad4530a014094c06fe68b8c2d9a0753403a
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<?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 AS deviceStatus,
        d.final_outbound_area,
        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 != ''">
                AND ( dar.drone_name::text LIKE CONCAT('%', #{param2.droneName}::text, '%')
                or dar.drone_serial_no::text LIKE CONCAT('%', #{param2.droneName}::text, '%')
                )
            </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}::timestamp AND #{param2.endTime}::timestamp
            </if>
            <if test="param2.deviceType != null and param2.deviceType != ''">
                AND dar.device_type = #{param2.deviceType}
            </if>
            <if test="param2.droneType != null and param2.droneType != ''">
                AND dar.drone_type = #{param2.droneType}
            </if>
            <if test="param2.alarmType != null and param2.alarmType != ''">
                and dar.alarm_type = #{param2.alarmType}
            </if>
 
            <if test="param2.triggerReason != null and param2.triggerReason != ''">
                and dar.trigger_reason = #{param2.triggerReason}
            </if>
            <if test="param2.flightStatus != null and param2.flightStatus != ''">
                and dar.flight_status = #{param2.flightStatus}
            </if>
            <if test="param2.longitude != null and param2.longitude != ''">
                and dar.longitude = #{param2.longitude}
            </if>
            <if test="param2.latitude != null and param2.latitude != ''">
                and dar.latitude = #{param2.latitude}
            </if>
            <if test="param2.signalFreqMhz != null and param2.signalFreqMhz != ''">
                and dar.signal_freq_mhz = #{param2.signalFreqMhz}
            </if>
            <if test="param2.flightHeightM != null and param2.flightHeightM != ''">
                and dar.flight_height_m = #{param2.flightHeightM}
            </if>
            <if test="param2.flightSpeedMs != null and param2.flightSpeedMs != ''">
                and dar.flight_speed_ms = #{param2.flightSpeedMs}
            </if>
            <if test="param2.stayDuration != null and param2.stayDuration != ''">
                and dar.stay_duration = #{param2.stayDuration}
            </if>
            <if test="param2.counterWay != null and param2.counterWay != ''">
                and dar.counter_way = #{param2.counterWay}
            </if>
 
            <if test="param2.areaName != null and param2.areaName != ''">
                AND dar.area_name::text LIKE CONCAT('%', #{param2.areaName}::text, '%')
            </if>
            ORDER BY favorited DESC, dar.alarm_time DESC
        </where>
 
    </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>