From 13396d9d413c38786f40e02569b034fd4061d0d5 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期五, 29 十一月 2024 14:55:02 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java              |   46 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java                         |   11 
 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java                  |   30 ++
 pipIrr-platform/pipIrr-global/src/main/resources/application-global(test测试系统).yml                                          |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java              |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml                                            |    8 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java |   51 ++-
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java                                       |  110 +++----
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java                         |   19 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global(sp沙盘系统).yml                                            |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java                         |    4 
 /dev/null                                                                                                                  |  386 ---------------------------
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java                      |   12 
 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java            |    6 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global(ym元谋系统).yml                                            |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java                                |   20 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java                |    8 
 pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml                                                    |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java                      |   15 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java                                |    2 
 20 files changed, 236 insertions(+), 550 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
index 2d81abd..87f3331 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
@@ -65,7 +65,7 @@
             case STATE_FAILONE:
                 return "涓�鍖呮";
             case STATE_FAIL:
-                return "鍗囩骇涓";
+                return "澶氬寘姝�";
             case STATE_FAILOFFLINE:
                 return "绂荤嚎澶辫触";
             default:
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/ToRtuMwCom.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
similarity index 60%
rename from pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/ToRtuMwCom.java
rename to pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
index ac71d4c..86fc954 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/ToRtuMwCom.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
@@ -19,33 +19,71 @@
  * @Date: 2024/10/23 11:45
  * @Description
  */
-public abstract class ToRtuMwCom {
+public abstract class Web2RtuMw {
     /**
      * pro_mw锛氬睘鎬�
      * tag浠庢帶鍒跺櫒涓幏鍙�
      * key_mw锛歶rl鐨刱ey
      */
     private static final String pro_mw = "mw";
-    private static final String key_mw = "comSendUrl";
-    private static final String keyUg_mw = "ugTaskSendUrl";
+    private static final String pro_url = "url";
 
+    protected static final String ContextComSend = "/rtuMw/com/send";
 
+    protected static final String ContextRtuLogFile = "/rtuMw/com/rtuLogFile";
+    protected static final String ContextRtuLogText = "/rtuMw/com/rtuLogText";
+
+    protected static final String ContextUgTaskSend = "/rtuMw/com/upgradeRtu";
+    protected static final String ContextUgForceOver = "/rtuMw/com/ugForceOver";
     /**
      * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佹暟鎹殑URL
      * @param env
      * @return
      */
-    protected String getToMwUrl(Environment env) {
-        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
+    protected String get2MwUrl(Environment env) {
+        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + pro_url);
+    }
+    /**
+     * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佸己鍒跺仠姝㈠崌绾х殑鍛戒护URL
+     * @param env
+     * @return
+     */
+    protected String get2MwRequestUrl(Environment env, String context) {
+        return get2MwUrl(env) + context;
     }
 
+
     /**
-     * 寰楀埌鍚戦�氫俊涓棿浠跺彂閫佹暟鎹殑URL
-     * @param env
+     * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟
+     * @param restTemplate SpringBoot鐨凴estTemplate
+     * @param toMwUrl 鍒伴�氫俊涓棿浠剁殑web璇锋眰Url
+     * @param param 璇锋眰鍙傛暟
      * @return
      */
-    protected String getToMwUgUrl(Environment env) {
-        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + keyUg_mw);
+    protected BaseResponse sendRequest2Mw(RestTemplate restTemplate, String toMwUrl, Object param) {
+        String url = UriComponentsBuilder.fromUriString(toMwUrl)
+                .build()
+                .toUriString();
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<?> httpEntity ;
+        if(param != null){
+            httpEntity = new HttpEntity<>(param, headers);
+        }else{
+            httpEntity = new HttpEntity<>(headers);
+        }
+        ResponseEntity<BaseResponse> response = null;
+        try {
+            // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
+            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
+        }
+        if(response == null){
+            return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
+        }else{
+            return response.getBody();
+        }
     }
 
     /**
@@ -74,58 +112,4 @@
         return com ;
     }
 
-    /**
-     * 鍙戦�佸懡浠�
-     *
-     * @return
-     */
-    protected BaseResponse sendCom2Mw(RestTemplate restTemplate, String comSendUrl, Command com) {
-        String url = UriComponentsBuilder.fromUriString(comSendUrl)
-                .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 BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
-        }
-        if(response == null){
-            return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
-        }else{
-            return response.getBody();
-        }
-    }
-
-
-    /**
-     * 鍚戦�氫俊涓棿浠跺彂閫乺tu杩滅▼鍗囩骇浠诲姟
-     * @param restTemplate
-     * @param comSendUrl
-     * @param vo
-     * @return
-     */
-    protected BaseResponse sendUpgradeTask2Mw(RestTemplate restTemplate, String comSendUrl, UpgradeTaskVo vo) {
-        String url = UriComponentsBuilder.fromUriString(comSendUrl)
-                .build()
-                .toUriString();
-        HttpHeaders headers = new HttpHeaders();
-        HttpEntity<UpgradeTaskVo> httpEntity = new HttpEntity<>(vo, headers);
-        ResponseEntity<BaseResponse> response = null;
-        try {
-            // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
-            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
-        }
-        if(response == null){
-            return BaseResponseUtils.buildError("鍚庣绯荤粺鍑洪敊锛屼腑闂翠欢璋冪敤寮傚父");
-        }else{
-            return response.getBody();
-        }
-    }
 }
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050sp\346\262\231\347\233\230\347\263\273\347\273\237\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050sp\346\262\231\347\233\230\347\263\273\347\273\237\051.yml"
index a369ae8..0ca5332 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050sp\346\262\231\347\233\230\347\263\273\347\273\237\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050sp\346\262\231\347\233\230\347\263\273\347\273\237\051.yml"
@@ -310,22 +310,16 @@
 #閫氳涓棿浠剁浉鍏抽厤缃�
 #protocol: DYJS_2023,DYJS_2024
 mw:
