From 1ba46471b7831f057991ad92573463488504b20e Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期三, 13 十一月 2024 17:41:14 +0800
Subject: [PATCH] 优化未关阀记录接口2

---
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 108 insertions(+), 5 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
index 4e36ac2..f743ff1 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -195,7 +195,43 @@
         where com_id = #{comId,jdbcType=BIGINT}
     </update>
 
-    <!--鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍锛堝寘鍚湪绾挎儏鍐碉級-->
+    <!--鏍规嵁operator鑾峰彇鏈叧闃�鐨凴TU鍦板潃鍙婅櫄鎷熷崱缂栧彿鏁版嵁瀵癸紝鑾峰彇鏈叧闃�璁板綍浣跨敤-->
+    <select id="getUnclosedRtus" resultType="com.dy.pipIrrGlobal.voRm.VoRtuAndVc">
+        SELECT
+            com.rtu_addr AS rtuAddr,
+            com.param ->> '$.icCardNo' AS vcNum
+        FROM rm_command_history com
+        where 1=1
+          AND com.operator = #{operator}
+          AND com.result = 1
+          AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2'))
+          AND (
+            SELECT op_dt FROM rm_open_close_valve_last
+            WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+            ORDER BY op_dt DESC
+            LIMIT 1
+        ) IS NOT NULL
+          AND (
+            SELECT cl_dt FROM rm_open_close_valve_last
+            WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+            ORDER BY op_dt DESC
+            LIMIT 1
+        ) IS NULL
+        GROUP BY com.rtu_addr, com.param ->> '$.icCardNo'
+    </select>
+
+    <!--鏍规嵁RTU鍦板潃鍜岃櫄鎷熷崱缂栧彿鑾峰彇鎴愬姛寮�闃�鐨勬渶鍚庝竴鏉¤褰曪紝鑾峰彇鏈叧闃�璁板綍浣跨敤-->
+    <select id="getLastComId" resultType="java.lang.Long">
+        SELECT com_id AS comId
+        FROM rm_command_history
+        WHERE result = 1
+            AND ((protocol = 'p206V1' OR protocol = 'p206V2')
+            AND (command_code = '92' OR command_code = '97' OR command_code = '99' OR command_code = 'A0' OR command_code = 'A1' OR command_code = 'A2'))
+            AND rtu_addr = #{rtuAddr} AND param ->> '$.icCardNo' = #{vcNum}
+        ORDER BY send_time DESC
+        LIMIT 1
+    </select>
+
     <select id="getUnclosedValves" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve">
         SELECT
             inta.name AS intakeNum,
@@ -216,16 +252,83 @@
             END AS planned,
             com.send_time AS sendTime,
 
-            <!--鍚屽崱銆佸悓璁惧鐨勬渶鍚庝竴娆″伐浣滄姤鐨勬椂闂村拰鐬椂娴侀噺锛屽伐浣滄姤鏃堕棿蹇呴』鏅氫簬鍚屽崱銆佸悓璁惧鏈�鍚庝竴娆″紑闃�璁板綍鐨勫紑闃�鏃堕棿-->
+            (SELECT dt FROM rm_work_report_last
+                WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
+                    AND dt > com.send_time
+                ORDER BY dt DESC
+             LIMIT 1) AS dt,
+
+            (SELECT water_instant FROM rm_work_report_last
+                WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
+                    AND dt > com.send_time
+                ORDER BY dt DESC
+            LIMIT 1) AS waterInstant
+        FROM rm_command_history com
+            INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
+            INNER JOIN pr_intake inta ON con.intakeId = inta.id
+            LEFT JOIN JSON_TABLE(
+                <!--'[{"rtuAddr":"620201000030","isOnLine":true}]',-->
+                #{onLineMap},
+                '$[*]' COLUMNS (
+                    rtuAddr VARCHAR(20) PATH '$.rtuAddr',
+                    isOnLine BOOLEAN PATH '$.isOnLine'
+                )
+            ) rtus ON com.rtu_addr = rtus.rtuAddr
+        <where>
+            AND	com.com_id in (#{comIds})
+
+            AND (
+                SELECT op_dt FROM rm_open_close_valve_last
+                WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+                ORDER BY op_dt DESC
+                LIMIT 1
+            ) IS NOT NULL
+
+            AND (
+                SELECT cl_dt FROM rm_open_close_valve_last
+                WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+                ORDER BY op_dt DESC
+                LIMIT 1
+            ) IS NULL
+        </where>
+        GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo', com.command_code, com.send_time, dt, waterInstant
+        ORDER BY com.send_time DESC
+    </select>
+
+
+
+    <!--鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍锛堝寘鍚湪绾挎儏鍐碉級-->
+    <select id="getUnclosedValves2" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve">
+        SELECT
+            inta.name AS intakeNum,
+            IFNULL(rtus.isOnLine, false) AS isOnLine,
+            com.rtu_addr AS rtuAddr,
+            com.param ->> '$.icCardNo' AS vcNum,
+            (
+                SELECT param ->> '$.orderNo' AS orderNo
+                FROM rm_command_history
+                WHERE rtu_addr = com.rtu_addr
+                ORDER BY send_time desc
+                LIMIT 0,1
+            ) AS orderNo,
+            'toClose'                  AS state,
+            CASE
+                WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 1
+                ELSE 0
+            END AS planned,
+            com.send_time AS sendTime,
+
             (SELECT dt FROM rm_work_report_last
             WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
-                AND dt > (SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1)
+                <!--AND dt > (SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1)-->
+                AND dt > com.send_time
             ORDER BY dt DESC
             LIMIT 1) AS dt,
 
             (SELECT water_instant FROM rm_work_report_last
             WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
-                AND dt > (SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1)
+                <!--AND dt > (SELECT op_dt FROM rm_open_close_valve_last WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo' ORDER BY op_dt DESC LIMIT 1)-->
+                AND dt > com.send_time
             ORDER BY dt DESC
             LIMIT 1) AS waterInstant
 
@@ -242,6 +345,7 @@
             ) rtus ON com.rtu_addr = rtus.rtuAddr
         <where>
             AND com.operator = #{operator}
+            AND com.result = 1
             AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2'))
             AND (
                 SELECT op_dt FROM rm_open_close_valve_last
@@ -258,7 +362,6 @@
         </where>
         GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo', com.command_code, com.send_time, dt, waterInstant
         ORDER BY com.send_time DESC
-        LIMIT 1
     </select>
 
     <!--鏍规嵁鍙栨按鍙D鑾峰彇璇ュ彇姘村彛鏈叧闃�鍙傛暟-->

--
Gitblit v1.8.0