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

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml                               |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeVerifyDTO.java      |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java             |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeLoginDTO.java       |   20 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/util/RestTemplateUtil.java         |  115 +++++
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java                   |   52 --
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java             |  231 +++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java     |   33 +
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java                 |  208 ---------
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java     |   90 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java          |   18 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java               |   76 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/WebFilterConfiguration.java |   35 -
 pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java   |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webFilter/WXDataSourceNameSetFilter.java                |   41 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/RandomCode.java                |    2 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java                            |   24 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java               |  134 ++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/AliyunSmsSv.java               |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml                                    |   34 +
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/result/WechatResultCode.java       |   17 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java             |   18 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml                                   |    7 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                           |    2 
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java             |   63 +++
 pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml                                      |    4 
 26 files changed, 899 insertions(+), 337 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webFilter/WXDataSourceNameSetFilter.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webFilter/WXDataSourceNameSetFilter.java
new file mode 100644
index 0000000..3b127ad
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webFilter/WXDataSourceNameSetFilter.java
@@ -0,0 +1,41 @@
+package com.dy.common.webFilter;
+
+import com.dy.common.multiDataSource.DataSourceContext;
+import jakarta.servlet.*;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-19 11:02
+ * @LastEditTime 2024-06-19 11:02
+ * @Description
+ */
+
+@Slf4j
+public class WXDataSourceNameSetFilter implements Filter {
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
+        String wxDataSourceName = httpRequest.getHeader("tag");
+        if(wxDataSourceName != null && wxDataSourceName.trim().length() > 0){
+            log.info("寰俊寮�鍙戯紝璁剧疆鏁版嵁婧愬悕绉颁负:" + wxDataSourceName);
+            //鎶婄粍缁囧崟浣嶆爣绛句綔涓烘暟鎹簮鍚嶇О
+            DataSourceContext.set(wxDataSourceName);
+        } else {
+            log.info("鐢ㄦ埛鏈�夋嫨鏁版嵁婧�");
+        }
+
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+
+    @Override
+    public void destroy() {
+    }
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
index 3b870e8..1042061 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voPr/VoController.java
@@ -51,8 +51,24 @@
     @ColumnWidth(30)
     private Date findDt;
 
-    @Schema(title = "鍦ㄧ嚎鐘舵��")
-    @ExcelProperty("鍦ㄧ嚎鐘舵��")
-    @ColumnWidth(6)
-    private String onlineState;
+//    @Schema(title = "鍦ㄧ嚎鐘舵��")
+//    @ExcelProperty("鍦ㄧ嚎鐘舵��")
+//    @ColumnWidth(6)
+//    private String onlineState;
+
+    /**
+     * 鏄惁鍦ㄧ嚎
+     */
+    private Boolean isOnLine;
+
+
+    @Schema(title = "閫氳鍗忚")
+    @ExcelProperty("閫氳鍗忚")
+    @ColumnWidth(10)
+    private String protocol;
+
+    @Schema(title = "澶囨敞")
+    @ExcelProperty("澶囨敞")
+    @ColumnWidth(10)
+    private String remarks;
 }
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
index 29fac5c..700142f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-database-ym.yml
@@ -5,8 +5,8 @@
             #name: ym
             type: com.alibaba.druid.pool.DruidDataSource
             driverClassName: com.mysql.cj.jdbc.Driver
-#            url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
-            url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+            url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+#            url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
             username: root
             password: dysql,;.abc!@#
             druid:
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
index 9fd4b6a..01b83ee 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -72,7 +72,7 @@
 
 pipIrr:
     global:
-        dev: true   #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
+        dev: false   #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
         dsName: ym  #寮�鍙戦樁娈碉紝璁剧疆涓存椂鐨勬暟鎹簱鍚嶇О
     mw:
         webPort: 8070
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 c0f940b..a663b66 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -168,19 +168,28 @@
     SELECT
         COUNT(*) AS recordCount
     FROM pr_controller con
-        LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
-        INNER JOIN pr_intake inta ON con.intakeId = inta.id
+    LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
+    INNER JOIN pr_intake inta ON con.intakeId = inta.id
+    left JOIN JSON_TABLE(
+    <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
+        #{onLineMap},
+        '$[*]' COLUMNS(
+        rtuAddr VARCHAR(20) PATH '$.rtuAddr',
+        isOnLine BOOLEAN PATH '$.isOnLine'
+        )
+    ) rtus ON con.rtuAddr = rtus.rtuAddr
     <where>
       AND con.deleted = 0
 
       <if test = "id != null and id > 0">
         AND con.id = ${id}
       </if>
-
       <if test = "rtuAddr != null and rtuAddr !=''">
         AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
       </if>
-
+      <if test="isOnLine != null and isOnLine !='' ">
+        AND rtus.isOnLine = #{isOnLine}
+      </if>
       <if test = "bindNumber != null and bindNumber > 0">
         AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = ${bindNumber}
       </if>
@@ -193,23 +202,34 @@
         CAST(con.id AS char) AS id,
         con.rtuAddr AS rtuAddr,
         inta.name AS intakeName,
-        "鍦ㄧ嚎" AS onlineState,
+        con.protocol,
+        inta.remarks,
+        rtus.isOnLine,
         (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) AS bindNumber,
         con.findDt AS findDt
     FROM pr_controller con
         LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
         INNER JOIN pr_intake inta ON con.intakeId = inta.id
+        left JOIN JSON_TABLE(
+        <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
+             #{onLineMap},
+             '$[*]' COLUMNS(
+             rtuAddr VARCHAR(20) PATH '$.rtuAddr',
+             isOnLine BOOLEAN PATH '$.isOnLine'
+             )
+        ) rtus ON con.rtuAddr = rtus.rtuAddr
     <where>
       AND con.deleted = 0
 
       <if test = "id != null and id > 0">
         AND con.id = ${id}
       </if>
-
       <if test = "rtuAddr != null and rtuAddr !=''">
         AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
       </if>