-    #鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
+    #鍛戒护鍙戦�侀�氫俊涓棿浠跺湴鍧�
     ym:
+        url: "http://127.0.0.1:8070"
         comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
     sp:
+        url: "http://127.0.0.1:8073"
         comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
     test:
+        url: "http://127.0.0.1:8072"
         comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
     #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
     rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
     #rtu杩滅▼鍗囩骇妯″潡鍥炶皟鍦板潃
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
index 7b529cc..a74a259 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050test\346\265\213\350\257\225\347\263\273\347\273\237\051.yml"
@@ -310,22 +310,16 @@
 #閫氳涓棿浠剁浉鍏抽厤缃�
 #protocol: DYJS_2023,DYJS_2024
 mw:
-    #鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
+    #鍛戒护鍙戦�侀�氫俊涓棿浠跺湴鍧�
     ym:
+        url: "http://127.0.0.1:8070"
         comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
     sp:
+        url: "http://127.0.0.1:8073"
         comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
     test:
+        url: "http://127.0.0.1:8072"
         comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
     #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
     rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
     #rtu杩滅▼鍗囩骇妯″潡鍥炶皟鍦板潃
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
index 5e8b483..e7a60d0 100644
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
+++ "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050ym\345\205\203\350\260\213\347\263\273\347\273\237\051.yml"
@@ -310,22 +310,16 @@
 #閫氳涓棿浠剁浉鍏抽厤缃�
 #protocol: DYJS_2023,DYJS_2024
 mw:
-    #鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
+    #鍛戒护鍙戦�侀�氫俊涓棿浠跺湴鍧�
     ym:
+        url: "http://127.0.0.1:8070"
         comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
     sp:
+        url: "http://127.0.0.1:8073"
         comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
     test:
+        url: "http://127.0.0.1:8072"
         comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
     #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
     rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
     #rtu杩滅▼鍗囩骇妯″潡鍥炶皟鍦板潃
