From e8d6c405c367e1bd501a6f6b4fa8cfa0dddbd806 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 26 六月 2024 15:20:47 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseLastMapper.java                                 |   36 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java                      |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java                              |  669 +++---------
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java |  104 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java                            |  481 +++-----
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java                             |   13 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java                                  |  153 +-
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Recharge.java                          |   34 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/dbSv/DbSv.java                                 |   43 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/enums/LastOperateENUM.java                               |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java                            |    1 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java                    |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java                       |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java                                           |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java                            |   12 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml                                                   |    1 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseHistoryMapper.xml                                             |  375 +++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java  |   54 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/PayInfo.java                               |  176 +++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java                                          |   62 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseHistoryMapper.java                              |   27 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java                              |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/Recharge.java                         |   33 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java                   |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseLast.java                                      |  217 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java                      |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseLastMapper.xml                                                |  383 +++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml                                                   |    1 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseHistory.java                                   |  217 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java                        |    2 
 30 files changed, 2,218 insertions(+), 933 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
index 644f9b7..ad83980 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
@@ -5,16 +5,18 @@
 import com.dy.common.mw.protocol.Command;
 import com.dy.common.mw.protocol.CommandType;
 import com.dy.common.mw.protocol.Data;
-import com.dy.common.mw.protocol.p206V202404.CodeV202404;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.command.dto.Param;
+import com.dy.pipIrrGlobal.command.enums.LastOperateENUM;
 import com.dy.pipIrrGlobal.command.result.CommandResultCode;
 import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
 import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
 import com.dy.pipIrrGlobal.pojoPr.PrController;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
 import jakarta.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpEntity;
@@ -42,8 +44,6 @@
  * @Description 鍛戒护鏀拺绫�
  */
 
-//@Component
-//@DependsOn({"baSettingsMapper", "prControllerMapper"})
 public class ComSupport {
     protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ;
 
@@ -64,11 +64,11 @@
     @Autowired
     private PrControllerMapper prControllerMapper;
 
-    //@Autowired
-    //private CommandSv commandSv;
-
     @Autowired
     private RmCommandHistoryMapper rmCommandHistoryMapper;
+
+    @Autowired
+    private SeVirtualCardMapper seVirtualCardMapper;
 
     public static ComSupport comSupport;
 
@@ -225,16 +225,19 @@
     }
 
     /**
-     * 鍙戦�佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+     * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
      * @param po
      * @return
      */