-
+      <if test="isOnLine != null and isOnLine !='' ">
+        AND rtus.isOnLine = #{isOnLine}
+      </if>
       <if test = "bindNumber != null and bindNumber > 0">
         AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = ${bindNumber}
       </if>
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
index c487a86..fcd9d78 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml
@@ -3,8 +3,8 @@
     datasource: #閰嶇疆鏁版嵁婧�
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.cj.jdbc.Driver
-#        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
-        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+        url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
+#        url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
         username: root
         password: dysql,;.abc!@#
         druid:
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
index 31be279..8a57433 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerCtrl.java
@@ -76,7 +76,7 @@
             }
             //return BaseResponseUtils.buildSuccess(res);
         } catch (Exception e) {
-            log.error("鑾峰彇寮�鍗¤褰曞紓甯�", e);
+            log.error("鑾峰彇鎺у埗鍣ㄨ褰曞紓甯�", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
index 90767c5..e21fdae 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/ControllerSv.java
@@ -2,6 +2,9 @@
 
 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.BaseResponse;
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrControllerMapper;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeControllerMapper;
@@ -9,16 +12,19 @@
 import com.dy.pipIrrGlobal.pojoPr.PrController;
 import com.dy.pipIrrGlobal.pojoPr.PrIntakeController;
 import com.dy.pipIrrGlobal.voPr.VoController;
+import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author ZhuBaoMin
@@ -42,6 +48,8 @@
     @Autowired
     private RestTemplate restTemplate;
 
+    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send";
+
 
     /**
      * 鏍规嵁鎸囧畾鑾峰彇鎺у埗鍣ㄨ褰�
@@ -50,18 +58,42 @@
      * @return
      */
     public QueryResultVo<List<VoController>> getControllers(QueryVo queryVo) {
-        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
 
-        Long itemTotal = prControllerMapper.getRecordCount(params);
+        Command com = new Command();
+        com.id = Command.defaultId;
+        com.code = "LCD0001";
+        com.type = "innerCommand";
 
-        QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>();
-        rsVo.pageSize = queryVo.pageSize;
-        rsVo.pageCurr = queryVo.pageCurr;
+        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com));
 
-        rsVo.calculateAndSet(itemTotal, params);
-        rsVo.obj = prControllerMapper.getControllers(params);
+        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);
 