diff --git "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050\345\274\200\345\217\221\346\265\213\350\257\225---166PC\346\234\272\051.yml" "b/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050\345\274\200\345\217\221\346\265\213\350\257\225---166PC\346\234\272\051.yml"
deleted file mode 100644
index ab8092d..0000000
--- "a/pipIrr-platform/pipIrr-global/src/main/resources/application-global\050\345\274\200\345\217\221\346\265\213\350\257\225---166PC\346\234\272\051.yml"
+++ /dev/null
@@ -1,386 +0,0 @@
-spring:
-    servlet:
-        multipart:
-            # 鍓嶇涓婁紶鏂囦欢锛岄檺鍒跺崟涓枃浠剁殑澶у皬鍜岄檺鍒舵墍鏈夋枃浠剁殑澶у皬
-            max-file-size: 500MB
-            max-request-size: 5000MB
-logging:
-    charset:
-        console: UTF-8
-    config:
-        classpath: log4j2.yml
-#绂佺敤鐧芥爣閿欒椤甸潰
-server:
-    error:
-        whitelabel:
-            enabled: false
-    #servlet閰嶇疆
-    servlet:
-        encoding:
-            #鍙栨秷榛樿鐨勫瓧绗﹂泦缂栫爜
-            enabled: true
-            #璁剧疆寮哄埗浣跨敤鎸囧畾瀛楃缂栫爜闆�
-            force: true
-            #浣跨敤鐨勫瓧绗︾紪鐮�
-            charset: utf-8
-# actuator閰嶇疆锛屽厛include浜嗗叏閮紝鐒跺悗鍐峞xclude鎸囧畾鐨別ndpoint
-management:
-    endpoints:
-        web:
-            exposure:
-                include: '*'
-                #exclude: beans
-        .shutdown:
-            enabled: true #鏄惁寮�鍚�/actuator/shutdown
-
-# SpringDoc-OpenApi 閰嶇疆
-springdoc:
-    swagger-ui:
-        #搴旂敤actuator鏃讹紝璁块棶: http://[IP]:[port]/actuator/swagger-ui/index.html 渚嬪http://127.0.0.1:9080/actuator/swagger-ui/index.html
-        #鏈敤actuator鏃讹紝璁块棶: http://[IP]:[port]/[context]/swagger-ui/index.html 渚嬪http://127.0.0.1:8080/[瀛愮郴缁熶笂涓嬫枃锛坆ase锛塢/swagger-ui/index.html
-        path: /swagger-ui
-        operationsSorter: method # HTTP 鏂规硶鎺掑簭
-        tagsSorter: alpha # API 鎺掑簭
-    api-docs:
-        path: /v3/apiDocs
-        groups:
-            enabled: true
-    show-actuator: true #鍦╝ctuator閰嶇疆鐨勭鍙e強涓婁笅鏂囦腑璁块棶 SpringDoc-OpenApi
-    use-management-port: true #搴旂敤actuator閰嶇疆鐨勭鍙o紝浣嗕笂闈㈢殑swagger-ui:path鍙細閲囩敤榛樿鍊約wagger-ui
-    packages-to-scan: com.dy
-    #paths-to-match: /sys/**, /demo/**, /**
-    paths-to-match:  /**
-    web:
-        title: 澶х鑺傛按绠$亴鐩戞帶绯荤粺API
-        description: 澶х鑺傛按绠$亴鐩戞帶绯荤粺鏈嶅姟绔� Restfull API
-        version: v1.0.0
-        license-name: 澶х鑺傛按鐮旂┒闄�
-
-#MybatisPlus 閰嶇疆鏃ュ織鏄剧ず鎵цSQL
-mybatis-plus:
-    #鍖归厤sql璇彞鐨勬槧灏勬枃浠剁殑浣嶇疆锛宑lasspath浠h〃鍦╮esources涓�
-    mapper-locations: classpath:mapper/*.xml
-    #浠ヤ笅涓や釜閰嶇疆鍙互鐪佺暐锛屽湪mapper鏄犲皠鏂囦欢涓厤缃�淍Mapper鈥濅篃鏄彲浠ョ殑銆�
-    #浣跨敤type-aliases-package涓寚瀹歟ntity鎵弿鍖呰矾寰勶紝璁﹎ybatis鑷姩鎵弿鑷畾涔夌殑entity
-    #type-aliases-package: com.dy.pipIrrGlobal.daoBa
-    configuration:
-        #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #鏃惰�岃緭鍑烘棩蹇楋紝鏃惰�屼笉杈撳嚭鏃ュ織
-        log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
-        #寮�鍚┘宄皍Name鑷姩鏄犲皠鍒皍_name
-        #2023-10-24缁忓疄楠岋紝涓嬮潰閰嶇疆true鎴杅alse锛岄兘鑳戒粠u_name鏄犲皠鍒皍Name
-        #map-underscore-to-camel-case: true
-        lazyLoadingEnabled: true # 寮�鍚欢鏃跺姞杞藉紑鍏�
-        aggressiveLazyLoading: false # 灏嗙Н鏋佸姞杞芥敼涓烘秷鏋佸姞杞斤紙鍗虫寜闇�鍔犺浇锛夛紝榛樿鍊兼槸false
-        lazy-load-trigger-methods: ""  # 闃绘尅涓嶇浉骞茬殑鎿嶄綔瑙﹀彂锛屽疄鐜版噿鍔犺浇
-        cache-enabled: true  #鎵撳紑鍏ㄥ眬缂撳瓨寮�鍏筹紙浜岀骇鐜锛夛紝榛樿鍊兼槸true
-        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
-
-pipIrr:
-    global:
-        dev: true  #鏄惁寮�鍙戦樁娈碉紝true鎴杅alse
-        dsName: ym  #寮�鍙戦樁娈碉紝璁剧疆涓存椂鐨勬暟鎹簱鍚嶇О
-    nginx:
-        webPort: 54321
-    mw:
-        webPort: 8070 #閫氫俊涓棿浠朵腑搴旂敤锛屼笉鑳藉湪web妯″潡绯荤粺涓簲鐢�
-        actutorPort: 9070 #閫氫俊涓棿浠朵腑搴旂敤锛屼笉鑳藉湪web妯″潡绯荤粺涓簲鐢�
-        idSuffix: 0
-    sso:
-        cacheMaximumSize: 10000 #鐧诲綍鐢ㄦ埛缂撳瓨鍙紦瀛樼敤鎴风殑鏈�澶у��
-        cacheDuration: 720  #缂撳瓨鐧诲綍鐢ㄦ埛鍙戝憜鏈�澶ф椂闀匡紙鍒嗛挓锛�
-        checkUrl: http://127.0.0.1:8079/sso/sso/ssoCheck
-        webPort: 8079
-        actutorPort: 9079
-        idSuffix: 1
-    base:
-        webPort: 8080
-        actutorPort: 9080
-        idSuffix: 2
-    remote:
-        webPort: 8081
-        actutorPort: 9081
-        idSuffix: 3
-    statistics:
-        webPort: 8082
-        actutorPort: 9082
-        idSuffix: 4
-    gis:
-        webPort: 8083
-        actutorPort: 9083
-        idSuffix: 5
-    demo:
-        webPort: 8000
-        actutorPort: 9000
-        idSuffix: 99
-    sell:
-        webPort: 8084
-        actutorPort: 9084
-        idSuffix: 6
-    project:
-        webPort: 8085
-        actutorPort: 9085
-        idSuffix: 7
-    irrigate:
-        webPort: 8086
-        actutorPort: 9086
-        idSuffix: 8
-    wechat:
-        webPort: 8087
-        actutorPort: 9087
-        idSuffix: 9
-    app:
-        webPort: 8088
-        actutorPort: 9088
-        idSuffix: 10
-    operation:
-        webPort: 8089
-        actutorPort: 9089
-        idSuffix: 11
-
-
-    file:
-        idSuffix: 99
-    file1:
-        webPort: 8180
-        actutorPort: 9180
-    file2:
-        webPort: 8180
-        actutorPort: 9180
-    file3:
-        webPort: 8180
-        actutorPort: 9180
-    file4:
-        webPort: 8180
-        actutorPort: 9180
-    file5:
-        webPort: 8180
-        actutorPort: 9180
-    file6:
-        webPort: 8180
-        actutorPort: 9180
-    file7:
-        webPort: 8180
-        actutorPort: 9180
-    file8:
-        webPort: 8180
-        actutorPort: 9180
-    file9:
-        webPort: 8180
-        actutorPort: 9180
-    file10:
-        webPort: 8180
-        actutorPort: 9180
-    file11:
-        webPort: 8180
-        actutorPort: 9180
-    file12:
-        webPort: 8180
-        actutorPort: 9180
-
-
-#web鍒嗗竷寮忔枃浠剁郴缁�
-dy:
-    photoZipWidth: 400 #缂╃暐鍥惧昂瀵�
-    webFile:
-        fmUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file # fm鐨剋eb涓婁笅鏂� URL
-        supportedFileTypes: docx,xlsx,doc,xls,pdf #鏀寔鐨勬枃妗o紙闈炲獟浣撴枃浠讹紝濡傜収鐗囥�佸綍闊炽�佸綍鍍忥級鏂囦欢绫诲瀷
-        sv1:
-            id: dyFile1
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile1
-            hashStart: 0
-            hashEnd: 5461
-            restUrl: http://127.0.0.1:${pipIrr.file1.webPort}/file #file鏄笂涓嬫枃,ip涓哄眬鍩熺綉ip鎴栨湰鍦癐P
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/ #nginx鏈嶅姟璺緞,瀹夎閮ㄧ讲鏃禝P鏀规垚澶栫綉IP鎴栧煙鍚�
-            webDownloadPath: http://127.0.0.1:${pipIrr.file1.webPort}/file/download/down?id=  #瀹夎閮ㄧ讲鏃禝P鏀规垚澶栫綉IP鎴栧煙鍚�
-        sv2:
-            id: dyFile2
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile2
-            hashStart: 5462
-            hashEnd: 10923
-            restUrl: http://127.0.0.1:${pipIrr.file2.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file2.webPort}/file/download/down?id=
-        sv3:
-            id: dyFile3
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile3
-            hashStart: 10924
-            hashEnd: 16385
-            restUrl: http://127.0.0.1:${pipIrr.file3.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file3.webPort}/file/download/down?id=
-        sv4:
-            id: dyFile4
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile4
-            hashStart: 16386
-            hashEnd: 21847
-            restUrl: http://127.0.0.1:${pipIrr.file4.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file4.webPort}/file/download/down?id=
-        sv5:
-            id: dyFile5
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile5
-            hashStart: 21848
-            hashEnd: 27309
-            restUrl: http://127.0.0.1:${pipIrr.file5.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file5.webPort}/file/download/down?id=
-        sv6:
-            id: dyFile6
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile6
-            hashStart: 27310
-            hashEnd: 32767
-            restUrl: http://127.0.0.1:${pipIrr.file6.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file6.webPort}/file/download/down?id=
-        sv7:
-            id: dyFile7
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile7
-            hashStart: 32768
-            hashEnd: 38229
-            restUrl: http://127.0.0.1:${pipIrr.file7.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file7.webPort}/file/download/down?id=
-        sv8:
-            id: dyFile8
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile8
-            hashStart: 38230
-            hashEnd: 43691
-            restUrl: http://127.0.0.1:${pipIrr.file8.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file8.webPort}/file/download/down?id=
-        sv9:
-            id: dyFile9
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile9
-            hashStart: 43692
-            hashEnd: 49153
-            restUrl: http://127.0.0.1:${pipIrr.file9.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file9.webPort}/file/download/down?id=
-        sv10:
-            id: dyFile10
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile10
-            hashStart: 49154
-            hashEnd: 54615
-            restUrl: http://127.0.0.1:${pipIrr.file10.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file10.webPort}/file/download/down?id=
-        sv11:
-            id: dyFile11
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile11
-            hashStart: 54616
-            hashEnd: 60077
-            restUrl: http://127.0.0.1:${pipIrr.file11.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file11.webPort}/file/download/down?id=
-        sv12:
-            id: dyFile12
-            absolutePath: E:/java/nginx-1.24.0/html/webfiles/
-            relativePath: webFile12
-            hashStart: 60078
-            hashEnd: 65535
-            restUrl: http://127.0.0.1:${pipIrr.file12.webPort}/file
-            webUrl: http://127.0.0.1:${pipIrr.nginx.webPort}/webfiles/
-            webDownloadPath: http://127.0.0.1:${pipIrr.file12.webPort}/file/download/down?id=
-
-
-#椤圭洰缂栧彿
-#projectCode:
-#    ym: 100
-#    sp: 101
-
-#椤圭洰閰嶇疆
-project:
-    #椤圭洰缂栫爜
-    projectNo: 10
-    #鎺у埗鍣ㄧ被鍨�
-    controllerType: 57
-    #榛樿琛屾斂鍖哄垝缂栫爜锛堝ぉ娲�-澶╂触甯�-姝︽竻鍖�-浜花宸ヤ笟鍥�-澶х鑺傛按锛�
-    divisionCode: 120114403100
-
-
-#閫氳涓棿浠剁浉鍏抽厤缃�
-#protocol: DYJS_2023,DYJS_2024
-mw:
-    #鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
-    ym:
-        comSendUrl: "http://192.168.40.166:8070/rtuMw/com/send"
-        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
-    sp:
-        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
-        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
-    test:
-        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
-        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
-    #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
-    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
-    #寰俊灏忕▼搴忓洖璋冨湴鍧�
-    rtuCallbackUrl_wx: "http://127.0.0.1:8087/wx/comRes/receive"
-
-#涓嶈繘琛寀serToken杩囨护鐨刄RL锛孈ConfigurationProperties瑕佹眰tokennofilter涓墍鏈夊瓧姣嶉兘灏忓啓
-tokennofilter:
-    urls:
-        - /sso/sso
-        - /remote/comRes/receive
-        - /wx/comRes/receive
-        - /app/captcha/get
-        - /file/file #web鍒嗗竷寮忔枃浠剁郴缁�
-        - /file/fm #web鍒嗗竷寮忔枃浠剁郴缁�
-
-#鑷姩缁熻閰嶇疆锛岃嚜鍔ㄧ粺璁″畾鏃朵换鍔′細姣忓ぉ瀹氭椂杩涜
-auto-statistics:
-    startHour: 0 #寮�濮嬪皬鏃� 0
-    startMinute: 5 #寮�濮嬪垎閽� 5
-
-#閽夐拤娑堟伅鎺ㄩ��
-dingtalk:
-    ym:
-        enable: true #鏄惁鍚敤
-        robot:
-            url: https://oapi.dingtalk.com/robot/send
-            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-        at-all: true
-        mobile: 18602657034
-    sp:
-        enable: true #鏄惁鍚敤
-        robot:
-            url: https://oapi.dingtalk.com/robot/send
-            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-        at-all: true
-        mobile: 18602657034
-    test:
-        enable: true #鏄惁鍚敤
-        robot:
-            url: https://oapi.dingtalk.com/robot/send
-            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
-            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
-        at-all: true
-        mobile: 18602657034
-
-#闃�鎺у櫒鍙傛暟
-rtu:
-    batteryVolt: 17
-    signalIntensity:
-        weak: 10
-        ordinary: 20
-#        strong: 20
-
-#铏氭嫙鍗¢厤缃弬鏁�
-vc:
-    #铏氭嫙鍗℃渶浣庝綑棰濇姤璀﹀��
-    alarmValue: 10
\ No newline at end of file
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 fc2033d..c037eec 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -310,22 +310,16 @@
 #閫氳涓棿浠剁浉鍏抽厤缃�
 #protocol: DYJS_2023,DYJS_2024
 mw:
-    #鍛戒护鍙戦�佸湴鍧�(涓紑鏄満鏋則ag锛屽叾涔熸槸鏁版嵁婧愬悗缂�鍚嶇О)
+    #鍛戒护鍙戦�侀�氫俊涓棿浠跺湴鍧�
     ym:
+        url: "http://127.0.0.1:8070"
         comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
     sp:
+        url: "http://127.0.0.1:8073"
         comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
     test:
+        url: "http://127.0.0.1:8072"
         comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
-        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
-        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
-        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
     #鐩戞祴鎺у埗妯″潡鍥炶皟鍦板潃
     rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
     #rtu杩滅▼鍗囩骇妯″潡鍥炶皟鍦板潃
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
index b177eb6..cf15a1f 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -337,10 +337,10 @@
     SELECT
         COUNT(*) AS recordCount
     FROM se_card_operate ope
-        INNER JOIN se_client cli ON ope.client_id = cli.id
-        INNER JOIN se_client_card card ON card.id = ope.card_id
-        LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id
-        INNER JOIN ba_user us ON ope.operator = us.id
+    LEFT JOIN se_client cli ON ope.client_id = cli.id
+    LEFT JOIN se_client_card card ON card.id = ope.card_id
+    LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id
+    LEFT JOIN ba_user us ON ope.operator = us.id
     <where>
       AND ope.operate_type IN(1,2,3,5,10)
       AND ope.operate_valid = 2
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
index cf4d386..dc3f161 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
@@ -88,12 +88,19 @@
      * 鍥犱负寮哄埗缁撴潫鍗囩骇浠诲姟锛屽涓�涓湭鍗囩骇瀹屾垚鐨凴TU灏变細鍗℃锛�
      * 鎵�浠ュ綋寮哄埗缁撴潫鍗囩骇浠诲姟锛屼唬鐮侀�昏緫骞舵病鏈夊己鍒剁粨鏋淩TU鍗囩骇杩囩▼锛屽鏋滃崌绾ц繃绋嬩篃寮哄埗鍋滄锛岄偅涔圧TU鐪熶細鍗℃
      */
