From d03cdea65ea0d86fe6a8d95458beb7916a812a48 Mon Sep 17 00:00:00 2001
From: Administrator <zhubaomin>
Date: 星期五, 02 八月 2024 17:15:14 +0800
Subject: [PATCH] 2024-08-02 朱宝民 优化获取全部取水口接口,包含经纬度及12小时之内的报警信息

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml |  196 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 187 insertions(+), 9 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 61aeeb2..8cc3a20 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -219,6 +219,7 @@
     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
     <where>
       ge.deleted = 0
       AND divi.deleted = 0
@@ -227,12 +228,12 @@
         AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
       </if>
 
-      <if test="divideName != null and divideName != ''">
-        AND divi.name LIKE CONCAT('%', #{divideName}, '%')
+      <if test = "divideId != null and divideId !=''">
+        AND divi.id = #{divideId}
       </if>
 
-      <if test="blockName != null and blockName != ''">
-        AND blo.name = #{blockName}
+      <if test = "blockId != null and blockId !=''">
+        AND blo.id = #{blockId}
       </if>
 
       <if test="isBinded == 0">
@@ -252,10 +253,19 @@
 
   <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍙栨按鍙h褰�-->
   <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
-    SELECT CAST(ge.id AS char)                             AS id,
+    SELECT
+    CAST(ge.id AS char)                                 AS intakeId,
     ge.`name`                                           AS intakeName,
+    CAST(divi.id AS char)                               AS divideId,
     divi.`name`                                         AS divideName,
+    CAST(blo.id AS char)                                AS blockId,
     blo.`name`                                          AS blockName,
+    CAST(cont.id AS char)                               AS controllerId,
+    cont.rtuAddr                                        AS rtuAddr,
+    ge.lng,
+    ge.lat,
+    ge.remarks,
+    ge.operator,
     ge.operateDt                                        As operateDt,
     (CASE
     WHEN ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)  THEN "鏈粦瀹�"
@@ -268,6 +278,7 @@
     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
     <where>
       ge.deleted = 0
       AND divi.deleted = 0
@@ -276,12 +287,12 @@
         AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
       </if>
 
-      <if test="divideName != null and divideName != ''">
-        AND divi.name LIKE CONCAT('%', #{divideName}, '%')
+      <if test = "divideId != null and divideId !=''">
+        AND divi.id = #{divideId}
       </if>
 
-      <if test="blockName != null and blockName != ''">
-        AND blo.name = #{blockName}
+      <if test = "blockId != null and blockId !=''">
+        AND blo.id = #{blockId}
       </if>
 
       <if test="isBinded == 0">
@@ -347,4 +358,171 @@
     WHERE id NOT IN(SELECT intakeId FROM pr_controller) AND deleted = 0
   </select>
 
+  <!--鑾峰彇鍙栨按鍙f暟閲忥紙鍦ㄧ嚎鍜屼笉鍦ㄥ厛锛�-->
+  <select id="getOnLineIntakesCount" resultType="java.lang.Long">
+    SELECT
+        COUNT(*) AS recordCount
+    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>
+  </select>
+
+  <!--鑾峰彇鍙栨按鍙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
+      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
+    <where>
+      <if test="operator != null">
+        com.operator = #{operator}
+      </if>
+    </where>
+  </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