From 76b0ffff1d0d483b1837cb0d5fdbb59339210c3a Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期三, 23 十月 2024 16:54:08 +0800 Subject: [PATCH] 在remote子模块实现的”远程监测“功能(查询列表附在线状态) --- pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml | 207 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 171 insertions(+), 36 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 60412c5..8709694 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml @@ -225,16 +225,24 @@ <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> SELECT COUNT(*) AS recordCount FROM pr_intake ge - INNER JOIN pr_divide divi ON ge.divideId = divi.id - INNER JOIN ba_block blo ON divi.blockId = blo.id - LEFT JOIN ba_district country ON ge.countyId = country.id - LEFT JOIN ba_district town ON ge.townId = town.id - LEFT JOIN ba_district village ON ge.villageId = village.id - LEFT JOIN pr_controller cont ON ge.id = cont.intakeId + INNER JOIN pr_divide divi ON ge.divideId = divi.id + INNER JOIN ba_block blo ON divi.blockId = blo.id + LEFT JOIN ba_district country ON ge.countyId = country.id + LEFT JOIN ba_district town ON ge.townId = town.id + LEFT JOIN ba_district village ON ge.villageId = village.id + LEFT JOIN pr_controller cont ON ge.id = cont.intakeId + 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 cont.rtuAddr = rtus.rtuAddr <where> ge.deleted = 0 - AND divi.deleted = 0 - and blo.deleted = 0 + AND divi.deleted = 0 + AND blo.deleted = 0 <if test="intakeName != null and intakeName != ''"> AND ge.name LIKE CONCAT('%', #{intakeName}, '%') </if> @@ -257,6 +265,18 @@ </if> <if test="address != null and address != ''"> AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') + </if> + <if test = "rtuAddr != null and rtuAddr !=''"> + AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') + </if> + <if test="isOnLine != null and isOnLine !='' "> + AND rtus.isOnLine = #{isOnLine} + </if> + <if test="protocol != null and protocol !='' "> + AND cont.protocol = #{protocol} + </if> + <if test = "bindNumber != null and bindNumber > 0"> + AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} </if> </where> </select> @@ -271,6 +291,10 @@ blo.`name` AS blockName, CAST(cont.id AS char) AS controllerId, cont.rtuAddr AS rtuAddr, + cont.protocol AS protocol, + cont.findDt AS findDt, + rtus.isOnLine AS isOnLine, + (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) AS bindNumber, ge.lng, ge.lat, ge.remarks, @@ -282,16 +306,24 @@ END) AS isBind, CONCAT(country.`name`, town.`name`, village.`name`) AS address FROM pr_intake ge - INNER JOIN pr_divide divi ON ge.divideId = divi.id - INNER JOIN ba_block blo ON divi.blockId = blo.id - LEFT JOIN ba_district country ON ge.countyId = country.id - LEFT JOIN ba_district town ON ge.townId = town.id - LEFT JOIN ba_district village ON ge.villageId = village.id - LEFT JOIN pr_controller cont ON ge.id = cont.intakeId + INNER JOIN pr_divide divi ON ge.divideId = divi.id + INNER JOIN ba_block blo ON divi.blockId = blo.id + LEFT JOIN ba_district country ON ge.countyId = country.id + LEFT JOIN ba_district town ON ge.townId = town.id + LEFT JOIN ba_district village ON ge.villageId = village.id + LEFT JOIN pr_controller cont ON ge.id = cont.intakeId + 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 cont.rtuAddr = rtus.rtuAddr <where> ge.deleted = 0 - AND divi.deleted = 0 - and blo.deleted = 0 + AND divi.deleted = 0 + AND blo.deleted = 0 <if test="intakeName != null and intakeName != ''"> AND ge.name LIKE CONCAT('%', #{intakeName}, '%') </if> @@ -314,6 +346,18 @@ </if> <if test="address != null and address != ''"> AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') + </if> + <if test = "rtuAddr != null and rtuAddr !=''"> + AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') + </if> + <if test="isOnLine != null and isOnLine !='' "> + AND rtus.isOnLine = #{isOnLine} + </if> + <if test="protocol != null and protocol !='' "> + AND cont.protocol = #{protocol} + </if> + <if test = "bindNumber != null and bindNumber > 0"> + AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} </if> </where> ORDER BY ge.operateDt DESC @@ -377,27 +421,27 @@ LEFT JOIN pr_controller con ON con.intakeId = inta.id LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = 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 + 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' - ) + <!--'[{"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"> @@ -477,6 +521,97 @@ </trim> </select> + + + + + + + <!--鑾峰彇鍙栨按鍙f暟閲忥紙鍦ㄧ嚎鎴栫绾挎垨涓嶈鐘舵�侊級--> + <select id="selectIntakesCountForOnLine" resultType="java.lang.Long"> + SELECT COUNT(*) AS recordCount + FROM pr_intake inta + INNER JOIN pr_controller con ON con.intakeId = inta.id + <if test="onLineMap != null and onLineMap !='' and isOnLine != null"> + 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 + </if> + WHERE con.intakeId is not null + <if test="isOnLine != null"> + AND rtus.isOnLine = #{isOnLine} + </if> + <if test="intakeNum != null and intakeNum != ''"> + AND inta.name = #{intakeNum} + </if> + </select> + + + <!--鑾峰彇鍙栨按鍙e垪琛紙鍦ㄧ嚎鎴栫绾挎垨涓嶈鐘舵�侊級--> + <select id="selectIntakesForOnLine" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> + SELECT + inta.id AS intakeId, + con.rtuAddr, + inta.name AS intakeNum, + inta.lng, + inta.lat, + IFNULL(hou.total_amount, 0) AS totalAmount, + alarm.alarm + FROM pr_intake inta + INNER JOIN pr_controller con ON con.intakeId = inta.id + LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id + LEFT JOIN( + SELECT intake_id AS intakeId, + CONCAT( + IF(alarm_loss = 1, '婕忔崯鎶ヨ锛�', ''), + IF(alarm_battery_volt = 1, '鐢垫睜鐢靛帇鎶ヨ锛�', ''), + IF(alarm_valve = 1, '闃�闂ㄦ姤璀︼紝', ''), + IF(alarm_water_meter_fault = 1, '娴侀噺璁℃晠闅滄姤璀︼紝', '') + ) AS alarm + FROM rm_alarm_state_last + WHERE (alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1 OR alarm_water_meter_fault = 1) + AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) + ) alarm ON alarm.intakeId = inta.id + <if test="onLineMap != null and onLineMap !='' and isOnLine != null"> + 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 + </if> + WHERE con.intakeId is not null + <if test="isOnLine != null"> + AND rtus.isOnLine = #{isOnLine} + </if> + <if test="intakeNum != null and intakeNum != ''"> + AND inta.name = #{intakeNum} + </if> + order by inta.id ASC + <trim prefix="limit "> + <if test="start != null and count != null"> + #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} + </if> + </trim> + </select> + + + + + + + + + + + <!--鏍规嵁鍙栨按鍙g紪鍙疯幏鍙栧彇姘村彛瀵硅薄--> <select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> SELECT con.intakeId, -- Gitblit v1.8.0