-    public void forceOverUpgradeTask() {
+    public String forceOverUpgradeTask() {
         if(this.task != null){
-            this.stop();
-            this.task.forceOver();
+            this.task.countRunningRtuCount();
+            if(this.task.curUgRunningRtuTotal > 0){
+                return "褰撳墠瀛樺湪鍗囩骇涓殑璁惧锛屼笉鑳界粨鏉熷崌绾т换鍔�" ;
+            }else{
+                this.stop();
+                this.task.forceOver();
+                return null ;
+            }
+        }else{
+            return "褰撳墠娌℃湁鍗囩骇浠诲姟" ;
         }
-        this.task = null ;
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
index 4378bb4..b4707e6 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
@@ -52,7 +52,7 @@
     ///////////////////////////////////////////////////
     //浠ヤ笅鍐呴儴鎺у埗鐢�
     @JSONField(serialize = false)
-    private int curUgRunningRtuTotal = 0 ;//褰撳墠姝e湪鍗囩骇鐨凴TU涓暟
+    protected int curUgRunningRtuTotal = 0 ;//褰撳墠姝e湪鍗囩骇鐨凴TU涓暟
 
     public UpgradeTask() {
         this.curUgRunningRtuTotal = 0 ;
@@ -176,7 +176,6 @@
             }
         }
     }