-    protected BaseResponse dealWithCommandResult(Param po) {
+    protected BaseResponse<Boolean> dealWithCommandResult(Param po) {
         Long comId = po.getComId();
+        Byte comType = po.getComType();
         String commandCode = po.getCommandCode();
+        String commandName = po.getCommandName();
         Long intakeId = po.getIntakeId();
         String rtuAddr = po.getRtuAddr();
         String protocol = po.getProtocol();
+        Long vcId = po.getVcId();
         Object param = po.getParam();
         String rtuResultSendWebUrl = po.getRtuResultSendWebUrl();
         Long operator = po.getOperator();
@@ -245,28 +248,38 @@
         // 鍙戦�佸懡浠�
         JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
         if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-            //if(1 > 0) {
             // 璇锋眰鎴愬姛
 
             // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-            String commandName = CodeV202404.getCodeName(commandCode);
             RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-            //commandSv.insert(rmCommandHistory);
             rmCommandHistoryMapper.insert(rmCommandHistory);
 
             // 澶勭悊鍥炶皟
             BaseResponse response_CallBack = dealWithCallBack(comId);
 
-            // 鍥炶皟澶辫触
+            // 鍥炶皟寮傚父
             if(!response_CallBack.getCode().equals("0001")) {
                 // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
                 rmCommandHistory = new RmCommandHistory();
                 rmCommandHistory.setId(comId);
                 rmCommandHistory.setResult((byte)0);
-                //commandSv.updateCommandResult(rmCommandHistory);
                 rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
-                return BaseResponseUtils.buildFail(response_CallBack.getMsg());
-                //return BaseResponseUtils.buildFail(response_CallBack.getContent().toString());
+                return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
+            }
+
+            // 鍥炶皟瓒呮椂
+            if (response_CallBack.getContent().toString().equals(CommandResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
+                /**
+                 * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
+                 * 鍛戒护缃负澶辫触
+                 * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
+                 */
+
+                rmCommandHistory = new RmCommandHistory();
+                rmCommandHistory.setId(comId);
+                rmCommandHistory.setResult((byte) 0);
+                rmCommandHistoryMapper.updateByPrimaryKeySelective(rmCommandHistory);
+                return BaseResponseUtils.buildErrorMsg(CommandResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
             }
 
             // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
@@ -276,18 +289,33 @@
             System.out.println(job_subData);
             Boolean dealResult = job_subData.getBoolean("success");
             if(!dealResult) {
-                return BaseResponseUtils.buildFail(response_CallBack.getContent().toString());
+                return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
             }
 
             /**
              * 鎵ц鎴愬姛锛岃繑鍥炲洖璋冨唴瀹�
+             * 濡傛灉鏄紑鍏抽榾锛氭洿鏀硅櫄鎷熷崱鐘舵�侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
              */
+            if(comType != null) {
+                SeVirtualCard virtualCard = new SeVirtualCard();
+                virtualCard.setId(vcId);
+                if(comType == 1) {
+                    virtualCard.setInUse((byte) 1);
+                }else {
+                    virtualCard.setInUse((byte) 0);
+                }
+                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
+                virtualCard.setLastOperateTime(new Date());
+                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
+            }
+
+            // 鍥炶皟杩斿洖鐨勫唴瀹�
             Data myData = (Data)response_CallBack.getContent();
             return BaseResponseUtils.buildSuccess(myData) ;
         } else {
             // 璇锋眰澶辫触
             JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-            return BaseResponseUtils.buildFail(job_param.getString("message"));
+            return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
         }
     }
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
index e1541f7..9d5bcc7 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/dto/Param.java
@@ -6,7 +6,7 @@
  * @author ZhuBaoMin
  * @date 2024-06-04 11:25
  * @LastEditTime 2024-06-04 11:25
- * @Description
+ * @Description 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋滄墍闇�鍙傛暟瀵硅薄
  */
 
 @Data
@@ -15,7 +15,14 @@
 
     private Long comId;
 
+    /**
+     * 鍛戒护绫诲瀷锛�1-寮�鍙戯紝2-鍏抽榾
+     */
+    private Byte comType;
+
     private String commandCode;
+
+    private String commandName;
 
     private Long intakeId;
 
@@ -23,6 +30,11 @@
 
     private String protocol;
 
+    private Long vcId;
+
+    /**
+     * 瑙嗗浘瀵硅薄
+     */
     private Object param;
 
     private String rtuResultSendWebUrl;
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/enums/LastOperateENUM.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/enums/LastOperateENUM.java
new file mode 100644
index 0000000..4fcdf28
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/enums/LastOperateENUM.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.command.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-24 22:08
+ * @LastEditTime 2024-06-24 22:08
+ * @Description 铏氭嫙鍗℃搷浣滄灇涓�
+ */
+
+@Getter
+@AllArgsConstructor
+public enum LastOperateENUM {
+    OPEN_ACCOUNT((byte)1, "寮�鎴�"),
+    RECHARGE((byte)2, "鍏呭��"),
+    CONSUME((byte)3, "娑堣垂"),
+    APPLY_REFUND((byte)4, "鐢宠閫�娆�"),
+    AUDIT_REFUND((byte)5, "閫�娆惧鏍�"),
+    REFUND((byte)6, "閫�娆�"),
+    OPEN_VALVE((byte)7, "寮�闃�"),
+    CLOSE_VALVE((byte)8, "鍏抽榾");
+
+    private final Byte code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseHistoryMapper.java
new file mode 100644
index 0000000..39c2f2d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseHistoryMapper.java
@@ -0,0 +1,27 @@
+package com.dy.pipIrrGlobal.daoRm;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 10:34
+ * @LastEditTime 2024-06-20 10:34
+ * @Description
+ */
+
+@Mapper
+public interface RmOpenCloseHistoryMapper extends BaseMapper<RmOpenCloseHistory> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(RmOpenCloseHistory record);
+
+    int insertSelective(RmOpenCloseHistory record);
+
+    RmOpenCloseHistory selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(RmOpenCloseHistory record);
+
+    int updateByPrimaryKey(RmOpenCloseHistory record);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseLastMapper.java
new file mode 100644
index 0000000..c94b41e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmOpenCloseLastMapper.java
@@ -0,0 +1,36 @@
+package com.dy.pipIrrGlobal.daoRm;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 10:34
+ * @LastEditTime 2024-06-20 10:34
+ * @Description
+ */
+
+@Mapper
+public interface RmOpenCloseLastMapper extends BaseMapper<RmOpenCloseLast> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(RmOpenCloseLast record);
+
+    int insertSelective(RmOpenCloseLast record);
+
+    RmOpenCloseLast selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(RmOpenCloseLast record);
+
+    int updateByPrimaryKey(RmOpenCloseLast record);
+
+    /**
+     * 鏍规嵁闃�鎺у櫒鍦板潃鑾峰彇寮�鍏抽榾涓婃姤鏈�鏂版暟鎹�
+     * @param rtuAddr
+     * @return
+     */
+    List<RmOpenCloseLast> getRmOpenCloseReportLast(String rtuAddr);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseHistory.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseHistory.java
new file mode 100644
index 0000000..060b01f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseHistory.java
@@ -0,0 +1,217 @@
+package com.dy.pipIrrGlobal.pojoRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.common.po.BaseEntity;
+import com.dy.common.util.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 10:34
+ * @LastEditTime 2024-06-20 10:34
+ * @Description
+ */
+/**
+ * 寮�鍏抽榾鎶ュ巻鍙叉暟鎹〃
+ */
+
+@TableName(value="rm_open_close_history", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "寮�鍏抽榾鎶ュ巻鍙叉暟鎹〃")
+public class RmOpenCloseHistory implements BaseEntity {
+    public static final long serialVersionUID = 202406201040001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    public Long id;
+
+    /**
+     * 鎺у埗鍣ㄥ疄浣揑D锛堝閿級
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long controllerId;
+
+    /**
+     * 鍙栨按鍙e疄浣揑D锛堝閿級
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long intakeId;
+
+    /**
+     * 鎺у埗鍣ㄥ湴鍧�
+     */
+    public String rtuAddr;
+
+    /**
+     * 寮�闃�鏁版嵁鎺ユ敹鏃ユ湡鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date opDt;
+
+    /**
+     * 寮�闃�鎺у埗鍣ㄦ椂閽�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date opRtuDt;
+
+    /**
+     * IC鍗″湴鍧�锛堣繙绋嬪叧闂椂涓�0锛�
+     */
+    public String opIcCardAddr;
+
+    /**
+     * IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
+     */
+    public String opIcCardNo;
+
+    /**
+     * 寮�闃�璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+     */
+    public String opOrderNo;
+
+    /**
+     * 寮�娉�/闃�鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date openDt;
+
+    /**
+     * 寮�闃�姘磋〃绱姘撮噺
+     */
+    public Double opWaterTotalAmount;
+
+    /**
+     * 寮�闃�鐢佃〃绱鐢甸噺
+     */
+    public Double opEleTotalAmount;
+
+    /**
+     * 寮�闃�鐢ㄦ埛鍓╀綑閲戦
+     */
+    public Double opMoneyRemainUser;
+
+    /**
+     * 寮�闃�鐢ㄦ埛鍓╀綑姘撮噺
+     */
+    public Double opWaterRemainUser;
+
+    /**
+     * 鍏虫车/闃�鏂瑰紡
+     */
+    public Byte opType;
+
+    /**
+     * 鍏抽榾IC鍗″湴鍧�锛堣繙绋嬪叧闂椂涓�0锛�
+     */
+    public String clIcCardAddr;
+
+    /**
+     * 鍏抽榾IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
+     */
+    public String clIcCardNo;
+
+    /**
+     * 鍏抽榾璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+     */
+    public String clOrderNo;
+
+    /**
+     * 寮�濮嬫椂闂�(鍒嗘椂鏃ユ湀)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date startDt;
+
+    /**
+     * 缁撴潫鏃堕棿(鍒嗘椂鏃ユ湀)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date endDt;
+
+    /**
+     * 姘磋〃绱娴侀噺
+     */
+    public Double clWaterTotalAmount;
+
+    /**
+     * 鐢佃〃绱鐢甸噺
+     */
+    public Double clEleTotalAmount;
+
+    /**
+     * 鐢ㄦ埛鍓╀綑閲戦
+     */
+    public Double clMoneyRemainUser;
+
+    /**
+     * 鐢ㄦ埛鍓╀綑姘撮噺
+     */
+    public Double clWaterRemainUser;
+
+    /**
+     * 鏈浣跨敤鐢甸噺
+     */
+    public Double thisEle;
+
+    /**
+     * 鏈浣跨敤姘撮噺
+     */
+    public Double thisWater;
+
+    /**
+     * 鏈浣跨敤閲戦
+     */
+    public Double thisMoney;
+
+    /**
+     * 鏈浣跨敤鏃堕棿闀�
+     */
+    public Integer thisDuration;
+
+    public void valueFrom84(DataV202404 dataV202404, DataCd84Vo cdData) throws Exception{
+        this.opDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
+        this.openDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.opDt);
+        //this.opRtuDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.opDt);
+        this.opIcCardAddr = cdData.icCardAddr;
+        this.opIcCardNo = cdData.icCardNo;
+        this.opOrderNo = cdData.orderNo;
+        this.opWaterTotalAmount = cdData.waterTotalAmount;
+        this.opEleTotalAmount = cdData.eleTotalAmount;
+        this.opMoneyRemainUser = cdData.moneyRemainUser;
+        this.opWaterRemainUser = cdData.waterRemainUser;
+    }
+
+    public void valueFrom85(DataV202404 dataV202404, DataCd85Vo cdData) throws Exception{
+        this.startDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+        this.endDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        this.opType = cdData.opType;
+        this.clIcCardAddr = cdData.icCardAddr;
+        this.clIcCardNo = cdData.icCardNo;
+        this.clOrderNo = cdData.orderNo;
+        this.clWaterTotalAmount = cdData.waterTotalAmount;
+        this.clEleTotalAmount = cdData.eleTotalAmount;
+        this.clMoneyRemainUser = cdData.moneyRemain;
+        this.clWaterRemainUser = cdData.waterRemain;
+        this.thisEle = cdData.thisEle;
+        this.thisWater = cdData.thisWater;
+        this.thisMoney = cdData.thisMoney;
+        this.thisDuration = cdData.thisDuration;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseLast.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseLast.java
new file mode 100644
index 0000000..5c8723d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmOpenCloseLast.java
@@ -0,0 +1,217 @@
+package com.dy.pipIrrGlobal.pojoRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.common.po.BaseEntity;
+import com.dy.common.util.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 10:34
+ * @LastEditTime 2024-06-20 10:34
+ * @Description
+ */
+/**
+ * 寮�鍏抽榾鎶ユ渶鏂版暟鎹〃
+ */
+
+@TableName(value="rm_open_close_last", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "寮�鍏抽榾鎶ユ渶鏂版暟鎹〃")
+public class RmOpenCloseLast implements BaseEntity {
+    public static final long serialVersionUID = 202406201041001L;
+
+    /**
+     * 涓婚敭
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    public Long id;
+
+    /**
+     * 鎺у埗鍣ㄥ疄浣揑D锛堝閿級
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long controllerId;
+
+    /**
+     * 鍙栨按鍙e疄浣揑D锛堝閿級
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long intakeId;
+
+    /**
+     * 鎺у埗鍣ㄥ湴鍧�
+     */
+    public String rtuAddr;
+
+    /**
+     * 寮�闃�鏁版嵁鎺ユ敹鏃ユ湡鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date opDt;
+
+    /**
+     * 寮�闃�鎺у埗鍣ㄦ椂閽�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date opRtuDt;
+
+    /**
+     * IC鍗″湴鍧�锛堣繙绋嬪叧闂椂涓�0锛�
+     */
+    public String opIcCardAddr;
+
+    /**
+     * IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
+     */
+    public String opIcCardNo;
+
+    /**
+     * 寮�闃�璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+     */
+    public String opOrderNo;
+
+    /**
+     * 寮�娉�/闃�鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date openDt;
+
+    /**
+     * 寮�闃�姘磋〃绱姘撮噺
+     */
+    public Double opWaterTotalAmount;
+
+    /**
+     * 寮�闃�鐢佃〃绱鐢甸噺
+     */
+    public Double opEleTotalAmount;
+
+    /**
+     * 寮�闃�鐢ㄦ埛鍓╀綑閲戦
+     */
+    public Double opMoneyRemainUser;
+
+    /**
+     * 寮�闃�鐢ㄦ埛鍓╀綑姘撮噺
+     */
+    public Double opWaterRemainUser;
+
+    /**
+     * 鍏虫车/闃�鏂瑰紡
+     */
+    public Byte opType;
+
+    /**
+     * 鍏抽榾IC鍗″湴鍧�锛堣繙绋嬪叧闂椂涓�0锛�
+     */
+    public String clIcCardAddr;
+
+    /**
+     * 鍏抽榾IC鍗$紪鍙凤紙17浣嶆暟瀛楋級
+     */
+    public String clIcCardNo;
+
+    /**
+     * 鍏抽榾璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+     */
+    public String clOrderNo;
+
+    /**
+     * 寮�濮嬫椂闂�(鍒嗘椂鏃ユ湀)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date startDt;
+
+    /**
+     * 缁撴潫鏃堕棿(鍒嗘椂鏃ユ湀)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date endDt;
+
+    /**
+     * 姘磋〃绱娴侀噺
+     */
+    public Double clWaterTotalAmount;
+
+    /**
+     * 鐢佃〃绱鐢甸噺
+     */
+    public Double clEleTotalAmount;
+
+    /**
+     * 鐢ㄦ埛鍓╀綑閲戦
+     */
+    public Double clMoneyRemainUser;
+
+    /**
+     * 鐢ㄦ埛鍓╀綑姘撮噺
+     */
+    public Double clWaterRemainUser;
+
+    /**
+     * 鏈浣跨敤鐢甸噺
+     */
+    public Double thisEle;
+
+    /**
+     * 鏈浣跨敤姘撮噺
+     */
+    public Double thisWater;
+
+    /**
+     * 鏈浣跨敤閲戦
+     */
+    public Double thisMoney;
+
+    /**
+     * 鏈浣跨敤鏃堕棿闀�
+     */
+    public Integer thisDuration;
+
+    public void valueFrom84(DataV202404 dataV202404, DataCd84Vo cdData) throws Exception{
+        this.opDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataV202404.dt);
+        this.openDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.opDt);
+        //this.opRtuDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.opDt);
+        this.opIcCardAddr = cdData.icCardAddr;
+        this.opIcCardNo = cdData.icCardNo;
+        this.opOrderNo = cdData.orderNo;
+        this.opWaterTotalAmount = cdData.waterTotalAmount;
+        this.opEleTotalAmount = cdData.eleTotalAmount;
+        this.opMoneyRemainUser = cdData.moneyRemainUser;
+        this.opWaterRemainUser = cdData.waterRemainUser;
+    }
+
+    public void valueFrom85(DataV202404 dataV202404, DataCd85Vo cdData) throws Exception{
+        this.startDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+        this.endDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        this.opType = cdData.opType;
+        this.clIcCardAddr = cdData.icCardAddr;
+        this.clIcCardNo = cdData.icCardNo;
+        this.clOrderNo = cdData.orderNo;
+        this.clWaterTotalAmount = cdData.waterTotalAmount;
+        this.clEleTotalAmount = cdData.eleTotalAmount;
+        this.clMoneyRemainUser = cdData.moneyRemain;
+        this.clWaterRemainUser = cdData.waterRemain;
+        this.thisEle = cdData.thisEle;
+        this.thisWater = cdData.thisWater;
+        this.thisMoney = cdData.thisMoney;
+        this.thisDuration = cdData.thisDuration;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseHistoryMapper.xml
new file mode 100644
index 0000000..9b3896d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseHistoryMapper.xml
@@ -0,0 +1,375 @@
+<?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.RmOpenCloseHistoryMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory">
+    <!--@mbg.generated-->
+    <!--@Table rm_open_close_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="op_dt" jdbcType="TIMESTAMP" property="opDt" />
+    <result column="op_rtu_dt" jdbcType="TIMESTAMP" property="opRtuDt" />
+    <result column="op_ic_card_addr" jdbcType="VARCHAR" property="opIcCardAddr" />
+    <result column="op_ic_card_no" jdbcType="VARCHAR" property="opIcCardNo" />
+    <result column="op_order_no" jdbcType="VARCHAR" property="opOrderNo" />
+    <result column="open_dt" jdbcType="TIMESTAMP" property="openDt" />
+    <result column="op_water_total_amount" jdbcType="FLOAT" property="opWaterTotalAmount" />
+    <result column="op_ele_total_amount" jdbcType="FLOAT" property="opEleTotalAmount" />
+    <result column="op_money_remain_user" jdbcType="FLOAT" property="opMoneyRemainUser" />
+    <result column="op_water_remain_user" jdbcType="FLOAT" property="opWaterRemainUser" />
+    <result column="op_type" jdbcType="TINYINT" property="opType" />
+    <result column="cl_ic_card_addr" jdbcType="VARCHAR" property="clIcCardAddr" />
+    <result column="cl_ic_card_no" jdbcType="VARCHAR" property="clIcCardNo" />
+    <result column="cl_order_no" jdbcType="VARCHAR" property="clOrderNo" />
+    <result column="start_dt" jdbcType="TIMESTAMP" property="startDt" />
+    <result column="end_dt" jdbcType="TIMESTAMP" property="endDt" />
+    <result column="cl_water_total_amount" jdbcType="FLOAT" property="clWaterTotalAmount" />
+    <result column="cl_ele_total_amount" jdbcType="FLOAT" property="clEleTotalAmount" />
+    <result column="cl_money_remain_user" jdbcType="FLOAT" property="clMoneyRemainUser" />
+    <result column="cl_water_remain_user" jdbcType="FLOAT" property="clWaterRemainUser" />
+    <result column="this_ele" jdbcType="FLOAT" property="thisEle" />
+    <result column="this_water" jdbcType="FLOAT" property="thisWater" />
+    <result column="this_money" jdbcType="FLOAT" property="thisMoney" />
+    <result column="this_duration" jdbcType="INTEGER" property="thisDuration" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, controller_id, intake_id, rtu_addr, op_dt, op_rtu_dt, op_ic_card_addr, op_ic_card_no, 
+    op_order_no, open_dt, op_water_total_amount, op_ele_total_amount, op_money_remain_user, 
+    op_water_remain_user, op_type, cl_ic_card_addr, cl_ic_card_no, cl_order_no, start_dt, 
+    end_dt, cl_water_total_amount, cl_ele_total_amount, cl_money_remain_user, cl_water_remain_user, 
+    this_ele, this_water, this_money, this_duration
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from rm_open_close_history
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from rm_open_close_history
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory">
+    <!--@mbg.generated-->
+    insert into rm_open_close_history (id, controller_id, intake_id, 
+      rtu_addr, op_dt, op_rtu_dt, 
+      op_ic_card_addr, op_ic_card_no, op_order_no, 
+      open_dt, op_water_total_amount, op_ele_total_amount, 
+      op_money_remain_user, op_water_remain_user, op_type, 
+      cl_ic_card_addr, cl_ic_card_no, cl_order_no, 
+      start_dt, end_dt, cl_water_total_amount, 
+      cl_ele_total_amount, cl_money_remain_user, cl_water_remain_user, 
+      this_ele, this_water, this_money, 
+      this_duration)
+    values (#{id,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, 
+      #{rtuAddr,jdbcType=VARCHAR}, #{opDt,jdbcType=TIMESTAMP}, #{opRtuDt,jdbcType=TIMESTAMP}, 
+      #{opIcCardAddr,jdbcType=VARCHAR}, #{opIcCardNo,jdbcType=VARCHAR}, #{opOrderNo,jdbcType=VARCHAR}, 
+      #{openDt,jdbcType=TIMESTAMP}, #{opWaterTotalAmount,jdbcType=FLOAT}, #{opEleTotalAmount,jdbcType=FLOAT}, 
+      #{opMoneyRemainUser,jdbcType=FLOAT}, #{opWaterRemainUser,jdbcType=FLOAT}, #{opType,jdbcType=TINYINT}, 
+      #{clIcCardAddr,jdbcType=VARCHAR}, #{clIcCardNo,jdbcType=VARCHAR}, #{clOrderNo,jdbcType=VARCHAR}, 
+      #{startDt,jdbcType=TIMESTAMP}, #{endDt,jdbcType=TIMESTAMP}, #{clWaterTotalAmount,jdbcType=FLOAT}, 
+      #{clEleTotalAmount,jdbcType=FLOAT}, #{clMoneyRemainUser,jdbcType=FLOAT}, #{clWaterRemainUser,jdbcType=FLOAT}, 
+      #{thisEle,jdbcType=FLOAT}, #{thisWater,jdbcType=FLOAT}, #{thisMoney,jdbcType=FLOAT}, 
+      #{thisDuration,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory">
+    <!--@mbg.generated-->
+    insert into rm_open_close_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="opDt != null">
+        op_dt,
+      </if>
+      <if test="opRtuDt != null">
+        op_rtu_dt,
+      </if>
+      <if test="opIcCardAddr != null">
+        op_ic_card_addr,
+      </if>
+      <if test="opIcCardNo != null">
+        op_ic_card_no,
+      </if>
+      <if test="opOrderNo != null">
+        op_order_no,
+      </if>
+      <if test="openDt != null">
+        open_dt,
+      </if>
+      <if test="opWaterTotalAmount != null">
+        op_water_total_amount,
+      </if>
+      <if test="opEleTotalAmount != null">
+        op_ele_total_amount,
+      </if>
+      <if test="opMoneyRemainUser != null">
+        op_money_remain_user,
+      </if>
+      <if test="opWaterRemainUser != null">
+        op_water_remain_user,
+      </if>
+      <if test="opType != null">
+        op_type,
+      </if>
+      <if test="clIcCardAddr != null">
+        cl_ic_card_addr,
+      </if>
+      <if test="clIcCardNo != null">
+        cl_ic_card_no,
+      </if>
+      <if test="clOrderNo != null">
+        cl_order_no,
+      </if>
+      <if test="startDt != null">
+        start_dt,
+      </if>
+      <if test="endDt != null">
+        end_dt,
+      </if>
+      <if test="clWaterTotalAmount != null">
+        cl_water_total_amount,
+      </if>
+      <if test="clEleTotalAmount != null">
+        cl_ele_total_amount,
+      </if>
+      <if test="clMoneyRemainUser != null">
+        cl_money_remain_user,
+      </if>
+      <if test="clWaterRemainUser != null">
+        cl_water_remain_user,
+      </if>
+      <if test="thisEle != null">
+        this_ele,
+      </if>
+      <if test="thisWater != null">
+        this_water,
+      </if>
+      <if test="thisMoney != null">
+        this_money,
+      </if>
+      <if test="thisDuration != null">
+        this_duration,
+      </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="opDt != null">
+        #{opDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opRtuDt != null">
+        #{opRtuDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opIcCardAddr != null">
+        #{opIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="opIcCardNo != null">
+        #{opIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="opOrderNo != null">
+        #{opOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="openDt != null">
+        #{openDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opWaterTotalAmount != null">
+        #{opWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opEleTotalAmount != null">
+        #{opEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opMoneyRemainUser != null">
+        #{opMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opWaterRemainUser != null">
+        #{opWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opType != null">
+        #{opType,jdbcType=TINYINT},
+      </if>
+      <if test="clIcCardAddr != null">
+        #{clIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="clIcCardNo != null">
+        #{clIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="clOrderNo != null">
+        #{clOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="startDt != null">
+        #{startDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endDt != null">
+        #{endDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clWaterTotalAmount != null">
+        #{clWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clEleTotalAmount != null">
+        #{clEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clMoneyRemainUser != null">
+        #{clMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="clWaterRemainUser != null">
+        #{clWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="thisEle != null">
+        #{thisEle,jdbcType=FLOAT},
+      </if>
+      <if test="thisWater != null">
+        #{thisWater,jdbcType=FLOAT},
+      </if>
+      <if test="thisMoney != null">
+        #{thisMoney,jdbcType=FLOAT},
+      </if>
+      <if test="thisDuration != null">
+        #{thisDuration,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory">
+    <!--@mbg.generated-->
+    update rm_open_close_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="opDt != null">
+        op_dt = #{opDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opRtuDt != null">
+        op_rtu_dt = #{opRtuDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opIcCardAddr != null">
+        op_ic_card_addr = #{opIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="opIcCardNo != null">
+        op_ic_card_no = #{opIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="opOrderNo != null">
+        op_order_no = #{opOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="openDt != null">
+        open_dt = #{openDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opWaterTotalAmount != null">
+        op_water_total_amount = #{opWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opEleTotalAmount != null">
+        op_ele_total_amount = #{opEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opMoneyRemainUser != null">
+        op_money_remain_user = #{opMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opWaterRemainUser != null">
+        op_water_remain_user = #{opWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opType != null">
+        op_type = #{opType,jdbcType=TINYINT},
+      </if>
+      <if test="clIcCardAddr != null">
+        cl_ic_card_addr = #{clIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="clIcCardNo != null">
+        cl_ic_card_no = #{clIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="clOrderNo != null">
+        cl_order_no = #{clOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="startDt != null">
+        start_dt = #{startDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endDt != null">
+        end_dt = #{endDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clWaterTotalAmount != null">
+        cl_water_total_amount = #{clWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clEleTotalAmount != null">
+        cl_ele_total_amount = #{clEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clMoneyRemainUser != null">
+        cl_money_remain_user = #{clMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="clWaterRemainUser != null">
+        cl_water_remain_user = #{clWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="thisEle != null">
+        this_ele = #{thisEle,jdbcType=FLOAT},
+      </if>
+      <if test="thisWater != null">
+        this_water = #{thisWater,jdbcType=FLOAT},
+      </if>
+      <if test="thisMoney != null">
+        this_money = #{thisMoney,jdbcType=FLOAT},
+      </if>
+      <if test="thisDuration != null">
+        this_duration = #{thisDuration,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory">
+    <!--@mbg.generated-->
+    update rm_open_close_history
+    set controller_id = #{controllerId,jdbcType=BIGINT},
+      intake_id = #{intakeId,jdbcType=BIGINT},
+      rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
+      op_dt = #{opDt,jdbcType=TIMESTAMP},
+      op_rtu_dt = #{opRtuDt,jdbcType=TIMESTAMP},
+      op_ic_card_addr = #{opIcCardAddr,jdbcType=VARCHAR},
+      op_ic_card_no = #{opIcCardNo,jdbcType=VARCHAR},
+      op_order_no = #{opOrderNo,jdbcType=VARCHAR},
+      open_dt = #{openDt,jdbcType=TIMESTAMP},
+      op_water_total_amount = #{opWaterTotalAmount,jdbcType=FLOAT},
+      op_ele_total_amount = #{opEleTotalAmount,jdbcType=FLOAT},
+      op_money_remain_user = #{opMoneyRemainUser,jdbcType=FLOAT},
+      op_water_remain_user = #{opWaterRemainUser,jdbcType=FLOAT},
+      op_type = #{opType,jdbcType=TINYINT},
+      cl_ic_card_addr = #{clIcCardAddr,jdbcType=VARCHAR},
+      cl_ic_card_no = #{clIcCardNo,jdbcType=VARCHAR},
+      cl_order_no = #{clOrderNo,jdbcType=VARCHAR},
+      start_dt = #{startDt,jdbcType=TIMESTAMP},
+      end_dt = #{endDt,jdbcType=TIMESTAMP},
+      cl_water_total_amount = #{clWaterTotalAmount,jdbcType=FLOAT},
+      cl_ele_total_amount = #{clEleTotalAmount,jdbcType=FLOAT},
+      cl_money_remain_user = #{clMoneyRemainUser,jdbcType=FLOAT},
+      cl_water_remain_user = #{clWaterRemainUser,jdbcType=FLOAT},
+      this_ele = #{thisEle,jdbcType=FLOAT},
+      this_water = #{thisWater,jdbcType=FLOAT},
+      this_money = #{thisMoney,jdbcType=FLOAT},
+      this_duration = #{thisDuration,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseLastMapper.xml
new file mode 100644
index 0000000..da66783
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmOpenCloseLastMapper.xml
@@ -0,0 +1,383 @@
+<?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.RmOpenCloseLastMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    <!--@mbg.generated-->
+    <!--@Table rm_open_close_last-->
+    <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="op_dt" jdbcType="TIMESTAMP" property="opDt" />
+    <result column="op_rtu_dt" jdbcType="TIMESTAMP" property="opRtuDt" />
+    <result column="op_ic_card_addr" jdbcType="VARCHAR" property="opIcCardAddr" />
+    <result column="op_ic_card_no" jdbcType="VARCHAR" property="opIcCardNo" />
+    <result column="op_order_no" jdbcType="VARCHAR" property="opOrderNo" />
+    <result column="open_dt" jdbcType="TIMESTAMP" property="openDt" />
+    <result column="op_water_total_amount" jdbcType="FLOAT" property="opWaterTotalAmount" />
+    <result column="op_ele_total_amount" jdbcType="FLOAT" property="opEleTotalAmount" />
+    <result column="op_money_remain_user" jdbcType="FLOAT" property="opMoneyRemainUser" />
+    <result column="op_water_remain_user" jdbcType="FLOAT" property="opWaterRemainUser" />
+    <result column="op_type" jdbcType="TINYINT" property="opType" />
+    <result column="cl_ic_card_addr" jdbcType="VARCHAR" property="clIcCardAddr" />
+    <result column="cl_ic_card_no" jdbcType="VARCHAR" property="clIcCardNo" />
+    <result column="cl_order_no" jdbcType="VARCHAR" property="clOrderNo" />
+    <result column="start_dt" jdbcType="TIMESTAMP" property="startDt" />
+    <result column="end_dt" jdbcType="TIMESTAMP" property="endDt" />
+    <result column="cl_water_total_amount" jdbcType="FLOAT" property="clWaterTotalAmount" />
+    <result column="cl_ele_total_amount" jdbcType="FLOAT" property="clEleTotalAmount" />
+    <result column="cl_money_remain_user" jdbcType="FLOAT" property="clMoneyRemainUser" />
+    <result column="cl_water_remain_user" jdbcType="FLOAT" property="clWaterRemainUser" />
+    <result column="this_ele" jdbcType="FLOAT" property="thisEle" />
+    <result column="this_water" jdbcType="FLOAT" property="thisWater" />
+    <result column="this_money" jdbcType="FLOAT" property="thisMoney" />
+    <result column="this_duration" jdbcType="INTEGER" property="thisDuration" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, controller_id, intake_id, rtu_addr, op_dt, op_rtu_dt, op_ic_card_addr, op_ic_card_no, 
+    op_order_no, open_dt, op_water_total_amount, op_ele_total_amount, op_money_remain_user, 
+    op_water_remain_user, op_type, cl_ic_card_addr, cl_ic_card_no, cl_order_no, start_dt, 
+    end_dt, cl_water_total_amount, cl_ele_total_amount, cl_money_remain_user, cl_water_remain_user, 
+    this_ele, this_water, this_money, this_duration
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from rm_open_close_last
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from rm_open_close_last
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    <!--@mbg.generated-->
+    insert into rm_open_close_last (id, controller_id, intake_id, 
+      rtu_addr, op_dt, op_rtu_dt, 
+      op_ic_card_addr, op_ic_card_no, op_order_no, 
+      open_dt, op_water_total_amount, op_ele_total_amount, 
+      op_money_remain_user, op_water_remain_user, op_type, 
+      cl_ic_card_addr, cl_ic_card_no, cl_order_no, 
+      start_dt, end_dt, cl_water_total_amount, 
+      cl_ele_total_amount, cl_money_remain_user, cl_water_remain_user, 
+      this_ele, this_water, this_money, 
+      this_duration)
+    values (#{id,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, 
+      #{rtuAddr,jdbcType=VARCHAR}, #{opDt,jdbcType=TIMESTAMP}, #{opRtuDt,jdbcType=TIMESTAMP}, 
+      #{opIcCardAddr,jdbcType=VARCHAR}, #{opIcCardNo,jdbcType=VARCHAR}, #{opOrderNo,jdbcType=VARCHAR}, 
+      #{openDt,jdbcType=TIMESTAMP}, #{opWaterTotalAmount,jdbcType=FLOAT}, #{opEleTotalAmount,jdbcType=FLOAT}, 
+      #{opMoneyRemainUser,jdbcType=FLOAT}, #{opWaterRemainUser,jdbcType=FLOAT}, #{opType,jdbcType=TINYINT}, 
+      #{clIcCardAddr,jdbcType=VARCHAR}, #{clIcCardNo,jdbcType=VARCHAR}, #{clOrderNo,jdbcType=VARCHAR}, 
+      #{startDt,jdbcType=TIMESTAMP}, #{endDt,jdbcType=TIMESTAMP}, #{clWaterTotalAmount,jdbcType=FLOAT}, 
+      #{clEleTotalAmount,jdbcType=FLOAT}, #{clMoneyRemainUser,jdbcType=FLOAT}, #{clWaterRemainUser,jdbcType=FLOAT}, 
+      #{thisEle,jdbcType=FLOAT}, #{thisWater,jdbcType=FLOAT}, #{thisMoney,jdbcType=FLOAT}, 
+      #{thisDuration,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    <!--@mbg.generated-->
+    insert into rm_open_close_last
+    <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="opDt != null">
+        op_dt,
+      </if>
+      <if test="opRtuDt != null">
+        op_rtu_dt,
+      </if>
+      <if test="opIcCardAddr != null">
+        op_ic_card_addr,
+      </if>
+      <if test="opIcCardNo != null">
+        op_ic_card_no,
+      </if>
+      <if test="opOrderNo != null">
+        op_order_no,
+      </if>
+      <if test="openDt != null">
+        open_dt,
+      </if>
+      <if test="opWaterTotalAmount != null">
+        op_water_total_amount,
+      </if>
+      <if test="opEleTotalAmount != null">
+        op_ele_total_amount,
+      </if>
+      <if test="opMoneyRemainUser != null">
+        op_money_remain_user,
+      </if>
+      <if test="opWaterRemainUser != null">
+        op_water_remain_user,
+      </if>
+      <if test="opType != null">
+        op_type,
+      </if>
+      <if test="clIcCardAddr != null">
+        cl_ic_card_addr,
+      </if>
+      <if test="clIcCardNo != null">
+        cl_ic_card_no,
+      </if>
+      <if test="clOrderNo != null">
+        cl_order_no,
+      </if>
+      <if test="startDt != null">
+        start_dt,
+      </if>
+      <if test="endDt != null">
+        end_dt,
+      </if>
+      <if test="clWaterTotalAmount != null">
+        cl_water_total_amount,
+      </if>
+      <if test="clEleTotalAmount != null">
+        cl_ele_total_amount,
+      </if>
+      <if test="clMoneyRemainUser != null">
+        cl_money_remain_user,
+      </if>
+      <if test="clWaterRemainUser != null">
+        cl_water_remain_user,
+      </if>
+      <if test="thisEle != null">
+        this_ele,
+      </if>
+      <if test="thisWater != null">
+        this_water,
+      </if>
+      <if test="thisMoney != null">
+        this_money,
+      </if>
+      <if test="thisDuration != null">
+        this_duration,
+      </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="opDt != null">
+        #{opDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opRtuDt != null">
+        #{opRtuDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opIcCardAddr != null">
+        #{opIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="opIcCardNo != null">
+        #{opIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="opOrderNo != null">
+        #{opOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="openDt != null">
+        #{openDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opWaterTotalAmount != null">
+        #{opWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opEleTotalAmount != null">
+        #{opEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opMoneyRemainUser != null">
+        #{opMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opWaterRemainUser != null">
+        #{opWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opType != null">
+        #{opType,jdbcType=TINYINT},
+      </if>
+      <if test="clIcCardAddr != null">
+        #{clIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="clIcCardNo != null">
+        #{clIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="clOrderNo != null">
+        #{clOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="startDt != null">
+        #{startDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endDt != null">
+        #{endDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clWaterTotalAmount != null">
+        #{clWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clEleTotalAmount != null">
+        #{clEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clMoneyRemainUser != null">
+        #{clMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="clWaterRemainUser != null">
+        #{clWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="thisEle != null">
+        #{thisEle,jdbcType=FLOAT},
+      </if>
+      <if test="thisWater != null">
+        #{thisWater,jdbcType=FLOAT},
+      </if>
+      <if test="thisMoney != null">
+        #{thisMoney,jdbcType=FLOAT},
+      </if>
+      <if test="thisDuration != null">
+        #{thisDuration,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    <!--@mbg.generated-->
+    update rm_open_close_last
+    <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="opDt != null">
+        op_dt = #{opDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opRtuDt != null">
+        op_rtu_dt = #{opRtuDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opIcCardAddr != null">
+        op_ic_card_addr = #{opIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="opIcCardNo != null">
+        op_ic_card_no = #{opIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="opOrderNo != null">
+        op_order_no = #{opOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="openDt != null">
+        open_dt = #{openDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="opWaterTotalAmount != null">
+        op_water_total_amount = #{opWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opEleTotalAmount != null">
+        op_ele_total_amount = #{opEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="opMoneyRemainUser != null">
+        op_money_remain_user = #{opMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opWaterRemainUser != null">
+        op_water_remain_user = #{opWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="opType != null">
+        op_type = #{opType,jdbcType=TINYINT},
+      </if>
+      <if test="clIcCardAddr != null">
+        cl_ic_card_addr = #{clIcCardAddr,jdbcType=VARCHAR},
+      </if>
+      <if test="clIcCardNo != null">
+        cl_ic_card_no = #{clIcCardNo,jdbcType=VARCHAR},
+      </if>
+      <if test="clOrderNo != null">
+        cl_order_no = #{clOrderNo,jdbcType=VARCHAR},
+      </if>
+      <if test="startDt != null">
+        start_dt = #{startDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endDt != null">
+        end_dt = #{endDt,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clWaterTotalAmount != null">
+        cl_water_total_amount = #{clWaterTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clEleTotalAmount != null">
+        cl_ele_total_amount = #{clEleTotalAmount,jdbcType=FLOAT},
+      </if>
+      <if test="clMoneyRemainUser != null">
+        cl_money_remain_user = #{clMoneyRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="clWaterRemainUser != null">
+        cl_water_remain_user = #{clWaterRemainUser,jdbcType=FLOAT},
+      </if>
+      <if test="thisEle != null">
+        this_ele = #{thisEle,jdbcType=FLOAT},
+      </if>
+      <if test="thisWater != null">
+        this_water = #{thisWater,jdbcType=FLOAT},
+      </if>
+      <if test="thisMoney != null">
+        this_money = #{thisMoney,jdbcType=FLOAT},
+      </if>
+      <if test="thisDuration != null">
+        this_duration = #{thisDuration,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    <!--@mbg.generated-->
+    update rm_open_close_last
+    set controller_id = #{controllerId,jdbcType=BIGINT},
+      intake_id = #{intakeId,jdbcType=BIGINT},
+      rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
+      op_dt = #{opDt,jdbcType=TIMESTAMP},
+      op_rtu_dt = #{opRtuDt,jdbcType=TIMESTAMP},
+      op_ic_card_addr = #{opIcCardAddr,jdbcType=VARCHAR},
+      op_ic_card_no = #{opIcCardNo,jdbcType=VARCHAR},
+      op_order_no = #{opOrderNo,jdbcType=VARCHAR},
+      open_dt = #{openDt,jdbcType=TIMESTAMP},
+      op_water_total_amount = #{opWaterTotalAmount,jdbcType=FLOAT},
+      op_ele_total_amount = #{opEleTotalAmount,jdbcType=FLOAT},
+      op_money_remain_user = #{opMoneyRemainUser,jdbcType=FLOAT},
+      op_water_remain_user = #{opWaterRemainUser,jdbcType=FLOAT},
+      op_type = #{opType,jdbcType=TINYINT},
+      cl_ic_card_addr = #{clIcCardAddr,jdbcType=VARCHAR},
+      cl_ic_card_no = #{clIcCardNo,jdbcType=VARCHAR},
+      cl_order_no = #{clOrderNo,jdbcType=VARCHAR},
+      start_dt = #{startDt,jdbcType=TIMESTAMP},
+      end_dt = #{endDt,jdbcType=TIMESTAMP},
+      cl_water_total_amount = #{clWaterTotalAmount,jdbcType=FLOAT},
+      cl_ele_total_amount = #{clEleTotalAmount,jdbcType=FLOAT},
+      cl_money_remain_user = #{clMoneyRemainUser,jdbcType=FLOAT},
+      cl_water_remain_user = #{clWaterRemainUser,jdbcType=FLOAT},
+      this_ele = #{thisEle,jdbcType=FLOAT},
+      this_water = #{thisWater,jdbcType=FLOAT},
+      this_money = #{thisMoney,jdbcType=FLOAT},
+      this_duration = #{thisDuration,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁闃�鎺у櫒鍦板潃鑾峰彇寮�鍏抽榾涓婃姤鏈�鏂版暟鎹�-->
+  <select id="getRmOpenCloseReportLast" resultType="com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast">
+    select
+    <include refid="Base_Column_List" />
+    from rm_open_close_last
+    where rtu_addr = #{rtuAddr}
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
index 97e9c98..20ef3f8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -448,4 +448,5 @@
       </if>
     </where>
   </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/rtuData/dbSv/DbSv.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/dbSv/DbSv.java
index 1309936..7492484 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/dbSv/DbSv.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/dbSv/DbSv.java
@@ -52,6 +52,11 @@
     @Autowired
     private RmTimingReportLastMapper rmTimingReportLastDao; // 瀹氱偣涓婃姤鏈�鏂版暟鎹瓺AO
 
+    @Autowired
+    private RmOpenCloseHistoryMapper rmOpenCloseHistoryDao;
+    @Autowired
+    private RmOpenCloseLastMapper rmOpenCloseLastDao;
+
     //@Autowired
     //@Lazy
     //private DbSv sv ;
@@ -263,7 +268,45 @@
         this.rmOpenCloseValveHistoryMapperDao.updateByPrimaryKeySelective(po) ;
     }
 
+    /**
+     * 淇濆瓨鎺у埗鍣ㄥ紑鍏抽榾涓婃姤鏁版嵁鏈�鏂拌褰�(202404)
+     * @param po
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void saveRmOpenCloseLast(RmOpenCloseLast po){
+        this.rmOpenCloseLastDao.insert(po) ;
+    }
 
+    /**
+     * 淇濆瓨鎺у埗鍣ㄥ紑鍏抽榾涓婃姤鏁版嵁鍘嗗彶璁板綍(202404)
+     * @param po
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void saveRmOpenCloseHistory(RmOpenCloseHistory po){
+        this.rmOpenCloseHistoryDao.insert(po) ;
+    }
+
+    /**
+     * 寰楀埌鎺у埗鍣ㄥ紑鍏抽榾涓婃姤鏁版嵁鏈�鏂拌褰�(202404)
+     * @param rtuAddr
+     * @return
+     */
+    public RmOpenCloseLast getRmOpenCloseLast(String rtuAddr){
+        List<RmOpenCloseLast> list = rmOpenCloseLastDao.getRmOpenCloseReportLast(rtuAddr);
+        if(list != null && list.size() > 0){
+            return list.get(0) ;
+        }
+        return null ;
+    }
+
+    /**
+     * 淇濆瓨鎺у埗鍣ㄥ紑鍏抽榾涓婃姤鏁版嵁鏈�鏂拌褰�(202404)
+     * @param po
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void updateRmOpenCloseLast(RmOpenCloseLast po){
+        this.rmOpenCloseLastDao.updateByPrimaryKeySelective(po);
+    }
 
     /////////////////////////////////////////////////
     //
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java
new file mode 100644
index 0000000..43f32fe
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealCloseValveReportV202404.java
@@ -0,0 +1,104 @@
+package com.dy.rtuMw.server.rtuData.p206V202404;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 13:48
+ * @LastEditTime 2024-06-20 13:48
+ * @Description
+ */
+public class TkDealCloseValveReportV202404 extends TaskSurpport {
+    private static final Logger log = LogManager.getLogger(TkDealTimingReportV202404.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealCloseValveReportV202404";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟锛氬叧闃�涓婃姤
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV202404 dV202404 = (DataV202404) d.getSubData();
+        Object cdObj = dV202404.subData;
+        if (cdObj != null) {
+            try {
+                Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
+                DbSv sv = (DbSv) objs[0];
+                PrController controller = (PrController) objs[1];
+                if (cdObj instanceof DataCd85Vo) {
+                    DataCd85Vo cdData = (DataCd85Vo) (cdObj);
+                    this.doDeal(sv, controller, d.getRtuAddr(), dV202404, (DataCd85Vo)cdObj);
+                }
+            } catch (Exception e) {
+                log.error("淇濆瓨鎺у埗鍣ㄥ紑闃�鎶ユ暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+    /**
+     * 澶勭悊鍏抽榾鎶ユ暟鎹�
+     * @param sv 鏈嶅姟
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param dataV202404 鍗忚鏁版嵁
+     * @param cdData 鍔熻兘鏁版嵁
+     */
+    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData) throws Exception {
+        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
+        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
+    }
+
+    /**
+     * 淇濆瓨鎴栨洿鏂版帶鍒跺櫒鍏抽榾鎶ユ渶鏂版暟鎹�
+     * @param sv 鏈嶅姟bean
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param dataV202404 鍗忚鏁版嵁
+     * @param cdData 鍔熻兘鏁版嵁
+     */
+    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
+        RmOpenCloseLast po = sv.getRmOpenCloseLast(rtuAddr);
+        if(po == null){
+            po = new RmOpenCloseLast();
+            po.controllerId = controller==null?null:controller.getId();
+            po.intakeId = controller==null?null:controller.getIntakeId();
+            po.rtuAddr = rtuAddr;
+            po.valueFrom85(dataV202404, cdData);
+            sv.saveRmOpenCloseLast(po);
+        }else{
+            po.controllerId = controller==null?null:controller.getId();
+            po.intakeId = controller==null?null:controller.getIntakeId();
+            po.valueFrom85(dataV202404, cdData);
+            sv.updateRmOpenCloseLast(po);
+        }
+    }
+
+    /**
+     * 淇濆瓨鎺у埗鍣ㄥ叧闃�鎶ュ巻鍙叉暟鎹�
+     * @param sv 鏈嶅姟bean
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param dataV202404 鍗忚鏁版嵁
+     * @param cdData 鍔熻兘鏁版嵁
+     */
+    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd85Vo cdData)throws Exception {
+        RmOpenCloseHistory po = new RmOpenCloseHistory();
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom85(dataV202404, cdData);
+        sv.saveRmOpenCloseHistory(po); ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java
index 18fdf20..76f11b8 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealOpenValveReportV202404.java
@@ -4,6 +4,8 @@
 import com.dy.common.mw.protocol.p206V202404.DataV202404;
 import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
 import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseHistory;
+import com.dy.pipIrrGlobal.pojoRm.RmOpenCloseLast;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
 import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
 import org.apache.logging.log4j.LogManager;
@@ -54,8 +56,8 @@
      * @param cdData 鍔熻兘鏁版嵁
      */
     private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData) throws Exception {
-        //this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
-        //this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
+        this.saveOrUpdateLast(sv, controller, rtuAddr, dataV202404, cdData);
+        this.saveHistory(sv, controller, rtuAddr, dataV202404, cdData);
     }
 
     /**
@@ -66,22 +68,22 @@
      * @param dataV202404 鍗忚鏁版嵁
      * @param cdData 鍔熻兘鏁版嵁
      */
-    //private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
-    //    RmTimingReportLast po = sv.getRmTimingReportLast(rtuAddr) ;
-    //    if(po == null){
-    //        po = new RmTimingReportLast();
-    //        po.controllerId = controller==null?null:controller.getId();
-    //        po.intakeId = controller==null?null:controller.getIntakeId();
-    //        po.rtuAddr = rtuAddr;
-    //        po.valueFrom(dataV202404, cdData);
-    //        sv.saveRmTimingReportLast(po) ;
-    //    }else{
-    //        po.controllerId = controller==null?null:controller.getId();
-    //        po.intakeId = controller==null?null:controller.getIntakeId();
-    //        po.valueFrom(dataV202404, cdData);
-    //        sv.updateRmTimingReportLast(po);
-    //    }
-    //}
+    private void saveOrUpdateLast(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
+        RmOpenCloseLast po = sv.getRmOpenCloseLast(rtuAddr);
+        if(po == null){
+            po = new RmOpenCloseLast();
+            po.controllerId = controller==null?null:controller.getId();
+            po.intakeId = controller==null?null:controller.getIntakeId();
+            po.rtuAddr = rtuAddr;
+            po.valueFrom84(dataV202404, cdData);
+            sv.saveRmOpenCloseLast(po);
+        }else{
+            po.controllerId = controller==null?null:controller.getId();
+            po.intakeId = controller==null?null:controller.getIntakeId();
+            po.valueFrom84(dataV202404, cdData);
+            sv.updateRmOpenCloseLast(po);
+        }
+    }
 
     /**
      * 淇濆瓨鎺у埗鍣ㄥ伐浣滄姤鍘嗗彶鏁版嵁
@@ -91,12 +93,12 @@
      * @param dataV202404 鍗忚鏁版嵁
      * @param cdData 鍔熻兘鏁版嵁
      */
-    //private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
-    //    RmTimingReportHistory po = new RmTimingReportHistory();
-    //    po.controllerId = controller==null?null:controller.getId();
-    //    po.intakeId = controller==null?null:controller.getIntakeId();
-    //    po.rtuAddr = rtuAddr;
-    //    po.valueFrom(dataV202404, cdData);
-    //    sv.saveRmTimingReportHistory(po); ;
-    //}
+    private void saveHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dataV202404, DataCd84Vo cdData)throws Exception {
+        RmOpenCloseHistory po = new RmOpenCloseHistory();
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom84(dataV202404, cdData);
+        sv.saveRmOpenCloseHistory(po); ;
+    }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
index 891127c..50a0e54 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
@@ -42,6 +42,7 @@
 							<task id="TkDealWorkingReportV202404" name="鎺у埗鍣ㄥ伐浣滄姤(鍔熻兘鐮�80)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealWorkingReportV202404" />
 							<task id="TkDealTimingReportV202404" name="鎺у埗鍣ㄥ畾鏃朵笂鎶�(鍔熻兘鐮�83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealTimingReportV202404" />
 							<task id="TkDealOpenValveReportV202404" name="鎺у埗鍣ㄥ紑闃�涓婃姤(鍔熻兘鐮�84)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealOpenValveReportV202404" />
+							<task id="TkDealCloseValveReportV202404" name="鎺у埗鍣ㄥ叧闃�涓婃姤(鍔熻兘鐮�85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealCloseValveReportV202404" />
 						</task>
 						<!-- 璇嗗埆鍛戒护鍝嶅簲鏁版嵁 -->
 						<task id="TkFindComResponseV202404" name="璇嗗埆鍝嶅簲鍛戒护鏁版嵁" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkFindComResponseV202404">
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
index 33f880e..48e7256 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/district/DistrictSv.java
@@ -75,7 +75,7 @@
      */
     @Transactional
     public int delete(Long id){
-        return this.dao.deleteLogicById(id) ;
+        return this.dao.deleteByPrimaryKey(id) ;
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
index 602291e..585e387 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java
@@ -10,8 +10,10 @@
 import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedParam;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
@@ -41,6 +43,7 @@
     private final PrIntakeMapper prIntakeMapper;
     private final PrWaterPriceMapper prWaterPriceMapper;
     private final PrIntakeVcMapper prIntakeVcMapper;
+    private final SeClientCardMapper seClientCardMapper;
 
     /**
      * 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
@@ -158,7 +161,6 @@
                 jsonObject.put("isOnLine", entry.getValue());
                 jsonArray.add(jsonObject);
             }
-
             System.out.println(jsonArray);
             return rmCommandHistoryMapper.getUncloseParam(jsonArray.toJSONString(), intakeId);
         } else {
@@ -168,4 +170,13 @@
         }
 
     }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱瀵硅薄锛岃繙绋嬪厖鍊间娇鐢�
+     * @param cardId
+     * @return
+     */
+    public SeClientCard geClientCardByCardId(Long cardId) {
+        return seClientCardMapper.selectByPrimaryKey(cardId);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Recharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Recharge.java
new file mode 100644
index 0000000..d636a31
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/Recharge.java
@@ -0,0 +1,34 @@
+package com.dy.pipIrrRemote.common.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-26 8:44
+ * @LastEditTime 2024-06-26 8:44
+ * @Description
+ */
+
+@Data
+public class Recharge extends DtoBase {
+    public static final long serialVersionUID = 202406260745001L;
+
+    /**
+     * 姘村崱ID
+     */
+    @NotNull(message = "姘村崱ID涓嶈兘涓虹┖")
+    private Long cardId;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @NotNull(message = "鍏呭�奸噾棰濅笉鑳戒负绌�")
+    private Double chargeMoney;
+
+    /**
+     * 鍏呭�兼按閲�
+     */
+    private Double chargeWater;
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
index 9aab06e..564ad50 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java
@@ -19,14 +19,16 @@
     GET_RESULT_ERROR(10002, "鑾峰彇缁撴灉寮傚父"),
     PLEASE_SELECT_A_VC(10003, "璇烽�夋嫨涓�寮犺櫄鎷熷崱"),
     IN_USE_VC_CANNOT_OPEN_VALVE(10004, "浣跨敤涓櫄鎷熷崱涓嶈兘鐢ㄦ潵寮�闃�"),
-    VALVE_CLOSED(10005, "璇ュ彇姘村彛宸插叧闃�"),
+    VALVE_CLOSED(10005, "璇ュ彇姘村彛涓嶅湪绾挎垨宸插叧闃�"),
 
     /**
      * RTU
      */
-    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�");
+    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�"),
     //RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
 
+    CLIENT_CARD_NOT_EXIST(30001, "姘村崱涓嶅瓨鍦�");
+
     private final Integer code;
     private final String message;
 }
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 86cc3c9..381fadb 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
@@ -1,10 +1,7 @@
 package com.dy.pipIrrRemote.rtu;
 
-import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
-import com.dy.common.mw.protocol.Command;
-import com.dy.common.mw.protocol.Data;
 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.p206V202404.CodeV202404;
@@ -15,7 +12,6 @@
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.command.dto.Param;
-import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
 import com.dy.pipIrrRemote.common.CommandSv;
 import com.dy.pipIrrRemote.common.dto.Addr;
 import com.dy.pipIrrRemote.common.dto.DtoBase;
@@ -26,7 +22,10 @@
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Objects;
 
@@ -88,75 +87,32 @@
             // 鍒涘缓瑙嗗浘
             ComCd10Vo param = new ComCd10Vo() ;
             param.controllerType = controllerType;
-            param.projectNo =projectNo;
+            param.projectNo = projectNo;
             param.rtuNewAddr = newRtuAddr;
 
-            // 鍙戦�佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
-            Param po = new Param();
-            po.setComId(comId);
-            po.setCommandCode(commandCode);
-            po.setIntakeId(intakeId);
-            po.setRtuAddr(rtuAddr);
-            po.setProtocol(protocol);
-            po.setParam(param);
-            po.setRtuResultSendWebUrl(rtuResultSendWebUrl);
-            po.setOperator(operator);
-            return dealWithCommandResult(po);
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else if(protocol.equals("p206V1_0_1")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV1_0_1.cd_10;
 
             // 鍒涘缓瑙嗗浘
             Com97Vo param = new Com97Vo() ;
-
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                //鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildFail(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildFail(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildFail(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛锛岃繑鍥炲洖璋冨唴瀹�
-                 */
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildFail(job_param.getString("message"));
-            }
+            return BaseResponseUtils.buildSuccess("");
         } else {
             return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
@@ -176,32 +132,59 @@
             return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
-        String commandCode = CodeV202404.cd_97;
+        //String commandCode = CodeV202404.cd_97;
         Long intakeId = po.getIntakeId();
         Long operator = po.getOperator();
         Long comId = idLongGenerator.generate();
 
+        // 鑾峰彇绯荤粺鍙傛暟
+        if(!setuped) {
+            setUp();
+        }
+
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
-        //PrController prController = commandSv.getControllerByIntakeId(intakeId);
-        //if(prController == null) {
-        //    return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
-        //}
-        //String rtuAddr = prController.getRtuAddr();
-        //String protocol = prController.getProtocol();
-        String rtuAddr = "";
-        String protocol = "";
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
 
-        // 鍒涘缓瑙嗗浘
-        ComCdXyVo param = new ComCdXyVo();
-        param.controllerType = controllerType;
-        param.projectNo = projectNo;
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV202404.cd_97;
 
-        // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-        RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, "",intakeId, rtuAddr, protocol, param, operator);
-        comId = commandSv.insert(rmCommandHistory);
+            // 鍒涘缓瑙嗗浘
+            ComCdXyVo param = new ComCdXyVo();
+            param.controllerType = controllerType;
+            param.projectNo = projectNo;
 
-        // 鏋勯�犲懡浠�
-        Command com = command(comId, commandCode,"", rtuAddr, protocol, param);
-        return sendCom2Mw(com);
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_10;
+
+            // 鍒涘缓瑙嗗浘
+            Com97Vo param = new Com97Vo() ;
+            return BaseResponseUtils.buildSuccess("");
+        } else {
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
     }
 }
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 d3eb063..caed798 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
@@ -1,45 +1,43 @@
 package com.dy.pipIrrRemote.valve;
 
-import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.aop.SsoAop;
-import com.dy.common.mw.protocol.Command;
-import com.dy.common.mw.protocol.Data;
 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.p206V202404.CodeV202404;
+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.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.command.ComSupport;
+import com.dy.pipIrrGlobal.command.dto.Param;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
-import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
-import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedParam;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import com.dy.pipIrrRemote.common.CommandSv;
 import com.dy.pipIrrRemote.common.dto.DtoBase;
-import com.dy.pipIrrRemote.common.dto.ValveClose;
+import com.dy.pipIrrRemote.common.dto.Recharge;
 import com.dy.pipIrrRemote.common.dto.ValveOpen;
-import com.dy.pipIrrRemote.common.enums.LastOperateENUM;
 import com.dy.pipIrrRemote.result.RemoteResultCode;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -135,71 +133,24 @@
             param.elePrice = 0.0;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV202404.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    //rmCommandHistory = new RmCommandHistory();
-                    //rmCommandHistory.setId(comId);
-                    //rmCommandHistory.setResult((byte)0);
-                    //commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-//                SeVirtualCard virtualCard = new SeVirtualCard();
-//                virtualCard.setId(vcId);
-//                virtualCard.setInUse((byte) 1);
-//                virtualCard.setIntakeId(intakeId);
-//                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-//                virtualCard.setLastOperateTime(new Date());
-//                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                //Data myData = (Data)response_CallBack.getContent();
-                //return BaseResponseUtils.buildSuccess(myData);
-
-                JSONObject job_response = new JSONObject();
-                job_response.put("rtuAddr", rtuAddr);
-                job_response.put("vcNum", vc.getVcNum());
-                job_response.put("orderNo", orderNo);
-                //job_response.put("operator", operator);
-                return BaseResponseUtils.buildSuccess(job_response);
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)1);
+            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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else if(protocol.equals("p206V1_0_1")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV1_0_1.cd_92;
@@ -211,299 +162,24 @@
             param.waterPrice = waterPrice;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                //鍥炶皟寮傚父
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟瓒呮椂
-                if(response_CallBack.getContent().toString().equals(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
-                    /**
-                     * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
-                     * 鍛戒护缃负澶辫触
-                     * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
-                     * 涓嶈繑鍥炲叧闃�鍙傛暟
-                     */
-
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-
-                    //SeVirtualCard virtualCard = new SeVirtualCard();
-                    //virtualCard.setId(vcId);
-                    //virtualCard.setInUse((byte) 1);
-                    //virtualCard.setIntakeId(intakeId);
-                    //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                    //virtualCard.setLastOperateTime(new Date());
-                    //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                    //JSONObject job_response = new JSONObject();
-                    //job_response.put("message", RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-                    //job_response.put("rtuAddr", rtuAddr);
-                    //job_response.put("vcNum", vc.getVcNum());
-                    //job_response.put("orderNo", orderNo);
-                    //return BaseResponseUtils.buildSuccess(job_response);
-                    return BaseResponseUtils.buildErrorMsg(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                SeVirtualCard virtualCard = new SeVirtualCard();
-                virtualCard.setId(vcId);
-                virtualCard.setInUse((byte) 1);
-                virtualCard.setIntakeId(intakeId);
-                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                virtualCard.setLastOperateTime(new Date());
-                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                //Data myData = (Data)response_CallBack.getContent();
-                //return BaseResponseUtils.buildSuccess(myData) ;
-
-                JSONObject job_response = new JSONObject();
-                job_response.put("message", "ok");
-                job_response.put("rtuAddr", rtuAddr);
-                job_response.put("vcNum", vc.getVcNum());
-                job_response.put("orderNo", orderNo);
-                //job_response.put("operator", operator);
-                return BaseResponseUtils.buildSuccess(job_response);
-
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
-        } else {
-            return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
-        }
-    }
-
-    /**
-     * 骞冲彴杩滅▼鍏抽榾_鍙傛暟妯″紡
-     * @param valve
-     * @param bindingResult
-     * @return
-     */
-    @PostMapping(path = "close", consumes = MediaType.APPLICATION_JSON_VALUE)
-    @Transactional(rollbackFor = Exception.class)
-    @SsoAop()
-    public BaseResponse<Boolean> close(@RequestBody @Valid ValveClose valve, BindingResult bindingResult) {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss");
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
-        }
-
-        String rtuAddr = valve.getRtuAddr();
-        String vcNum = valve.getVcNum();
-        String orderNo = valve.getOrderNo();
-        Long operator = valve.getOperator();
-        Long comId = idLongGenerator.generate();
-
-        // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
-            setUp();
-        }
-
-        // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
-        JSONObject job_rtu = getRtu(null, rtuAddr);
-        if(job_rtu == null) {
-            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
-        }
-        Long intakeId = job_rtu.getLong("intakeId");
-        String protocol = job_rtu.getString("protocol");
-
-        String commandCode = null;
-        if(protocol.equals("p206V202404")) {
-            // 鑾峰彇鍔熻兘鐮�
-            commandCode = CodeV202404.cd_93;
-
-            // 鍒涘缓瑙嗗浘
-            ComCd93_A3Vo param = new ComCd93_A3Vo();
-            param.controllerType = controllerType;
-            param.projectNo = projectNo;
-            param.icCardNo = vcNum;
-            param.orderNo = orderNo;
-
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV202404.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    //rmCommandHistory = new RmCommandHistory();
-                    //rmCommandHistory.setId(comId);
-                    //rmCommandHistory.setResult((byte)0);
-                    //commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildErrorMsgMsg(WechatResultCode.GET_RESULT_ERROR.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                //SeVirtualCard virtualCard = seVirtualCardMapper.getVcCardByNum(vcNum);
-                //virtualCard.setInUse((byte) 0);
-                //virtualCard.setIntakeId(null);
-                //virtualCard.setLastOperate(LastOperateENUM.CLOSE_VALVE.getCode());
-                //virtualCard.setLastOperateTime(new Date());
-                //seVirtualCardMapper.updateByPrimaryKey(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
-        } else if(protocol.equals("p206V1_0_1")) {
-            // 鑾峰彇鍔熻兘鐮�
-            commandCode = CodeV1_0_1.cd_93;
-
-            // 鍒涘缓瑙嗗浘
-            Com98Vo param = new Com98Vo() ;
-            param.icCardNo = vcNum;
-            param.orderNo = orderNo;
-
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟寮傚父
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟瓒呮椂
-                if(response_CallBack.getContent().toString().equals(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
-                    /**
-                     * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
-                     * 鍛戒护缃负澶辫触
-                     * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
-                     */
-
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-
-
-                    //SeVirtualCard virtualCard = seVirtualCardMapper.getVcCardByNum(vcNum);
-                    //virtualCard.setInUse((byte) 0);
-                    //virtualCard.setIntakeId(null);
-                    //virtualCard.setLastOperate(LastOperateENUM.CLOSE_VALVE.getCode());
-                    //virtualCard.setLastOperateTime(new Date());
-                    //seVirtualCardMapper.updateByPrimaryKey(virtualCard);
-                    return BaseResponseUtils.buildErrorMsg(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                SeVirtualCard virtualCard = seVirtualCardMapper.getVcCardByNum(vcNum);
-                virtualCard.setInUse((byte) 0);
-                virtualCard.setIntakeId(null);
-                virtualCard.setLastOperate(LastOperateENUM.CLOSE_VALVE.getCode());
-                virtualCard.setLastOperateTime(new Date());
-                seVirtualCardMapper.updateByPrimaryKey(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)1);
+            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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else {
             return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
@@ -519,7 +195,6 @@
     @Transactional(rollbackFor = Exception.class)
     @SsoAop()
     public BaseResponse<Boolean> closeByIntake(@RequestBody @Valid DtoBase dtoBase, BindingResult bindingResult) {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss");
         if(bindingResult != null && bindingResult.hasErrors()){
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
@@ -539,6 +214,7 @@
         }
         String rtuAddr = voUnclosedParam.getRtuAddr();
         String vcNum = voUnclosedParam.getVcNum();
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
         String orderNo = voUnclosedParam.getOrderNo();
         Long comId = idLongGenerator.generate();
 
@@ -567,63 +243,24 @@
             param.icCardNo = vcNum;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV202404.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    //rmCommandHistory = new RmCommandHistory();
-                    //rmCommandHistory.setId(comId);
-                    //rmCommandHistory.setResult((byte)0);
-                    //commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildErrorMsgMsg(WechatResultCode.GET_RESULT_ERROR.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                //Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                //SeVirtualCard virtualCard = new SeVirtualCard();
-                //virtualCard.setId(vcId);
-                //virtualCard.setInUse((byte) 0);
-                //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                //virtualCard.setLastOperateTime(new Date());
-                //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else if(protocol.equals("p206V1_0_1")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV1_0_1.cd_93;
@@ -633,86 +270,24 @@
             param.icCardNo = vcNum;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟寮傚父
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟瓒呮椂
-                if(response_CallBack.getContent().toString().equals(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
-                    /**
-                     * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
-                     * 鍛戒护缃负澶辫触
-                     * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
-                     */
-
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.updateCommandResult(rmCommandHistory);
-
-                    //Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                    //SeVirtualCard virtualCard = new SeVirtualCard();
-                    //virtualCard.setId(vcId);
-                    //virtualCard.setInUse((byte) 0);
-                    //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                    //virtualCard.setLastOperateTime(new Date());
-                    //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-                    return BaseResponseUtils.buildErrorMsg(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                SeVirtualCard virtualCard = new SeVirtualCard();
-                virtualCard.setId(vcId);
-                virtualCard.setInUse((byte) 0);
-                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                virtualCard.setLastOperateTime(new Date());
-                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else {
             return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
@@ -734,4 +309,90 @@
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
     }
+
+    /**
+     * 骞冲彴杩滅▼鍏呭��
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    @SsoAop()
+    public BaseResponse<Boolean> recharge(@RequestBody @Valid Recharge po, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = po.getIntakeId();
+        Long cardId = po.getCardId();
+        Double chargeMoney = po.getChargeMoney();
+        Double chargeWater = po.getChargeWater();
+        Long operator = po.getOperator();
+        String flowNo = RandomStringUtils.randomNumeric(12); // 鐢熸垚12浣嶉殢鏈烘暟
+        Long comId = idLongGenerator.generate();
+
+        // 鑾峰彇绯荤粺鍙傛暟
+        if(!setuped) {
+            setUp();
+        }
+
+        // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
+
+        // 姘村崱ID鎹㈡按鍗″湴鍧�鍙婃按鍗$紪鍙�
+        SeClientCard seClientCard = commandSv.geClientCardByCardId(cardId);
+        if(seClientCard == null) {
+            return BaseResponseUtils.buildErrorMsg(RemoteResultCode.CLIENT_CARD_NOT_EXIST.getMessage());
+        }
+        String icCardAddr = seClientCard.getCardaddr();
+        String icCardNo = seClientCard.getCardnum();
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV202404.cd_15;
+
+            // 鍒涘缓瑙嗗浘
+            ComCd15Vo param = new ComCd15Vo();
+            param.controllerType = controllerType;
+            param.projectNo = projectNo;
+            param.icCardAddr = icCardAddr;
+            param.icCardNo = icCardNo;
+            param.chargeMoney = chargeMoney;
+            param.chargeWater = chargeWater;
+            param.flowNo = flowNo;
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_10;
+
+            // 鍒涘缓瑙嗗浘
+            Com97Vo param = new Com97Vo() ;
+            return BaseResponseUtils.buildSuccess("");
+        } else {
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java
index aa43460..1161ebb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java
@@ -8,7 +8,6 @@
 import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify;
 import com.dy.pipIrrGlobal.pojoSe.SeOpenId;
 import com.dy.pipIrrGlobal.voSe.VoClientWechat;
-import com.dy.pipIrrSell.wechatpay.PayInfo;
 import com.dy.pipIrrWechat.client.dto.CodeLoginDTO;
 import com.dy.pipIrrWechat.client.dto.CodeVerifyDTO;
 import com.dy.pipIrrWechat.result.WechatResultCode;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/PayInfo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/PayInfo.java
new file mode 100644
index 0000000..fe36705
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/PayInfo.java
@@ -0,0 +1,176 @@
+package com.dy.pipIrrWechat.client;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-03-06 13:49
+ * @LastEditTime 2024-03-06 13:49
+ * @Description
+ */
+public class PayInfo {
+    /**
+     * 灏忕▼搴忕櫥褰旳PI
+     */
+    public static String loginUrl = "https://api.weixin.qq.com/sns/jscode2session";
+
+    /**
+     * 妫�楠岀櫥褰曟��
+     */
+    public static String checkSessionUrl = "https://api.weixin.qq.com/wxa/checksession";
+
+    /**
+     * 閲嶇疆鐧诲綍鎬�
+     */
+    public static String resetUserSessionKeyUrl = "https://api.weixin.qq.com/wxa/resetusersessionkey";
+
+    /**
+     * 鑾峰彇鎺ュ彛璋冪敤鍑嵁
+     */
+    public static String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
+
+    /**
+     * 缁熶竴涓嬪崟API
+     */
+    //public static String orderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+    public static String orderUrl = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";
+
+    /**
+     * 骞冲彴璇佷功涓嬭浇URL
+     */
+    public static String certificates = "https://api.mch.weixin.qq.com/v3/certificates";
+
+    /*
+     * 鏀粯缁撴灉閫氱煡API
+     */
+    public static String notifyUrl = "https://44978f7456.imdo.co/sell/payment/orderNotify";
+
+    /*
+     * 鏌ヨ璁㈠崟API
+     */
+    public static String queryUrl = "https://api.mch.weixin.qq.com/pay/orderquery";
+
+    /**
+     * 鐢宠閫�娆続PI
+     */
+    public static String refundUrl = "https://api.mch.weixin.qq.com/v3/refund/domestic/refunds";
+
+    /*
+     * 閫�娆鹃�氱煡API
+     */
+    public static String refundNotifyUrl = "https://www.muxiaobao.com/wxpay/pay.action";
+
+    /*
+     * 閫�娆炬煡璇PI
+     */
+    public static String refundQueryUrl = "https://api.mch.weixin.qq.com/pay/refundquery";
+
+    /*
+     * 灏忕▼搴忓敮涓�鏍囪瘑
+     */
+    //public static String appid = "wxbc2b6a00dd904ead";
+    public static String appid = "wxf773810cd5643196";
+
+    /*
+     * 灏忕▼搴忕殑 app secret
+     */
+    //public static String secret = "796ffe3e9921f756db0499e80d6ed0cd";
+    public static String secret = "080d4f947095551e988cfe9338e27f15";
+
+    /*
+     * 灏忕▼搴忕殑鎺堟潈绫诲瀷锛岀櫥褰曞嚟璇佹牎楠屼娇鐢�
+     */
+    public static String grantType = "authorization_code";
+
+    /*
+     * 鍟嗘埛鍙�(寰俊鏀粯鍒嗛厤鐨勫晢鎴峰彿)
+     */
+    public static String mchid = "1640721520";
+
+    /*
+     * 鍟嗘埛骞冲彴璁剧疆鐨勫瘑閽ey
+     */
+    public static String key = "DaYuJieShuiYanJiuYuan20230412ABC";
+
+    /**
+     * 鍟嗘埛API璇佷功搴忓垪鍙�
+     */
+    public static String serial_no = "52D65AA66405C738670377F467178F4C950E1606";
+
+    /*
+     * 缁堢IP锛岃皟鐢ㄥ井淇℃敮浠楢PI鐨勬満鍣↖P
+     */
+    public static String addrIp = "47.104.211.89";
+
+    /*
+     * 闅忔満瀛楃涓诧紝闀垮害瑕佹眰鍦�32浣嶄互鍐�
+     */
+    //public static String nonceStr = PayHelper.generateRandomString();
+
+    /*
+     * 鏃堕棿鎴� 浠�1970骞�1鏈�1鏃�00:00:00鑷充粖鐨勭鏁�,鍗冲綋鍓嶇殑鏃堕棿
+     */
+    //public static Long timeStamp = PayHelper.getTimeStamp();
+
+    /*
+     * 浜ゆ槗绫诲瀷锛屽皬绋嬪簭鍙栧�糐SAPI
+     */
+    public static String tradeType = "JSAPI";
+
+    /*
+     * 绛惧悕绫诲瀷
+     */
+    //public static String signType = "MD5";
+    public static String signType = "RSA";
+
+    /*
+     * 鍟嗗搧鎻忚堪 鍟嗗搧绠�鍗曟弿杩帮紝璇ュ瓧娈佃鎸夌収瑙勮寖浼犻��
+     */
+    //public static String body = "澶х鐮旂┒闄�-姘磋垂";
+    public static String description = "澶х鐮旂┒闄�-姘磋垂";
+
+    /*
+     * 闄勫姞鏁版嵁锛屽湪鏌ヨAPI鍜屾敮浠橀�氱煡涓師鏍疯繑鍥烇紝鍙綔涓鸿嚜瀹氫箟鍙傛暟浣跨敤
+     */
+    public static String attach = "澶╂触";
+
+    /*
+     * 绛惧悕锛屽弬涓庣鍚嶅弬鏁帮細appid銆乤ttach銆乵ch_id銆乶once_str銆乥ody銆乷ut_trade_no銆乼otal_fee銆乻pbill_create_ip銆乶otify_url銆乼rade_type銆乷penid
+     */
+    public String sign = "";
+
+    /**
+     * HTTP澶磋璇佺被鍨�
+     */
+    public static String schema = "WECHATPAY2-SHA256-RSA2048";
+
+    /**
+     * 绉侀挜鏂囦欢璺緞
+     */
+    public static String privateCertFileName = "C:\\webchat\\apiclient_key.pem";
+
+    public static String publicCertFileName = "C:\\webchat\\wxp_cert.pem";
+
+    /*
+     * 寰俊璁㈠崟鍙凤紝浼樺厛浣跨敤
+     */
+    public static String transactionid = "";
+
+    /*
+     * 鍟嗘埛绯荤粺鍐呴儴璁㈠崟鍙�
+     */
+    public static String out_trade_no = "";
+
+    /*
+     * 鍟嗘埛閫�娆惧崟鍙�
+     */
+    public static String out_refund_no = "";
+
+    /*
+     * 閫�娆鹃噾棰�
+     */
+    public static Float refundfee;
+
+    /*
+     * 璁㈠崟閲戦
+     */
+    public static Float totalfee;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
index beb671d..6d032a7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -10,8 +10,10 @@
 import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
 import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
@@ -40,6 +42,7 @@
     private final PrIntakeMapper prIntakeMapper;
     private final PrWaterPriceMapper prWaterPriceMapper;
     private final PrIntakeVcMapper prIntakeVcMapper;
+    private final SeClientCardMapper seClientCardMapper;
 
     /**
      * 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
@@ -123,4 +126,13 @@
     public Long getVcIdByIntakeId(Long intakeId) {
         return prIntakeVcMapper.getVcIdByIntakeId(intakeId);
     }
+
+    /**
+     * 鏍规嵁姘村崱缂栧彿鑾峰彇姘村崱瀵硅薄锛岃繙绋嬪厖鍊间娇鐢�
+     * @param cardId
+     * @return
+     */
+    public SeClientCard geClientCardByCardId(Long cardId) {
+        return seClientCardMapper.selectByPrimaryKey(cardId);
+    }
 }
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 d3fc309..f678e9b 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,42 +1,39 @@
 package com.dy.pipIrrWechat.command;
 
-import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
-import com.dy.common.aop.SsoAop;
-import com.dy.common.mw.protocol.Command;
-import com.dy.common.mw.protocol.Data;
 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.p206V202404.CodeV202404;
+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.util.IDLongGenerator;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.pipIrrGlobal.command.ComSupport;
+import com.dy.pipIrrGlobal.command.dto.Param;
 import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
-import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
-import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrWechat.command.dto.Recharge;
 import com.dy.pipIrrWechat.command.dto.ValveClose;
 import com.dy.pipIrrWechat.command.dto.ValveOpen;
-import com.dy.pipIrrWechat.command.enums.LastOperateENUM;
 import com.dy.pipIrrWechat.result.WechatResultCode;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.http.MediaType;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.format.DateTimeFormatter;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author ZhuBaoMin
@@ -48,13 +45,13 @@
 @Slf4j
 @Tag(name = "灏忕▼搴忛榾鎺у櫒鎺у埗", description = "灏忕▼搴忛榾鎺у櫒鎺у埗")
 @RestController
-@RequestMapping(path="valve")
+@RequestMapping(path = "valve")
 @RequiredArgsConstructor
 public class ValveCtrl extends ComSupport {
     private final CommandSv commandSv;
     private final SeVirtualCardMapper seVirtualCardMapper;
     private final IDLongGenerator idLongGenerator;
-    private String rtuResultSendWebUrl = "http://127.0.0.1:8087/wx/comRes/receive" ;
+    private String rtuResultSendWebUrl = "http://127.0.0.1:8087/wx/comRes/receive";
 
     /**
      * 灏忕▼搴忚繙绋嬪紑闃�
@@ -64,10 +61,8 @@
      */
     @PostMapping(path = "open_wx", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
-    @SsoAop()
     public BaseResponse<Boolean> open(@RequestBody @Valid ValveOpen valve, BindingResult bindingResult) {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss");
-        if(bindingResult != null && bindingResult.hasErrors()){
+        if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
@@ -81,24 +76,24 @@
          * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
          * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
          */
-        if(vcId == null) {
+        if (vcId == null) {
             vcId = commandSv.getVcIdByIntakeId(intakeId);
-            if(vcId == null) {
+            if (vcId == null) {
                 return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
             }
         }
 
         // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
+        if (!setuped) {
             setUp();
         }
 
         // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
         VoVirtualCard vc = commandSv.getVcById(vcId);
-        if(vc == null) {
+        if (vc == null) {
             return BaseResponseUtils.buildErrorMsg(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
         }
-        if(vc.getInUse() == 1) {
+        if (vc.getInUse() == 1) {
             return BaseResponseUtils.buildErrorMsg(WechatResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage());
         }
 
@@ -107,7 +102,7 @@
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
         JSONObject job_rtu = getRtu(intakeId, null);
-        if(job_rtu == null) {
+        if (job_rtu == null) {
             return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
         }
         String rtuAddr = job_rtu.getString("rtuAddr");
@@ -117,7 +112,7 @@
         String orderNo = generateOrderNo();
 
         String commandCode = null;
-        if(protocol.equals("p206V202404")) {
+        if (protocol.equals("p206V202404")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV202404.cd_A2;
 
@@ -132,147 +127,54 @@
             param.elePrice = 0.0;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)1);
+            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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
 
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV202404.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                //SeVirtualCard virtualCard = new SeVirtualCard();
-                //virtualCard.setId(vcId);
-                //virtualCard.setInUse((byte) 1);
-                //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                //virtualCard.setLastOperateTime(new Date());
-                //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
-        } else if(protocol.equals("p206V1_0_1")) {
+        } else if (protocol.equals("p206V1_0_1")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV1_0_1.cd_97;
 
             // 鍒涘缓瑙嗗浘
-            Com97Vo param = new Com97Vo() ;
+            Com97Vo param = new Com97Vo();
             param.icCardNo = vc.getVcNum();
             param.moneyRemain = vc.getMoney();
             param.waterPrice = waterPrice;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-            //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                //鍥炶皟寮傚父
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.update(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟瓒呮椂
-                if(response_CallBack.getContent().toString().equals(WechatResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
-                    /**
-                     * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
-                     * 鍛戒护缃负澶辫触
-                     * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
-                     */
-
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.update(rmCommandHistory);
-
-                    //SeVirtualCard virtualCard = new SeVirtualCard();
-                    //virtualCard.setId(vcId);
-                    //virtualCard.setInUse((byte) 1);
-                    //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                    //virtualCard.setLastOperateTime(new Date());
-                    //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-                    return BaseResponseUtils.buildErrorMsg(WechatResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                SeVirtualCard virtualCard = new SeVirtualCard();
-                virtualCard.setId(vcId);
-                virtualCard.setInUse((byte) 1);
-                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                virtualCard.setLastOperateTime(new Date());
-                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)1);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV1_0_1.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else {
             return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
@@ -280,40 +182,40 @@
 
     /**
      * 灏忕▼搴忚繙绋嬪叧闃�
+     *
      * @param valve
      * @param bindingResult
      * @return
      */
     @PostMapping(path = "close_wx", consumes = MediaType.APPLICATION_JSON_VALUE)
     @Transactional(rollbackFor = Exception.class)
-    @SsoAop()
     public BaseResponse<Boolean> close(@RequestBody @Valid ValveClose valve, BindingResult bindingResult) {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss");
-        if(bindingResult != null && bindingResult.hasErrors()){
+        if (bindingResult != null && bindingResult.hasErrors()) {
             return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
         }
 
         String rtuAddr = valve.getRtuAddr();
         String vcNum = valve.getVcNum();
+        Long vcId = Optional.ofNullable(seVirtualCardMapper.getVcIdByNum(vcNum)).orElse(0L);
         String orderNo = valve.getOrderNo();
         Long operator = valve.getOperator();
         Long comId = idLongGenerator.generate();
 
         // 鑾峰彇绯荤粺鍙傛暟
-        if(!setuped) {
+        if (!setuped) {
             setUp();
         }
 
         // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
         JSONObject job_rtu = getRtu(null, rtuAddr);
-        if(job_rtu == null) {
+        if (job_rtu == null) {
             return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
         }
         Long intakeId = job_rtu.getLong("intakeId");
         String protocol = job_rtu.getString("protocol");
 
         String commandCode = null;
-        if(protocol.equals("p206V202404")) {
+        if (protocol.equals("p206V202404")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV202404.cd_A3;
 
@@ -324,147 +226,51 @@
             param.icCardNo = vcNum;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV202404.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟澶辫触
-                if(!response_CallBack.getCode().equals("0001")) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getMsg());
-                    //return BaseResponseUtils.buildErrorMsg(WechatResultCode.GET_RESULT_ERROR.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                //Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                //SeVirtualCard virtualCard = new SeVirtualCard();
-                //virtualCard.setId(vcId);
-                //virtualCard.setInUse((byte) 0);
-                //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                //virtualCard.setLastOperateTime(new Date());
-                //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
-        } else if(protocol.equals("p206V1_0_1")) {
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 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(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else if (protocol.equals("p206V1_0_1")) {
             // 鑾峰彇鍔熻兘鐮�
             commandCode = CodeV1_0_1.cd_98;
 
             // 鍒涘缓瑙嗗浘
-            Com98Vo param = new Com98Vo() ;
+            Com98Vo param = new Com98Vo();
             param.icCardNo = vcNum;
             param.orderNo = orderNo;
 
-            // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
-
-            // 鍙戦�佸懡浠�
-            JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
-            if(response_SendCom != null && response_SendCom.getString("code").equals("0001")) {
-                //if(1 > 0) {
-                // 璇锋眰鎴愬姛
-
-                // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                String commandName = CodeV1_0_1.getCodeName(commandCode);
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, commandName, intakeId, rtuAddr, protocol, param, operator);
-                commandSv.insert(rmCommandHistory);
-
-                // 澶勭悊鍥炶皟
-                BaseResponse response_CallBack = dealWithCallBack(comId);
-
-                // 鍥炶皟寮傚父
-                if(!response_CallBack.getCode().equals("0001")) {
-                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.update(rmCommandHistory);
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                // 鍥炶皟瓒呮椂
-                if(response_CallBack.getContent().toString().equals(WechatResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage())) {
-                    /**
-                     * 鍥炶皟瓒呮椂锛屾殏鏃惰涓烘墽琛屽け璐�
-                     * 鍛戒护缃负澶辫触
-                     * 铏氭嫙鍗′緷鏃т繚鎸佷娇鐢ㄤ腑鐨勭姸鎬�
-                     */
-
-                    rmCommandHistory = new RmCommandHistory();
-                    rmCommandHistory.setId(comId);
-                    rmCommandHistory.setResult((byte)0);
-                    commandSv.update(rmCommandHistory);
-
-                    //Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                    //SeVirtualCard virtualCard = new SeVirtualCard();
-                    //virtualCard.setId(vcId);
-                    //virtualCard.setInUse((byte) 0);
-                    //virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                    //virtualCard.setLastOperateTime(new Date());
-                    //seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-                    return BaseResponseUtils.buildErrorMsg(WechatResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
-                }
-
-                // 鍥炶皟鎴愬姛锛屽啀鍒ゆ柇鎵ц鏄惁鎴愬姛
-                JSONObject job_content = (JSONObject)JSON.toJSON(response_CallBack.getContent());
-                System.out.println(job_content);
-                JSONObject job_subData = (JSONObject) job_content.getJSONObject("subData").getJSONObject("subData");
-                System.out.println(job_subData);
-                Boolean dealResult = job_subData.getBoolean("success");
-                if(!dealResult) {
-                    return BaseResponseUtils.buildErrorMsg(response_CallBack.getContent().toString());
-                }
-
-                /**
-                 * 鎵ц鎴愬姛
-                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-                 */
-                Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-                SeVirtualCard virtualCard = new SeVirtualCard();
-                virtualCard.setId(vcId);
-                virtualCard.setInUse((byte) 0);
-                virtualCard.setLastOperate(LastOperateENUM.OPEN_VALVE.getCode());
-                virtualCard.setLastOperateTime(new Date());
-                seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-                // 鍥炶皟杩斿洖鐨勫唴瀹�
-                Data myData = (Data)response_CallBack.getContent();
-                return BaseResponseUtils.buildSuccess(myData) ;
-            } else {
-                // 璇锋眰澶辫触
-                JSONObject job_param = response_SendCom.getJSONObject("content").getJSONObject("param");
-                return BaseResponseUtils.buildErrorMsg(job_param.getString("message"));
-            }
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setComType((byte)2);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV1_0_1.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setVcId(vcId);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
         } else {
             return BaseResponseUtils.buildErrorMsg("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
@@ -472,18 +278,103 @@
 
     /**
      * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍
+     *
      * @param operator
      * @return
      */
     @GetMapping(path = "/get")
-    //@SsoAop()
-    public BaseResponse<List<VoUnclosedValve>> getUnclosedValves(@RequestParam Long operator){
+    public BaseResponse<List<VoUnclosedValve>> getUnclosedValves(@RequestParam Long operator) {
         try {
             List<VoUnclosedValve> res = commandSv.getUnclosedValves(operator);
             return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
             log.error("鑾峰彇鏈叧闃�璁板綍寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 灏忕▼搴忚繙绋嬪厖鍊�
+     * @param po
+     * @param bindingResult
+     * @return
+     */
+    @PostMapping(path = "recharge", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResponse<Boolean> recharge(@RequestBody @Valid Recharge po, BindingResult bindingResult) {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = po.getIntakeId();
+        Long cardId = po.getCardId();
+        Double chargeMoney = po.getChargeMoney();
+        Double chargeWater = po.getChargeWater();
+        Long operator = po.getOperator();
+        String flowNo = RandomStringUtils.randomNumeric(12); // 鐢熸垚12浣嶉殢鏈烘暟
+        Long comId = idLongGenerator.generate();
+
+        // 鑾峰彇绯荤粺鍙傛暟
+        if(!setuped) {
+            setUp();
+        }
+
+        // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
+
+        // 姘村崱ID鎹㈡按鍗″湴鍧�鍙婃按鍗$紪鍙�
+        SeClientCard seClientCard = commandSv.geClientCardByCardId(cardId);
+        if(seClientCard == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.CLIENT_CARD_NOT_EXIST.getMessage());
+        }
+        String icCardAddr = seClientCard.getCardaddr();
+        String icCardNo = seClientCard.getCardnum();
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV202404.cd_15;
+
+            // 鍒涘缓瑙嗗浘
+            ComCd15Vo param = new ComCd15Vo();
+            param.controllerType = controllerType;
+            param.projectNo = projectNo;
+            param.icCardAddr = icCardAddr;
+            param.icCardNo = icCardNo;
+            param.chargeMoney = chargeMoney;
+            param.chargeWater = chargeWater;
+            param.flowNo = flowNo;
+
+            /**
+             * 鏋勯�犲懡浠ゃ�佸彂閫佸懡浠ゅ苟澶勭悊璇锋眰缁撴灉鍙婃墽琛岀粨鏋�
+             * 1 鍑嗗鍙傛暟
+             * 2 璋冪敤鍏叡鏂规硶
+             */
+            Param myParam = new Param();
+            myParam.setComId(comId);
+            myParam.setCommandCode(commandCode);
+            myParam.setCommandName(CodeV202404.getCodeName(commandCode));
+            myParam.setIntakeId(intakeId);
+            myParam.setRtuAddr(rtuAddr);
+            myParam.setProtocol(protocol);
+            myParam.setParam(param);
+            myParam.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+            myParam.setOperator(operator);
+            return dealWithCommandResult(myParam);
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_10;
+
+            // 鍒涘缓瑙嗗浘
+            Com97Vo param = new Com97Vo() ;
+            return BaseResponseUtils.buildSuccess("");
+        } else {
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/Recharge.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/Recharge.java
new file mode 100644
index 0000000..937e7cd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/Recharge.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrWechat.command.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-26 10:45
+ * @LastEditTime 2024-06-26 10:45
+ * @Description
+ */
+
+@Data
+public class Recharge extends DtoBase {
+    public static final long serialVersionUID = 202406261045001L;
+
+    /**
+     * 姘村崱ID
+     */
+    @NotNull(message = "姘村崱ID涓嶈兘涓虹┖")
+    private Long cardId;
+
+    /**
+     * 鍏呭�奸噾棰�
+     */
+    @NotNull(message = "鍏呭�奸噾棰濅笉鑳戒负绌�")
+    private Double chargeMoney;
+
+    /**
+     * 鍏呭�兼按閲�
+     */
+    private Double chargeWater;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java
index 6a6ef28..1429bb5 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java
@@ -3,6 +3,7 @@
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author ZhuBaoMin
@@ -12,6 +13,7 @@
  */
 
 @Data
+@EqualsAndHashCode(callSuper = false)
 public class ValveClose {
     public static final long serialVersionUID = 202405241727001L;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java
index 481b8a8..e7e3dcb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java
@@ -1,6 +1,7 @@
 package com.dy.pipIrrWechat.command.dto;
 
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author ZhuBaoMin
@@ -10,6 +11,7 @@
  */
 
 @Data
+@EqualsAndHashCode(callSuper = false)
 public class ValveOpen extends DtoBase{
     public static final long serialVersionUID = 202405231531001L;
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java
index 6cb009b..03cb834 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java
@@ -4,6 +4,7 @@
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Min;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author ZhuBaoMin
@@ -13,6 +14,7 @@
  */
 
 @Data
+@EqualsAndHashCode(callSuper = false)
 public class OnLineIntakesQO extends QueryConditionVo {
     /**
      * 涓棿浠惰繑鍥炵殑RTU鍦ㄧ嚎鎯呭喌瀵硅薄鏁扮粍
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java
index e305015..da34da0 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java
@@ -4,6 +4,7 @@
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Min;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author ZhuBaoMin
@@ -13,6 +14,7 @@
  */
 
 @Data
+@EqualsAndHashCode(callSuper = false)
 public class OnLineIntakesQO extends QueryConditionVo {
     /**
      * 涓棿浠惰繑鍥炵殑RTU鍦ㄧ嚎鎯呭喌瀵硅薄鏁扮粍
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java
index 1b61317..1a81590 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java
@@ -28,6 +28,8 @@
     RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�"),
     //RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
 
+    CLIENT_CARD_NOT_EXIST(30001, "姘村崱涓嶅瓨鍦�"),
+
     /**
      * 寰俊鐢ㄦ埛
      */

--
Gitblit v1.8.0