From d38bb7f88d0c499265e6da62a52686a654834daa Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期六, 03 八月 2024 08:59:29 +0800 Subject: [PATCH] 2024-08-03 朱宝民 优化获取命令日志历史记录接口 --- pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml | 158 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 136 insertions(+), 22 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml index 920ffce..8cc3a20 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml @@ -362,22 +362,41 @@ <select id="getOnLineIntakesCount" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount - FROM pr_controller con - INNER JOIN pr_intake inta ON con.intakeId = inta.id - INNER JOIN JSON_TABLE( - <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> - #{onLineMap}, - '$[*]' COLUMNS( - rtuAddr VARCHAR(20) PATH '$.rtuAddr', - isOnLine BOOLEAN PATH '$.isOnLine' - ) - ) rtus ON con.rtuAddr = rtus.rtuAddr + FROM pr_intake inta + LEFT JOIN pr_controller con ON con.intakeId = inta.id + LEFT JOIN( + SELECT + intake_id AS intakeId, + CONCAT( + IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '娴侀噺璁℃晠闅�,', ''), IF(alarm_water_meter_fault = 1, '娴侀噺璁℃晠闅�', '')), + IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '婕忔崯(鍋锋按)鎶ヨ,', ''), IF(alarm_loss = 1, '婕忔崯(鍋锋按)鎶ヨ', '')), + IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '钃勭數姹犵數鍘嬫姤璀�,', ''), IF(alarm_battery_volt = 1, '钃勭數姹犵數鍘嬫姤璀�', '')), + IF(alarm_valve = 1, '闃�闂ㄦ姤璀�', '') + ) AS alarm + FROM rm_alarm_state_last + WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) + AND dt >= DATE_SUB(NOW(),INTERVAL 12 HOUR) + ) alarm ON alarm.intakeId = inta.id + LEFT JOIN JSON_TABLE( + <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> + #{onLineMap}, + '$[*]' COLUMNS( + rtuAddr VARCHAR(20) PATH '$.rtuAddr', + isOnLine BOOLEAN PATH '$.isOnLine' + ) + ) rtus ON con.rtuAddr = rtus.rtuAddr <where> <if test="isOnLine != null"> rtus.isOnLine = #{isOnLine} </if> <if test="intakeNum != null and intakeNum != ''"> - AND inta.name LIKE CONCAT('%', #{intakeNum}, '%') + AND inta.name = #{intakeNum} + </if> + <if test="isBinded == false "> + AND con.rtuAddr IS NULL + </if> + <if test="isBinded == true "> + AND con.rtuAddr IS NOT NULL </if> </where> </select> @@ -385,30 +404,125 @@ <!--鑾峰彇鍙栨按鍙e垪琛紙鍦ㄧ嚎鍜屼笉鍦ㄥ厛锛�--> <select id="getOnLineIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> SELECT + inta.id AS intakeId, + con.rtuAddr, + inta.name AS intakeNum, + inta.lng, + inta.lat, + (CASE + WHEN con.rtuAddr IS NULL THEN "false" + WHEN con.rtuAddr IS NOT NULL THEN "true" + END) AS isBinded, + rtus.isOnLine, + alarm.alarm + FROM pr_intake inta + LEFT JOIN pr_controller con ON con.intakeId = inta.id + LEFT JOIN( + SELECT + intake_id AS intakeId, + CONCAT( + IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '娴侀噺璁℃晠闅�,', ''), IF(alarm_water_meter_fault = 1, '娴侀噺璁℃晠闅�', '')), + IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '婕忔崯(鍋锋按)鎶ヨ,', ''), IF(alarm_loss = 1, '婕忔崯(鍋锋按)鎶ヨ', '')), + IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '钃勭數姹犵數鍘嬫姤璀�,', ''), IF(alarm_battery_volt = 1, '钃勭數姹犵數鍘嬫姤璀�', '')), + IF(alarm_valve = 1, '闃�闂ㄦ姤璀�', '') + ) AS alarm + FROM rm_alarm_state_last + WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) + AND dt >= DATE_SUB(NOW(),INTERVAL 12 HOUR) + ) alarm ON alarm.intakeId = inta.id + LEFT JOIN JSON_TABLE( + <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> + #{onLineMap}, + '$[*]' COLUMNS( + rtuAddr VARCHAR(20) PATH '$.rtuAddr', + isOnLine BOOLEAN PATH '$.isOnLine' + ) + ) rtus ON con.rtuAddr = rtus.rtuAddr + <where> + <if test="isOnLine != null"> + rtus.isOnLine = #{isOnLine} + </if> + <if test="intakeNum != null and intakeNum != ''"> + AND inta.name = #{intakeNum} + </if> + <if test="isBinded == false "> + AND con.rtuAddr IS NULL + </if> + <if test="isBinded == true "> + AND con.rtuAddr IS NOT NULL + </if> + </where> + order by con.id ASC + <if test="pageCurr != null and pageSize != null"> + LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} + </if> + </select> + + <!--鏍规嵁鍙栨按鍙g紪鍙疯幏鍙栧彇姘村彛瀵硅薄--> + <select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> + SELECT con.intakeId, con.rtuAddr, inta.name AS intakeNum, rtus.isOnLine FROM pr_controller con - INNER JOIN pr_intake inta ON con.intakeId = inta.id - INNER JOIN JSON_TABLE( + INNER JOIN pr_intake inta ON con.intakeId = inta.id + left JOIN JSON_TABLE( + #{onLineMap}, + '$[*]' COLUMNS( + rtuAddr VARCHAR(20) PATH '$.rtuAddr', + isOnLine BOOLEAN PATH '$.isOnLine' + ) + ) rtus ON con.rtuAddr = rtus.rtuAddr + <where> + <if test="intakeNum != null and intakeNum != ''"> + AND LOWER(inta.name) = #{intakeNum} + </if> + </where> + LIMIT 0,1 + + </select> + + <!--鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛--> + <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> + SELECT + DISTINCT con.intakeId, + con.rtuAddr, + inta.name AS intakeNum, + rtus.isOnLine + FROM pr_controller con + INNER JOIN pr_intake inta ON con.intakeId = inta.id + INNER JOIN rm_command_history com ON con.rtuAddr = com.rtu_addr + INNER JOIN JSON_TABLE( <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',--> #{onLineMap}, '$[*]' COLUMNS( rtuAddr VARCHAR(20) PATH '$.rtuAddr', isOnLine BOOLEAN PATH '$.isOnLine' ) - ) rtus ON con.rtuAddr = rtus.rtuAddr + ) rtus ON con.rtuAddr = rtus.rtuAddr <where> - <if test="isOnLine != null"> - rtus.isOnLine = #{isOnLine} - </if> - <if test="intakeNum != null and intakeNum != ''"> - AND inta.name LIKE CONCAT('%', #{intakeNum}, '%') + <if test="operator != null"> + com.operator = #{operator} </if> </where> - <if test="pageCurr != null and pageSize != null"> - LIMIT ${(pageCurr-1)*pageSize}, ${pageSize} - </if> </select> + + <!--鍙栨按鍙e悕绉版崲鍙栨按鍙D锛屾壂鐮佸紑闃�浣跨敤--> + <select id="getIntakeIdByName" resultType="java.lang.Long"> + SELECT id AS intakeId FROM pr_intake WHERE `name` = #{intakeName} + </select> + + <!--鍙栨按鍙e悕绉版崲鍙栨按鍙D锛岄獙璇佹槸鍚﹂噸澶嶅悕绉颁娇鐢�--> + <select id="getIntakeIdsByName" resultType="java.lang.Long"> + SELECT id AS intakeId FROM pr_intake WHERE `name` = #{intakeName} + </select> + + <!--鍙栨按鍙e悕绉版崲鍙栨按鍙D锛岄獙璇佹槸鍚﹂噸澶嶅悕绉颁娇鐢�--> + <select id="getIntakeIdByNameExcludeId" resultType="java.lang.Long"> + SELECT id AS intakeId FROM pr_intake WHERE id != #{id} and `name` = #{intakeName} + </select> + + + </mapper> \ No newline at end of file -- Gitblit v1.8.0