From 33af27ee7a189b538452fc9adb63e0784324e009 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 24 七月 2024 10:49:37 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml                                     |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsSv.java                   |  121 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java                     |  194 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java                   |  181 ++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml                                 |   49 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java                         |   28 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoControllerAlarmState.java                        |   93 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java            |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml                                      |  143 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java                   |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java          |   43 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateHistoryMapper.java                    |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java                  |   17 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoClientAmountDay.java                             |   62 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/MidResultActionError.java              |   17 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java                   |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java                                 |   39 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ControllerAlarmStateQueryVo.java |   44 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsCtrl.java                 |  153 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java           |   44 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml                                   |  768 ++++++++++++--------
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ClientAmountDayQueryVo.java      |   38 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateLastMapper.java                       |   18 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml                                     |   49 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java                      |   17 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                                 |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java           |   25 
 27 files changed, 1,779 insertions(+), 402 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java
index af014d5..e9c3c09 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/Com99Vo.java
@@ -10,7 +10,7 @@
 @Data
 public class Com99Vo {
     public String icCardNo ;//17浣嶈櫄鎷烮C鍗$紪鍙�(鍗忚鏄�10浣嶆暟瀛�)
-    public Integer moneyRemain;//鍓╀綑閲戦(鍙栧�艰寖鍥�0.00~999999.99锛屽崟浣嶄负鍏�)
+    public Double moneyRemain;//鍓╀綑閲戦(鍙栧�艰寖鍥�0.00~999999.99锛屽崟浣嶄负鍏�)
     public Double waterPrice;//姘翠环(鍙栧�艰寖鍥�0.00~99.99鍏�/m3)
     public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
     public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java
index 9f78660..ee1645f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/downVos/ComA0Vo.java
@@ -10,7 +10,7 @@
 @Data
 public class ComA0Vo {
     public String icCardNo ;//17浣嶈櫄鎷烮C鍗$紪鍙�(鍗忚鏄�10浣嶆暟瀛�)
-    public Integer moneyRemain;//鍓╀綑閲戦(鍙栧�艰寖鍥�0.00~999999.99锛屽崟浣嶄负鍏�)
+    public Double moneyRemain;//鍓╀綑閲戦(鍙栧�艰寖鍥�0.00~999999.99锛屽崟浣嶄负鍏�)
     public Double waterPrice;//姘翠环(鍙栧�艰寖鍥�0.00~99.99鍏�/m3)
     public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
     public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
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 95daca2..8413b02 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
@@ -19,6 +19,7 @@
 import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
 import jakarta.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -48,13 +49,20 @@
     //@Value("${mw.comSendUrl}")
     protected String comSendUrl;
 
-    protected static String controllerType = null;
-    protected static Integer projectNo = null;
+    //protected static String controllerType = null;
+    //protected static Integer projectNo = null;
+
+    @Value("${project.projectNo}")
+    protected Integer projectNo;
+
+    @Value("${project.controllerType}")
+    protected String controllerType;
+
     protected String commandTypeOuter = CommandType.outerCommand;
 
     // 瀛樺偍瀹炰緥鍖栫殑 CompletableFuture<Data> 瀵硅薄
     protected static Map<Long, Object> features = new HashMap<>();
-    protected static Boolean setuped = false;
+    //protected static Boolean setuped = false;
 
     @Autowired
     private RestTemplate restTemplate;
@@ -89,11 +97,11 @@
     /**
      * 鑾峰彇绯荤粺閰嶇疆鍙傛暟
      */
-    public void setUp() {
-        controllerType = comSupport.baSettingsMapper.getItemValue("controllerType");
-        projectNo = Integer.parseInt(comSupport.baSettingsMapper.getItemValue("projectNo"));
-        setuped = true;
-    }
+    //public void setUp() {
+    //    controllerType = comSupport.baSettingsMapper.getItemValue("controllerType");
+    //    projectNo = Integer.parseInt(comSupport.baSettingsMapper.getItemValue("projectNo"));
+    //    setuped = true;
+    //}
 
     /**
      * 鐢熸垚璁㈠崟鍙�
@@ -322,6 +330,21 @@
             seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
         }
 
+        // 濡傛灉鏄紑鍙戝懡浠わ紙92-骞冲彴寮�闃�锛�91-灏忕▼搴忓紑闃�锛夛紝杩斿洖缁撴灉涓坊鍔犻榾鎺у櫒鍦板潃銆佽櫄鎷熷崱缂栧彿銆佽鍗曞彿
+        if(commandCode.equals("92") || commandCode.equals("97")) {
+            JSONObject job_response = (JSONObject) JSON.toJSON(response_CallBack);
+            JSONObject job_param = (JSONObject) JSON.toJSON(param);
+
+            JSONObject job_data = job_response.getJSONObject("content").getJSONObject("data");
+            job_data.remove("success");
+            job_data.put("intakeId", intakeId);
+            job_data.put("rtuAddr", rtuAddr);
+            job_data.put("vcNum", job_param.getString("icCardNo"));
+            job_data.put("orderNo", job_param.getString("orderNo"));
+
+            response_CallBack = JSON.parseObject(job_response.toJSONString(), BaseResponse.class);
+        }
+
         // 鍥炶皟杩斿洖鐨勫唴瀹癸紝鍥炶皟缁撴灉鍐欏叆鍛戒护鏃ュ織琛ㄧ殑浠诲姟鐢变腑闂翠欢瀹屾垚
         return response_CallBack;
 
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateHistoryMapper.java
index bb0bf4c..b3bf500 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateHistoryMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateHistoryMapper.java
@@ -2,7 +2,11 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory;
+import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState;
 import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -58,4 +62,18 @@
      * @return update count
      */
     int updateByPrimaryKey(RmAlarmStateHistory record);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍
+     * @param params
+     * @return
+     */
+    List<VoControllerAlarmState> getControllerAlarmStateHistory(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateLastMapper.java
index c8b29d0..6730a34 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateLastMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmAlarmStateLastMapper.java
@@ -2,10 +2,11 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateLast;
-import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
+import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -69,4 +70,19 @@
      * @return object by intakeId
      */
     List<RmAlarmStateLast> selectByIntakeId(Long intakeId);
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍
+     * @param params
+     * @return
+     */
+    List<VoControllerAlarmState> getControllerAlarmStateLast(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java
index bafb46b..1d7ef01 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayLastMapper.java
@@ -2,9 +2,11 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDayLast;
+import com.dy.pipIrrGlobal.voRm.VoClientAmountDay;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -62,4 +64,19 @@
      * @return update count
      */
     int updateByPrimaryKey(RmClientAmountDayLast record);
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍
+     * @param params
+     * @return
+     */
+    List<VoClientAmountDay> getClientAmountDayLast(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java
index 37d8992..0ab6a70 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmClientAmountDayMapper.java
@@ -2,11 +2,14 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDay;
+import com.dy.pipIrrGlobal.voRm.VoClientAmountDay;
+import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -71,4 +74,18 @@
      * @return update count
      */
     int updateByPrimaryKey(RmClientAmountDay record);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟
+     * @param params
+     * @return
+     */
+    Long getRecordCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍
+     * @param params
+     * @return
+     */
+    List<VoClientAmountDay> getClientAmountDayHistory(Map<?, ?> params);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoClientAmountDay.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoClientAmountDay.java
new file mode 100644
index 0000000..d105f1c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoClientAmountDay.java
@@ -0,0 +1,62 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.sql.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/23  16:21
+ * @LastEditTime :2024/7/23  16:21
+ * @Description
+ */
+@Data
+@Schema(title = "鍐滄埛鏃ョ敤姘撮噺缁熻瑙嗗浘瀵硅薄")
+public class VoClientAmountDay implements BaseEntity {
+
+    private static final long serialVersionUID = 202407231622001L;
+
+    @Schema(description = "鍐滄埛ID", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientId;
+
+    @Schema(description = "鏃ュ彇姘撮噺", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Double amount;
+
+    @Schema(description = "鏃ヨ姳璐归噾棰�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Double money;
+
+    @Schema(description = "缁熻鏃ユ湡(yyyy-mm-dd)", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private java.sql.Date dt;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″紑闃�鏃ユ湡鏃堕棿锛坹yyy-mm-dd HH:MM:SS锛�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private java.util.Date openDtLast;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″叧闃�鏃ユ湡鏃堕棿锛坹yyy-mm-dd HH:MM:SS锛�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private java.util.Date closeDtLast;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″紑闃�鍙栨按閲�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Double thisAmountLast;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″紑闃�鑺辫垂閲戦", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Double thisMoneyLast;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″紑闃�鍙栨按鏃堕暱锛堝垎閽燂級", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long thisTimeLast;
+
+    @Schema(description = "缁熻鏃ユ渶鍚庝竴娆″叧闃�涓婃姤鎺у埗鍣ㄦ椂閽�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private java.util.Date rtuDtLast;
+
+    @Schema(description = "鍐滄埛濮撳悕", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientName;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoControllerAlarmState.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoControllerAlarmState.java
new file mode 100644
index 0000000..5443963
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoControllerAlarmState.java
@@ -0,0 +1,93 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.dy.common.po.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/23  8:39
+ * @LastEditTime :2024/7/23  8:39
+ * @Description
+ */
+@Data
+@Schema(title = "鎺у埗鍣ㄦ姤璀︿笌鐘舵�佽鍥惧璞�")
+public class VoControllerAlarmState implements BaseEntity {
+
+    private static final long serialVersionUID = 202407230842001L;
+
+    @Schema(description = "鎺у埗鍣↖D")
+    private String controllerId;
+
+    @Schema(description = "鍙栨按鍙D")
+    private String intakeId;
+
+    @Schema(description = "鍙栨按鍙e悕绉�")
+    private String intakeName;
+
+    @Schema(description = "鎺у埗鍣ㄥ湴鍧�")
+    private String rtuAddr;
+
+    @Schema(description = "涓婃姤鏃ユ湡鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date dt;
+
+    @Schema(description = "鐘舵��-闃�闂�/娉碉紙0鎵撳紑銆�1鍏抽棴锛�")
+    private Byte valveState;
+
+    @Schema(description = "鍓╀綑姘撮噺灏忎簬鎶ヨ涓婇檺鎶ヨ鎶ヨ锛�1锛氭姤璀︼紝 0锛氭甯�)")
+    private Byte alarmRemainWater;
+
+    @Schema(description = "鍓╀綑姘撮噺涓�0鍏虫车/闃�(1锛氬叧娉碉紝0锛氭甯�)")
+    private Byte alarm0WaterRemain;
+
+    @Schema(description = "骞寸敤姘撮噺澶т簬闄愬埗姘撮噺鎶ヨ(1锛氭姤璀� 0锛氭甯�)")
+    private Byte alarmExceedYear;
+
+    @Schema(description = "娴侀噺璁℃晠闅�(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmWaterMeterFault;
+
+    @Schema(description = "婕忔崯(鍋锋按)鎶ヨ(1锛氭姤璀︼紝 0锛氭甯�)")
+    private Byte alarmLoss;
+
+    @Schema(description = "娴侀噺璁℃崯鍧�(姝e父閫氳浣嗙灛鏃朵负0)鎶ヨ(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmWaterMeterBreak;
+
+    @Schema(description = "鐢佃〃鏁呴殰鎶ヨ(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmEleMeterFault;
+
+    @Schema(description = "鍓╀綑閲戦涓�0(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarm0MoneyRemain;
+
+    @Schema(description = "鎺у埗鍣ㄥ唴闂ㄦ姤璀�(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmInnerDoor;
+
+    @Schema(description = "鎺у埗鍣ㄥ闂ㄦ墦寮�鎶ヨ(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmOuterDoor;
+
+    @Schema(description = "浜ゆ祦缂洪」鎶ヨ(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmEleMiss;
+
+    @Schema(description = "浜ゆ祦杩囨祦鎶ヨ(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmEleExceed;
+
+    @Schema(description = "涓夌浉鐢垫瑺鍘嬫姤璀�(1锛氭姤璀︼紝0锛氭甯�)")
+    private Byte alarmEleLowVolt;
+
+    @Schema(description = "IC鍗$姸鎬�(1銆佹湁鏁堬紝0锛氭棤鏁�)")
+    private Byte stateIcEnable;
+
+    @Schema(description = "鐢垫睜鐢靛帇鎶ヨ锛�1锛氭姤璀︼紝0锛氭甯革級")
+    private Byte alarmBatteryVolt;
+
+    @Schema(description = "闃�闂ㄦ姤璀︼紙1锛氭姤璀︼紝0锛氭甯革級")
+    private Byte alarmValve;
+
+    @Schema(description = "渚涚數鏂瑰紡锛�0: 220V锛�1锛氳搫鐢垫睜锛�")
+    private Byte powerType;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 7b4214b..48c3eb0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -72,7 +72,7 @@
 
 pipIrr:
     global:
-        dev: true   #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
+        dev: false   #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
         dsName: ym  #寮�鍙戦樁娈碉紝璁剧疆涓存椂鐨勬暟鎹簱鍚嶇О
     mw:
         webPort: 8070
@@ -130,6 +130,14 @@
 #    ym: 100
 #    pj: 101
 
+#椤圭洰閰嶇疆
+project:
+    #椤圭洰缂栫爜
+    projectNo: 10
+    #鎺у埗鍣ㄧ被鍨�
+    controllerType: 57
+
+
 #閫氳鍗忚
 #protocol: DYJS_2023,DYJS_2024
 mw:
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml
index dcddb9b..924a29c 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateHistoryMapper.xml
@@ -1,327 +1,495 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.dy.pipIrrGlobal.daoRm.RmAlarmStateHistoryMapper">
-  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
-    <!--@mbg.generated-->
-    <!--@Table rm_alarm_state_history-->
-    <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="controller_id" jdbcType="BIGINT" property="controllerId" />
-    <result column="intake_id" jdbcType="BIGINT" property="intakeId" />
-    <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr" />
-    <result column="dt" jdbcType="TIMESTAMP" property="dt" />
-    <result column="rtu_dt" jdbcType="TIMESTAMP" property="rtuDt" />
-    <result column="valve_state" jdbcType="TINYINT" property="valveState" />
-    <result column="alarm_remain_water" jdbcType="TINYINT" property="alarmRemainWater" />
-    <result column="alarm0_water_remain" jdbcType="TINYINT" property="alarm0WaterRemain" />
-    <result column="alarm_exceed_year" jdbcType="TINYINT" property="alarmExceedYear" />
-    <result column="alarm_water_meter_fault" jdbcType="TINYINT" property="alarmWaterMeterFault" />
-    <result column="alarm_loss" jdbcType="TINYINT" property="alarmLoss" />
-    <result column="alarm_water_meter_break" jdbcType="TINYINT" property="alarmWaterMeterBreak" />
-    <result column="alarm_ele_meter_fault" jdbcType="TINYINT" property="alarmEleMeterFault" />
-    <result column="alarm0_money_remain" jdbcType="TINYINT" property="alarm0MoneyRemain" />
-    <result column="alarm_inner_door" jdbcType="TINYINT" property="alarmInnerDoor" />
-    <result column="alarm_outer_door" jdbcType="TINYINT" property="alarmOuterDoor" />
-    <result column="alarm_ele_miss" jdbcType="TINYINT" property="alarmEleMiss" />
-    <result column="alarm_ele_exceed" jdbcType="TINYINT" property="alarmEleExceed" />
-    <result column="alarm_ele_low_volt" jdbcType="TINYINT" property="alarmEleLowVolt" />
-    <result column="state_ic_enable" jdbcType="TINYINT" property="stateIcEnable" />
-    <result column="alarm_battery_volt" jdbcType="TINYINT" property="alarmBatteryVolt" />
-    <result column="alarm_valve" jdbcType="TINYINT" property="alarmValve" />
-    <result column="power_type" jdbcType="TINYINT" property="powerType" />
-  </resultMap>
-  <sql id="Base_Column_List">
-    <!--@mbg.generated-->
-    id, controller_id, intake_id, rtu_addr, dt, rtu_dt, valve_state, alarm_remain_water, 
-    alarm0_water_remain, alarm_exceed_year, alarm_water_meter_fault, alarm_loss, alarm_water_meter_break, 
-    alarm_ele_meter_fault, alarm0_money_remain, alarm_inner_door, alarm_outer_door, alarm_ele_miss, 
-    alarm_ele_exceed, alarm_ele_low_volt, state_ic_enable,alarm_battery_volt,alarm_valve,power_type
-  </sql>
-  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    <!--@mbg.generated-->
-    select 
-    <include refid="Base_Column_List" />
-    from rm_alarm_state_history
-    where id = #{id,jdbcType=BIGINT}
-  </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
-    <!--@mbg.generated-->
-    delete from rm_alarm_state_history
-    where id = #{id,jdbcType=BIGINT}
-  </delete>
-  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
-    <!--@mbg.generated-->
-    insert into rm_alarm_state_history (id, controller_id, intake_id, 
-      rtu_addr, dt, rtu_dt, 
-      valve_state, alarm_remain_water, alarm0_water_remain, 
-      alarm_exceed_year, alarm_water_meter_fault, 
-      alarm_loss, alarm_water_meter_break, alarm_ele_meter_fault, 
-      alarm0_money_remain, alarm_inner_door, alarm_outer_door, 
-      alarm_ele_miss, alarm_ele_exceed, alarm_ele_low_volt, 
-      state_ic_enable,alarm_battery_volt,alarm_valve,power_type)
-    values (#{id,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, 
-      #{rtuAddr,jdbcType=VARCHAR}, #{dt,jdbcType=TIMESTAMP}, #{rtuDt,jdbcType=TIMESTAMP}, 
-      #{valveState,jdbcType=TINYINT}, #{alarmRemainWater,jdbcType=TINYINT}, #{alarm0WaterRemain,jdbcType=TINYINT}, 
-      #{alarmExceedYear,jdbcType=TINYINT}, #{alarmWaterMeterFault,jdbcType=TINYINT}, 
-      #{alarmLoss,jdbcType=TINYINT}, #{alarmWaterMeterBreak,jdbcType=TINYINT}, #{alarmEleMeterFault,jdbcType=TINYINT}, 
-      #{alarm0MoneyRemain,jdbcType=TINYINT}, #{alarmInnerDoor,jdbcType=TINYINT}, #{alarmOuterDoor,jdbcType=TINYINT}, 
-      #{alarmEleMiss,jdbcType=TINYINT}, #{alarmEleExceed,jdbcType=TINYINT}, #{alarmEleLowVolt,jdbcType=TINYINT}, 
-      #{stateIcEnable,jdbcType=TINYINT}, #{alarmBatteryVolt,jdbcType=TINYINT}, #{alarmValve,jdbcType=TINYINT},
-      #{powerType,jdbcType=TINYINT})
-  </insert>
-  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
-    <!--@mbg.generated-->
-    insert into rm_alarm_state_history
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
+    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
+        <!--@mbg.generated-->
+        <!--@Table rm_alarm_state_history-->
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="controller_id" jdbcType="BIGINT" property="controllerId"/>
+        <result column="intake_id" jdbcType="BIGINT" property="intakeId"/>
+        <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr"/>
+        <result column="dt" jdbcType="TIMESTAMP" property="dt"/>
+        <result column="rtu_dt" jdbcType="TIMESTAMP" property="rtuDt"/>
+        <result column="valve_state" jdbcType="TINYINT" property="valveState"/>
+        <result column="alarm_remain_water" jdbcType="TINYINT" property="alarmRemainWater"/>
+        <result column="alarm0_water_remain" jdbcType="TINYINT" property="alarm0WaterRemain"/>
+        <result column="alarm_exceed_year" jdbcType="TINYINT" property="alarmExceedYear"/>
+        <result column="alarm_water_meter_fault" jdbcType="TINYINT" property="alarmWaterMeterFault"/>
+        <result column="alarm_loss" jdbcType="TINYINT" property="alarmLoss"/>
+        <result column="alarm_water_meter_break" jdbcType="TINYINT" property="alarmWaterMeterBreak"/>
+        <result column="alarm_ele_meter_fault" jdbcType="TINYINT" property="alarmEleMeterFault"/>
+        <result column="alarm0_money_remain" jdbcType="TINYINT" property="alarm0MoneyRemain"/>
+        <result column="alarm_inner_door" jdbcType="TINYINT" property="alarmInnerDoor"/>
+        <result column="alarm_outer_door" jdbcType="TINYINT" property="alarmOuterDoor"/>
+        <result column="alarm_ele_miss" jdbcType="TINYINT" property="alarmEleMiss"/>
+        <result column="alarm_ele_exceed" jdbcType="TINYINT" property="alarmEleExceed"/>
+        <result column="alarm_ele_low_volt" jdbcType="TINYINT" property="alarmEleLowVolt"/>
+        <result column="state_ic_enable" jdbcType="TINYINT" property="stateIcEnable"/>
+        <result column="alarm_battery_volt" jdbcType="TINYINT" property="alarmBatteryVolt"/>
+        <result column="alarm_valve" jdbcType="TINYINT" property="alarmValve"/>
+        <result column="power_type" jdbcType="TINYINT" property="powerType"/>
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--@mbg.generated-->
         id,
-      </if>
-      <if test="controllerId != null">
         controller_id,
-      </if>
-      <if test="intakeId != null">
         intake_id,
-      </if>
-      <if test="rtuAddr != null">
         rtu_addr,
-      </if>
-      <if test="dt != null">
         dt,
-      </if>
-      <if test="rtuDt != null">
         rtu_dt,
-      </if>
-      <if test="valveState != null">
         valve_state,
-      </if>
-      <if test="alarmRemainWater != null">
         alarm_remain_water,
-      </if>
-      <if test="alarm0WaterRemain != null">
         alarm0_water_remain,
-      </if>
-      <if test="alarmExceedYear != null">
         alarm_exceed_year,
-      </if>
-      <if test="alarmWaterMeterFault != null">
         alarm_water_meter_fault,
-      </if>
-      <if test="alarmLoss != null">
         alarm_loss,
-      </if>
-      <if test="alarmWaterMeterBreak != null">
         alarm_water_meter_break,
-      </if>
-      <if test="alarmEleMeterFault != null">
         alarm_ele_meter_fault,
-      </if>
-      <if test="alarm0MoneyRemain != null">
         alarm0_money_remain,
-      </if>
-      <if test="alarmInnerDoor != null">
         alarm_inner_door,
-      </if>
-      <if test="alarmOuterDoor != null">
         alarm_outer_door,
-      </if>
-      <if test="alarmEleMiss != null">
         alarm_ele_miss,
-      </if>
-      <if test="alarmEleExceed != null">
         alarm_ele_exceed,
-      </if>
-      <if test="alarmEleLowVolt != null">
         alarm_ele_low_volt,
-      </if>
-      <if test="stateIcEnable != null">
         state_ic_enable,
-      </if>
-      <if test="alarmBatteryVolt != null">
         alarm_battery_volt,
-      </if>
-      <if test="alarmValve != null">
         alarm_valve,
-      </if>
-      <if test="powerType != null">
-        power_type,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=BIGINT},
-      </if>
-      <if test="controllerId != null">
-        #{controllerId,jdbcType=BIGINT},
-      </if>
-      <if test="intakeId != null">
-        #{intakeId,jdbcType=BIGINT},
-      </if>
-      <if test="rtuAddr != null">
-        #{rtuAddr,jdbcType=VARCHAR},
-      </if>
-      <if test="dt != null">
-        #{dt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="rtuDt != null">
-        #{rtuDt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="valveState != null">
-        #{valveState,jdbcType=TINYINT},
-      </if>
-      <if test="alarmRemainWater != null">
-        #{alarmRemainWater,jdbcType=TINYINT},
-      </if>
-      <if test="alarm0WaterRemain != null">
-        #{alarm0WaterRemain,jdbcType=TINYINT},
-      </if>
-      <if test="alarmExceedYear != null">
-        #{alarmExceedYear,jdbcType=TINYINT},
-      </if>
-      <if test="alarmWaterMeterFault != null">
-        #{alarmWaterMeterFault,jdbcType=TINYINT},
-      </if>
-      <if test="alarmLoss != null">
-        #{alarmLoss,jdbcType=TINYINT},
-      </if>
-      <if test="alarmWaterMeterBreak != null">
-        #{alarmWaterMeterBreak,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleMeterFault != null">
-        #{alarmEleMeterFault,jdbcType=TINYINT},
-      </if>
-      <if test="alarm0MoneyRemain != null">
-        #{alarm0MoneyRemain,jdbcType=TINYINT},
-      </if>
-      <if test="alarmInnerDoor != null">
-        #{alarmInnerDoor,jdbcType=TINYINT},
-      </if>
-      <if test="alarmOuterDoor != null">
-        #{alarmOuterDoor,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleMiss != null">
-        #{alarmEleMiss,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleExceed != null">
-        #{alarmEleExceed,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleLowVolt != null">
-        #{alarmEleLowVolt,jdbcType=TINYINT},
-      </if>
-      <if test="stateIcEnable != null">
-        #{stateIcEnable,jdbcType=TINYINT},
-      </if>
-      <if test="alarmBatteryVolt != null">
-        #{alarmBatteryVolt,jdbcType=TINYINT},
-      </if>
-      <if test="alarmValve != null">
-        #{alarmValve,jdbcType=TINYINT},
-      </if>
-     <if test="powerType != null">
-        #{powerType,jdbcType=TINYINT},
-      </if>
-    </trim>
-  </insert>
-  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
-    <!--@mbg.generated-->
-    update rm_alarm_state_history
-    <set>
-      <if test="controllerId != null">
-        controller_id = #{controllerId,jdbcType=BIGINT},
-      </if>
-      <if test="intakeId != null">
-        intake_id = #{intakeId,jdbcType=BIGINT},
-      </if>
-      <if test="rtuAddr != null">
-        rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
-      </if>
-      <if test="dt != null">
-        dt = #{dt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="rtuDt != null">
-        rtu_dt = #{rtuDt,jdbcType=TIMESTAMP},
-      </if>
-      <if test="valveState != null">
-        valve_state = #{valveState,jdbcType=TINYINT},
-      </if>
-      <if test="alarmRemainWater != null">
-        alarm_remain_water = #{alarmRemainWater,jdbcType=TINYINT},
-      </if>
-      <if test="alarm0WaterRemain != null">
-        alarm0_water_remain = #{alarm0WaterRemain,jdbcType=TINYINT},
-      </if>
-      <if test="alarmExceedYear != null">
-        alarm_exceed_year = #{alarmExceedYear,jdbcType=TINYINT},
-      </if>
-      <if test="alarmWaterMeterFault != null">
-        alarm_water_meter_fault = #{alarmWaterMeterFault,jdbcType=TINYINT},
-      </if>
-      <if test="alarmLoss != null">
-        alarm_loss = #{alarmLoss,jdbcType=TINYINT},
-      </if>
-      <if test="alarmWaterMeterBreak != null">
-        alarm_water_meter_break = #{alarmWaterMeterBreak,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleMeterFault != null">
-        alarm_ele_meter_fault = #{alarmEleMeterFault,jdbcType=TINYINT},
-      </if>
-      <if test="alarm0MoneyRemain != null">
-        alarm0_money_remain = #{alarm0MoneyRemain,jdbcType=TINYINT},
-      </if>
-      <if test="alarmInnerDoor != null">
-        alarm_inner_door = #{alarmInnerDoor,jdbcType=TINYINT},
-      </if>
-      <if test="alarmOuterDoor != null">
-        alarm_outer_door = #{alarmOuterDoor,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleMiss != null">
-        alarm_ele_miss = #{alarmEleMiss,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleExceed != null">
-        alarm_ele_exceed = #{alarmEleExceed,jdbcType=TINYINT},
-      </if>
-      <if test="alarmEleLowVolt != null">
-        alarm_ele_low_volt = #{alarmEleLowVolt,jdbcType=TINYINT},
-      </if>
-      <if test="stateIcEnable != null">
-        state_ic_enable = #{stateIcEnable,jdbcType=TINYINT},
-      </if>
-      <if test="alarmBatteryVolt != null">
-        alarm_battery_volt = #{alarmBatteryVolt,jdbcType=TINYINT},
-      </if>
-     <if test="alarmValve != null">
-        alarm_valve = #{alarmValve,jdbcType=TINYINT},
-      </if>
-    <if test="powerType != null">
-        power_type = #{powerType,jdbcType=TINYINT},
-      </if>
-    </set>
-    where id = #{id,jdbcType=BIGINT}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
-    <!--@mbg.generated-->
-    update rm_alarm_state_history
-    set controller_id = #{controllerId,jdbcType=BIGINT},
-      intake_id = #{intakeId,jdbcType=BIGINT},
-      rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
-      dt = #{dt,jdbcType=TIMESTAMP},
-      rtu_dt = #{rtuDt,jdbcType=TIMESTAMP},
-      valve_state = #{valveState,jdbcType=TINYINT},
-      alarm_remain_water = #{alarmRemainWater,jdbcType=TINYINT},
-      alarm0_water_remain = #{alarm0WaterRemain,jdbcType=TINYINT},
-      alarm_exceed_year = #{alarmExceedYear,jdbcType=TINYINT},
-      alarm_water_meter_fault = #{alarmWaterMeterFault,jdbcType=TINYINT},
-      alarm_loss = #{alarmLoss,jdbcType=TINYINT},
-      alarm_water_meter_break = #{alarmWaterMeterBreak,jdbcType=TINYINT},
-      alarm_ele_meter_fault = #{alarmEleMeterFault,jdbcType=TINYINT},
-      alarm0_money_remain = #{alarm0MoneyRemain,jdbcType=TINYINT},
-      alarm_inner_door = #{alarmInnerDoor,jdbcType=TINYINT},
-      alarm_outer_door = #{alarmOuterDoor,jdbcType=TINYINT},
-      alarm_ele_miss = #{alarmEleMiss,jdbcType=TINYINT},
-      alarm_ele_exceed = #{alarmEleExceed,jdbcType=TINYINT},
-      alarm_ele_low_volt = #{alarmEleLowVolt,jdbcType=TINYINT},
-      state_ic_enable = #{stateIcEnable,jdbcType=TINYINT},
-      alarm_battery_volt = #{alarmBatteryVolt,jdbcType=TINYINT},
-      alarm_valve = #{alarmValve,jdbcType=TINYINT},
-      power_type = #{powerType,jdbcType=TINYINT}
-    where id = #{id,jdbcType=BIGINT}
-  </update>
+        power_type
+    </sql>
+    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+        <!--@mbg.generated-->
+        select
+        <include refid="Base_Column_List"/>
+        from rm_alarm_state_history
+        where id = #{id,jdbcType=BIGINT}
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+        <!--@mbg.generated-->
+        delete
+        from rm_alarm_state_history
+        where id = #{id,jdbcType=BIGINT}
+    </delete>
+    <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
+        <!--@mbg.generated-->
+        insert into rm_alarm_state_history (id, controller_id, intake_id,
+                                            rtu_addr, dt, rtu_dt,
+                                            valve_state, alarm_remain_water, alarm0_water_remain,
+                                            alarm_exceed_year, alarm_water_meter_fault,
+                                            alarm_loss, alarm_water_meter_break, alarm_ele_meter_fault,
+                                            alarm0_money_remain, alarm_inner_door, alarm_outer_door,
+                                            alarm_ele_miss, alarm_ele_exceed, alarm_ele_low_volt,
+                                            state_ic_enable, alarm_battery_volt, alarm_valve, power_type)
+        values (#{id,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT},
+                #{rtuAddr,jdbcType=VARCHAR}, #{dt,jdbcType=TIMESTAMP}, #{rtuDt,jdbcType=TIMESTAMP},
+                #{valveState,jdbcType=TINYINT}, #{alarmRemainWater,jdbcType=TINYINT},
+                #{alarm0WaterRemain,jdbcType=TINYINT},
+                #{alarmExceedYear,jdbcType=TINYINT}, #{alarmWaterMeterFault,jdbcType=TINYINT},
+                #{alarmLoss,jdbcType=TINYINT}, #{alarmWaterMeterBreak,jdbcType=TINYINT},
+                #{alarmEleMeterFault,jdbcType=TINYINT},
+                #{alarm0MoneyRemain,jdbcType=TINYINT}, #{alarmInnerDoor,jdbcType=TINYINT},
+                #{alarmOuterDoor,jdbcType=TINYINT},
+                #{alarmEleMiss,jdbcType=TINYINT}, #{alarmEleExceed,jdbcType=TINYINT},
+                #{alarmEleLowVolt,jdbcType=TINYINT},
+                #{stateIcEnable,jdbcType=TINYINT}, #{alarmBatteryVolt,jdbcType=TINYINT}, #{alarmValve,jdbcType=TINYINT},
+                #{powerType,jdbcType=TINYINT})
+    </insert>
+    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
+        <!--@mbg.generated-->
+        insert into rm_alarm_state_history
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="controllerId != null">
+                controller_id,
+            </if>
+            <if test="intakeId != null">
+                intake_id,
+            </if>
+            <if test="rtuAddr != null">
+                rtu_addr,
+            </if>
+            <if test="dt != null">
+                dt,
+            </if>
+            <if test="rtuDt != null">
+                rtu_dt,
+            </if>
+            <if test="valveState != null">
+                valve_state,
+            </if>
+            <if test="alarmRemainWater != null">
+                alarm_remain_water,
+            </if>
+            <if test="alarm0WaterRemain != null">
+                alarm0_water_remain,
+            </if>
+            <if test="alarmExceedYear != null">
+                alarm_exceed_year,
+            </if>
+            <if test="alarmWaterMeterFault != null">
+                alarm_water_meter_fault,
+            </if>
+            <if test="alarmLoss != null">
+                alarm_loss,
+            </if>
+            <if test="alarmWaterMeterBreak != null">
+                alarm_water_meter_break,
+            </if>
+            <if test="alarmEleMeterFault != null">
+                alarm_ele_meter_fault,
+            </if>
+            <if test="alarm0MoneyRemain != null">
+                alarm0_money_remain,
+            </if>
+            <if test="alarmInnerDoor != null">
+                alarm_inner_door,
+            </if>
+            <if test="alarmOuterDoor != null">
+                alarm_outer_door,
+            </if>
+            <if test="alarmEleMiss != null">
+                alarm_ele_miss,
+            </if>
+            <if test="alarmEleExceed != null">
+                alarm_ele_exceed,
+            </if>
+            <if test="alarmEleLowVolt != null">
+                alarm_ele_low_volt,
+            </if>
+            <if test="stateIcEnable != null">
+                state_ic_enable,
+            </if>
+            <if test="alarmBatteryVolt != null">
+                alarm_battery_volt,
+            </if>
+            <if test="alarmValve != null">
+                alarm_valve,
+            </if>
+            <if test="powerType != null">
+                power_type,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=BIGINT},
+            </if>
+            <if test="controllerId != null">
+                #{controllerId,jdbcType=BIGINT},
+            </if>
+            <if test="intakeId != null">
+                #{intakeId,jdbcType=BIGINT},
+            </if>
+            <if test="rtuAddr != null">
+                #{rtuAddr,jdbcType=VARCHAR},
+            </if>
+            <if test="dt != null">
+                #{dt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="rtuDt != null">
+                #{rtuDt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="valveState != null">
+                #{valveState,jdbcType=TINYINT},
+            </if>
+            <if test="alarmRemainWater != null">
+                #{alarmRemainWater,jdbcType=TINYINT},
+            </if>
+            <if test="alarm0WaterRemain != null">
+                #{alarm0WaterRemain,jdbcType=TINYINT},
+            </if>
+            <if test="alarmExceedYear != null">
+                #{alarmExceedYear,jdbcType=TINYINT},
+            </if>
+            <if test="alarmWaterMeterFault != null">
+                #{alarmWaterMeterFault,jdbcType=TINYINT},
+            </if>
+            <if test="alarmLoss != null">
+                #{alarmLoss,jdbcType=TINYINT},
+            </if>
+            <if test="alarmWaterMeterBreak != null">
+                #{alarmWaterMeterBreak,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleMeterFault != null">
+                #{alarmEleMeterFault,jdbcType=TINYINT},
+            </if>
+            <if test="alarm0MoneyRemain != null">
+                #{alarm0MoneyRemain,jdbcType=TINYINT},
+            </if>
+            <if test="alarmInnerDoor != null">
+                #{alarmInnerDoor,jdbcType=TINYINT},
+            </if>
+            <if test="alarmOuterDoor != null">
+                #{alarmOuterDoor,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleMiss != null">
+                #{alarmEleMiss,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleExceed != null">
+                #{alarmEleExceed,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleLowVolt != null">
+                #{alarmEleLowVolt,jdbcType=TINYINT},
+            </if>
+            <if test="stateIcEnable != null">
+                #{stateIcEnable,jdbcType=TINYINT},
+            </if>
+            <if test="alarmBatteryVolt != null">
+                #{alarmBatteryVolt,jdbcType=TINYINT},
+            </if>
+            <if test="alarmValve != null">
+                #{alarmValve,jdbcType=TINYINT},
+            </if>
+            <if test="powerType != null">
+                #{powerType,jdbcType=TINYINT},
+            </if>
+        </trim>
+    </insert>
+    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
+        <!--@mbg.generated-->
+        update rm_alarm_state_history
+        <set>
+            <if test="controllerId != null">
+                controller_id = #{controllerId,jdbcType=BIGINT},
+            </if>
+            <if test="intakeId != null">
+                intake_id = #{intakeId,jdbcType=BIGINT},
+            </if>
+            <if test="rtuAddr != null">
+                rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
+            </if>
+            <if test="dt != null">
+                dt = #{dt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="rtuDt != null">
+                rtu_dt = #{rtuDt,jdbcType=TIMESTAMP},
+            </if>
+            <if test="valveState != null">
+                valve_state = #{valveState,jdbcType=TINYINT},
+            </if>
+            <if test="alarmRemainWater != null">
+                alarm_remain_water = #{alarmRemainWater,jdbcType=TINYINT},
+            </if>
+            <if test="alarm0WaterRemain != null">
+                alarm0_water_remain = #{alarm0WaterRemain,jdbcType=TINYINT},
+            </if>
+            <if test="alarmExceedYear != null">
+                alarm_exceed_year = #{alarmExceedYear,jdbcType=TINYINT},
+            </if>
+            <if test="alarmWaterMeterFault != null">
+                alarm_water_meter_fault = #{alarmWaterMeterFault,jdbcType=TINYINT},
+            </if>
+            <if test="alarmLoss != null">
+                alarm_loss = #{alarmLoss,jdbcType=TINYINT},
+            </if>
+            <if test="alarmWaterMeterBreak != null">
+                alarm_water_meter_break = #{alarmWaterMeterBreak,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleMeterFault != null">
+                alarm_ele_meter_fault = #{alarmEleMeterFault,jdbcType=TINYINT},
+            </if>
+            <if test="alarm0MoneyRemain != null">
+                alarm0_money_remain = #{alarm0MoneyRemain,jdbcType=TINYINT},
+            </if>
+            <if test="alarmInnerDoor != null">
+                alarm_inner_door = #{alarmInnerDoor,jdbcType=TINYINT},
+            </if>
+            <if test="alarmOuterDoor != null">
+                alarm_outer_door = #{alarmOuterDoor,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleMiss != null">
+                alarm_ele_miss = #{alarmEleMiss,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleExceed != null">
+                alarm_ele_exceed = #{alarmEleExceed,jdbcType=TINYINT},
+            </if>
+            <if test="alarmEleLowVolt != null">
+                alarm_ele_low_volt = #{alarmEleLowVolt,jdbcType=TINYINT},
+            </if>
+            <if test="stateIcEnable != null">
+                state_ic_enable = #{stateIcEnable,jdbcType=TINYINT},
+            </if>
+            <if test="alarmBatteryVolt != null">
+                alarm_battery_volt = #{alarmBatteryVolt,jdbcType=TINYINT},
+            </if>
+            <if test="alarmValve != null">
+                alarm_valve = #{alarmValve,jdbcType=TINYINT},
+            </if>
+            <if test="powerType != null">
+                power_type = #{powerType,jdbcType=TINYINT},
+            </if>
+        </set>
+        where id = #{id,jdbcType=BIGINT}
+    </update>
+    <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory">
+        <!--@mbg.generated-->
+        update rm_alarm_state_history
+        set controller_id           = #{controllerId,jdbcType=BIGINT},
+            intake_id               = #{intakeId,jdbcType=BIGINT},
+            rtu_addr                = #{rtuAddr,jdbcType=VARCHAR},
+            dt                      = #{dt,jdbcType=TIMESTAMP},
+            rtu_dt                  = #{rtuDt,jdbcType=TIMESTAMP},
+            valve_state             = #{valveState,jdbcType=TINYINT},
+            alarm_remain_water      = #{alarmRemainWater,jdbcType=TINYINT},
+            alarm0_water_remain     = #{alarm0WaterRemain,jdbcType=TINYINT},
+            alarm_exceed_year       = #{alarmExceedYear,jdbcType=TINYINT},
+            alarm_water_meter_fault = #{alarmWaterMeterFault,jdbcType=TINYINT},
+            alarm_loss              = #{alarmLoss,jdbcType=TINYINT},
+            alarm_water_meter_break = #{alarmWaterMeterBreak,jdbcType=TINYINT},
+            alarm_ele_meter_fault   = #{alarmEleMeterFault,jdbcType=TINYINT},
+            alarm0_money_remain     = #{alarm0MoneyRemain,jdbcType=TINYINT},
+            alarm_inner_door        = #{alarmInnerDoor,jdbcType=TINYINT},
+            alarm_outer_door        = #{alarmOuterDoor,jdbcType=TINYINT},
+            alarm_ele_miss          = #{alarmEleMiss,jdbcType=TINYINT},
+            alarm_ele_exceed        = #{alarmEleExceed,jdbcType=TINYINT},
+            alarm_ele_low_volt      = #{alarmEleLowVolt,jdbcType=TINYINT},
+            state_ic_enable         = #{stateIcEnable,jdbcType=TINYINT},
+            alarm_battery_volt      = #{alarmBatteryVolt,jdbcType=TINYINT},
+            alarm_valve             = #{alarmValve,jdbcType=TINYINT},
+            power_type              = #{powerType,jdbcType=TINYINT}
+        where id = #{id,jdbcType=BIGINT}
+    </update>
+    <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟-->
+<select id="getRecordCount" resultType="java.lang.Long">
+    select count(*)
+    from rm_alarm_state_history rash
+    Left join pr_intake pint on rash.intake_id = pint.id
+    <where>
+       <if test="alarmState == 1">
+                and (
+                    alarm_remain_water = 1
+                    or alarm0_water_remain = 1
+                    or alarm_exceed_year = 1
+                    or alarm_water_meter_fault = 1
+                    or alarm_loss = 1
+                    or alarm_water_meter_break = 1
+                    or alarm_ele_meter_fault = 1
+                    or alarm0_money_remain = 1
+                    or alarm_inner_door = 1
+                    or alarm_outer_door = 1
+                    or alarm_ele_miss = 1
+                    or alarm_ele_exceed = 1
+                    or alarm_ele_low_volt = 1
+                    or alarm_battery_volt = 1
+                    or alarm_valve = 1
+                )
+       </if>
+       <if test="alarmState == 0">
+           and (
+                alarm_remain_water = 0
+                and alarm0_water_remain = 0
+                and alarm_exceed_year = 0
+                and alarm_water_meter_fault = 0
+                and alarm_loss = 0
+                and alarm_water_meter_break = 0
+                and alarm_ele_meter_fault = 0
+                and alarm0_money_remain = 0
+                and alarm_inner_door = 0
+                and alarm_outer_door = 0
+                and alarm_ele_miss = 0
+                and alarm_ele_exceed = 0
+                and alarm_ele_low_volt = 0
+                and alarm_battery_volt = 0
+                and alarm_valve = 0
+                )
+        </if>
+        <if test="valveState != null">
+            and rash.valve_state = #{valveState,jdbcType=TINYINT}
+        </if>
+        <if test="intakeName != null">
+             and pint.name = #{intakeName,jdbcType=VARCHAR}
+        </if>
+        <if test="startDt != null">
+             and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+        </if>
+        <if test="endDt != null">
+             and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+        </if>
+        </where>
+    </select>
+    <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+    <select id="getControllerAlarmStateHistory" resultType="com.dy.pipIrrGlobal.voRm.VoControllerAlarmState">
+        select
+        CAST(rash.controller_id AS char)AS controllerId,
+        CAST(rash.intake_id AS char)AS intakeId,
+        pint.name as intakeName,
+        rash.rtu_addr as rtuAddr,
+        rash.dt as dt,
+        rash.valve_state as valveState,
+        rash.alarm_remain_water as alarmRemainWater,
+        rash.alarm0_water_remain as alarm0WaterRemain,
+        rash.alarm_exceed_year as alarmExceedYear,
+        rash.alarm_water_meter_fault as alarmWaterMeterFault,
+        rash.alarm_loss as alarmLoss,
+        rash.alarm_water_meter_break as alarmWaterMeterBreak,
+        rash.alarm_ele_meter_fault as alarmEleMeterFault,
+        rash.alarm0_money_remain as alarm0MoneyRemain,
+        rash.alarm_inner_door as alarmInnerDoor,
+        rash.alarm_outer_door as alarmOuterDoor,
+        rash.alarm_ele_miss as alarmEleMiss,
+        rash.alarm_ele_exceed as alarmEleExceed,
+        rash.alarm_ele_low_volt as alarmEleLowVolt,
+        rash.state_ic_enable as stateIcEnable,
+        rash.alarm_battery_volt as alarmBatteryVolt,
+        rash.alarm_valve as alarmValve,
+        rash.power_type as powerType
+        from rm_alarm_state_history rash
+        Left join pr_intake pint on rash.intake_id = pint.id
+        <where>
+            <if test="alarmState == 1">
+                and (
+                alarm_remain_water = 1
+                or alarm0_water_remain = 1
+                or alarm_exceed_year = 1
+                or alarm_water_meter_fault = 1
+                or alarm_loss = 1
+                or alarm_water_meter_break = 1
+                or alarm_ele_meter_fault = 1
+                or alarm0_money_remain = 1
+                or alarm_inner_door = 1
+                or alarm_outer_door = 1
+                or alarm_ele_miss = 1
+                or alarm_ele_exceed = 1
+                or alarm_ele_low_volt = 1
+                or alarm_battery_volt = 1
+                or alarm_valve = 1
+                )
+            </if>
+            <if test="alarmState == 0">
+                and (
+                alarm_remain_water = 0
+                and alarm0_water_remain = 0
+                and alarm_exceed_year = 0
+                and alarm_water_meter_fault = 0
+                and alarm_loss = 0
+                and alarm_water_meter_break = 0
+                and alarm_ele_meter_fault = 0
+                and alarm0_money_remain = 0
+                and alarm_inner_door = 0
+                and alarm_outer_door = 0
+                and alarm_ele_miss = 0
+                and alarm_ele_exceed = 0
+                and alarm_ele_low_volt = 0
+                and alarm_battery_volt = 0
+                and alarm_valve = 0
+                )
+            </if>
+            <if test="valveState != null">
+                and rash.valve_state = #{valveState,jdbcType=TINYINT}
+            </if>
+            <if test="intakeName != null">
+                and pint.name like CONCAT('%',#{intakeName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="startDt != null">
+                and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+            </if>
+            <if test="endDt != null">
+                and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+            </if>
+        </where>
+        ORDER BY rash.dt DESC
+        <if test="pageCurr != null and pageSize != null">
+            LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+        </if>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
index b24461d..6fb51ff 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmAlarmStateLastMapper.xml
@@ -331,4 +331,147 @@
       power_type = #{powerType,jdbcType=TINYINT}
     where id = #{id,jdbcType=BIGINT}
   </update>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟-->
+  <select id="getRecordCount" resultType="java.lang.Long">
+    select count(*)
+    from rm_alarm_state_last rasl
+    Left join pr_intake pint on intake_id = pint.id
+    <where>
+      <if test="alarmState == 1">
+        and (
+        alarm_remain_water = 1
+        or alarm0_water_remain = 1
+        or alarm_exceed_year = 1
+        or alarm_water_meter_fault = 1
+        or alarm_loss = 1
+        or alarm_water_meter_break = 1
+        or alarm_ele_meter_fault = 1
+        or alarm0_money_remain = 1
+        or alarm_inner_door = 1
+        or alarm_outer_door = 1
+        or alarm_ele_miss = 1
+        or alarm_ele_exceed = 1
+        or alarm_ele_low_volt = 1
+        or alarm_battery_volt = 1
+        or alarm_valve = 1
+        )
+      </if>
+      <if test="alarmState == 0">
+        and (
+        alarm_remain_water = 0
+        and alarm0_water_remain = 0
+        and alarm_exceed_year = 0
+        and alarm_water_meter_fault = 0
+        and alarm_loss = 0
+        and alarm_water_meter_break = 0
+        and alarm_ele_meter_fault = 0
+        and alarm0_money_remain = 0
+        and alarm_inner_door = 0
+        and alarm_outer_door = 0
+        and alarm_ele_miss = 0
+        and alarm_ele_exceed = 0
+        and alarm_ele_low_volt = 0
+        and alarm_battery_volt = 0
+        and alarm_valve = 0
+        )
+      </if>
+      <if test="valveState != null">
+        and rasl.valve_state = #{valveState,jdbcType=TINYINT}
+      </if>
+      <if test="intakeName != null">
+        and pint.name = #{intakeName,jdbcType=VARCHAR}
+      </if>
+      <if test="startDt != null">
+        and rasl.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rasl.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="getControllerAlarmStateLast" resultType="com.dy.pipIrrGlobal.voRm.VoControllerAlarmState">
+    select
+    CAST(rasl.controller_id AS char)AS controllerId,
+    CAST(rasl.intake_id AS char)AS intakeId,
+    pint.name as intakeName,
+    rasl.rtu_addr as rtuAddr,
+    rasl.dt as dt,
+    rasl.valve_state as valveState,
+    rasl.alarm_remain_water as alarmRemainWater,
+    rasl.alarm0_water_remain as alarm0WaterRemain,
+    rasl.alarm_exceed_year as alarmExceedYear,
+    rasl.alarm_water_meter_fault as alarmWaterMeterFault,
+    rasl.alarm_loss as alarmLoss,
+    rasl.alarm_water_meter_break as alarmWaterMeterBreak,
+    rasl.alarm_ele_meter_fault as alarmEleMeterFault,
+    rasl.alarm0_money_remain as alarm0MoneyRemain,
+    rasl.alarm_inner_door as alarmInnerDoor,
+    rasl.alarm_outer_door as alarmOuterDoor,
+    rasl.alarm_ele_miss as alarmEleMiss,
+    rasl.alarm_ele_exceed as alarmEleExceed,
+    rasl.alarm_ele_low_volt as alarmEleLowVolt,
+    rasl.state_ic_enable as stateIcEnable,
+    rasl.alarm_battery_volt as alarmBatteryVolt,
+    rasl.alarm_valve as alarmValve,
+    rasl.power_type as powerType
+    from rm_alarm_state_last rasl
+    Left join pr_intake pint on intake_id = pint.id
+    <where>
+      <if test="alarmState == 1">
+        and (
+        alarm_remain_water = 1
+        or alarm0_water_remain = 1
+        or alarm_exceed_year = 1
+        or alarm_water_meter_fault = 1
+        or alarm_loss = 1
+        or alarm_water_meter_break = 1
+        or alarm_ele_meter_fault = 1
+        or alarm0_money_remain = 1
+        or alarm_inner_door = 1
+        or alarm_outer_door = 1
+        or alarm_ele_miss = 1
+        or alarm_ele_exceed = 1
+        or alarm_ele_low_volt = 1
+        or alarm_battery_volt = 1
+        or alarm_valve = 1
+        )
+      </if>
+      <if test="alarmState == 0">
+        and (
+        alarm_remain_water = 0
+        and alarm0_water_remain = 0
+        and alarm_exceed_year = 0
+        and alarm_water_meter_fault = 0
+        and alarm_loss = 0
+        and alarm_water_meter_break = 0
+        and alarm_ele_meter_fault = 0
+        and alarm0_money_remain = 0
+        and alarm_inner_door = 0
+        and alarm_outer_door = 0
+        and alarm_ele_miss = 0
+        and alarm_ele_exceed = 0
+        and alarm_ele_low_volt = 0
+        and alarm_battery_volt = 0
+        and alarm_valve = 0
+        )
+      </if>
+      <if test="valveState != null">
+        and rasl.valve_state = #{valveState,jdbcType=TINYINT}
+      </if>
+      <if test="intakeName != null">
+        and pint.name like CONCAT('%',#{intakeName,jdbcType=VARCHAR},'%')
+      </if>
+      <if test="startDt != null">
+        and rasl.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rasl.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    ORDER BY rasl.dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+    </if>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml
index c7f20a2..8179361 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayLastMapper.xml
@@ -188,4 +188,53 @@
       rtu_dt_last = #{rtuDtLast,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}
   </update>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟-->
+  <select id="getRecordCount" resultType="java.lang.Long">
+    select count(*)
+    from rm_client_amount_day_last rcadl
+    Left join se_client sc on sc.id = rcadl.client_id
+    <where>
+      <if test="clientName != null">
+        and sc.name = #{clientName,jdbcType=VARCHAR}
+      </if>
+      <if test="startDt != null">
+        and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="getClientAmountDayLast" resultType="com.dy.pipIrrGlobal.voRm.VoClientAmountDay">
+    select
+    CAST(rcadl.client_id AS char)AS clientId,
+    rcadl.amount as amount,
+    rcadl.money as money,
+    rcadl.dt as dt,
+    rcadl.open_dt_last as openDtLast,
+    rcadl.close_dt_last as closeDtLast,
+    rcadl.this_amount_last as thisAmountLast,
+    rcadl.this_money_last as thisMoneyLast,
+    rcadl.this_time_last as thisTimeLast,
+    rcadl.rtu_dt_last as rtuDtLast,
+    sc.name as clientName
+    from rm_client_amount_day_last rcadl
+    Left join se_client sc on sc.id = rcadl.client_id
+    <where>
+      <if test="clientName != null">
+        and sc.name = #{clientName,jdbcType=VARCHAR}
+      </if>
+      <if test="startDt != null">
+        and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    ORDER BY rcadl.dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+    </if>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml
index cbd5d43..8c8f8ef 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmClientAmountDayMapper.xml
@@ -178,4 +178,53 @@
       rtu_dt_last = #{rtuDtLast,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}
   </update>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍鎬绘暟-->
+  <select id="getRecordCount" resultType="java.lang.Long">
+    select count(*)
+    from rm_client_amount_day rcad
+           Left join se_client sc on sc.id = rcad.client_id
+    <where>
+      <if test="clientName != null">
+        and sc.name = #{clientName,jdbcType=VARCHAR}
+      </if>
+      <if test="startDt != null">
+        and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="getClientAmountDayHistory" resultType="com.dy.pipIrrGlobal.voRm.VoClientAmountDay">
+    select
+    CAST(rcad.client_id AS char)AS clientId,
+    rcad.amount as amount,
+    rcad.money as money,
+    rcad.dt as dt,
+    rcad.open_dt_last as openDtLast,
+    rcad.close_dt_last as closeDtLast,
+    rcad.this_amount_last as thisAmountLast,
+    rcad.this_money_last as thisMoneyLast,
+    rcad.this_time_last as thisTimeLast,
+    rcad.rtu_dt_last as rtuDtLast,
+    sc.name as clientName
+    from rm_client_amount_day rcad
+    Left join se_client sc on sc.id = rcad.client_id
+    <where>
+      <if test="clientName != null">
+        and sc.name = #{clientName,jdbcType=VARCHAR}
+      </if>
+      <if test="startDt != null">
+        and rash.dt &gt;= #{startDt,jdbcType=TIMESTAMP}
+      </if>
+      <if test="endDt != null">
+        and rash.dt &lt;= #{endDt,jdbcType=TIMESTAMP}
+      </if>
+    </where>
+    ORDER BY rcad.dt DESC
+    <if test="pageCurr != null and pageSize != null">
+      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
+    </if>
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/MidResultActionError.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/MidResultActionError.java
index 21590fa..520b761 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/MidResultActionError.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/MidResultActionError.java
@@ -2,6 +2,7 @@
 
 import com.dy.common.mw.protocol.MidResult;
 import com.dy.common.mw.protocol.MidResultAction;
+import com.dy.common.mw.protocol.MidResultError;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -12,13 +13,13 @@
 
 	@Override
 	public void doAction(MidResult result) {
-		//if(result != null && result instanceof MidResultError){
-		//	MidResultError rs = (MidResultError)result ;
-		//	log.error("瑙f瀽鎴栨瀯閫�" + (rs.protocolName==null?"":("閫氫俊鍗忚" + rs.protocolName + "鐨�")) + "RTU" + (rs.rtuAddr==null?"":("(鍦板潃" + rs.rtuAddr + ")" )) + "鏁版嵁鍑洪敊" + (rs.message == null?"":("锛�" + rs.message)));
-		//	if(rs.e != null){
-		//		log.error(rs.e);
-		//		rs.e.printStackTrace();
-		//	}
-		//}
+		if(result != null && result instanceof MidResultError){
+			MidResultError rs = (MidResultError)result ;
+			log.error("瑙f瀽鎴栨瀯閫�" + (rs.protocolName==null?"":("閫氫俊鍗忚" + rs.protocolName + "鐨�")) + "RTU" + (rs.rtuAddr==null?"":("(鍦板潃" + rs.rtuAddr + ")" )) + "鏁版嵁鍑洪敊" + (rs.message == null?"":("锛�" + rs.message)));
+			if(rs.e != null){
+				log.error(rs.e);
+				rs.e.printStackTrace();
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
index 9373985..34bb341 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,9 +3,9 @@
     datasource: #閰嶇疆鏁版嵁婧�
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.cj.jdbc.Driver
-#        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
 #        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
-        url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+#        url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
         username: root
         password: dysql,;.abc!@#
         druid:
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
index e98153a..21d02e1 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
@@ -27,7 +27,7 @@
     @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
     public void receive(@RequestBody Data data) {
         JSONObject job_data = (JSONObject) JSON.toJSON(data);
-        //System.out.println(job_data.toJSONString());
+        String job_dataS = job_data.toJSONString();
         JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData");
 
         JSONObject job_response = new JSONObject();
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java
new file mode 100644
index 0000000..1597b7f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/AutomaticClose.java
@@ -0,0 +1,44 @@
+package com.dy.pipIrrRemote.common.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-07-23 10:36
+ * @LastEditTime 2024-07-23 10:36
+ * @Description 鑷姩鍏抽榾锛堝畾鏃跺叧闃�銆佸畾閲忓叧闃�锛変紶杈撳璞�
+ */
+
+@Data
+public class AutomaticClose extends DtoBase {
+    public static final long serialVersionUID = 202407231039001L;
+
+    /**
+     * 闃�鎺у櫒鍦板潃
+     */
+    @NotBlank(message = "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖")
+    private String rtuAddr;
+
+    /**
+     * 铏氭嫙鍗$紪鍙�
+     */
+    @NotBlank(message = "铏氭嫙鍗$紪鍙蜂笉鑳戒负绌�")
+    private String vcNum;
+
+    /**
+     * 璁㈠崟鍙�
+     */
+    @NotBlank(message = "璁㈠崟鍙蜂笉鑳戒负绌�")
+    private String orderNo;
+
+    /**
+     * 鐢ㄦ按鏃堕暱锛屾嫢鏈夊畾鏃跺叧闃�
+     */
+    private Integer minutes;
+
+    /**
+     * 棰勭敤姘撮噺锛屾嫢鏈夊畾閲忓叧闃�
+     */
+    private Integer waterAmount;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ClientAmountDayQueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ClientAmountDayQueryVo.java
new file mode 100644
index 0000000..15abb5a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ClientAmountDayQueryVo.java
@@ -0,0 +1,38 @@
+package com.dy.pipIrrRemote.records;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/23  15:55
+ * @LastEditTime :2024/7/23  15:55
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鍐滄埛鏃ョ敤姘撮噺缁熻鏌ヨ鏉′欢")
+public class ClientAmountDayQueryVo extends QueryConditionVo {
+
+    @Schema(description = "鍐滄埛濮撳悕", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String clientName;
+
+    @Schema(description = "缁熻寮�濮嬫棩鏈�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startDt;
+
+    @Schema(description = "缁熻缁撴潫鏃ユ湡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endDt;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ControllerAlarmStateQueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ControllerAlarmStateQueryVo.java
new file mode 100644
index 0000000..199b9b0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/ControllerAlarmStateQueryVo.java
@@ -0,0 +1,44 @@
+package com.dy.pipIrrRemote.records;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/22  20:01
+ * @LastEditTime :2024/7/22  20:01
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "鎺у埗鍣ㄦ姤璀︿笌鐘舵�佹煡璇㈡潯浠�")
+public class ControllerAlarmStateQueryVo extends QueryConditionVo {
+
+    @Schema(description = "鍙栨按鍙e悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private String intakeName;
+
+    @Schema(description = "闃�闂ㄧ姸鎬�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)//锛�0鎵撳紑銆�1鍏抽棴锛�
+    private Byte valveState;
+
+    @Schema(description = "寮�濮嬫椂闂�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startDt;
+
+    @Schema(description = "缁撴潫鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endDt;
+
+    @Schema(description = "鎶ヨ鐘舵��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)//锛�0姝e父銆�1鎶ヨ锛�
+    private Byte alarmState;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsCtrl.java
new file mode 100644
index 0000000..c012a5e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsCtrl.java
@@ -0,0 +1,153 @@
+package com.dy.pipIrrRemote.records;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
+import com.dy.pipIrrGlobal.voRm.VoClientAmountDay;
+import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState;
+import com.dy.pipIrrGlobal.voSe.VoActiveCard;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/22  20:00
+ * @LastEditTime :2024/7/22  20:00
+ * @Description
+ */
+@Slf4j
+@Tag(name = "妫�娴嬫帶鍒舵煡璇�", description = "妫�娴嬫帶鍒舵煡璇�")
+@RestController
+@RequestMapping(path = "remoteRecords")
+public class RecordsCtrl {
+    @Autowired
+    private RecordsSv recordsSv;
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄦ姤璀︿笌鐘舵�佸垪琛紙鍘嗗彶锛�
+     *
+     * @param vo 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勬帶鍒跺櫒鎶ヨ涓庣姸鎬佸垪琛紙鍘嗗彶锛�
+     */
+    @Operation(summary = "鑾峰緱涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佽褰�", description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getControllerAlarmStateHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoControllerAlarmState>>> getControllerAlarmStateHistory(@RequestBody ControllerAlarmStateQueryVo vo) {
+        try {
+            QueryResultVo<List<VoControllerAlarmState>> res = recordsSv.getControllerAlarmStateHistory(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鎺у埗鍣ㄦ姤璀︿笌鐘舵�佽褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鎺у埗鍣ㄦ姤璀︿笌鐘舵�佸垪琛紙鏈�鏂帮級
+     *
+     * @param vo 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勬帶鍒跺櫒鎶ヨ涓庣姸鎬佸垪琛紙鏈�鏂帮級
+     */
+    @Operation(summary = "鑾峰緱涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佽褰�", description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getControllerAlarmStateLast")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoControllerAlarmState>>> getControllerAlarmStateLast(@RequestBody ControllerAlarmStateQueryVo vo) {
+        try {
+            QueryResultVo<List<VoControllerAlarmState>> res = recordsSv.getControllerAlarmStateLast(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鎺у埗鍣ㄨ褰曞紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍐滄埛鏃ョ敤姘撮噺缁熻鍒楄〃锛堝巻鍙诧級
+     *
+     * @param vo 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勫啘鎴锋棩鐢ㄦ按閲忕粺璁″垪琛紙鍘嗗彶锛�
+     */
+    @Operation(summary = "鑾峰緱涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁¤褰�", description = "杩斿洖涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁℃暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getClientAmountDayHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoClientAmountDay>>> getClientAmountDayHistory(@RequestBody ClientAmountDayQueryVo vo) {
+        try {
+            QueryResultVo<List<VoClientAmountDay>> res = recordsSv.getClientAmountDayHistory(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鍐滄埛鏃ョ敤姘撮噺缁熻璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍐滄埛鏃ョ敤姘撮噺缁熻鍒楄〃锛堟渶鏂帮級
+     *
+     * @param vo 鏌ヨ鏉′欢
+     * @return 绗﹀悎鏉′欢鐨勫啘鎴锋棩鐢ㄦ按閲忕粺璁″垪琛紙鏈�鏂帮級
+     */
+    @Operation(summary = "鑾峰緱涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁¤褰�", description = "杩斿洖涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁℃暟鎹�")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佹暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = VoActiveCard.class))}
+            )
+    })
+    @GetMapping(path = "/getClientAmountDayLast")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoClientAmountDay>>> getClientAmountDayLast(@RequestBody ClientAmountDayQueryVo vo) {
+        try {
+            QueryResultVo<List<VoClientAmountDay>> res = recordsSv.getClientAmountDayLast(vo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鑾峰彇鍐滄埛鏃ョ敤姘撮噺缁熻璁板綍寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsSv.java
new file mode 100644
index 0000000..b5c94a7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/records/RecordsSv.java
@@ -0,0 +1,121 @@
+package com.dy.pipIrrRemote.records;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.RmAlarmStateHistoryMapper;
+import com.dy.pipIrrGlobal.daoRm.RmAlarmStateLastMapper;
+import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayLastMapper;
+import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayMapper;
+import com.dy.pipIrrGlobal.voRm.VoClientAmountDay;
+import com.dy.pipIrrGlobal.voRm.VoControllerAlarmState;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author :WuZeYu
+ * @Date :2024/7/22  20:01
+ * @LastEditTime :2024/7/22  20:01
+ * @Description
+ */
+@Slf4j
+@Service
+public class RecordsSv {
+    @Autowired
+    private RmAlarmStateHistoryMapper rmAlarmStateHistoryMapper;
+    @Autowired
+    private RmAlarmStateLastMapper rmAlarmStateLastMapper;
+
+    @Autowired
+    private RmClientAmountDayLastMapper rmClientAmountDayLastMapper;
+    @Autowired
+    private RmClientAmountDayMapper rmClientAmountDayMapper;
+
+
+    /**
+     * 鑾峰緱涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佽褰�(鍘嗗彶)
+     * @param vo
+     * @return
+     */
+    public QueryResultVo<List<VoControllerAlarmState>> getControllerAlarmStateHistory(ControllerAlarmStateQueryVo vo) {
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+
+        Long itemTotal = rmAlarmStateHistoryMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoControllerAlarmState>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmAlarmStateHistoryMapper.getControllerAlarmStateHistory(params);
+        return rsVo;
+    }
+
+
+    /**
+     * 鑾峰緱涓�椤垫帶鍒跺櫒鎶ヨ涓庣姸鎬佽褰�(鏈�鏂�)
+     * @param vo
+     * @return
+     */
+    public QueryResultVo<List<VoControllerAlarmState>> getControllerAlarmStateLast(ControllerAlarmStateQueryVo vo) {
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+
+        Long itemTotal = rmAlarmStateLastMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoControllerAlarmState>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmAlarmStateLastMapper.getControllerAlarmStateLast(params);
+        return rsVo;
+    }
+
+
+    /**
+     * 鑾峰緱涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁¤褰�(鍘嗗彶)
+     * @param vo
+     * @return
+     */
+    public QueryResultVo<List<VoClientAmountDay>> getClientAmountDayHistory(ClientAmountDayQueryVo vo) {
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+
+        Long itemTotal = rmClientAmountDayMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoClientAmountDay>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmClientAmountDayMapper.getClientAmountDayHistory(params);
+        return rsVo;
+    }
+
+
+
+    /**
+     * 鑾峰緱涓�椤靛啘鎴锋棩鐢ㄦ按閲忕粺璁¤褰�(鏈�鏂�)
+     * @param vo
+     * @return
+     */
+    public QueryResultVo<List<VoClientAmountDay>> getClientAmountDayLast(ClientAmountDayQueryVo vo) {
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
+
+        Long itemTotal = rmClientAmountDayLastMapper.getRecordCount(params);
+
+        QueryResultVo<List<VoClientAmountDay>> rsVo = new QueryResultVo<>();
+        rsVo.pageSize = vo.pageSize;
+        rsVo.pageCurr = vo.pageCurr;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmClientAmountDayLastMapper.getClientAmountDayLast(params);
+        return rsVo;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
index 5768ebf..e4b0ec0 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java
@@ -32,9 +32,6 @@
 
 import java.util.Objects;
 
-//import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo;
-//import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComXyVo;
-
 /**
  * @author ZhuBaoMin
  * @date 2024-05-21 14:31
@@ -93,11 +90,6 @@
         Long intakeId = po.getIntakeId();
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
@@ -179,11 +171,6 @@
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
 
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
-
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
         if(job_rtu == null) {
@@ -243,11 +230,6 @@
         Long intakeId = po.getIntakeId();
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
@@ -310,11 +292,6 @@
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
 
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
-
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
         if(job_rtu == null) {
@@ -374,11 +351,6 @@
         Long intakeId = po.getIntakeId();
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
index 06f622c..c0d871e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -5,8 +5,13 @@
 import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
 import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo;
 import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com98Vo;
+import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com99Vo;
+import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComA0Vo;
 import com.dy.common.mw.protocol.p206V202404.CodeV202404;
-import com.dy.common.mw.protocol.p206V202404.downVos.*;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd93_A3Vo;
+import com.dy.common.mw.protocol.p206V202404.downVos.ComCd9CVo;
 import com.dy.common.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
@@ -104,11 +109,6 @@
             if(vcId == null) {
                 return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage());
             }
-        }
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
         }
 
         // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
@@ -239,11 +239,6 @@
         String orderNo = voUnclosedParam.getOrderNo();
         Long comId = idLongGenerator.generate();
 
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
-
         // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
         JSONObject job_rtu = getRtu(null, rtuAddr);
         if(job_rtu == null) {
@@ -317,6 +312,168 @@
     }
 
     /**
+     * 瀹氭椂鍏抽榾
+     * @param automaticClose
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "timed_close", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> timedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = automaticClose.getIntakeId();
+        String rtuAddr = automaticClose.getRtuAddr();
+        String vcNum = automaticClose.getVcNum();
+        String orderNo = automaticClose.getOrderNo();
+        Integer minutes = automaticClose.getMinutes();
+        Long operator = automaticClose.getOperator();
+
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
+        Long comId = idLongGenerator.generate();
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if (vc == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        Double moneyRemain = vc.getMoney();
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = commandSv.getPrice();
+
+        // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
+        JSONObject job_rtu = getRtu(null, rtuAddr);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String protocol = job_rtu.getString("protocol");
+        String orgTag = job_rtu.getString("orgTag");
+        comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            return BaseResponseUtils.buildSuccess();
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_99;
+
+            // 鍒涘缓瑙嗗浘
+            Com99Vo param = new Com99Vo();
+            param.setIcCardNo(vcNum);
+            param.setMoneyRemain(moneyRemain);
+            param.setWaterPrice(waterPrice);
+            param.setMinutes(minutes);
+            param.setOrderNo(orderNo);
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)2);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else {
+            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
+     * 瀹氶噺鍏抽榾
+     * @param automaticClose
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> quantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = automaticClose.getIntakeId();
+        String rtuAddr = automaticClose.getRtuAddr();
+        String vcNum = automaticClose.getVcNum();
+        String orderNo = automaticClose.getOrderNo();
+        Integer waterAmount = automaticClose.getWaterAmount();
+        Long operator = automaticClose.getOperator();
+
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
+        Long comId = idLongGenerator.generate();
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if (vc == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        Double moneyRemain = vc.getMoney();
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = commandSv.getPrice();
+
+        // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
+        JSONObject job_rtu = getRtu(null, rtuAddr);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String protocol = job_rtu.getString("protocol");
+        String orgTag = job_rtu.getString("orgTag");
+        comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            return BaseResponseUtils.buildSuccess();
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_A0;
+
+            // 鍒涘缓瑙嗗浘
+            ComA0Vo param = new ComA0Vo();
+            param.setIcCardNo(vcNum);
+            param.setMoneyRemain(moneyRemain);
+            param.setWaterPrice(waterPrice);
+            param.setWaterAmount(waterAmount);
+            param.setOrderNo(orderNo);
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)2);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_rm);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else {
+            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
      * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍
      * @param operator
      * @return
@@ -354,11 +511,6 @@
         Long operator = po.getOperator();
         String flowNo = RandomStringUtils.randomNumeric(12); // 鐢熸垚12浣嶉殢鏈烘暟
         Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
@@ -433,11 +585,6 @@
         Long operator = card.getOperator();
         Long comId = idLongGenerator.generate();
 
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
-
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
         if(job_rtu == null) {
@@ -498,11 +645,6 @@
     //    Boolean valid = usability.getValid();
     //    Long operator = usability.getOperator();
     //    Long comId = idLongGenerator.generate();
-    //
-    //    // 鑾峰彇绯荤粺鍙傛暟
-    //    if(!setuped) {
-    //        setUp();
-    //    }
     //
     //    // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
     //    JSONObject job_rtu = getRtu(intakeId, null);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
index e5e2113..493625f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
@@ -1,8 +1,8 @@
 package com.dy.pipIrrWechat.command;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.mw.protocol.Data;
-import com.dy.common.webUtil.BaseResponse;
-import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.command.ComSupport;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
@@ -25,16 +25,21 @@
 @RequestMapping(path="comRes")
 public class CommandResultCtrl extends ComSupport {
     @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
-    public BaseResponse<String> receive(@RequestBody Data data) {
-        Long comId = 0L;
-        if(data.getCommandId() != null) {
-            comId = Long.parseLong(data.getCommandId());
-        }
+    public void receive(@RequestBody Data data) {
+        JSONObject job_data = (JSONObject) JSON.toJSON(data);
+        String job_dataS = job_data.toJSONString();
+        JSONObject job_subData = job_data.getJSONObject("subData").getJSONObject("subData");
 
-        CompletableFuture<Data> feature = (CompletableFuture<Data>) features.get(comId);
+        JSONObject job_response = new JSONObject();
+        job_response.put("data", job_subData);
+        job_response.put("commandCode", job_data.getString("code"));
+        job_response.put("commandId", job_data.getString("commandId"));
+
+        CompletableFuture<JSONObject> feature = (CompletableFuture<JSONObject>) features.get(job_data.getLong("commandId"));
         if(feature != null) {
-            feature.complete(data);
+            feature.complete(job_response);
+        }else{
+            feature.complete(new JSONObject());
         }
-        return BaseResponseUtils.buildSuccess("ok");
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
index b3058bf..4dbfadf 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -1,9 +1,12 @@
 package com.dy.pipIrrWechat.command;
 
 import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
 import com.dy.common.mw.protocol.p206V1_0_0.CodeV1_0_1;
 import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com97Vo;
 import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com98Vo;
+import com.dy.common.mw.protocol.p206V1_0_0.downVos.Com99Vo;
+import com.dy.common.mw.protocol.p206V1_0_0.downVos.ComA0Vo;
 import com.dy.common.mw.protocol.p206V202404.CodeV202404;
 import com.dy.common.mw.protocol.p206V202404.downVos.ComCd15Vo;
 import com.dy.common.mw.protocol.p206V202404.downVos.ComCd92_A2Vo;
@@ -17,6 +20,7 @@
 import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrWechat.command.dto.AutomaticClose;
 import com.dy.pipIrrWechat.command.dto.Recharge;
 import com.dy.pipIrrWechat.command.dto.ValveClose;
 import com.dy.pipIrrWechat.command.dto.ValveOpen;
@@ -116,11 +120,6 @@
             if (vcId == null) {
                 return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
             }
-        }
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if (!setuped) {
-            setUp();
         }
 
         // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
@@ -240,11 +239,6 @@
         Long operator = valve.getOperator();
         Long comId = idLongGenerator.generate();
 
-        // 鑾峰彇绯荤粺鍙傛暟
-        if (!setuped) {
-            setUp();
-        }
-
         // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
         JSONObject job_rtu = getRtu(null, rtuAddr);
         if (job_rtu == null) {
@@ -318,6 +312,168 @@
     }
 
     /**
+     * 瀹氭椂鍏抽榾
+     * @param automaticClose
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "timed_close", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> timedClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = automaticClose.getIntakeId();
+        String rtuAddr = automaticClose.getRtuAddr();
+        String vcNum = automaticClose.getVcNum();
+        String orderNo = automaticClose.getOrderNo();
+        Integer minutes = automaticClose.getMinutes();
+        Long operator = automaticClose.getOperator();
+
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
+        Long comId = idLongGenerator.generate();
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if (vc == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        Double moneyRemain = vc.getMoney();
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = commandSv.getPrice();
+
+        // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
+        JSONObject job_rtu = getRtu(null, rtuAddr);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String protocol = job_rtu.getString("protocol");
+        String orgTag = job_rtu.getString("orgTag");
+        comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            return BaseResponseUtils.buildSuccess();
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_99;
+
+            // 鍒涘缓瑙嗗浘
+            Com99Vo param = new Com99Vo();
+            param.setIcCardNo(vcNum);
+            param.setMoneyRemain(moneyRemain);
+            param.setWaterPrice(waterPrice);
+            param.setMinutes(minutes);
+            param.setOrderNo(orderNo);
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)2);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else {
+            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
+     * 瀹氶噺鍏抽榾
+     * @param automaticClose
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "quantify_close", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> quantifyClose(@RequestBody @Valid AutomaticClose automaticClose, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = automaticClose.getIntakeId();
+        String rtuAddr = automaticClose.getRtuAddr();
+        String vcNum = automaticClose.getVcNum();
+        String orderNo = automaticClose.getOrderNo();
+        Integer waterAmount = automaticClose.getWaterAmount();
+        Long operator = automaticClose.getOperator();
+
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
+        Long comId = idLongGenerator.generate();
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if (vc == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        Double moneyRemain = vc.getMoney();
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = commandSv.getPrice();
+
+        // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
+        JSONObject job_rtu = getRtu(null, rtuAddr);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String protocol = job_rtu.getString("protocol");
+        String orgTag = job_rtu.getString("orgTag");
+        comSendUrl = env.getProperty(pro_mw + "." + orgTag + "." + key_mw);
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            return BaseResponseUtils.buildSuccess();
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_A0;
+
+            // 鍒涘缓瑙嗗浘
+            ComA0Vo param = new ComA0Vo();
+            param.setIcCardNo(vcNum);
+            param.setMoneyRemain(moneyRemain);
+            param.setWaterPrice(waterPrice);
+            param.setWaterAmount(waterAmount);
+            param.setOrderNo(orderNo);
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)2);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuCallbackUrl_wx);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else {
+            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
      * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍
      *
      * @param operator
@@ -354,11 +510,6 @@
         Long operator = po.getOperator();
         String flowNo = RandomStringUtils.randomNumeric(12); // 鐢熸垚12浣嶉殢鏈烘暟
         Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
new file mode 100644
index 0000000..5989744
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/AutomaticClose.java
@@ -0,0 +1,43 @@
+package com.dy.pipIrrWechat.command.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-07-23 10:55
+ * @LastEditTime 2024-07-23 10:55
+ * @Description
+ */
+@Data
+public class AutomaticClose extends DtoBase {
+    public static final long serialVersionUID = 202407231056001L;
+
+    /**
+     * 闃�鎺у櫒鍦板潃
+     */
+    @NotBlank(message = "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖")
+    private String rtuAddr;
+
+    /**
+     * 铏氭嫙鍗$紪鍙�
+     */
+    @NotBlank(message = "铏氭嫙鍗$紪鍙蜂笉鑳戒负绌�")
+    private String vcNum;
+
+    /**
+     * 璁㈠崟鍙�
+     */
+    @NotBlank(message = "璁㈠崟鍙蜂笉鑳戒负绌�")
+    private String orderNo;
+
+    /**
+     * 鐢ㄦ按鏃堕暱锛屾嫢鏈夊畾鏃跺叧闃�
+     */
+    private Integer minutes;
+
+    /**
+     * 棰勭敤姘撮噺锛屾嫢鏈夊畾閲忓叧闃�
+     */
+    private Integer waterAmount;
+}

--
Gitblit v1.8.0