From 7d387aa126262ee12068f5b31aad661501edd286 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期三, 13 十一月 2024 16:34:21 +0800
Subject: [PATCH] 优化未关阀记录接口

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java               |   14 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java           |    7 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java |   28 +++++-
 pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java         |   23 +++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuAndVc.java                  |   28 +++++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml                    |  105 ++++++++++++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java     |   29 +++++++
 7 files changed, 225 insertions(+), 9 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
index db4830b..2afc76d 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -352,7 +352,12 @@
             JSONObject job_param = (JSONObject) JSON.toJSON(param);
             JSONObject job_data = job_response.getJSONObject("content").getJSONObject("data");
             if(!job_data.getBoolean("success")) {
-                // 寮�鍏抽榾澶辫触
+                // 寮�鍏抽榾澶辫触锛屾洿鏂板懡浠ゆ墽琛岀姸鎬佸強铏氭嫙鍗$姸鎬�
+
+                rmCommandHistory = new RmCommandHistory();
+                rmCommandHistory.setComId(comId);
+                rmCommandHistory.setResult((byte) 0);
+                rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
 
                 // 寮�闃�澶辫触鍒欒В闄ゅ崰鐢紝鍏抽榾澶辫触鍒欏崰鐢�
                 if (comType != null) {
@@ -375,7 +380,12 @@
                 response_CallBack.setMsg(CommandResultCode.OPEN_CLOSE_FAIL.getMessage());
                 response_CallBack.setSuccess(false);
             }else {
-                // 寮�鍏抽榾鎴愬姛
+                // 寮�鍏抽榾鎴愬姛锛屾洿鏂板懡浠ゆ墽琛岀姸鎬佸強铏氭嫙鍗$姸鎬�
+
+                rmCommandHistory = new RmCommandHistory();
+                rmCommandHistory.setComId(comId);
+                rmCommandHistory.setResult((byte) 1);
+                rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
 
                 // 寮�闃�鎴愬姛鍒欏崰鐢紝鍏抽榾鎴愬姛涓嶅崰鐢�
                 if (comType != null) {
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java
index 20e64a6..e9fc537 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmCommandHistoryMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
 import com.dy.pipIrrGlobal.voRm.VoCommand;
+import com.dy.pipIrrGlobal.voRm.VoRtuAndVc;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedParam;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import org.apache.ibatis.annotations.Mapper;
@@ -32,13 +33,39 @@
 
     int updateByPrimaryKey(RmCommandHistory record);
 
+
+    /**
+     * 鏍规嵁operator鑾峰彇鏈叧闃�鐨凴TU鍦板潃鍙婅櫄鎷熷崱缂栧彿鏁版嵁瀵癸紝鑾峰彇鏈叧闃�璁板綍浣跨敤
+     * @param operator
+     * @return
+     */
+    List<VoRtuAndVc> getUnclosedRtus(Long operator);
+
+    /**
+     * 鏍规嵁RTU鍦板潃鍜岃櫄鎷熷崱缂栧彿鑾峰彇鎴愬姛寮�闃�鐨勬渶鍚庝竴鏉¤褰曪紝鑾峰彇鏈叧闃�璁板綍浣跨敤
+     * @param rtuAddr
+     * @param vcNum
+     * @return
+     */
+    Long getLastComId(@Param("rtuAddr")String rtuAddr, @Param("vcNum")String vcNum);
+
+    /**
+     * 鏍规嵁鍛戒护鏃ュ織缂栧彿闆嗗悎鑾峰彇鏈叧闃�璁板綍
+     * @param onLineMap
+     * @param comIds
+     * @return
+     */
+    List<VoUnclosedValve> getUnclosedValves(@Param("onLineMap") String onLineMap, @Param("comIds") String comIds);
+
+
+
     /**
      * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍锛堝寘鍚湪绾挎儏鍐碉級
      * @param onLineMap
      * @param operator
      * @return
      */
-    List<VoUnclosedValve> getUnclosedValves(@Param("onLineMap") String onLineMap, @Param("operator") Long operator);
+    List<VoUnclosedValve> getUnclosedValves2(@Param("onLineMap") String onLineMap, @Param("operator") Long operator);
 
     /**
      * 鏍规嵁鍙栨按鍙D鑾峰彇璇ュ彇姘村彛鏈叧闃�鍙傛暟锛屽钩鍙伴�夋嫨鍙栨按鍙e叧闃�浣跨敤
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuAndVc.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuAndVc.java
new file mode 100644
index 0000000..c477788
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoRtuAndVc.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-11-13 15:44
+ * @LastEditTime 2024-11-13 15:44
+ * @Description RTU鍦板潃鍙婅櫄鎷熷崱缂栧彿瑙嗗浘瀵硅薄锛岃幏鍙栨湭鍏抽榾璁板綍浣跨敤
+ */
+
+@Data
+@JsonPropertyOrder({"rtuAddr", "vcNum"})
+public class VoRtuAndVc implements BaseEntity {
+    private static final long serialVersionUID = 202411131548001L;
+
+    /**
+     * 闃�鎺у櫒鍦板潃
+     */
+    private String rtuAddr;
+
+    /**
+     * 铏氭嫙鍗$紪鍙�
+     */
+    private String vcNum;
+}
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 ee38024..4e61151 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -195,8 +195,110 @@
         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,
+            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 > 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,
@@ -243,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
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java
index 446935e..3b40503 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueCtrl.java
@@ -7,6 +7,7 @@
 import com.dy.pipIrrApp.issue.dto.DtoDeleteParam;
 import com.dy.pipIrrApp.issue.qo.QoIssueReport;
 import com.dy.pipIrrGlobal.pojoOp.OpeIssueReport;
+import com.dy.pipIrrGlobal.pojoOp.OpeReportReply;
 import com.dy.pipIrrGlobal.voOp.VoIssueReport;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -92,4 +93,26 @@
 
     }
 
+    /**
+     * 鍥炲宸℃鍛橀棶棰樹笂鎶�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "replyReport")
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResponse<Boolean> replyReport(@RequestBody @Valid OpeReportReply po, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        String result = issueSv.replyReport(po);
+        if(!result.equals("sucess")) {
+            return BaseResponseUtils.buildErrorMsg(result);
+        }
+
+        return BaseResponseUtils.buildSuccess() ;
+    }
+
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java
index ee70618..828da25 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/issue/IssueSv.java
@@ -114,6 +114,13 @@
             return "鍥炲璁板綍娣诲姞澶辫触";
         }
 
+        OpeIssueReport issueReport = new OpeIssueReport();
+        issueReport.setId(po.getReportId());
+        issueReport.setState((byte)2);
+        Integer rec = opeIssueReportMapper.updateByPrimaryKeySelective(issueReport);
+        if(rec == 0) {
+            return "宸℃鍛橀棶棰樹笂鎶ョ姸鎬佷慨鏀瑰け璐�";
+        }
         return "sucess";
     }
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
index 21df891..e9fea08 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -18,6 +18,7 @@
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoIrrigaterProfile;
+import com.dy.pipIrrGlobal.voRm.VoRtuAndVc;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import lombok.RequiredArgsConstructor;
@@ -116,12 +117,29 @@
             System.out.println(jsonArray.toJSONString());
         }
 
-        List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), operator);
-        if(res != null) {
-            return res;
-        } else {
-            return new ArrayList<>();
+        /**
+         * 鑾峰彇鏈叧闃�鐨凴TU鍦板潃鍜岃櫄鎷熷崱缂栧彿瀵规暟缁�
+         * 閬嶅巻鏁扮粍鑾峰彇鏈�鍚庡懡浠ゆ棩蹇桰D闆嗗悎
+         */
+        List<VoRtuAndVc> rtus = rmCommandHistoryMapper.getUnclosedRtus(operator);
+        String comIds = "";
+        if(rtus != null && rtus.size() > 0) {
+            for (int i = 0; i < rtus.size(); i++) {
+                Long comId = rmCommandHistoryMapper.getLastComId(rtus.get(i).getRtuAddr(), rtus.get(i).getVcNum());
+                if(comId > 0) {
+                    comIds = comIds + comId + ",";
+                }
+            }
         }
+
+        if(comIds.length() > 0) {
+            comIds = "(" + comIds.substring(0,comIds.length()) + ")";
+            List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), comIds);
+            if(res != null) {
+                return res;
+            }
+        }
+        return new ArrayList<>();
     }
 
     /**

--
Gitblit v1.8.0