From 620c3af4bb8c53d5ec4c4d0127c9d92dc8aa4f65 Mon Sep 17 00:00:00 2001
From: Administrator <zhubaomin>
Date: 星期一, 03 六月 2024 09:53:49 +0800
Subject: [PATCH] 2024-06-03 朱宝民 平台开关阀及小程序开关阀

---
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/result/RemoteResultCode.java      |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java              |  351 ++++++++----
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/pom.xml                                                             |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java            |  438 +++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandSv.java             |   42 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuCtrl.java                  |   44 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeVcMapper.java                      |   35 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandP206V100Ctrl.java  |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java         |    5 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java     |    6 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java       |   46 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java            |  197 ++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java          |   28 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveClose.java        |    4 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeVcMapper.xml                                     |   85 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntakeVc.java                           |   56 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java                          |  115 ++-
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml                               |   10 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java   |   33 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java                 |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/result/CommandResultCode.java            |   29 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                   |   21 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java                    |   10 
 /dev/null                                                                                                        |   48 -
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java      |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/RtuOnLineDeal.java |   14 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java        |   26 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java    |   40 +
 28 files changed, 1,425 insertions(+), 294 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
index 06f3763..3724072 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
@@ -62,7 +62,7 @@
 			(code.equals(cd_92) ? "閬ユ帶鍚姩闃�闂�" :
 			(code.equals(cd_93) ? "閬ユ帶鍏抽棴闃�闂�" :
 			(code.equals(cd_97) ? "APP杩滅▼寮�闃�" :
-			(code.equals(cd_98) ? "PP杩滅▼鍏抽榾" :
+			(code.equals(cd_98) ? "APP杩滅▼鍏抽榾" :
 			(code.equals(cd_3C) ? "璁剧疆姘翠环" :
 			(code.equals(cd_6C) ? "鏌ヨ姘翠环" :
 			(code.equals(cd_3D) ? "璁剧疆榛戝悕鍗�" :
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/ComSupport.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
similarity index 66%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/ComSupport.java
rename to pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
index 7a81f76..89ba085 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/ComSupport.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/ComSupport.java
@@ -1,19 +1,20 @@
-package com.dy.pipIrrRemote.common;
+package com.dy.pipIrrGlobal.command;
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 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.mw.protocol.p206V202404.downVos.ComCdXyVo;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.command.result.CommandResultCode;
 import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
+import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
-import com.dy.pipIrrRemote.result.RemoteResultCode;
 import jakarta.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.DependsOn;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -22,9 +23,12 @@
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
@@ -32,29 +36,18 @@
 
 /**
  * @author ZhuBaoMin
- * @date 2024-05-21 15:30
- * @LastEditTime 2024-05-21 15:30
- * @Description
+ * @date 2024-05-30 15:45
+ * @LastEditTime 2024-05-30 15:45
+ * @Description 鍛戒护鏀拺绫�
  */
 
 @Component
+@DependsOn({"baSettingsMapper", "prControllerMapper"})
 public class ComSupport {
-    //@NotNull
-    //private final CommandSv commandSv;
-
-    protected static String mwUrlTest = "http://127.0.0.1:8070/rtuMw/com/test" ;
     protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ;
 
-    //protected static String rtuAddr = "37142501020100215" ;
-    protected static String rtuResultSendWebUrl = "http://127.0.0.1:8081/remote/comRes/receive" ;
-
-    protected static String controllerType = "57" ;//鎺у埗鍣ㄧ被鍨�
-    protected static Integer projectNo = 100 ;//椤圭洰缂栫爜
-
-    //protected static String icCardAddr = "04BEA5BB" ;//IC鍗″湴鍧�
-    //protected static String icCardNo = "37142501020500001" ;//IC鍗$紪鍙凤紙鐢ㄦ埛鍗″簭鍒楀彿锛�
-    //protected String protocolName = ProtocolConstantV206V202404.protocolName;
-
+    protected static String controllerType = null;
+    protected static Integer projectNo = null;
     protected String commandTypeOuter = CommandType.outerCommand;
 
     // 瀛樺偍瀹炰緥鍖栫殑 CompletableFuture<Data> 瀵硅薄
@@ -66,6 +59,8 @@
 
     @Autowired
     private BaSettingsMapper baSettingsMapper;
+    @Autowired
+    private PrControllerMapper prControllerMapper;
     public static ComSupport comSupport;
 
     /**
@@ -75,23 +70,51 @@
     public void init() {
         comSupport = this;
         comSupport.baSettingsMapper = this.baSettingsMapper;
+        comSupport.prControllerMapper = this.prControllerMapper;
     }
 
     /**
      * 鑾峰彇绯荤粺閰嶇疆鍙傛暟
      */
     public void setUp() {
-        //protocolName = comSupport.baSettingsMapper.getItemValue("protocolName");
         controllerType = comSupport.baSettingsMapper.getItemValue("controllerType");
         projectNo = Integer.parseInt(comSupport.baSettingsMapper.getItemValue("projectNo"));
         setuped = true;
     }
 
-    protected ComCdXyVo comCdXyVo(){
-        ComCdXyVo comVo = new ComCdXyVo() ;
-        comVo.controllerType = controllerType ;
-        comVo.projectNo = projectNo  ;
-        return comVo ;
+    /**
+     * 鐢熸垚璁㈠崟鍙�
+     * @return
+     */
+    public String generateOrderNo() {
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmss");
+        LocalDateTime dateTime = LocalDateTime.now();
+        Random random = new Random();
+        String CHARACTERS = "0123456789";
+        StringBuilder sb = new StringBuilder(4);
+        for (int i = 0; i < 4; i++) {
+            int index = random.nextInt(CHARACTERS.length());
+            sb.append(CHARACTERS.charAt(index));
+        }
+        return dtf.format(dateTime) + sb.toString();
+    }
+
+    /**
+     * 鏍规嵁鍙栨按鍙D鎴栭榾鎺у櫒鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄
+     * @param intakeId
+     * @return
+     */
+    public JSONObject getRtu(Long intakeId, String rtuAddr) {
+        PrController prController = prControllerMapper.getRtu(intakeId, rtuAddr);
+        if(prController == null) {
+            return null;
+        }
+        JSONObject job_rtu = new JSONObject();
+        job_rtu.put("rtuAddr", prController.getRtuAddr());
+        job_rtu.put("protocol", prController.getProtocol());
+        job_rtu.put("intakeId", prController.getIntakeId());
+
+        return job_rtu;
     }
 
     /**
@@ -104,11 +127,12 @@
      * @param operator 鎿嶄綔鍛�
      * @return
      */
-    protected RmCommandHistory getComHistory(Long comId, String commandCode, Long intakeId, String rtuAddr, String protocol, Object param, Long operator ) {
+    protected RmCommandHistory getComHistory(Long comId, String commandCode, String commandName, Long intakeId, String rtuAddr, String protocol, Object param, Long operator ) {
         RmCommandHistory rmCommandHistory = new RmCommandHistory();
         rmCommandHistory.setId(comId);
         rmCommandHistory.setCommandCode(commandCode);
-        rmCommandHistory.setCommandName(CodeV202404.getCodeName(commandCode));
+        //rmCommandHistory.setCommandName(CodeV202404.getCodeName(commandCode));
+        rmCommandHistory.setCommandName(commandName);
         rmCommandHistory.setIntakeId(intakeId);
         rmCommandHistory.setRtuAddr(rtuAddr);
         rmCommandHistory.setProtocol(protocol);
@@ -126,7 +150,7 @@
      * @param param 鍙傛暟鏁版嵁
      * @return 鏋勯�犲ソ鐨勫懡浠ゅ璞�
      */
-    protected Command command(Long comId, String commandCode, String rtuAddr, String protocol, Object param){
+    protected Command command(Long comId, String commandCode, String rtuAddr, String protocol, String rtuResultSendWebUrl, Object param){
         Command com = new Command() ;
         com.id = String.valueOf(comId);
         com.code = commandCode ;
@@ -152,9 +176,9 @@
         try {
             CompletableFuture<Data> feature = (CompletableFuture<Data>) features.get(comId);
             System.out.println("receive result ID:" + comId);
-            Data resultData = feature.get(10, TimeUnit.SECONDS);
+            Data resultData = feature.get(30, TimeUnit.SECONDS);
             features.remove(comId);
-            String commandId = resultData.getCommandId();
+            Long commandId = Long.parseLong(resultData.getCommandId());
             if(commandId.equals(comId)) {
                 return BaseResponseUtils.buildSuccess(resultData);
             }else {
@@ -162,33 +186,13 @@
             }
         } catch (InterruptedException e) {
             e.printStackTrace();
-            return BaseResponseUtils.buildFail(RemoteResultCode.GET_RESULT_ERROR.getMessage());
+            return BaseResponseUtils.buildFail(CommandResultCode.GET_RESULT_ERROR.getMessage());
         } catch (ExecutionException e) {
             e.printStackTrace();
-            return BaseResponseUtils.buildFail(RemoteResultCode.GET_RESULT_ERROR.getMessage());
+            return BaseResponseUtils.buildFail(CommandResultCode.GET_RESULT_ERROR.getMessage());
         } catch (TimeoutException e) {
-            return BaseResponseUtils.buildFail(RemoteResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
+            return BaseResponseUtils.buildFail(CommandResultCode.GET_RESULT_IN_ONE_MINUTE.getMessage());
         }
-    }
-
-    /**
-     * 杩炴帴閫氫俊涓棿浠舵祴璇�
-     * @return
-     */
-    protected BaseResponse sendTest(){
-        String url = UriComponentsBuilder.fromUriString(mwUrlTest)
-                .build()
-                .toUriString();
-        HttpHeaders headers = new HttpHeaders();
-        HttpEntity<?> httpEntity = new HttpEntity<>(headers);
-        ResponseEntity<BaseResponse> response = null;
-        try {
-            // 閫氳繃Get鏂瑰紡璋冪敤鎺ュ彛
-            response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, BaseResponse.class);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return response.getBody();
     }
 
     /**
@@ -210,5 +214,4 @@
         }
         return response.getBody();
     }
-
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/result/CommandResultCode.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/result/CommandResultCode.java
new file mode 100644
index 0000000..6671501
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/command/result/CommandResultCode.java
@@ -0,0 +1,29 @@
+package com.dy.pipIrrGlobal.command.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-07 14:54
+ * @LastEditTime 2024-05-07 14:54
+ * @Description
+ */
+@Getter
+@AllArgsConstructor
+public enum CommandResultCode {
+    /**
+     * Valve
+     */
+    GET_RESULT_IN_ONE_MINUTE(10001,"1鍒嗛挓鍚庡幓鏌ョ湅缁撴灉"),
+    GET_RESULT_ERROR(10002, "鑾峰彇缁撴灉寮傚父"),
+
+    /**
+     * RTU
+     */
+    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�"),
+    RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
+
+    private final Integer code;
+    private final String message;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
index 4b94e9e..7b1a76b 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrControllerMapper.java
@@ -88,16 +88,10 @@
     Integer deleteIntakeId(@Param("controllerId") Long controllerId);
 
     /**
-     * 鏍规嵁鍙栨按鍙D鑾峰彇闃�鎺у櫒瀵硅薄
+     * 鏍规嵁鍙栨按鍙D鎴栭榾鎺у櫒鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄
      * @param intakeId
-     * @return
-     */
-    PrController getControllerByIntakeId(Long intakeId);
-
-    /**
-     * 鏍规嵁RTU鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄
      * @param rtuAddr
      * @return
      */
-    PrController getControllerByRtuAddr(String rtuAddr);
+    PrController getRtu(@Param("intakeId") Long intakeId, @Param("rtuAddr") String rtuAddr);
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeVcMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeVcMapper.java
new file mode 100644
index 0000000..0182875
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoPr/PrIntakeVcMapper.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrGlobal.daoPr;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dy.pipIrrGlobal.pojoPr.PrIntakeVc;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-31 19:26
+ * @LastEditTime 2024-05-31 19:26
+ * @Description
+ */
+
+@Mapper
+public interface PrIntakeVcMapper extends BaseMapper<PrIntakeVc> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(PrIntakeVc record);
+
+    int insertSelective(PrIntakeVc record);
+
+    PrIntakeVc selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(PrIntakeVc record);
+
+    int updateByPrimaryKey(PrIntakeVc record);
+
+    /**
+     * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+     * @param intakeId
+     * @return
+     */
+    Long getVcIdByIntakeId(@Param("intakeId") Long intakeId);
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntakeVc.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntakeVc.java
new file mode 100644
index 0000000..071dbc2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoPr/PrIntakeVc.java
@@ -0,0 +1,56 @@
+package com.dy.pipIrrGlobal.pojoPr;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-31 19:26
+ * @LastEditTime 2024-05-31 19:26
+ * @Description
+ */
+
+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.po.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+
+/**
+ * 鍙栨按鍙h櫄鎷熷崱缁戝畾琛�
+ */
+
+@TableName(value="pr_intake_vc", autoResultMap = true)
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "鍙栨按鍙h櫄鎷熷崱缁戝畾瀹炰綋")
+public class PrIntakeVc implements BaseEntity {
+    public static final long serialVersionUID = 202405311931001L;
+
+    /**
+    * 涓婚敭
+    */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    @TableId(type = IdType.INPUT)
+    @Schema(description = "瀹炰綋id", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    private Long id;
+
+    /**
+    * 鍙栨按鍙D
+    */
+    @Schema(description = "鍙栨按鍙D", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "鍙栨按鍙D涓嶈兘涓虹┖")
+    private Long intakeId;
+
+    /**
+    * 铏氭嫙鍗D
+    */
+    @Schema(description = "铏氭嫙鍗D", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "铏氭嫙鍗D涓嶈兘涓虹┖")
+    private Long vcId;
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
index 928d0a5..fa997e8 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -252,13 +252,18 @@
     SELECT COUNT(*) AS recordCount FROM pr_controller WHERE rtuAddr = (SELECT rtuAddr FROM pr_controller_tramp WHERE id = ${controllerId}) AND intakeId IS NOT NULL
   </select>
 
-  <!--鏍规嵁鍙栨按鍙D鑾峰彇闃�鎺у櫒瀵硅薄-->
-  <select id="getControllerByIntakeId" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
-    SELECT * FROM pr_controller WHERE deleted = 0 AND intakeId = #{intakeId} LIMIT 0,1
-  </select>
-
-  <!--鏍规嵁RTU鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄-->
-  <select id="getControllerByRtuAddr" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
-    SELECT * FROM pr_controller WHERE deleted = 0 AND rtuAddr = #{rtuAddr} LIMIT 0,1
+  <!--鏍规嵁鍙栨按鍙D鎴栭榾鎺у櫒鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄-->
+  <select id="getRtu" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
+    SELECT * FROM pr_controller
+    <where>
+      AND deleted = 0
+      <if test = "intakeId != null">
+        AND intakeId = #{intakeId}
+      </if>
+      <if test = "rtuAddr != null">
+        AND rtuAddr = #{rtuAddr}
+      </if>
+    </where>
+    LIMIT 0,1
   </select>
 </mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeVcMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeVcMapper.xml
new file mode 100644
index 0000000..afe2297
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeVcMapper.xml
@@ -0,0 +1,85 @@
+<?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.daoPr.PrIntakeVcMapper">
+  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrIntakeVc">
+    <!--@mbg.generated-->
+    <!--@Table pr_intake_vc-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="intake_id" jdbcType="BIGINT" property="intakeId" />
+    <result column="vc_id" jdbcType="BIGINT" property="vcId" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, intake_id, vc_id
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from pr_intake_vc
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from pr_intake_vc
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntakeVc">
+    <!--@mbg.generated-->
+    insert into pr_intake_vc (id, intake_id, vc_id
+      )
+    values (#{id,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, #{vcId,jdbcType=BIGINT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntakeVc">
+    <!--@mbg.generated-->
+    insert into pr_intake_vc
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="intakeId != null">
+        intake_id,
+      </if>
+      <if test="vcId != null">
+        vc_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="intakeId != null">
+        #{intakeId,jdbcType=BIGINT},
+      </if>
+      <if test="vcId != null">
+        #{vcId,jdbcType=BIGINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntakeVc">
+    <!--@mbg.generated-->
+    update pr_intake_vc
+    <set>
+      <if test="intakeId != null">
+        intake_id = #{intakeId,jdbcType=BIGINT},
+      </if>
+      <if test="vcId != null">
+        vc_id = #{vcId,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntakeVc">
+    <!--@mbg.generated-->
+    update pr_intake_vc
+    set intake_id = #{intakeId,jdbcType=BIGINT},
+      vc_id = #{vcId,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <!--鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D-->
+  <select id="getVcIdByIntakeId" resultType="java.lang.Long">
+    SELECT vc_id AS vcId FROM pr_intake_vc WHERE intake_id = #{intakeId} LIMIT 0,1
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
index 68dc960..207afc7 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -203,8 +203,14 @@
                 isOnLine BOOLEAN PATH '$.isOnLine'
             )
         ) rtus ON com.rtu_addr = rtus.rtuAddr
-    WHERE (com.command_code = '92' OR com.command_code = 'A2') AND com.operator = #{operator}
-    AND NOT EXISTS (SELECT * FROM rm_command_history WHERE (command_code = '93' OR command_code = 'A3') AND param ->>'$.orderNo' = com.param ->>'$.orderNo')
+    WHERE (com.command_code = '92' OR com.command_code = 'A2' OR com.command_code = '97') AND com.operator = #{operator}
+    AND NOT EXISTS (
+        SELECT *
+        FROM rm_command_history
+        WHERE (result IS NULL OR result = 1 )
+            AND (command_code = '93' OR command_code = 'A3' OR command_code = '98')
+            AND param ->>'$.orderNo' = com.param ->>'$.orderNo'
+    )
     ORDER BY com.send_time DESC
   </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/local/localProtocol/RtuOnLineDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/RtuOnLineDeal.java
index b981223..0338eb7 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/RtuOnLineDeal.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/local/localProtocol/RtuOnLineDeal.java
@@ -1,6 +1,6 @@
 package com.dy.rtuMw.server.local.localProtocol;
 
-import java.util.HashMap;
+import com.dy.rtuMw.server.forTcp.TcpSessionCache;
 
 public class RtuOnLineDeal {
 
@@ -8,13 +8,13 @@
 	 * 鏌ヨ鍦ㄧ嚎涓庝笉鍦ㄧ嚎鎯呭喌
 	 */
 	public RtuOnLineVo deal(){
-		//return (new RtuOnLineVo()).setOnLine(TcpSessionCache.allOnLine());
+		return (new RtuOnLineVo()).setOnLine(TcpSessionCache.allOnLine());
 
 		// 杩斿洖鍊兼祴璇曚唬鐮�
-		HashMap<String , Boolean> onLineMap = new HashMap<>() ;
-		onLineMap.put("37142501020100215", true);
-		onLineMap.put("dy20240325", false);
-		onLineMap.put("4000004", true);
-		return (new RtuOnLineVo()).setOnLine(onLineMap);
+		//HashMap<String , Boolean> onLineMap = new HashMap<>() ;
+		//onLineMap.put("37142501020100215", true);
+		//onLineMap.put("dy20240325", false);
+		//onLineMap.put("4000004", true);
+		//return (new RtuOnLineVo()).setOnLine(onLineMap);
 	}
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandP206V100Ctrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandP206V100Ctrl.java
index 039c6ef..eb74c3d 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandP206V100Ctrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/src/main/java/com/dy/pipIrrMwTestWeb/test/CommandP206V100Ctrl.java
@@ -23,8 +23,8 @@
     @GetMapping(path = "test")
     public BaseResponse<String> test() {
         //return this.connect() ;//杩炴帴閫氫俊涓棿浠舵祴璇�
-        //return this.cd97() ;
-        return this.cd98() ;
+        return this.cd97() ;
+        //return this.cd98() ;
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
index 1ef8c8d..32c9029 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/CommandResultCtrl.java
@@ -3,6 +3,7 @@
 import com.dy.common.mw.protocol.Data;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.command.ComSupport;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -25,10 +26,11 @@
 public class CommandResultCtrl extends ComSupport {
     @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
     public BaseResponse<String> receive(@RequestBody Data data) {
-        String comId = "0";
+        Long comId = 0L;
         if(data.getCommandId() != null) {
-            comId = data.getCommandId();
+            comId = Long.parseLong(data.getCommandId());
         }
+
         CompletableFuture<Data> feature = (CompletableFuture<Data>) features.get(comId);
         if(feature != null) {
             feature.complete(data);
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 c640895..ee47423 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
@@ -5,14 +5,16 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.dy.common.mw.protocol.Command;
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
+import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
 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.voPr.VoOnLineIntake;
 import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
 import com.dy.pipIrrRemote.common.qo.OnLineIntakesQO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -36,26 +38,26 @@
 @RequiredArgsConstructor
 public class CommandSv extends ComSupport {
     private final RmCommandHistoryMapper rmCommandHistoryMapper;
-    private final PrControllerMapper prControllerMapper;
     private final SeVirtualCardMapper seVirtualCardMapper;
     private final PrIntakeMapper prIntakeMapper;
+    private final PrWaterPriceMapper prWaterPriceMapper;
+    private final PrIntakeVcMapper prIntakeVcMapper;
 
     /**
-     * 鏍规嵁鍙栨按鍙D鑾峰彇闃�鎺у櫒瀵硅薄
-     * @param intakeId
+     * 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+     * @param vcId
      * @return
      */
-    public PrController getControllerByIntakeId(Long intakeId) {
-        return prControllerMapper.getControllerByIntakeId(intakeId);
+    public VoVirtualCard getVcById(Long vcId) {
+        return seVirtualCardMapper.getVcById(vcId);
     }
 
     /**
-     * 鏍规嵁RTU鍦板潃鑾峰彇闃�鎺у櫒瀵硅薄
-     * @param rtuAddr
+     * 鑾峰彇姘翠环
      * @return
      */
-    public PrController getControllerByRtuAddr(String rtuAddr) {
-        return prControllerMapper.getControllerByRtuAddr(rtuAddr);
+    public Double getPrice() {
+        return prWaterPriceMapper.getPrice();
     }
 
     /**
@@ -171,6 +173,7 @@
                 jsonArray.add(jsonObject);
             }
 
+            System.out.println(jsonArray);
             List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), operator);
             if(res != null) {
                 return res;
@@ -183,4 +186,21 @@
         }
     }
 
+    /**
+     * 淇敼鍛戒护鏃ュ織璁板綍锛屽洖璋冩姤閿欐椂灏嗗懡浠よ褰曠殑鎵ц缁撴灉鏀逛负澶辫触
+     * @param po
+     * @return
+     */
+    public Integer updateCommandResult(RmCommandHistory po) {
+        return rmCommandHistoryMapper.updateByPrimaryKeySelective(po);
+    }
+
+    /**
+     * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+     * @param intakeId
+     * @return
+     */
+    public Long getVcIdByIntakeId(Long intakeId) {
+        return prIntakeVcMapper.getVcIdByIntakeId(intakeId);
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveClose.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveClose.java
index 2693079..783c779 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveClose.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveClose.java
@@ -35,8 +35,8 @@
     /**
      * 鐢ㄦ埛绫诲瀷 1-骞冲彴锛�2-APP
      */
-    @NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
-    private Integer userType;
+    //@NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
+    //private Integer userType;
 
     /**
      * 鎿嶄綔浜�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java
index 2074ba3..cc4a505 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/common/dto/ValveOpen.java
@@ -1,6 +1,5 @@
 package com.dy.pipIrrRemote.common.dto;
 
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 /**
@@ -22,6 +21,6 @@
     /**
      * 鐢ㄦ埛绫诲瀷 1-骞冲彴锛�2-APP
      */
-    @NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
-    private Integer userType;
+    //@NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
+    //private Integer userType;
 }
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 f79a834..ffa9ba3 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
@@ -15,14 +15,16 @@
     /**
      * Valve
      */
-    GET_RESULT_IN_ONE_MINUTE(10001,"1鍒嗛挓鍚庡幓鏌ョ湅缁撴灉"),
+    //GET_RESULT_IN_ONE_MINUTE(10001,"1鍒嗛挓鍚庡幓鏌ョ湅缁撴灉"),
     GET_RESULT_ERROR(10002, "鑾峰彇缁撴灉寮傚父"),
+    PLEASE_SELECT_A_VC(10002, "璇烽�夋嫨涓�寮犺櫄鎷熷崱"),
+    IN_USE_VC_CANNOT_OPEN_VALVE(10002, "浣跨敤涓櫄鎷熷崱涓嶈兘鐢ㄦ潵寮�闃�"),
 
     /**
      * RTU
      */
-    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�"),
-    RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
+    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�");
+    //RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
 
     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 5ffa204..a0fe3bd 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
@@ -12,15 +12,13 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.command.ComSupport;
 import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
 import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
-import com.dy.pipIrrRemote.common.ComSupport;
 import com.dy.pipIrrRemote.common.CommandSv;
 import com.dy.pipIrrRemote.common.dto.Addr;
 import com.dy.pipIrrRemote.common.dto.DtoBase;
 import com.dy.pipIrrRemote.common.qo.OnLineIntakesQO;
-import com.dy.pipIrrRemote.result.RemoteResultCode;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -126,12 +124,12 @@
         Long comId = idLongGenerator.generate();
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
-        PrController prController = commandSv.getControllerByIntakeId(intakeId);
-        if(prController == null) {
-            return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
-        }
-        String rtuAddr = prController.getRtuAddr();
-        String protocol = prController.getProtocol();
+        //PrController prController = commandSv.getControllerByIntakeId(intakeId);
+        //if(prController == null) {
+        //    return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        //}
+        //String rtuAddr = prController.getRtuAddr();
+        //String protocol = prController.getProtocol();
 
         // 鍒涘缓瑙嗗浘
         ComCd10Vo param = new ComCd10Vo() ;
@@ -140,13 +138,13 @@
         param.rtuNewAddr = newRtuAddr;
 
         // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-        RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
-        comId = commandSv.insert(rmCommandHistory);
-        System.out.println(comId);
+        //RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
+        //comId = commandSv.insert(rmCommandHistory);
+        //System.out.println(comId);
 
         // 鏋勯�犲懡浠�
-        Command com = command(comId, commandCode, rtuAddr, protocol, param);
-        sendCom2Mw(com);
+        //Command com = command(comId, commandCode, rtuAddr, protocol, param);
+        //sendCom2Mw(com);
 
         CompletableFuture<Data> featureObject = new CompletableFuture<>();
         features.put(comId, featureObject);
@@ -193,12 +191,14 @@
         Long comId = idLongGenerator.generate();
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
-        PrController prController = commandSv.getControllerByIntakeId(intakeId);
-        if(prController == null) {
-            return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
-        }
-        String rtuAddr = prController.getRtuAddr();
-        String protocol = prController.getProtocol();
+        //PrController prController = commandSv.getControllerByIntakeId(intakeId);
+        //if(prController == null) {
+        //    return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
+        //}
+        //String rtuAddr = prController.getRtuAddr();
+        //String protocol = prController.getProtocol();
+        String rtuAddr = "";
+        String protocol = "";
 
         // 鍒涘缓瑙嗗浘
         ComCdXyVo param = new ComCdXyVo();
@@ -206,11 +206,11 @@
         param.projectNo = projectNo;
 
         // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-        RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
+        RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, "",intakeId, rtuAddr, protocol, param, operator);
         comId = commandSv.insert(rmCommandHistory);
 
         // 鏋勯�犲懡浠�
-        Command com = command(comId, commandCode, rtuAddr, protocol, param);
+        Command com = command(comId, commandCode,"", rtuAddr, protocol, param);
         return sendCom2Mw(com);
     }
 }
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 a71c8f8..b6036ba 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/ValveCtrl.java
@@ -5,25 +5,25 @@
 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.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.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.command.ComSupport;
 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 com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
 import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
-import com.dy.pipIrrRemote.common.ComSupport;
 import com.dy.pipIrrRemote.common.CommandSv;
 import com.dy.pipIrrRemote.common.dto.ValveClose;
 import com.dy.pipIrrRemote.common.dto.ValveOpen;
 import com.dy.pipIrrRemote.result.RemoteResultCode;
-import com.dy.pipIrrRemote.utils.RestTemplateUtils;
 import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
@@ -34,12 +34,10 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
-import java.util.Random;
 
 /**
  * @author ZhuBaoMin
@@ -49,19 +47,18 @@
  */
 
 @Slf4j
-@Tag(name = "闃�闂ㄧ鐞�", description = "闃�闂ㄦ搷浣�")
+@Tag(name = "骞冲彴闃�鎺у櫒鎺у埗", description = "骞冲彴闃�鎺у櫒鎺у埗")
 @RestController
 @RequestMapping(path="valve")
 @RequiredArgsConstructor
 public class ValveCtrl extends ComSupport {
-    private final RestTemplateUtils restTemplateUtils;
     private final CommandSv commandSv;
     private final SeVirtualCardMapper seVirtualCardMapper;
-    private final PrWaterPriceMapper prWaterPriceMapper;
     private final IDLongGenerator idLongGenerator;
+    private String rtuResultSendWebUrl = "http://127.0.0.1:8081/remote/comRes/receive" ;
 
     /**
-     * 杩滅▼寮�闃�锛堝钩鍙般�丄PP锛�
+     * 灏忕▼搴忚繙绋嬪紑闃�
      * @param valve
      * @param bindingResult
      * @return
@@ -77,49 +74,55 @@
 
         Long intakeId = valve.getIntakeId();
         Long vcId = valve.getVcId();
-        Integer userType = valve.getUserType();
         Long operator = valve.getOperator();
         Long comId = idLongGenerator.generate();
+
+        /**
+         * 濡傛灉鍐滄埛閫夋嫨浜嗚櫄鎷熷崱锛屽垯浣跨敤璇ヨ櫄鎷熷崱
+         * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
+         * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
+         */
+        if(vcId == null) {
+            vcId = commandSv.getVcIdByIntakeId(intakeId);
+            if(vcId == null) {
+                return BaseResponseUtils.buildFail(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage());
+            }
+        }
 
         // 鑾峰彇绯荤粺鍙傛暟
         if(!setuped) {
             setUp();
         }
+// 鍙栨按鍙D鎹㈠彇姘村彛瀵硅薄
+// 濡傛灉鍙栨按鍙d负鎵撳紑鐘舵�侊紝鍒欎笉鍏佽琚紑闃�
 
         // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
-        VoVirtualCard vc = seVirtualCardMapper.getVcById(vcId);
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if(vc == null) {
+            return BaseResponseUtils.buildFail(RemoteResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        if(vc.getInUse() == 1) {
+            return BaseResponseUtils.buildFail(RemoteResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage());
+        }
+
         // 鑾峰彇姘翠环
-        Double waterPrice = prWaterPriceMapper.getPrice();
+        Double waterPrice = commandSv.getPrice();
 
         // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
-        PrController prController = commandSv.getControllerByIntakeId(intakeId);
-        if(prController == null) {
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
             return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
         }
-        String rtuAddr = prController.getRtuAddr();
-        String protocol = prController.getProtocol();
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
 
         // 鐢熸垚璁㈠崟鍙�
-        LocalDateTime dateTime = LocalDateTime.now();
-        Random random = new Random();
-        String CHARACTERS = "0123456789";
-        StringBuilder sb = new StringBuilder(4);
-        for (int i = 0; i < 4; i++) {
-            int index = random.nextInt(CHARACTERS.length());
-            sb.append(CHARACTERS.charAt(index));
-        }
-        String orderNo = dtf.format(dateTime) + sb.toString();
+        String orderNo = generateOrderNo();
 
         String commandCode = null;
         if(protocol.equals("p206V202404")) {
             // 鑾峰彇鍔熻兘鐮�
-            if(userType == 1) {
-                // 骞冲彴寮�闃�
-                commandCode = CodeV202404.cd_92;
-            }else {
-                // APP寮�闃�
-                commandCode = CodeV202404.cd_A2;
-            }
+            commandCode = CodeV202404.cd_92;
 
             // 鍒涘缓瑙嗗浘
             ComCd92_A2Vo param = new ComCd92_A2Vo();
@@ -133,25 +136,115 @@
             param.orderNo = orderNo;
 
             // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, param);
+            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) {
+                //if(1 > 0) {
                 // 璇锋眰鎴愬姛
 
                 // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
+                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.buildError(RemoteResultCode.GET_RESULT_ERROR.getMessage());
+                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
+                    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());
+                }
+
+                /**
+                 * 鎵ц鎴愬姛
+                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+                 */
+                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.buildFail(job_param.getString("message"));
+            }
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_92;
+
+            // 鍒涘缓瑙嗗浘
+            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.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());
+                }
+
+                /**
+                 * 鎵ц鎴愬姛
+                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+                 */
                 SeVirtualCard virtualCard = new SeVirtualCard();
                 virtualCard.setId(vcId);
                 virtualCard.setInUse((byte) 1);
@@ -168,32 +261,12 @@
                 return BaseResponseUtils.buildFail(job_param.getString("message"));
             }
         } else {
-            // 鑾峰彇鍔熻兘鐮�
-            if(userType == 1) {
-                // 骞冲彴寮�闃�
-                commandCode = "92";
-            }else {
-                // APP寮�闃�
-                commandCode = "97";
-            }
-
-            // 鍒涘缓瑙嗗浘
-            ComCd92_A2Vo param = new ComCd92_A2Vo();
-
-            // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-            //RmCommandHistory rmCommandHistory = getComHistory(commandCode, rtuAddr, protocol, param, operator);
-            //comId = commandSv.insert(rmCommandHistory);
-
-            // 鏋勯�犲苟鍙戦�佸懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, param);
-            sendCom2Mw(com);
-
-            return BaseResponseUtils.buildSuccess();
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
     }
 
     /**
-     * 杩滅▼鍏抽榾锛堝钩鍙般�丄PP锛�
+     * 灏忕▼搴忚繙绋嬪叧闃�
      * @param valve
      * @param bindingResult
      * @return
@@ -210,7 +283,6 @@
         String rtuAddr = valve.getRtuAddr();
         String vcNum = valve.getVcNum();
         String orderNo = valve.getOrderNo();
-        Integer userType = valve.getUserType();
         Long operator = valve.getOperator();
         Long comId = idLongGenerator.generate();
 
@@ -220,23 +292,17 @@
         }
 
         // 闃�鎺у櫒鍦板潃鎹㈠彇姘村彛ID鍜岄�氳鍗忚
-        PrController prController = commandSv.getControllerByRtuAddr(rtuAddr);
-        if(prController == null) {
+        JSONObject job_rtu = getRtu(null, rtuAddr);
+        if(job_rtu == null) {
             return BaseResponseUtils.buildError(RemoteResultCode.RTU_NOT_EXIST.getMessage());
         }
-        Long intakeId = prController.getIntakeId();
-        String protocol = prController.getProtocol();
+        Long intakeId = job_rtu.getLong("intakeId");
+        String protocol = job_rtu.getString("protocol");
 
         String commandCode = null;
         if(protocol.equals("p206V202404")) {
             // 鑾峰彇鍔熻兘鐮�
-            if (userType == 1) {
-                // 骞冲彴鍏抽榾
-                commandCode = CodeV202404.cd_93;
-            } else {
-                // APP鍏抽榾
-                commandCode = CodeV202404.cd_A3;
-            }
+            commandCode = CodeV202404.cd_93;
 
             // 鍒涘缓瑙嗗浘
             ComCd93_A3Vo param = new ComCd93_A3Vo();
@@ -246,7 +312,7 @@
             param.orderNo = orderNo;
 
             // 鏋勯�犲懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, param);
+            Command com = command(comId, commandCode, rtuAddr, protocol, rtuResultSendWebUrl, param);
 
             // 鍙戦�佸懡浠�
             JSONObject response_SendCom= (JSONObject) JSON.toJSON(sendCom2Mw(com));
@@ -254,20 +320,109 @@
                 // 璇锋眰鎴愬姛
 
                 // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-                RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
+                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.buildError(RemoteResultCode.GET_RESULT_ERROR.getMessage());
+                    // 鍛戒护鏃ュ織鎵ц缁撴灉鏀逛负澶辫触
+                    rmCommandHistory = new RmCommandHistory();
+                    rmCommandHistory.setId(comId);
+                    rmCommandHistory.setResult((byte)0);
+                    commandSv.updateCommandResult(rmCommandHistory);
+                    return BaseResponseUtils.buildFail(response_CallBack.getMsg());
+                    //return BaseResponseUtils.buildError(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.buildFail(response_CallBack.getContent().toString());
+                }
+
+                /**
+                 * 鎵ц鎴愬姛
+                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+                 */
                 Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
                 SeVirtualCard virtualCard = new SeVirtualCard();
                 virtualCard.setId(vcId);
-                virtualCard.setInUse((byte) 1);
+                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"));
+            }
+        } 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.buildFail(response_CallBack.getMsg());
+                    //return BaseResponseUtils.buildError(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.buildFail(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);
@@ -281,48 +436,8 @@
                 return BaseResponseUtils.buildFail(job_param.getString("message"));
             }
         } else {
-            // 鑾峰彇鍔熻兘鐮�
-            if (userType == 1) {
-                // 骞冲彴鍏抽榾
-                commandCode = "93";
-            } else {
-                // APP鍏抽榾
-                commandCode = "98";
-            }
-
-            // 鍒涘缓瑙嗗浘
-            ComCd93_A3Vo param = new ComCd93_A3Vo();
-            param.controllerType = controllerType;
-            param.projectNo = projectNo;
-            param.icCardNo = vcNum;
-            param.orderNo = orderNo;
-
-            // 鍒涘缓鍛戒护鏃ュ織瀵硅薄骞舵坊鍔犲埌鏁版嵁搴撲腑
-            RmCommandHistory rmCommandHistory = getComHistory(comId, commandCode, intakeId, rtuAddr, protocol, param, operator);
-            comId = commandSv.insert(rmCommandHistory);
-
-            // 鏋勯�犲苟鍙戦�佸懡浠�
-            Command com = command(comId, commandCode, rtuAddr, protocol, param);
-            sendCom2Mw(com);
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
         }
-
-        // 澶勭悊鍥炶皟
-        BaseResponse response = dealWithCallBack(comId);
-        if(!response.getCode().equals("0001")) {
-            return BaseResponseUtils.buildError(RemoteResultCode.GET_RESULT_ERROR.getMessage());
-        }
-
-        // 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
-        Long vcId = seVirtualCardMapper.getVcIdByNum(vcNum);
-        SeVirtualCard virtualCard = new SeVirtualCard();
-        virtualCard.setId(vcId);
-        virtualCard.setInUse((byte) 0);
-        virtualCard.setLastOperate(LastOperateENUM.CLOSE_VALVE.getCode());
-        virtualCard.setLastOperateTime(new Date());
-        seVirtualCardMapper.updateByPrimaryKeySelective(virtualCard);
-
-        Data myData = (Data)response.getContent();
-        return BaseResponseUtils.buildSuccess(myData) ;
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/dto/DTOValve.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/dto/DTOValve.java
deleted file mode 100644
index 0f4f645..0000000
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/valve/dto/DTOValve.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.dy.pipIrrRemote.valve.dto;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-import org.hibernate.validator.constraints.Range;
-
-/**
- * @author ZhuBaoMin
- * @date 2024-05-07 15:05
- * @LastEditTime 2024-05-07 15:05
- * @Description 杩滅▼寮�闃�銆佽繙绋嬪叧闃�浼犲叆瀵硅薄
- */
-
-@Data
-@Schema(name = "寮�鍏抽榾浼犲叆瀵硅薄")
-public class DTOValve {
-    public static final long serialVersionUID = 202405071506001L;
-
-    /**
-     * 鍙栨按鍙D
-     */
-    @Schema(description = "鍙栨按鍙D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鍙栨按鍙d笉鑳戒负绌�")
-    private Long intakeId;
-
-    /**
-     * 铏氭嫙鍗D
-     */
-    @Schema(description = "铏氭嫙鍗D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "铏氭嫙鍗′笉鑳戒负绌�")
-    private Long vcId;
-
-    /**
-     * 鎿嶄綔绫诲瀷锛�1-寮�闃�锛�2-鍏抽榾
-     */
-    @Schema(description = "鎿嶄綔绫诲瀷", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
-    @Range(min = 1, max = 2)
-    private Integer operateType;
-
-    /**
-     * 鎿嶄綔浜�
-     */
-    @Schema(description = "鎿嶄綔浜�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
-    private Long operator;
-}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/pom.xml b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/pom.xml
index ce653f1..21a290a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/pom.xml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/pom.xml
@@ -2,6 +2,14 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
+    <dependencies>
+        <dependency>
+            <groupId>com.dy</groupId>
+            <artifactId>pipIrr-web-sell</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
 
     <parent>
         <artifactId>pipIrr-web</artifactId>
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
new file mode 100644
index 0000000..e5e2113
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandResultCtrl.java
@@ -0,0 +1,40 @@
+package com.dy.pipIrrWechat.command;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.command.ComSupport;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
+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.concurrent.CompletableFuture;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-30 16:07
+ * @LastEditTime 2024-05-30 16:07
+ * @Description
+ */
+
+@Slf4j
+@RestController
+@RequestMapping(path="comRes")
+public class CommandResultCtrl extends ComSupport {
+    @PostMapping(path = "receive", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public BaseResponse<String> receive(@RequestBody Data data) {
+        Long comId = 0L;
+        if(data.getCommandId() != null) {
+            comId = Long.parseLong(data.getCommandId());
+        }
+
+        CompletableFuture<Data> feature = (CompletableFuture<Data>) features.get(comId);
+        if(feature != null) {
+            feature.complete(data);
+        }
+        return BaseResponseUtils.buildSuccess("ok");
+    }
+}
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
new file mode 100644
index 0000000..82e3354
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/CommandSv.java
@@ -0,0 +1,197 @@
+package com.dy.pipIrrWechat.command;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.command.ComSupport;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrWechat.command.qo.OnLineIntakesQO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-30 16:13
+ * @LastEditTime 2024-05-30 16:13
+ * @Description
+ */
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class CommandSv extends ComSupport {
+    private final RmCommandHistoryMapper rmCommandHistoryMapper;
+    private final SeVirtualCardMapper seVirtualCardMapper;
+    private final PrIntakeMapper prIntakeMapper;
+    private final PrWaterPriceMapper prWaterPriceMapper;
+    private final PrIntakeVcMapper prIntakeVcMapper;
+
+    /**
+     * 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+     * @param vcId
+     * @return
+     */
+    public VoVirtualCard getVcById(Long vcId) {
+        return seVirtualCardMapper.getVcById(vcId);
+    }
+
+    /**
+     * 鑾峰彇姘翠环
+     * @return
+     */
+    public Double getPrice() {
+        return prWaterPriceMapper.getPrice();
+    }
+
+    /**
+     * 娣诲姞鍛戒护鏃ュ織
+     * @param po 鍛戒护鏃ュ織瀵硅薄
+     * @return 瀛楃涓茬被鍨嬬殑涓婚敭
+     */
+    public Long insert(RmCommandHistory po) {
+        rmCommandHistoryMapper.insert(po);
+        return po.getId();
+    }
+
+    /**
+     * 淇敼鍛戒护鏃ュ織淇℃伅
+     * @param po 鍛戒护鏃ュ織瀵硅薄
+     * @return 褰卞搷璁板綍鏁伴噺
+     */
+    public Integer update(RmCommandHistory po) {
+        return rmCommandHistoryMapper.updateByPrimaryKeySelective(po);
+    }
+
+    /**
+     * 鑾峰彇鍙栨按鍙e垪琛�
+     * @return
+     */
+    public QueryResultVo<List<VoOnLineIntake>> selectOnLineIntakes(OnLineIntakesQO qo) {
+        Command com = new Command() ;
+        com.id = Command.defaultId;
+        com.code = "LCD0001";
+        com.type = "innerCommand";
+
+        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
+
+        if(response != null && response.getString("code").equals("0001")) {
+            JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap");
+            HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class);
+
+            JSONArray jsonArray = new JSONArray();
+            for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("rtuAddr", entry.getKey());
+                jsonObject.put("isOnLine", entry.getValue());
+                jsonArray.add(jsonObject);
+            }
+
+            qo.setOnLineMap(jsonArray.toJSONString());
+            Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ;
+            Long itemTotal = prIntakeMapper.getOnLineIntakesCount(params);
+
+            QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>() ;
+            rsVo.pageSize = qo.pageSize ;
+            rsVo.pageCurr = qo.pageCurr ;
+            rsVo.calculateAndSet(itemTotal, params);
+            rsVo.obj = prIntakeMapper.getOnLineIntakes(params);
+            return rsVo;
+        } else {
+            QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>();
+            return rsVo;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛
+     * @param operator
+     * @return
+     */
+    public List<VoOnLineIntake> getUsedIntakes(Long operator) {
+        Command com = new Command() ;
+        com.id = Command.defaultId;
+        com.code = "LCD0001";
+        com.type = "innerCommand";
+        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
+
+        if(response != null && response.getString("code").equals("0001")) {
+            JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap");
+            HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class);
+
+            JSONArray jsonArray = new JSONArray();
+            for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("rtuAddr", entry.getKey());
+                jsonObject.put("isOnLine", entry.getValue());
+                jsonArray.add(jsonObject);
+            }
+            return prIntakeMapper.getUsedIntakes(jsonArray.toJSONString(), operator);
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍锛堝寘鍚湪绾挎儏鍐碉級
+     * @param operator
+     * @return
+     */
+    public List<VoUnclosedValve> getUnclosedValves(Long operator) {
+        Command com = new Command() ;
+        com.id = Command.defaultId;
+        com.code = "LCD0001";
+        com.type = "innerCommand";
+
+        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
+
+        if(response != null && response.getString("code").equals("0001")) {
+            JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap");
+            HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class);
+
+            JSONArray jsonArray = new JSONArray();
+            for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("rtuAddr", entry.getKey());
+                jsonObject.put("isOnLine", entry.getValue());
+                jsonArray.add(jsonObject);
+            }
+
+            System.out.println(jsonArray);
+            List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), operator);
+            if(res != null) {
+                return res;
+            } else {
+                return new ArrayList<>();
+            }
+        } else {
+            QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>();
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+     * @param intakeId
+     * @return
+     */
+    public Long getVcIdByIntakeId(Long intakeId) {
+        return prIntakeVcMapper.getVcIdByIntakeId(intakeId);
+    }
+}
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
new file mode 100644
index 0000000..79b129c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -0,0 +1,438 @@
+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.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.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voRm.VoUnclosedValve;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrSell.virtualCard.enums.LastOperateENUM;
+import com.dy.pipIrrWechat.command.dto.ValveClose;
+import com.dy.pipIrrWechat.command.dto.ValveOpen;
+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.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;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-30 16:11
+ * @LastEditTime 2024-05-30 16:11
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "灏忕▼搴忛榾鎺у櫒鎺у埗", description = "灏忕▼搴忛榾鎺у櫒鎺у埗")
+@RestController
+@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" ;
+
+    /**
+     * 灏忕▼搴忚繙绋嬪紑闃�
+     * @param valve
+     * @param bindingResult
+     * @return
+     */
+    @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()){
+            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        Long intakeId = valve.getIntakeId();
+        Long vcId = valve.getVcId();
+        Long operator = valve.getOperator();
+        Long comId = idLongGenerator.generate();
+
+        /**
+         * 濡傛灉鍐滄埛閫夋嫨浜嗚櫄鎷熷崱锛屽垯浣跨敤璇ヨ櫄鎷熷崱
+         * 濡傛灉鍐滄埛鏈�夋嫨铏氭嫙鍗★紝鍒欐牴鎹彇姘村彛ID鑾峰彇涓庝箣缁戝畾鐨勮櫄鎷熷崱
+         * 濡傛灉鍙栨按鍙f病鏈変笌涔嬬粦瀹氱殑铏氭嫙鍗★紝鍒欐彁绀哄啘鎴烽�夋嫨涓�寮犺櫄鎷熷崱
+         */
+        if(vcId == null) {
+            vcId = commandSv.getVcIdByIntakeId(intakeId);
+            if(vcId == null) {
+                return BaseResponseUtils.buildFail(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+            }
+        }
+
+        // 鑾峰彇绯荤粺鍙傛暟
+        if(!setuped) {
+            setUp();
+        }
+// 鍙栨按鍙D鎹㈠彇姘村彛瀵硅薄
+// 濡傛灉鍙栨按鍙d负鎵撳紑鐘舵�侊紝鍒欎笉鍏佽琚紑闃�
+
+        // 铏氭嫙鍗D鎹㈣櫄鎷熷崱瀵硅薄
+        VoVirtualCard vc = commandSv.getVcById(vcId);
+        if(vc == null) {
+            return BaseResponseUtils.buildFail(WechatResultCode.PLEASE_SELECT_A_VC.getMessage());
+        }
+        if(vc.getInUse() == 1) {
+            return BaseResponseUtils.buildFail(WechatResultCode.IN_USE_VC_CANNOT_OPEN_VALVE.getMessage());
+        }
+
+        // 鑾峰彇姘翠环
+        Double waterPrice = commandSv.getPrice();
+
+        // 鍙栨按鍙D鎹㈤榾鎺у櫒鍦板潃鍙婇�氳鍗忚
+        JSONObject job_rtu = getRtu(intakeId, null);
+        if(job_rtu == null) {
+            return BaseResponseUtils.buildError(WechatResultCode.RTU_NOT_EXIST.getMessage());
+        }
+        String rtuAddr = job_rtu.getString("rtuAddr");
+        String protocol = job_rtu.getString("protocol");
+
+        // 鐢熸垚璁㈠崟鍙�
+        String orderNo = generateOrderNo();
+
+        String commandCode = null;
+        if(protocol.equals("p206V202404")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV202404.cd_A2;
+
+            // 鍒涘缓瑙嗗浘
+            ComCd92_A2Vo param = new ComCd92_A2Vo();
+            param.controllerType = controllerType;
+            param.projectNo = projectNo;
+            param.icCardNo = vc.getVcNum();
+            param.waterRemain = 0.0;
+            param.moneyRemain = vc.getMoney();
+            param.waterPrice = waterPrice;
+            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")) {
+                    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());
+                }
+
+                /**
+                 * 鎵ц鎴愬姛
+                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+                 */
+                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.buildFail(job_param.getString("message"));
+            }
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_97;
+
+            // 鍒涘缓瑙嗗浘
+            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")) {
+                    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());
+                }
+
+                /**
+                 * 鎵ц鎴愬姛
+                 * 鏇存敼铏氭嫙鍗$姸鎬侊細鏄惁浣跨敤涓�佹渶鍚庢搷浣溿�佹渶鍚庢搷浣滄椂闂�
+                 */
+                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.buildFail(job_param.getString("message"));
+            }
+        } else {
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
+     * 灏忕▼搴忚繙绋嬪叧闃�
+     * @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()){
+            return BaseResponseUtils.buildFail(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.buildError(WechatResultCode.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_A3;
+
+            // 鍒涘缓瑙嗗浘
+            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")) {
+                    return BaseResponseUtils.buildFail(response_CallBack.getMsg());
+                    //return BaseResponseUtils.buildError(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.buildFail(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.buildFail(job_param.getString("message"));
+            }
+        } else if(protocol.equals("p206V1_0_1")) {
+            // 鑾峰彇鍔熻兘鐮�
+            commandCode = CodeV1_0_1.cd_98;
+
+            // 鍒涘缓瑙嗗浘
+            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")) {
+                    return BaseResponseUtils.buildFail(response_CallBack.getMsg());
+                    //return BaseResponseUtils.buildError(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.buildFail(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.buildFail(job_param.getString("message"));
+            }
+        } else {
+            return BaseResponseUtils.buildFail("绯荤粺鏆備笉鏀寔璇ュ崗璁�");
+        }
+    }
+
+    /**
+     * 鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍
+     * @param operator
+     * @return
+     */
+    @GetMapping(path = "/get")
+    @SsoAop()
+    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()) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java
new file mode 100644
index 0000000..5bf46e0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/DtoBase.java
@@ -0,0 +1,28 @@
+package com.dy.pipIrrWechat.command.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-22 16:54
+ * @LastEditTime 2024-05-22 16:54
+ * @Description 璁剧疆鍛戒护鍩虹被
+ */
+
+@Data
+public class DtoBase {
+    public static final long serialVersionUID = 202405221655001L;
+
+    /**
+     * 鍙栨按鍙D
+     */
+    @NotNull(message = "鍙栨按鍙d笉鑳戒负绌�")
+    private Long intakeId;
+
+    /**
+     * 鎿嶄綔浜�
+     */
+    @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
+    private Long operator;
+}
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
new file mode 100644
index 0000000..6a6ef28
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveClose.java
@@ -0,0 +1,46 @@
+package com.dy.pipIrrWechat.command.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-24 17:25
+ * @LastEditTime 2024-05-24 17:25
+ * @Description 璁剧疆鍛戒护瀛愮被-杩滅▼鍏抽榾浼犺緭瀵硅薄
+ */
+
+@Data
+public class ValveClose {
+    public static final long serialVersionUID = 202405241727001L;
+
+    /**
+     * 闃�鎺у櫒鍦板潃
+     */
+    @NotBlank(message = "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖")
+    private String rtuAddr;
+    /**
+     * 铏氭嫙鍗$紪鍙�
+     */
+    @NotBlank(message = "铏氭嫙鍗$紪鍙蜂笉鑳戒负绌�")
+    private String vcNum;
+
+    /**
+     * 寮�闃�鏃剁敓鎴愮殑璁㈠崟鍙�
+     */
+    @NotBlank(message = "璁㈠崟鍙蜂笉鑳戒负绌�")
+    private String orderNo;
+
+    /**
+     * 鐢ㄦ埛绫诲瀷 1-骞冲彴锛�2-APP
+     */
+    //@NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
+    //private Integer userType;
+
+    /**
+     * 鎿嶄綔浜�
+     */
+    @NotNull(message = "鎿嶄綔浜轰笉鑳戒负绌�")
+    private Long operator;
+}
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
new file mode 100644
index 0000000..481b8a8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/dto/ValveOpen.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrWechat.command.dto;
+
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-23 15:30
+ * @LastEditTime 2024-05-23 15:30
+ * @Description 璁剧疆鍛戒护瀛愮被-杩滅▼寮�闃�浼犺緭瀵硅薄
+ */
+
+@Data
+public class ValveOpen extends DtoBase{
+    public static final long serialVersionUID = 202405231531001L;
+
+    /**
+     * 铏氭嫙鍗D
+     */
+    private Long vcId;
+
+    /**
+     * 鐢ㄦ埛绫诲瀷 1-骞冲彴锛�2-APP
+     */
+    //@NotNull(message = "鎿嶄綔绫诲瀷涓嶈兘涓虹┖")
+    //private Integer userType;
+}
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
new file mode 100644
index 0000000..6cb009b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/qo/OnLineIntakesQO.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrWechat.command.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-05-27 20:32
+ * @LastEditTime 2024-05-27 20:32
+ * @Description
+ */
+
+@Data
+public class OnLineIntakesQO extends QueryConditionVo {
+    /**
+     * 涓棿浠惰繑鍥炵殑RTU鍦ㄧ嚎鎯呭喌瀵硅薄鏁扮粍
+     */
+    private String onLineMap;
+
+    /**
+     * 鍙栨按鍙g紪鍙�
+     */
+    private String intakeNum;
+
+    /**
+     * 鏄惁鍦ㄧ嚎
+     */
+    @Max(value = 1,message = "鏄惁鍦ㄧ嚎浠呭厑璁镐负鐪熸垨鍋�")
+    @Min(value = 0,message = "鏄惁鍦ㄧ嚎浠呭厑璁镐负鐪熸垨鍋�")
+    private Boolean isOnLine;
+}
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 ffcbee6..356ed63 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
@@ -14,7 +14,19 @@
 @AllArgsConstructor
 public enum WechatResultCode {
 
-    XXX(10001,"XXX");
+    /**
+     * Valve
+     */
+    //GET_RESULT_IN_ONE_MINUTE(10001,"1鍒嗛挓鍚庡幓鏌ョ湅缁撴灉"),
+    GET_RESULT_ERROR(10002, "鑾峰彇缁撴灉寮傚父"),
+    PLEASE_SELECT_A_VC(10002, "璇烽�夋嫨涓�寮犺櫄鎷熷崱"),
+    IN_USE_VC_CANNOT_OPEN_VALVE(10002, "浣跨敤涓櫄鎷熷崱涓嶈兘鐢ㄦ潵寮�闃�"),
+
+    /**
+     * RTU
+     */
+    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�");
+    //RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
 
     private final Integer code;
     private final String message;

--
Gitblit v1.8.0