-        return rsVo;
+            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);
+            }
+            queryVo.setOnLineMap(jsonArray.toJSONString());
+
+            Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+            Long itemTotal = prControllerMapper.getRecordCount(params);
+
+            QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>();
+            rsVo.pageSize = queryVo.pageSize;
+            rsVo.pageCurr = queryVo.pageCurr;
+
+            rsVo.calculateAndSet(itemTotal, params);
+            rsVo.obj = prControllerMapper.getControllers(params);
+            return rsVo;
+        } else {
+            QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>();
+            return rsVo;
+        }
     }
 
     /**
@@ -72,7 +104,7 @@
      */
     public Integer addController(PrController po) {
         int rows = prControllerMapper.insert(po);
-        if(rows == 0) {
+        if (rows == 0) {
             return 0;
         }
         PrIntakeController addPrIntakeController = new PrIntakeController();
@@ -83,10 +115,10 @@
         addPrIntakeController.setOperatedt(po.getOperateDt());
         addPrIntakeController.setRemarks("缁戝畾");
         int rec = prIntakeControllerMapper.insert(addPrIntakeController);
-        if(rec == 0) {
+        if (rec == 0) {
             return 0;
         }
-        return 1 ;
+        return 1;
     }
 
     /**
@@ -168,7 +200,8 @@
 
     /**
      * 鏍规嵁鎺у埗鍣ㄧ紪鍙风墿鐞嗗垹闄ゆ帶鍒�
-     *2024-6-7
+     * 2024-6-7
+     *
      * @param controllerId
      * @return
      */
@@ -178,11 +211,34 @@
 
     /**
      * 鏍规嵁涓婚敭鏌ヨ鎺у埗鍣ㄥ垪琛�
-     *2024-6-7
+     * 2024-6-7
+     *
      * @param controllerId
      * @return
      */
     public PrController getByControllerId(Long controllerId) {
         return prControllerMapper.selectByPrimaryKey(controllerId);
     }
+
+
+    /**
+     * 鍙戦�佸懡浠�
+     *
+     * @return
+     */
+    protected BaseResponse sendCom2Mw(Command com) {
+        String url = UriComponentsBuilder.fromUriString(mwUrlSendCom)
+                .build()
+                .toUriString();
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<Command> httpEntity = new HttpEntity<>(com, headers);
+        ResponseEntity<BaseResponse> response = null;
+        try {
+            // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
+            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return response.getBody();
+    }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java
index 10edbd8..60ac5bd 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/controller/QueryVo.java
@@ -2,6 +2,8 @@
 
 import com.dy.common.webUtil.QueryConditionVo;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
 import lombok.*;
 
 /**
@@ -29,9 +31,21 @@
     @Schema(description = "鎺у埗鍣ㄥ湴鍧�")
     private String rtuAddr;
 
-    @Schema(description = "鍦ㄧ嚎鐘舵��")
-    public Integer onlineState;
+//    @Schema(description = "鍦ㄧ嚎鐘舵��")
+//    public Integer onlineState;
 
     @Schema(description = "缁戝畾鏁伴噺")
     public Integer bindNumber;
+
+    /**
+     * 涓棿浠惰繑鍥炵殑RTU鍦ㄧ嚎鎯呭喌瀵硅薄鏁扮粍
+     */
+    private String onLineMap;
+
+    /**
+     * 鏄惁鍦ㄧ嚎
+     */
+    @Max(value = 1,message = "鏄惁鍦ㄧ嚎浠呭厑璁镐负鐪熸垨鍋�")
+    @Min(value = 0,message = "鏄惁鍦ㄧ嚎浠呭厑璁镐负鐪熸垨鍋�")
+    private Boolean isOnLine;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
index 196f207..f0abe8f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientCtrl.java
@@ -1,8 +1,5 @@
 package com.dy.pipIrrSell.client;
 
-import com.alibaba.fastjson2.JSONObject;
-import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
-import com.aliyuncs.exceptions.ClientException;
 import com.dy.common.aop.SsoAop;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
@@ -10,16 +7,7 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoBa.BaClient;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
-import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify;
-import com.dy.pipIrrGlobal.pojoSe.SeOpenId;
 import com.dy.pipIrrGlobal.voSe.VoClient;
-import com.dy.pipIrrGlobal.voSe.VoClientWechat;
-import com.dy.pipIrrSell.client.dto.CodeVerifyDTO;
-import com.dy.pipIrrSell.result.SellResultCode;
-import com.dy.pipIrrSell.sms.AliyunSmsSv;
-import com.dy.pipIrrSell.sms.RandomCode;
-import com.dy.pipIrrSell.util.RestTemplateUtil;
-import com.dy.pipIrrSell.wechatpay.PayInfo;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -35,7 +23,6 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.io.IOException;
 import java.util.*;
 
 /**
@@ -52,20 +39,7 @@
 @RequiredArgsConstructor
 public class ClientCtrl {
     private final ClientSv clientSv;
-    private final AliyunSmsSv aliyunSmsSv;
     //private final RedisUtils redisUtils;
-    private final RestTemplateUtil restTemplateUtil;
-
-    private final String privateCertFileName = PayInfo.privateCertFileName;
-    private final String appid = PayInfo.appid;
-    private final String secret = PayInfo.secret;
-    private final String mchid = PayInfo.mchid;
-    private final String schema = PayInfo.schema;
-    private final String signType = PayInfo.signType;
-    private final String description = PayInfo.description;
-    private final String loginUrl = PayInfo.loginUrl;
-    private final String notifyUrl = PayInfo.notifyUrl;
-    private final String grantType = PayInfo.grantType;
 
     /**
      * 鑾峰彇鍐滄埛鍒楄〃
@@ -401,186 +375,4 @@
         map.put("projectNo",projectNo3);
         return BaseResponseUtils.buildSuccess(map);
     }
-
-    /**
-     * 鍙戦�侀獙璇佺爜
-     * @param phoneNumber
-     * @return
-     */
-    @Operation(summary = "鍙戦�侀獙璇佺爜", description = "鍙戦�侀獙璇佺爜")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
-    @PostMapping(path = "send_sms")
-    @SsoAop()
-    public BaseResponse<Boolean> sendSms(@RequestParam(name = "phoneNumber", required = true) String phoneNumber) throws ClientException {
-        if(phoneNumber == null || phoneNumber.length() <= 0) {
-            return BaseResponseUtils.buildFail(SellResultCode.PHONE_NUMBER_CANNOT_BE_NULL.getMessage());
-        }
-
-        // 鐢熸垚6浣嶉獙璇佺爜骞惰浆涓篔son鏍煎紡
-        String securityCode = String.valueOf(RandomCode.genCode());
-        JSONObject param = new JSONObject();
-        param.put("code", securityCode);
-        String templateParam = param.toJSONString();
-
-        //redisUtils.set(phoneNumber, securityCode, 60);
-
-        // 鑾峰彇褰撳墠鏃堕棿鎴冲苟寤跺悗3鍒嗛挓
-        Long timestamp = System.currentTimeMillis();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTimeInMillis(timestamp);
-        calendar.add(Calendar.SECOND, 180);
-        Long expires = calendar.getTimeInMillis();
-
-        SeCodeVerify codeVerify = new SeCodeVerify();
-        codeVerify.setPhoneNumber(phoneNumber);
-        codeVerify.setSecurityCode(securityCode);
-        codeVerify.setExpires(expires);
-        clientSv.addCodeVerify(codeVerify);
-
-        SendSmsResponse response = aliyunSmsSv.sendSms(phoneNumber, templateParam);
-        if (response.getCode().equals("OK")) {
-            // 鍙戦�佹垚鍔熷鐞嗛�昏緫
-            return BaseResponseUtils.buildSuccess(true) ;
-        } else {
-            // 鍙戦�佸け璐ュ鐞嗛�昏緫
-            return BaseResponseUtils.buildFail(SellResultCode.SECURITY_CODE_SEND_FAIL.getMessage()) ;
-        }
-    }
-
-    /**
-     * 鏍¢獙楠岃瘉鐮�
-     * @param po
-     * @param bindingResult
-     * @return
-     * @throws IOException
-     */
-    @Operation(summary = "鏍¢獙楠岃瘉鐮�", description = "鏍¢獙楠岃瘉鐮�")
-    @ApiResponses(value = {
-            @ApiResponse(
-                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
-                    description = "鎿嶄綔缁撴灉锛歵rue锛氭垚鍔燂紝false锛氬け璐ワ紙BaseResponse.content锛�",
-                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
-                            schema = @Schema(implementation = Boolean.class))}
-            )
-    })
-    @PostMapping(path = "verify", consumes = MediaType.APPLICATION_JSON_VALUE)
-    @Transactional(rollbackFor = Exception.class)
-    @SsoAop()
-    public BaseResponse<Boolean> verify(@RequestBody @Valid CodeVerifyDTO po, BindingResult bindingResult) throws IOException {
-        if(bindingResult != null && bindingResult.hasErrors()){
-            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
-        }
-
-        String phoneNumber = po.getPhoneNumber();
-        String securityCode = po.getSecurityCode();
-        String code = po.getCode();
-
-        // 杩涜鎵嬫満鍙枫�侀獙璇佺爜銆佽繃鏈熸椂闂存牎楠�
-        SeCodeVerify codeVerify = clientSv.getCodeVerify(phoneNumber);
-        if(codeVerify == null) {
-            return BaseResponseUtils.buildFail(SellResultCode.NO_SECURITY_CODE_FOR_PHONE.getMessage());
-        }
-
-        if(!codeVerify.getSecurityCode().equals(securityCode)) {
-            return BaseResponseUtils.buildFail(SellResultCode.SECURITY_CODE_ERROR.getMessage());
-        }
-
-        Long currentTimestamp = System.currentTimeMillis();
-        if(currentTimestamp > codeVerify.getExpires() ) {
-            return BaseResponseUtils.buildFail(SellResultCode.VALIDATION_TIMEOUT.getMessage());
-        }
-
-        // 鏍¢獙閫氳繃锛岃繘琛岀櫥褰曞嚟璇佹牎楠�
-        Map<String, Object> queryParams = new HashMap<>();
-        queryParams.put("appid", appid);
-        queryParams.put("secret", secret);
-        queryParams.put("js_code", code);
-        queryParams.put("grant_type", grantType);
-        Map<String, String> headerParams = new HashMap<>();
-        JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams);
-
-        if(job.getLong("errcode") != null && job.getLong("errcode") >= -1) {
-            return BaseResponseUtils.buildFail("鐧诲綍鍑瘉鏍¢獙澶辫触");
-        }
-        String openid = job.getString("openid");
-        String sessionKey = job.getString("session_key");
-
-        Long clientId = clientSv.getClientIdByPhone(phoneNumber);
-        String SessionId = "";
-        if(clientId != null) {
-            // 娣诲姞寰俊鐢ㄦ埛璐︽埛璁板綍
-            SeOpenId seOpenId = new SeOpenId();
-            seOpenId.setClientId(clientId);
-            seOpenId.setOpenId(openid);
-            seOpenId.setSessionKey(sessionKey);
-            seOpenId.setCreateTime(new Date());
-            //Long SessionId = clientSv.addOpenId(seOpenId);
-            Long rec = clientSv.addOpenId(seOpenId);
-            if(rec != null) {
-                SessionId = String.valueOf(rec);
-            }
-            return BaseResponseUtils.buildSuccess(SessionId);
-
-        } else {
-            return BaseResponseUtils.buildError(SellResultCode.PHONE_NUMBER_IS_ERROR.getMessage());
-        }
-    }
-
-    /**
-     * 鑾峰彇鍐滄埛鍩烘湰淇℃伅锛屽皬绋嬪簭棣栭〉浣跨敤
-     * @param sessionId
-     * @return
-     */
-    @GetMapping(path = "/simple_info")
-    @SsoAop()
-    public BaseResponse<VoClientWechat> getSimpleClientInfo(@RequestParam Long sessionId){
-        try {
-            VoClientWechat res = clientSv.getSimpleClientInfo(sessionId, null);
-            return BaseResponseUtils.buildSuccess(res);
-        } catch (Exception e) {
-            log.error("鏌ヨ鍐滄埛寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-    }
-
-    /**
-     * 鐧诲綍鍑瘉鐧诲綍
-     * @param code 涓存椂鐧诲綍鍑瘉
-     * @return
-     */
-    @GetMapping(path = "/code_login")
-    @SsoAop()
-    public BaseResponse<VoClientWechat> codeLogin(@RequestParam String code) throws IOException {
-
-        // 鐧诲綍鍑瘉鏍¢獙
-        Map<String, Object> queryParams = new HashMap<>();
-        queryParams.put("appid", appid);
-        queryParams.put("secret", secret);
-        queryParams.put("js_code", code);
-        queryParams.put("grant_type", grantType);
-        Map<String, String> headerParams = new HashMap<>();
-        JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams);
-
-        String openId = job.getString("openid");
-        if(openId == null) {
-            return BaseResponseUtils.buildFail(SellResultCode.LOGIN_FAIL.getMessage());
-        }
-
-        try {
-            VoClientWechat res = clientSv.getSimpleClientInfo(null, openId);
-            return BaseResponseUtils.buildSuccess(res);
-        } catch (Exception e) {
-            log.error("鏌ヨ鍐滄埛寮傚父", e);
-            return BaseResponseUtils.buildException(e.getMessage()) ;
-        }
-    }
-
-
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
index 1753ae1..0ae07c7 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/ClientSv.java
@@ -4,13 +4,10 @@
 import com.dy.pipIrrGlobal.daoBa.BaDistrictMapper;
 import com.dy.pipIrrGlobal.daoBa.BaSettingsMapper;
 import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
-import com.dy.pipIrrGlobal.daoSe.SeCodeVerifyMapper;
 import com.dy.pipIrrGlobal.daoSe.SeOpenIdMapper;
 import com.dy.pipIrrGlobal.pojoSe.SeClient;
-import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify;
 import com.dy.pipIrrGlobal.pojoSe.SeOpenId;
 import com.dy.pipIrrGlobal.voSe.VoClient;
-import com.dy.pipIrrGlobal.voSe.VoClientWechat;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,13 +33,10 @@
     private BaDistrictMapper baDistrictMapper;
 
     @Autowired
-    private SeCodeVerifyMapper seCodeVerifyMapper;
+    private BaSettingsMapper baSettingsMapper;
 
     @Autowired
     private SeOpenIdMapper seOpenIdMapper;
-
-    @Autowired
-    private BaSettingsMapper baSettingsMapper;
 
     /**
      * 鏍规嵁鎸囧畾鏉′欢鑾峰彇鍐滄埛鏁版嵁
@@ -82,23 +76,6 @@
         return seClientMapper.insertSelective(po);
     }
 
-    /**
-     * 娣诲姞楠岃瘉鐮佽褰�
-     * @param po
-     * @return
-     */
-    public Integer addCodeVerify(SeCodeVerify po) {
-        return seCodeVerifyMapper.insert(po);
-    }
-
-    /**
-     * 鏍规嵁鎵嬫満鍙疯幏鍙栭獙璇佺爜楠岃瘉瀵硅薄
-     * @param phoneNumber
-     * @return
-     */
-    public SeCodeVerify getCodeVerify(String phoneNumber) {
-        return seCodeVerifyMapper.getCodeVerify(phoneNumber);
-    }
     /**
      * 鏍规嵁6浣嶅尯鍒掍覆妯$硦鏌ヨ鍐滄埛缂栧彿
      * @param district6
@@ -159,6 +136,15 @@
     }
 
     /**
+     * 鏍规嵁閰嶇疆椤硅幏鍙栭厤缃」鍊�
+     * @param itemName
+     * @return
+     */
+    public String getItemValue(String itemName) {
+        return baSettingsMapper.getItemValue(itemName);
+    }
+
+    /**
      * 鏍规嵁鐢佃瘽鍙风爜鑾峰彇鍐滄埛ID
      * @param phoneNumber
      * @return
@@ -176,23 +162,5 @@
         seOpenIdMapper.insert(po);
         //return po.getClientId();
         return po.getId();
-    }
-
-    /**
-     * 鏍规嵁閰嶇疆椤硅幏鍙栭厤缃」鍊�
-     * @param itemName
-     * @return
-     */
-    public String getItemValue(String itemName) {
-        return baSettingsMapper.getItemValue(itemName);
-    }
-
-    /**
-     * 鑾峰彇鍐滄埛鍩烘湰淇℃伅锛屽皬绋嬪簭棣栭〉浣跨敤
-     * @param sessionId
-     * @return
-     */
-    public VoClientWechat getSimpleClientInfo(Long sessionId, String openId) {
-        return seClientMapper.getSimpleClientInfo(sessionId, openId);
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
index f991269..cbd7e67 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/result/SellResultCode.java
@@ -124,23 +124,7 @@
     No_TRADE_SUMMARIES(100001, "娌℃湁绗﹀悎鏉′欢鐨勪氦鏄撴眹鎬昏褰�"),
     No_TRADE_DETAILS(100001, "娌℃湁绗﹀悎鏉′欢鐨勪氦鏄撴槑缁�"),
 
-    /**
-     * 寰俊鐢ㄦ埛
-     */
-    PHONE_NUMBER_CANNOT_BE_NULL(20001, "鎵嬫満鍙蜂笉鑳戒负绌�"),
-    SECURITY_CODE_SEND_FAIL(20001, "楠岃瘉鐮佸彂閫佸け璐�"),
-    VERIFY_PARAMS_INCOMPLETE(20001, "楠岃瘉鍙傛暟涓嶅畬鏁�"),
-    CODE_VERIFY_FAIL(20001, "楠岃瘉鐮佹牎楠屽け璐�"),
-
-    NO_SECURITY_CODE_FOR_PHONE(20002, "璇ユ墜鏈哄彿鏈彂閫侀獙璇佺爜"),
-    SECURITY_CODE_ERROR(20003, "楠岃瘉鐮侀敊璇�"),
-    VALIDATION_TIMEOUT(20004, "楠岃瘉瓒呮椂"),
-    PHONE_NUMBER_IS_ERROR(20004, "鎵嬫満鍙烽敊璇紝闈炴敞鍐屽啘鎴�"),
-
-    /**
-     * 灏忕▼搴�
-     */
-    LOGIN_FAIL(20004, "鐧诲綍澶辫触");
+    PHONE_NUMBER_IS_ERROR(20004, "鎵嬫満鍙烽敊璇紝闈炴敞鍐屽啘鎴�");
 
     private final Integer code;
     private final String message;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java
new file mode 100644
index 0000000..aa43460
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientCtrl.java
@@ -0,0 +1,231 @@
+package com.dy.pipIrrWechat.client;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify;
+import com.dy.pipIrrGlobal.pojoSe.SeOpenId;
+import com.dy.pipIrrGlobal.voSe.VoClientWechat;
+import com.dy.pipIrrSell.wechatpay.PayInfo;
+import com.dy.pipIrrWechat.client.dto.CodeLoginDTO;
+import com.dy.pipIrrWechat.client.dto.CodeVerifyDTO;
+import com.dy.pipIrrWechat.result.WechatResultCode;
+import com.dy.pipIrrWechat.sms.AliyunSmsSv;
+import com.dy.pipIrrWechat.sms.RandomCode;
+import com.dy.pipIrrWechat.util.RestTemplateUtil;
+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.io.IOException;
+import java.util.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-19 14:21
+ * @LastEditTime 2024-06-19 14:21
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "鍐滄埛鏁版嵁鎿嶄綔", description = "鍐滄埛鏁版嵁鎿嶄綔")
+@RestController
+@RequestMapping(path="client")
+@RequiredArgsConstructor
+public class ClientCtrl {
+    private final ClientSv clientSv;
+    private final AliyunSmsSv aliyunSmsSv;
+    private final RestTemplateUtil restTemplateUtil;
+    private final String privateCertFileName = PayInfo.privateCertFileName;
+    private final String appid = PayInfo.appid;
+    private final String secret = PayInfo.secret;
+    private final String mchid = PayInfo.mchid;
+    private final String schema = PayInfo.schema;
+    private final String signType = PayInfo.signType;
+    private final String description = PayInfo.description;
+    private final String loginUrl = PayInfo.loginUrl;
+    private final String notifyUrl = PayInfo.notifyUrl;
+    private final String grantType = PayInfo.grantType;
+
+    /**
+     * 鐧诲綍鍑瘉鐧诲綍
+     * @param po
+     * @param bindingResult
+     * @return
+     * @throws IOException
+     */
+    @PostMapping(path = "code_login", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public BaseResponse<JSONObject> codeLogin(@RequestBody @Valid CodeLoginDTO po, BindingResult bindingResult) throws IOException {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+        String code = po.getCode();
+
+        // 鐧诲綍鍑瘉鏍¢獙
+        Map<String, Object> queryParams = new HashMap<>();
+        queryParams.put("appid", appid);
+        queryParams.put("secret", secret);
+        queryParams.put("js_code", code);
+        queryParams.put("grant_type", grantType);
+        Map<String, String> headerParams = new HashMap<>();
+        JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams);
+
+        if(job.containsKey("errmsg ")) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.INVALID_CODE.getMessage());
+        }
+
+        String openId = job.getString("openid");
+        if(openId == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.LOGIN_FAIL.getMessage());
+        }
+
+        try {
+            JSONObject job_client = new JSONObject();
+            VoClientWechat res = clientSv.getSimpleClientInfo(null, openId);
+            if(res != null) {
+                job_client.put("client", res);
+            } else {
+                VoClientWechat voClientWechat = new VoClientWechat();
+                job_client.put("client", voClientWechat);
+            }
+            return BaseResponseUtils.buildSuccess(job_client);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍐滄埛寮傚父", e);
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鍙戦�侀獙璇佺爜
+     * @param phoneNumber
+     * @return
+     */
+    @PostMapping(path = "send_sms")
+    public BaseResponse<Boolean> sendSms(@RequestParam(name = "phoneNumber", required = true) String phoneNumber) throws ClientException {
+        if(phoneNumber == null || phoneNumber.length() <= 0) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.PHONE_NUMBER_CANNOT_BE_NULL.getMessage());
+        }
+
+        // 鐢熸垚6浣嶉獙璇佺爜骞惰浆涓篔son鏍煎紡
+        String securityCode = String.valueOf(RandomCode.genCode());
+        JSONObject param = new JSONObject();
+        param.put("code", securityCode);
+        String templateParam = param.toJSONString();
+
+        //redisUtils.set(phoneNumber, securityCode, 60);
+
+        // 鑾峰彇褰撳墠鏃堕棿鎴冲苟寤跺悗3鍒嗛挓
+        Long timestamp = System.currentTimeMillis();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(timestamp);
+        calendar.add(Calendar.SECOND, 180);
+        Long expires = calendar.getTimeInMillis();
+
+        SeCodeVerify codeVerify = new SeCodeVerify();
+        codeVerify.setPhoneNumber(phoneNumber);
+        codeVerify.setSecurityCode(securityCode);
+        codeVerify.setExpires(expires);
+        clientSv.addCodeVerify(codeVerify);
+
+        SendSmsResponse response = aliyunSmsSv.sendSms(phoneNumber, templateParam);
+        if (response.getCode().equals("OK")) {
+            // 鍙戦�佹垚鍔熷鐞嗛�昏緫
+            return BaseResponseUtils.buildSuccess(true) ;
+        } else {
+            // 鍙戦�佸け璐ュ鐞嗛�昏緫
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.SECURITY_CODE_SEND_FAIL.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍¢獙楠岃瘉鐮�
+     * @param po
+     * @param bindingResult
+     * @return
+     * @throws IOException
+     */
+    @PostMapping(path = "verify", consumes = MediaType.APPLICATION_JSON_VALUE)
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResponse<Boolean> verify(@RequestBody @Valid CodeVerifyDTO po, BindingResult bindingResult) throws IOException {
+        if(bindingResult != null && bindingResult.hasErrors()){
+            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+        }
+
+        String phoneNumber = po.getPhoneNumber();
+        String securityCode = po.getSecurityCode();
+        String code = po.getCode();
+
+        // 杩涜鎵嬫満鍙枫�侀獙璇佺爜銆佽繃鏈熸椂闂存牎楠�
+        SeCodeVerify codeVerify = clientSv.getCodeVerify(phoneNumber);
+        if(codeVerify == null) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.NO_SECURITY_CODE_FOR_PHONE.getMessage());
+        }
+
+        if(!codeVerify.getSecurityCode().equals(securityCode)) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.SECURITY_CODE_ERROR.getMessage());
+        }
+
+        Long currentTimestamp = System.currentTimeMillis();
+        if(currentTimestamp > codeVerify.getExpires() ) {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.VALIDATION_TIMEOUT.getMessage());
+        }
+
+        // 鏍¢獙閫氳繃锛岃繘琛岀櫥褰曞嚟璇佹牎楠�
+        Map<String, Object> queryParams = new HashMap<>();
+        queryParams.put("appid", appid);
+        queryParams.put("secret", secret);
+        queryParams.put("js_code", code);
+        queryParams.put("grant_type", grantType);
+        Map<String, String> headerParams = new HashMap<>();
+        JSONObject job = restTemplateUtil.get(loginUrl, queryParams, headerParams);
+
+        if(job.getLong("errcode") != null && job.getLong("errcode") >= -1) {
+            return BaseResponseUtils.buildErrorMsg("鐧诲綍鍑瘉鏍¢獙澶辫触");
+        }
+        String openid = job.getString("openid");
+        String sessionKey = job.getString("session_key");
+
+        Long clientId = clientSv.getClientIdByPhone(phoneNumber);
+        String SessionId = "";
+        if(clientId != null) {
+            // 娣诲姞寰俊鐢ㄦ埛璐︽埛璁板綍
+            SeOpenId seOpenId = new SeOpenId();
+            seOpenId.setClientId(clientId);
+            seOpenId.setOpenId(openid);
+            seOpenId.setSessionKey(sessionKey);
+            seOpenId.setCreateTime(new Date());
+            //Long SessionId = clientSv.addOpenId(seOpenId);
+            Long rec = clientSv.addOpenId(seOpenId);
+            if(rec != null) {
+                SessionId = String.valueOf(rec);
+            }
+            return BaseResponseUtils.buildSuccess(SessionId);
+
+        } else {
+            return BaseResponseUtils.buildErrorMsg(WechatResultCode.PHONE_NUMBER_IS_ERROR.getMessage());
+        }
+    }
+
+    /**
+     * 鑾峰彇鍐滄埛鍩烘湰淇℃伅锛屽皬绋嬪簭棣栭〉浣跨敤
+     * @param sessionId
+     * @return
+     */
+    @GetMapping(path = "/simple_info")
+    public BaseResponse<VoClientWechat> getSimpleClientInfo(@RequestParam Long sessionId){
+        try {
+            VoClientWechat res = clientSv.getSimpleClientInfo(sessionId, null);
+            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/client/ClientSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java
new file mode 100644
index 0000000..fbe5234
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/ClientSv.java
@@ -0,0 +1,76 @@
+package com.dy.pipIrrWechat.client;
+
+import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
+import com.dy.pipIrrGlobal.daoSe.SeCodeVerifyMapper;
+import com.dy.pipIrrGlobal.daoSe.SeOpenIdMapper;
+import com.dy.pipIrrGlobal.pojoSe.SeCodeVerify;
+import com.dy.pipIrrGlobal.pojoSe.SeOpenId;
+import com.dy.pipIrrGlobal.voSe.VoClientWechat;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-19 14:25
+ * @LastEditTime 2024-06-19 14:25
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class ClientSv {
+    @Autowired
+    private SeClientMapper seClientMapper;
+    @Autowired
+    private SeCodeVerifyMapper seCodeVerifyMapper;
+    @Autowired
+    private SeOpenIdMapper seOpenIdMapper;
+
+    /**
+     * 鏍规嵁鐢佃瘽鍙风爜鑾峰彇鍐滄埛ID
+     * @param phoneNumber
+     * @return
+     */
+    public Long getClientIdByPhone(String phoneNumber) {
+        return seClientMapper.getClientIdByPhone(phoneNumber);
+    }
+
+    /**
+     * 娣诲姞寰俊鐢ㄦ埛璐︽埛璁板綍
+     * @param po
+     * @return
+     */
+    public Long addOpenId(SeOpenId po) {
+        seOpenIdMapper.insert(po);
+        //return po.getClientId();
+        return po.getId();
+    }
+
+    /**
+     * 娣诲姞楠岃瘉鐮佽褰�
+     * @param po
+     * @return
+     */
+    public Integer addCodeVerify(SeCodeVerify po) {
+        return seCodeVerifyMapper.insert(po);
+    }
+
+    /**
+     * 鏍规嵁鎵嬫満鍙疯幏鍙栭獙璇佺爜楠岃瘉瀵硅薄
+     * @param phoneNumber
+     * @return
+     */
+    public SeCodeVerify getCodeVerify(String phoneNumber) {
+        return seCodeVerifyMapper.getCodeVerify(phoneNumber);
+    }
+
+    /**
+     * 鑾峰彇鍐滄埛鍩烘湰淇℃伅锛屽皬绋嬪簭棣栭〉浣跨敤
+     * @param sessionId
+     * @return
+     */
+    public VoClientWechat getSimpleClientInfo(Long sessionId, String openId) {
+        return seClientMapper.getSimpleClientInfo(sessionId, openId);
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeLoginDTO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeLoginDTO.java
new file mode 100644
index 0000000..9eb554a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeLoginDTO.java
@@ -0,0 +1,20 @@
+package com.dy.pipIrrWechat.client.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-19 15:57
+ * @LastEditTime 2024-06-19 15:57
+ * @Description
+ */
+
+@Data
+public class CodeLoginDTO {
+    /**
+     * 涓存椂鐧诲綍鍑瘉
+     */
+    @NotBlank(message = "涓存椂鐧诲綍鍑瘉涓嶈兘涓虹┖")
+    private String code;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/dto/CodeVerifyDTO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeVerifyDTO.java
similarity index 93%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/dto/CodeVerifyDTO.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeVerifyDTO.java
index fa660bf..603073a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/client/dto/CodeVerifyDTO.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/client/dto/CodeVerifyDTO.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrSell.client.dto;
+package com.dy.pipIrrWechat.client.dto;
 
 import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
index d881f14..d3fc309 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/command/ValveCtrl.java
@@ -476,7 +476,7 @@
      * @return
      */
     @GetMapping(path = "/get")
-    @SsoAop()
+    //@SsoAop()
     public BaseResponse<List<VoUnclosedValve>> getUnclosedValves(@RequestParam Long operator){
         try {
             List<VoUnclosedValve> res = commandSv.getUnclosedValves(operator);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/WebFilterConfiguration.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/WebFilterConfiguration.java
index c724dae..b0f0226 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/WebFilterConfiguration.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/WebFilterConfiguration.java
@@ -1,9 +1,7 @@
 package com.dy.pipIrrWechat.config;
 
-import com.dy.common.webFilter.DevOfDataSourceNameSetFilter;
-import com.dy.common.webFilter.UserTokenFilter;
+import com.dy.common.webFilter.WXDataSourceNameSetFilter;
 import jakarta.servlet.Filter;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -16,35 +14,14 @@
  */
 @Configuration
 public class WebFilterConfiguration {
-
-    @Value("${pipIrr.global.dev}")
-    public String isDevStage ;//鏄惁涓哄紑鍙戦樁娈�
-    @Value("${pipIrr.global.dsName}")
-    public String dsName ;//寮�鍙戦樁娈电殑鏁版嵁婧愬悕绉�
-
-    /**
-     * DevOfDataSourceNameSetFilter涓嶶serTokenFilter鍙兘涓�涓閰嶇疆涓婏紝
-     * 鎵�浠ヤ粬浠殑order閮芥槸1
-     */
-    private static final int order_UserTokenFilter = 1 ;//涓庝笅闈�
-    private static final int order_DevOfDataSourceNameSetFilter = 1 ;
-
-
     @Bean
     public FilterRegistrationBean<? extends Filter> RegFilter() {
         FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
-        if(this.isDevStage != null && !this.isDevStage.trim().equals("") && this.isDevStage.trim().equalsIgnoreCase("true")){
-            filterRegistrationBean.setFilter(new DevOfDataSourceNameSetFilter());
-            filterRegistrationBean.addUrlPatterns("/*");//閰嶇疆杩囨护瑙勫垯
-            filterRegistrationBean.addInitParameter("dataSourceName",dsName);//璁剧疆init鍙傛暟
-            filterRegistrationBean.setName("DevOfDataSourceNameSetFilter");//璁剧疆杩囨护鍣ㄥ悕绉�
-            filterRegistrationBean.setOrder(order_DevOfDataSourceNameSetFilter);//鎵ц娆″簭
-        }else{
-            filterRegistrationBean.setFilter(new UserTokenFilter());
-            filterRegistrationBean.addUrlPatterns("/*");//閰嶇疆杩囨护瑙勫垯
-            filterRegistrationBean.setName("UserTokenFilter");//璁剧疆杩囨护鍣ㄥ悕绉�
-            filterRegistrationBean.setOrder(order_UserTokenFilter);//鎵ц娆″簭
-        }
+        filterRegistrationBean.setFilter(new WXDataSourceNameSetFilter());
+        filterRegistrationBean.addUrlPatterns("/*");//閰嶇疆杩囨护瑙勫垯
+        filterRegistrationBean.setName("WXDataSourceNameSetFilter");//璁剧疆杩囨护鍣ㄥ悕绉�
+        filterRegistrationBean.setOrder(1);//鎵ц娆″簭
+
         return filterRegistrationBean;
     }
 
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java
new file mode 100644
index 0000000..45ee4ed
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeCtrl.java
@@ -0,0 +1,63 @@
+package com.dy.pipIrrWechat.intake;
+
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrWechat.intake.qo.OnLineIntakesQO;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 8:37
+ * @LastEditTime 2024-06-20 8:37
+ * @Description
+ */
+
+@Slf4j
+@Tag(name = "鍙栨按鍙f暟鎹搷浣�", description = "鍙栨按鍙f暟鎹搷浣�")
+@RestController
+@RequestMapping(path="intake")
+@RequiredArgsConstructor
+public class IntakeCtrl {
+    private final IntakeSv intakeSv;
+
+    /**
+     * 鑾峰彇鍙栨按鍙e垪琛紙鍦ㄧ嚎鍜屼笉鍦ㄧ嚎锛�
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "all_intakes")
+    public BaseResponse<QueryResultVo<List<VoOnLineIntake>>> getAllIntakes(OnLineIntakesQO qo) {
+        try {
+            QueryResultVo<List<VoOnLineIntake>> res = intakeSv.selectOnLineIntakes(qo);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍙栨按鍙e紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+
+    /**
+     * 鏍规嵁鎿嶄綔鍛樿幏鍙栧父鐢ㄥ彇姘村彛锛堝湪绾垮拰涓嶅湪绾匡級
+     * @param operator
+     * @return
+     */
+    @GetMapping(path = "used_intakes")
+    public BaseResponse<List<VoOnLineIntake>> getUsedIntakes(Long operator) {
+        try {
+            List<VoOnLineIntake> res = intakeSv.getUsedIntakes(operator);
+            return BaseResponseUtils.buildSuccess(res);
+        } catch (Exception e) {
+            log.error("鏌ヨ鍙栨按鍙e紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java
new file mode 100644
index 0000000..0e6fd7f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/IntakeSv.java
@@ -0,0 +1,134 @@
+package com.dy.pipIrrWechat.intake;
+
+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.BaseResponse;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
+import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
+import com.dy.pipIrrWechat.intake.qo.OnLineIntakesQO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 8:37
+ * @LastEditTime 2024-06-20 8:37
+ * @Description
+ */
+
+@Slf4j
+@Service
+public class IntakeSv {
+    @Autowired
+    private PrIntakeMapper prIntakeMapper;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ;
+
+    /**
+     * 鑾峰彇鍙栨按鍙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<>();
+        }
+    }
+
+    /**
+     * 鍙戦�佸懡浠�
+     * @return
+     */
+    protected BaseResponse sendCom2Mw(Command com){
+        String url = UriComponentsBuilder.fromUriString(mwUrlSendCom)
+                .build()
+                .toUriString();
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<Command> httpEntity = new HttpEntity<>(com, headers);
+        ResponseEntity<BaseResponse> response = null;
+        try {
+            // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
+            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return response.getBody();
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java
new file mode 100644
index 0000000..e305015
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/intake/qo/OnLineIntakesQO.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrWechat.intake.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import lombok.Data;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-06-20 8:53
+ * @LastEditTime 2024-06-20 8:53
+ * @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 7c23a12..1b61317 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
@@ -25,9 +25,24 @@
     /**
      * RTU
      */
-    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�");
+    RTU_NOT_EXIST(20001, "闃�鎺у櫒涓嶅瓨鍦�"),
     //RTU_ADDR_CANNOT_BE_NULL(20002, "闃�鎺у櫒鍦板潃涓嶈兘涓虹┖");
 
+    /**
+     * 寰俊鐢ㄦ埛
+     */
+    PHONE_NUMBER_CANNOT_BE_NULL(20001, "鎵嬫満鍙蜂笉鑳戒负绌�"),
+    SECURITY_CODE_SEND_FAIL(20001, "楠岃瘉鐮佸彂閫佸け璐�"),
+    VERIFY_PARAMS_INCOMPLETE(20001, "楠岃瘉鍙傛暟涓嶅畬鏁�"),
+    CODE_VERIFY_FAIL(20001, "楠岃瘉鐮佹牎楠屽け璐�"),
+
+    NO_SECURITY_CODE_FOR_PHONE(20002, "璇ユ墜鏈哄彿鏈彂閫侀獙璇佺爜"),
+    SECURITY_CODE_ERROR(20003, "楠岃瘉鐮侀敊璇�"),
+    VALIDATION_TIMEOUT(20004, "楠岃瘉瓒呮椂"),
+    PHONE_NUMBER_IS_ERROR(20004, "鎵嬫満鍙烽敊璇紝闈炴敞鍐屽啘鎴�"),
+    INVALID_CODE(20004, "鏃犳晥鐨勪复鏃剁櫥褰曞嚟璇�"),
+    LOGIN_FAIL(20004, "鐧诲綍澶辫触");
+
     private final Integer code;
     private final String message;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/AliyunSmsSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/AliyunSmsSv.java
similarity index 97%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/AliyunSmsSv.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/AliyunSmsSv.java
index 6012b0b..a0de838 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/AliyunSmsSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/AliyunSmsSv.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrSell.sms;
+package com.dy.pipIrrWechat.sms;
 
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/RandomCode.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/RandomCode.java
similarity index 89%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/RandomCode.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/RandomCode.java
index f2049c8..7cc3f9b 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/sms/RandomCode.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/sms/RandomCode.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrSell.sms;
+package com.dy.pipIrrWechat.sms;
 
 /**
  * @author ZhuBaoMin
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/util/RestTemplateUtil.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/util/RestTemplateUtil.java
new file mode 100644
index 0000000..04710fd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/util/RestTemplateUtil.java
@@ -0,0 +1,115 @@
+package com.dy.pipIrrWechat.util;
+
+import com.alibaba.fastjson2.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2024-03-06 13:47
+ * @LastEditTime 2024-03-06 13:47
+ * @Description
+ */
+
+@Component
+public class RestTemplateUtil {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    //@Qualifier("RestTemplateWithCert")
+    //@Resource
+    //private RestTemplate restTemplate;
+
+    public JSONObject get(String url, Map<String, Object> queryParams) throws IOException {
+        return get(url, queryParams, new HashMap<>(1));
+    }
+
+    public JSONObject get(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
+        String tempUrl = setParamsByAppendUrl(queryParams, url);
+        HttpHeaders headers = new HttpHeaders();
+        headerParams.forEach(headers::add);
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
+        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class);
+        return JSONObject.parseObject(response.getBody());
+    }
+
+    public JSONObject getHeaders(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
+        String tempUrl = setParamsByAppendUrl(queryParams, url);
+        HttpHeaders headers = new HttpHeaders();
+        headerParams.forEach(headers::add);
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
+        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class);
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("headers", response.getHeaders());
+        jsonObject.put("body", response.getBody());
+        return jsonObject;
+    }
+
+    public JSONObject get2(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
+        String tempUrl = setParamsByPath(queryParams, url);
+        HttpHeaders headers = new HttpHeaders();
+        headerParams.forEach(headers::add);
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
+        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class, queryParams);
+        return JSONObject.parseObject(response.getBody());
+    }
+
+    public JSONObject post(String url, String json, Map<String, String> headerParams) {
+        HttpHeaders headers = new HttpHeaders();
+        headerParams.forEach(headers::add);
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<String> httpEntity = new HttpEntity<>(json, headers);
+        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+        return JSONObject.parseObject(response.getBody());
+    }
+
+    private String setParamsByPath(Map<String, Object> queryParams, String url) {
+        // url?id={id}&name={name}
+        if (queryParams == null || queryParams.isEmpty()) {
+            return url;
+        }
+        StringBuilder sb = new StringBuilder();
+        try {
+            for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
+                sb.append("&").append(entry.getKey()).append("=").append("{").append(entry.getKey()).append("}");
+            }
+            if (!url.contains("?")) {
+                sb.deleteCharAt(0).insert(0, "?");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return url + sb;
+    }
+
+    private String setParamsByAppendUrl(Map<String, Object> queryParams, String url) {
+        // url?id=1&name=zzc
+        if (queryParams == null || queryParams.isEmpty()) {
+            return url;
+        }
+        StringBuilder sb = new StringBuilder();
+        try {
+            for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
+                sb.append("&").append(entry.getKey()).append("=");
+                sb.append(entry.getValue());
+            }
+            if (!url.contains("?")) {
+                sb.deleteCharAt(0).insert(0, "?");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return url + sb;
+    }
+
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml
index f36e52a..a591cdf 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application.yml
@@ -16,3 +16,10 @@
             idSuffix: ${pipIrr.wechat.idSuffix}
             #ConfigListener涓簲鐢�
             #configFileNames: config-global.xml,config-demo.xml
+#闃块噷鐭俊鏈嶅姟
+aliyun:
+    sms:
+        sms-access-key-id: LTAI5tPCmHqfyJ9YnoPorEwt
+        sms-access-key-secret: sU2CoLdNgcjnf5uPPU2dY7NNGNvOIX
+        sms-template-code: SMS_460776024
+        sms-sign-name: 澶х鑺傛按
\ No newline at end of file

--
Gitblit v1.8.0