From 7f5d914898c9d05942705ce7d80c0d14a8174df8 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 19 十二月 2023 15:57:14 +0800
Subject: [PATCH] 1、common模块优化代码; 2、通信中间件优化代码,队列遍历由递归调用改为while循环,原因是队列数据量大时递归调易产生栈溢出,HashTable多线程应用时仍有线程安全问题,改为HashMap+同步锁; 3、RTU模拟器和模拟器控制服务增加report命令

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java |   60 ++++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
index 266d88f..3009cc9 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
@@ -17,24 +17,63 @@
      * 鍦ㄥ崟绾跨▼鐜涓繍琛�
      */
     @Override
-    public Integer excute() {
+    public Integer execute() {
         try{
-            return dealRtuUpData() ;
+            dealRtuUpData() ;
         }catch(Exception e){
             log.error(e);
         }
-        return null ;
+        return RtuDataCache.size()>0?0:1 ;
     }
-
     /**
      * 澶勭悊涓婅鏁版嵁
      */
-    public Integer dealRtuUpData() {
+    public void dealRtuUpData() {
+        Node first = RtuDataCache.getFirstQueueNode() ;
+        if(first != null){
+            Node last = RtuDataCache.getLastQueueNode() ;
+            while (last != null){
+                last = this.doDealRtuUpData(first, last);
+            }
+        }
+    }
+
+    /**
+     * 澶勭悊缂撳瓨鐨勪笂琛屾暟鎹妭鐐�
+     * @param first 绗竴涓妭鐐�
+     * @param last 鏈�鍚庝竴涓妭鐐�
+     */
+    private Node doDealRtuUpData(Node first, Node last){
+        if(last != null){
+            if(first != last){
+                //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
+                Node pre = last.pre ;
+                dealNode(last) ;
+                return pre ;
+            }else{
+                //鍋滄
+                return null ;
+            }
+        }else{
+            return null ;
+        }
+    }
+
+
+    ////////////////////////////////////////////////
+    //
+    //浠ヤ笅瀹炵幇锛岄噰鐢ㄤ簡閫掑綊璋冪敤锛屽綋闃熷垪缂撳瓨缁撶偣寰堝鏃讹紝浼氫骇鐢熸爤婧㈠嚭寮傚父
+    //
+    ////////////////////////////////////////////////
+    /**
+     * 澶勭悊涓婅鏁版嵁
+     */
+    public Integer dealRtuUpData_() {
         Node first = RtuDataCache.getFirstQueueNode() ;
         if(first != null){
             Integer count = RtuDataCache.size() ;
             Node last = RtuDataCache.getLastQueueNode() ;
-            this.doDealRtuUpData(first, last);
+            this.doDealRtuUpData_(first, last);
             return count ;
         }
         return null ;
@@ -45,18 +84,15 @@
      * @param first 绗竴涓妭鐐�
      * @param last 鏈�鍚庝竴涓妭鐐�
      */
-    private void doDealRtuUpData(Node first, Node last){
+    private void doDealRtuUpData_(Node first, Node last){
         if(last != null){
             //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
             Node pre = last.pre ;
             dealNode(last) ;
-            if(first != null && first != last){
+            if(first != last){
                 doDealRtuUpData(first, pre) ;
-            }else if(first != null && first == last){
+            }else{
                 //鍋滄
-            }else if(first == null){
-                //杩欑鎯呭喌涓嶄細瀛樺湪
-                doDealRtuUpData(null, pre) ;
             }
         }
     }

--
Gitblit v1.8.0