-
     /**
      * 寮哄埗缁撴潫鍗囩骇浠诲姟
      */
@@ -190,6 +189,7 @@
         }
     }
 
+
     /**
      * 褰撳墠鍗囩骇鐘舵��
      * @return
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
index d2b8947..c1f02d0 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
@@ -56,7 +56,7 @@
 
     @Override
     public void stop(UnitCallbackInterface callback) throws Exception {
-        overUpgradeTask() ;
+        forceOverUpgradeTask() ;
     }
 
 
@@ -73,12 +73,15 @@
     }
 
     /**
-     * 鍋滄褰撳墠鍗囩骇浠诲姟
+     * 缁撴潫褰撳墠鍗囩骇浠诲姟
      * @throws Exception
+     * @return null锛氱粨鏉熶换鍔℃垚鍔燂紝鍚﹀垯杩斿洖澶辫触鍘熷洜
      */
-    public void overUpgradeTask() throws Exception {
+    public String forceOverUpgradeTask() throws Exception {
         if(manager != null ){
-            manager.forceOverUpgradeTask() ;
+            return manager.forceOverUpgradeTask() ;
+        }else{
+            return "閫氫俊涓棿浠跺唴閮ㄩ敊璇�" ;
         }
     }
 
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
index 46ad9d1..675f636 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -1,6 +1,7 @@
 package com.dy.rtuMw.web.com;
 
 import com.dy.common.softUpgrade.state.UpgradeTaskVo;
+import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.rtuMw.resource.ResourceUnit;
 import com.dy.rtuMw.server.ServerProperties;
 import com.dy.rtuMw.server.forTcp.TcpSessionCache;
@@ -161,6 +162,25 @@
     }
 
     /**
+     * 鎺ユ敹web绯荤粺鍙戞潵寮哄埗缁撴潫鍗囩骇浠诲姟
+     * @return
+     */
+    @PostMapping(path = "ugForceOver", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public BaseResponse<String> ugForceOver() {
+        log.info("鏀跺埌鍋滄RTU鍗囩骇浠诲姟鍛戒护") ;
+        try{
+            String mes = UpgradeUnit.getInstance().forceOverUpgradeTask();
+            if(mes == null){
+                mes = "鍋滄鍗囩骇浠诲姟鎴愬姛" ;
+            }
+            return BaseResponseUtils.buildResult(ResultCodeMsg.RsCode.SUCCESS_CODE, mes, mes);
+        }catch (Exception e){
+            log.error("鍋滄RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�", e);
+            return BaseResponseUtils.buildError("鍋滄RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�" + (e.getMessage() == null?"":("锛�" + e.getMessage())));
+        }
+    }
+
+    /**
      * 鎺ユ敹web绯荤粺鍙戞潵鐨勫懡浠�
      * @param com
      * @return
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
index cf03982..3876932 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
@@ -53,7 +53,7 @@
                         if(ServerProperties.argMultiDie){
                             if(count9602 > 10){
                                 int random =  CreateRandom.create_between(10, 100) ;
-                                if(random > 98){
+                                if(random > 90){
                                     UpHeartBeat.upHeartBeat = true ;//浣胯兘涓婅蹇冭烦
                                 }else{
                                     UpCd9602.upData() ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java
index aa1a917..8115374 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java
@@ -9,7 +9,6 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoUg.UgRtuTask;
 import com.dy.pipIrrGlobal.voUg.VoUgResult;
-import com.dy.pipIrrGlobal.voUg.VoUgRtuResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -83,7 +82,8 @@
      * @param response
      */
     @RequestMapping(value = "/exportAll", method = RequestMethod.GET)
-    public void exportUgFail(HttpServletResponse response, QueryUgResultVo vo) throws Exception {
+    @SsoAop()
+    public void exportAll(HttpServletResponse response, QueryUgResultVo vo) throws Exception {
         if(vo.state != null && vo.state == 1){
             //鏌ヨ鍗囩骇鎴愬姛鐨�
             vo.fail = null ;
@@ -95,7 +95,7 @@
         setExcelRespProp(response, "鍗囩骇缁撴灉鍒楄〃");
         List<VoUgResult> rsList = this.sv.selectAll(vo);
         EasyExcel.write(response.getOutputStream())
-                .head(VoUgRtuResult.class)
+                .head(VoUgResult.class)
                 .excelType(ExcelTypeEnum.XLSX)
                 .sheet("鍗囩骇缁撴灉鍒楄〃")
                 .doWrite(rsList);
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
index a85672a..a4f1e1f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
@@ -9,7 +9,7 @@
 import com.dy.common.webUtil.QueryResultVo;
 import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
 import com.dy.pipIrrGlobal.rtuMw.CodeLocal;
-import com.dy.pipIrrGlobal.rtuMw.ToRtuMwCom;
+import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
 import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.PojoUtils;
@@ -29,7 +29,7 @@
  */
 @Slf4j
 @Service
-public class MonitorSv extends ToRtuMwCom {
+public class MonitorSv extends Web2RtuMw {
 
     @Autowired
     private PrIntakeMapper prIntakeMapper;
@@ -76,8 +76,8 @@
             //鍚戦�氫俊涓棿浠跺彂鍏冲懡浠わ紝鏌ヨ閮ㄥ垎RTU鍦ㄧ嚎鎯呭喌
             Command com = this.createInnerCommand(CodeLocal.onLinePart);
             com.setParam(rtuAddrs) ;
-            String comSendUrl = this.getToMwUrl(this.env) ;
-            BaseResponse res = sendCom2Mw(restTemplate, comSendUrl, com) ;
+            String rqUrl = this.get2MwRequestUrl(this.env, ContextComSend) ;
+            BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, com) ;
             if(res != null){
                 if(res.isSuccess()){
                     Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ;
@@ -114,8 +114,8 @@
     private QueryResultVo<List<VoOnLineIntake>> selectIntakesOnOrOffLine(QueryVo vo) {
         //鍚戦�氫俊涓棿浠跺彂鍏冲懡浠わ紝鏌ヨ閮ㄥ垎RTU鍦ㄧ嚎鎯呭喌
         Command com = this.createInnerCommand(CodeLocal.onLineAll);
-        String comSendUrl = this.getToMwUrl(this.env) ;
-        BaseResponse res = sendCom2Mw(restTemplate, comSendUrl, com) ;
+        String rqUrl = this.get2MwRequestUrl(this.env, ContextComSend) ;
+        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, com) ;
         if(res != null){
             if(res.isSuccess()){
                 Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
index 18ffe64..84a72ae 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
@@ -1,9 +1,9 @@
 package com.dy.pipIrrRemote.rtu;
 
 import com.dy.common.aop.SsoAop;
-import com.dy.common.multiDataSource.DataSourceContext;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
@@ -32,11 +32,7 @@
 @Slf4j
 @RestController
 @RequestMapping(path="rtuLog")
-public class RtuLogCtrl {
-
-    private static final String pro_mw = "mw";
-    private static final String key_mw_file = "rtuLogFileUrl";
-    private static final String key_mw_text = "rtuLogTextUrl";
+public class RtuLogCtrl extends Web2RtuMw {
 
     private Environment env ;
     private RestTemplate restTemplate;
@@ -55,10 +51,10 @@
     @GetMapping(path = "file")
     @SsoAop()
     public BaseResponse<List<String>> rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
-        String mwUrlRtuLogFile = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_file);
+        String rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogFile) ;
         ServletOutputStream out = null ;
         try{
-            byte[] bs = this.requestMw4File(rtuAddr, mwUrlRtuLogFile) ;
+            byte[] bs = this.requestMw4File(rtuAddr, rqUrl) ;
             if(bs != null && bs.length > 0){
                 String fileReName = rtuAddr + ".log" ;
                 //URLEncoder.encode鍙互闃叉涓枃涔辩爜
@@ -91,8 +87,9 @@
     @GetMapping(path="text")
     @SsoAop()
     public BaseResponse<List<String>> rtuLogText(String rtuAddr){
-        String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text);
-        BaseResponse<List<String>> text = this.requestMw4Text(rtuAddr, mwUrlRtuLogText);
+        String rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogText) ;
+        //String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text);
+        BaseResponse<List<String>> text = this.requestMw4Text(rtuAddr, rqUrl);
         if (text != null){
             if (text.getContent().get(0).contains("鎺у埗鍣�")){
                 return BaseResponseUtils.buildErrorMsg(""+text.getContent().get(0)+"") ;
@@ -101,7 +98,6 @@
         }else {
             return BaseResponseUtils.buildErrorMsg("鑾峰彇鏃ュ織鏂囦欢涓簄ull") ;
         }
-//        return this.requestMw4Text(rtuAddr, mwUrlRtuLogText) ;
     }
 
 
@@ -141,5 +137,4 @@
 
         return (response==null?null:response.getBody());
     }
-
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
index d5929d6..63053ca 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
@@ -3,7 +3,6 @@
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.dy.common.aop.SsoAop;
-import com.dy.common.softUpgrade.state.UpgradeRtu;
 import com.dy.common.softUpgrade.state.UpgradeTaskVo;
 import com.dy.common.springUtil.SpringContextUtil;
 import com.dy.common.webUtil.BaseResponse;
@@ -12,8 +11,7 @@
 import com.dy.common.webUtil.ResultCodeMsg;
 import com.dy.pipIrrGlobal.pojoUg.UgRtuProgram;
 import com.dy.pipIrrGlobal.pojoUg.UgRtuTask;
-import com.dy.pipIrrGlobal.rtuMw.ToRtuMwCom;
-import com.dy.pipIrrGlobal.voPr.VoDivide;
+import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
 import com.dy.pipIrrGlobal.voUg.VoUgRtuResult;
 import com.dy.pipIrrGlobal.voUg.VoWatch;
 import io.swagger.v3.oas.annotations.Operation;
@@ -35,7 +33,6 @@
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
 import java.util.Base64;
 import java.util.List;
 
@@ -48,7 +45,7 @@
 @Tag(name = "rtu杩滅▼鍗囩骇浠诲姟", description = "rtu杩滅▼鍗囩骇浠诲姟鐩稿叧鎿嶄綔")
 @RestController
 @RequestMapping(path = "rtuUpgrade")
-public class RtuUpgradeCtrl extends ToRtuMwCom {
+public class RtuUpgradeCtrl extends Web2RtuMw {
     @Autowired
     private RtuUpgradeSv sv ;
 
@@ -108,8 +105,8 @@
         vo.rtuAddrList = taskRtuAddrs ;
         vo.callbackWebUrl = ugCallbackUrl_rm ;
 
-        String ugSendUrl = this.getToMwUgUrl(this.env) ;
-        BaseResponse res = sendUpgradeTask2Mw(restTemplate, ugSendUrl, vo) ;
+        String rqUrl = this.get2MwRequestUrl(this.env, ContextUgTaskSend) ;
+        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, vo) ;
         if(res != null){
             if(res.isSuccess()){
                 this.sv.setUpgradeTaskExecuted(id);
@@ -127,6 +124,41 @@
             return BaseResponseUtils.buildErrorMsg("閫氫俊涓棿浠惰繑鍥炵粨鏋滀负null") ;
         }
     }
+    /**
+     * 涓嬪彂寮哄埗缁撴潫褰撳墠rtu杩滅▼鍗囩骇浠诲姟
+     * @return 鎿嶄綔缁撴灉
+     */
+    @Operation(summary = "涓嬪彂寮哄埗缁撴潫褰撳墠rtu杩滅▼鍗囩骇浠诲姟", description = "涓嬪彂寮哄埗缁撴潫褰撳墠rtu杩滅▼鍗囩骇浠诲姟")
+    @ApiResponses(value = {
+            @ApiResponse(
+                    responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+                    description = "杩斿洖鎿嶄綔鎴愬姛涓庡惁鏁版嵁锛圔aseResponse.content:Boolean锛�",
+                    content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+                            schema = @Schema(implementation = String.class))}
+            )
+    })
+    @GetMapping(path = "/forceOver")
+    @SsoAop()
+    public BaseResponse<String> forceOver() {
+        String rqUrl = this.get2MwRequestUrl(this.env, ContextUgForceOver) ;
+        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, null) ;
+        if(res != null){
+            if(res.isSuccess()){
+                return BaseResponseUtils.buildSuccess(true) ;
+            }else{
+                String msg = res.getContent()==null?null:(String)res.getContent() ;
+                if(msg == null){
+                    msg = res.getMsg() ;
+                }
+                log.error("閫氫俊涓棿浠舵墽琛屼笅鍙戝己鍒剁粨鏉熷綋鍓峳tu杩滅▼鍗囩骇浠诲姟澶辫触锛�" + msg) ;
+                return BaseResponseUtils.buildErrorMsg("閫氫俊涓棿浠舵墽琛屽己鍒剁粨鏉熷綋鍓峳tu杩滅▼鍗囩骇浠诲姟澶辫触锛�" + msg) ;
+            }
+        }else{
+            log.error("閫氫俊涓棿浠惰繑鍥炵粨鏋滀负null") ;
+            return BaseResponseUtils.buildErrorMsg("閫氫俊涓棿浠惰繑鍥炵粨鏋滀负null") ;
+        }
+    }
+
 
     private void valueFromPo(UpgradeTaskVo vo, UgRtuTask tpo, UgRtuProgram ppo){
         vo.id = "" + tpo.id ;
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java
index eb37c52..9a8f18f 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java
@@ -49,15 +49,8 @@
     @Hidden //涓嶅叕寮�鎺ュ彛锛屽叾鍙湁閫氫俊涓棿浠惰皟鐢�
     @PostMapping(path = "/receive")
     public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo info, HttpServletRequest req, HttpServletResponse rep){
+        /*
         log.info("鎺ユ敹鍒扮殑RTU杩滅▼鍗囩骇鐘舵�佹暟鎹负锛歿}", info.toString("532328000214"));
-        //杩涜鎺掑簭
-        //Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder());
-        //info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList());
-
-        //閫氫俊涓棿浠朵紶杩囨潵鐨勬満鏋則ag锛屼互鐢ㄤ簬鏌ユ壘鏁版嵁婧�
-        String token = req.getHeader(Constant.UserTokenKeyInHeader);
-        DataSourceContext.set(token);
-
         if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){
             if(info.ugRtuStateList.size() < 10){
                 for (UpgradeRtu rtuVo : info.ugRtuStateList) {
@@ -65,6 +58,16 @@
                 }
             }
         }
+         */
+
+        //杩涜鎺掑簭
+        Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder());
+        info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList());
+
+        //閫氫俊涓棿浠朵紶杩囨潵鐨勬満鏋則ag锛屼互鐢ㄤ簬鏌ユ壘鏁版嵁婧�
+        String token = req.getHeader(Constant.UserTokenKeyInHeader);
+        DataSourceContext.set(token);
+
         if(cache == null){
             cache = info;
             //姝ゆ椂涓嶅仛浠诲姟鎿嶄綔锛屽彧淇濋殰cache涓嶄负绌猴紝 绛夊緟涓嬫鍙戞潵鏁版嵁
@@ -80,12 +83,11 @@
                 //姝ゆ椂淇濊瘉涓や釜闆嗗悎閮戒笉涓簄ull
                 this.save2Db(info.ugTaskId, info.ugRtuStateList, cache.ugRtuStateList);
             }
-            if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){
-                //姝ゆ椂淇濊瘉涓や釜闆嗗悎閮戒笉涓簄ull
-                info.ugRtuStateList.stream().sorted(Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder())).collect(Collectors.toList());
-            }
             //cache璧嬪�煎繀椤绘斁鍦ㄤ笂闈㈠鐞嗙殑鍚庨潰锛屽惁鍒欎笂闈㈢殑姣旇緝涓嶆垚鍔�
             cache = info;
+            if(info.ugOverallState != null && info.ugOverallState.allOver){
+                this.saveTaskOver(info.ugTaskId) ;
+            }
         }
         return null;
     }
@@ -110,15 +112,30 @@
     private void save2Db(String taskId, List<UpgradeRtu> newList, List<UpgradeRtu> oldList){
         List<UpgradeRtu> newOverList = newList.stream().filter(vo -> vo.isOver).collect(Collectors.toList()) ;
         List<UpgradeRtu> oldNoOverList = newList.stream().filter(vo -> !vo.isOver).collect(Collectors.toList()) ;
+        boolean oldExist = false ;
         for(UpgradeRtu nvo : newOverList){
-            if(nvo != null) {
-                if(oldNoOverList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr))){
-                    //涓婃娌℃湁鍗囩骇缁撴潫锛岃�屽綋鍓嶅崌绾х粨鏉熶簡
-                    this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo);
-                }
+            oldExist = false ;
+            if(oldNoOverList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr))){
+                oldExist = true ;
+            }
+            if(!oldExist){
+                //涓婃娌℃湁鍗囩骇缁撴潫锛岃�屽綋鍓嶅崌绾х粨鏉熶簡
+                this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo);
             }
         }
     }
+
+    /**
+     * 淇濆瓨鍗囩骇浠诲姟宸茬粡鎵ц瀹屾垚
+     * @param taskId
+     */
+    private void saveTaskOver(String taskId){
+        this.sv.updateTaskOver(taskId) ;
+    }
+
+
+
+
     /////////////////////////////////////////////////////
     //
     // 浠ヤ笅妯℃嫙鏁版嵁
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
index 11787ec..018f0dc 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
@@ -90,6 +90,14 @@
     }
 
 
+    /**
+     * 璁剧疆鍗囩骇浠诲姟宸茬粡瀹屾垚
+     * @param taskId
+     */
+    public void updateTaskOver(String taskId){
+        tdao.overById(Long.valueOf(taskId)) ;
+    }
+
     /////////////////////////////////////////////////////
     //
     // 浠ヤ笅婕旂ず鍗囩骇鍔熻兘鐢ㄥ埌
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
index 7b50431..31e7ab8 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/cardOperate/CardOperateSv.java
@@ -412,6 +412,36 @@
         if (list.size() == 0) {
             return new HashMap();
         }
+//鍏冭皨涓�鏈熼檰甯镐附闇�姹傛妸璧犻�侀噾棰濅笌鍏呭�奸噾棰濆垎寮�鏄剧ず
+        for (int i = list.size()-1; i >= 0 ; i--) {
+            Optional.ofNullable(list.get(i).getGift()).orElse(0d);
+            if (!list.get(i).getGift().equals(0d)){
+                Double gift1 = list.get(i).getGift();
+                String districtTitle = list.get(i).getDistrictTitle();
+                String clientNum = list.get(i).getClientNum();
+                String clientName = list.get(i).getClientName();
+                String phone = list.get(i).getPhone();
+                Date tradeTime = list.get(i).getTradeTime();
+
+                list.get(i).setGift(0d);
+
+                VoTradeDetails voTradeDetail = new VoTradeDetails();
+                voTradeDetail.setDistrictTitle(districtTitle);
+                voTradeDetail.setClientNum(clientNum);
+                voTradeDetail.setClientName(clientName);
+                voTradeDetail.setPhone(phone);
+                voTradeDetail.setOperateType("璧犻��");
+                voTradeDetail.setTradeTime(tradeTime);
+                voTradeDetail.setWaterCost(0d);
+                voTradeDetail.setCardCost(0d);
+                voTradeDetail.setGift(gift1);
+
+                list.add(voTradeDetail);
+                itemTotal = itemTotal + 1;
+            }
+        }
+        rsVo.obj = list;
+        rsVo.calculateAndSet(itemTotal, params);
 
         // 閬嶅巻浜ゆ槗鏄庣粏璁板綍锛屾眹鎬昏喘姘撮噾棰濄�佽喘鍗¢噾棰�
         Double totalWaterCost = 0.0;

--
Gitblit v1.8.0