From ee711d38f66222915bc81332c98af677fa5cd96c Mon Sep 17 00:00:00 2001
From: Administrator <zhubaomin>
Date: 星期二, 16 七月 2024 22:17:02 +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                                               |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java                    |   20 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java                 |   37 ++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java                        |  124 ++++++++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java                |   79 +++++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/说明.txt                                                                               |    1 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java               |  109 +++++++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/说明.txt                                                                               |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java           |    2 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java                |    1 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java                    |   51 +++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml                                                        |    9 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java                       |   15 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java           |   22 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java              |   13 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java                           |   12 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java               |   52 +++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java                |   47 +++
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java                     |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java                                |    3 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java                                                      |   31 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java |   18 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java                                              |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java         |   17 +
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java                                     |  116 +++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java                |   13 
 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java               |   49 +++
 27 files changed, 793 insertions(+), 56 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
index d0f7034..6819327 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java
@@ -511,9 +511,9 @@
 			for (int i = 0; i < 4; i++) {
 				bs[from + i] = Integer.valueOf(value & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄤ綆瀛楄妭
 				value = value >> 8; // 鍚戝彸绉�8浣�
-			if(value == 0){
-				break ;
-			}
+				if(value == 0){
+					break ;
+				}
 			}
 		} else {
 			throw new Exception("int2Bytes鏃舵暟缁勮秺鐣�");
@@ -1210,6 +1210,31 @@
 	}
 
 	/**
+	 * 灏忕妯″紡銆婃暟鎹綆浣嶅湪鏁扮粍浣庡瓧鑺傘��
+	 * 鏁村舰杞垚BCD缂栫爜锛屽瓧鑺傞『搴忔槸鍊掔殑
+	 * @param i
+	 * @param bs
+	 * @param from
+	 * @return 杩斿洖
+	 */
+	public static void int2BCD_LE(int i, byte[] bs, int from)throws Exception {
+		String str = "" + i;
+		byte[] b = null;
+		if (str.length() % 2 == 0) {
+			b = new byte[str.length() / 2];
+		} else {
+			b = new byte[(str.length() / 2) + 1];
+		}
+		encodeBCD_LE(str, b, 0, b.length);
+
+		int len = bs.length ;
+		int bLen = b.length ;
+		for(int j = 0; (j < len && j < bLen); j++){
+			bs[from + j] = b[j] ;
+		}
+	}
+
+	/**
 	 * 澶х妯″紡銆婃暟鎹綆浣嶅湪鏁扮粍楂樺瓧鑺傘��
 	 * 闀挎暣褰㈣浆鎴怋CD缂栫爜
 	 * @param l
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
index f66c2ad..1a127c0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java
@@ -60,7 +60,7 @@
 		}
 		boolean b = isOutOfArrLength(bs.length, (from - 1) + len);
 		if (!b) {
-			for (int i = 0; i > len ; i++) {
+			for (int i = 0; i <= len ; i++) {
 				bs[from + i] = Integer.valueOf(temp & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄤ綆瀛楄妭
 				temp = temp >> 8; // 鍚戝彸绉�8浣�
 			}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java
index bbb3e89..0e8aeeb 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java
@@ -34,8 +34,9 @@
                                 log.error("鏈緱鍒癛TU涓诲姩涓婃姤鏁版嵁澶勭悊浠诲姟锛�");
                             }
                         }catch(Exception e){
+                            log.error("涓婅鏁版嵁浠诲姟姹犲鐞嗘暟鎹椂鍙戠敓寮傚父", e);
+                        }finally {
                             if(task != null){
-                                //褰撴湁寮傚父鏃讹紝try catch涓殑浠g爜鍙病鏈夋墽琛宖reeAndCleanTask
                                 TaskPool.freeAndCleanTask(task);
                             }
                         }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java
index 1260bd9..1752409 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java
@@ -108,12 +108,10 @@
                         poHistory = this.updateRmClientAmountBySameDateNewData(clientVo, poHistory, poLast, dV1_0_1, cdData);
                         sv.updateRmClientAmountDay(poHistory);
                     }
-                    sv.saveRmClientAmountLast(poLast);
                 }else if(upYmd.after(poLast.dt)){
                     //鏂扮殑鏃ユ湡
                     poLast = this.updateRmClientAmountLastByNewDateNewData(clientVo, dV1_0_1, cdData, poLast);
                     this.newAndSaveHistoryDataDeal(sv, clientVo, dV1_0_1, cdData, poLast);
-                    sv.saveRmClientAmountLast(poLast);
                 }else{
                     //杩欑鎯呭喌涓嶅瓨鍦�
                 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java
index c67631e..b3ae43a 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java
@@ -1,8 +1,10 @@
 package com.dy.rtuMw.server.rtuData.p206V1_0_0;
 
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd02Vo;
 import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
-import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -26,10 +28,21 @@
      */
     @Override
     public void execute(Object data) {
+        Data d = (Data)data ;
         Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ;
         PrControllerTramp tramp = (PrControllerTramp)objs[2] ;
         if(tramp == null){
-            this.toNextTasks(data);
+			boolean toNext = true ;
+			if(d.getSubData() != null) {
+				DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.getSubData() ;
+				if(dataV1_0_1 != null && dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){
+					//杩囨护鎺夊績璺虫暟鎹�
+					toNext = false ;
+				}
+			}
+			if(toNext){
+				this.toNextTasks(data);
+			}
         }
     }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java
index 0f1af39..290a31e 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java
@@ -107,7 +107,6 @@
                         poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1_0_1, dataVo);
                         this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
                     }
-                    sv.saveRmIntakeAmountLast(poLast);
                 }else{
                     //鏈洿鎹㈡帶鍒跺櫒
                     if(DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt).equals(poLast.dt)){
@@ -123,12 +122,10 @@
                             poHistory = this.updateRmIntakeAmountBySameDateNewData(poHistory, poLast, controller, rtuAddr, dV1_0_1, dataVo);
                             sv.updateRmIntakeAmountDay(poHistory);
                         }
-                        sv.saveRmIntakeAmountLast(poLast);
                     }else if(DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt).after(poLast.dt)){
                         //鏂扮殑鏃ユ湡
                         poLast = this.updateRmIntakeAmountLastByNewDateNewData(poLast, controller, rtuAddr, dV1_0_1, dataVo);
                         this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
-                        sv.saveRmIntakeAmountLast(poLast);
                     }else{
                         //杩欑鎯呭喌涓嶅瓨鍦�
                     }
@@ -245,9 +242,13 @@
         //lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt);//鏃ユ湡娌″彉
         lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt);
         lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
-        Double difference = cdData.totalAmount - lastPo.totalAmountLast ;
-        if(difference > 0){
-            lastPo.amount = difference;
+        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+        if(added > 0){
+            if(lastPo.amount == null){
+                lastPo.amount = added ;
+            }else{
+                lastPo.amount += added ;
+            }
         }else{
             //po.amount = po.amount ; //鏃ョ疮璁″彇姘撮噺涓嶅彉
         }
@@ -271,9 +272,10 @@
         lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt);//鏃ユ湡鍙樹簡
         lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt);
         lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
-        Double difference = cdData.totalAmount - lastPo.totalAmountLast ;
-        if(difference > 0){
-            lastPo.amount = difference;
+        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+        if(added > 0){
+            //鏂扮殑涓�澶╃殑澶勭悊鏂瑰紡涓庡悓涓�澶╃殑澶勭悊鏂瑰紡涓嶄竴鏍�
+            lastPo.amount = added;
         }else{
             lastPo.amount = 0.0D; //鏃ョ疮璁℃按閲忓綊0
         }
@@ -321,7 +323,7 @@
         po.dtLast = lastPo.dtLast;
         po.rtuDtLast = lastPo.rtuDtLast;
 
-        po.amount = lastPo.amount ;
+        po.amount = lastPo.amount ;//姝ゆ椂lastPo.amount宸茬粡澧炲姞涓婁簡澧為噺
         po.totalAmountLast = lastPo.totalAmountLast ;
 
         return po ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
index c4ced6b..4a4e9a4 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java
@@ -21,18 +21,7 @@
 		Data d = (Data)data ;
 		if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V1_0_0.protocolName)){
 			//璇嗗埆鍑烘槸P206V1.0.0鍗忚鏁版嵁
-			//鏃犲懡浠D
-			boolean toNext = true ;
-			if(d.getSubData() != null) {
-				DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.getSubData() ;
-				if(dataV1_0_1 != null && dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){
-					//杩囨护鎺夊績璺虫暟鎹�
-					toNext = false ;
-				}
-			}
-			if(toNext){
-				this.toNextTasks(data);
-			}
+			this.toNextTasks(data);
 		}else{
 			//涓嶆槸鏈崗璁殑鏁版嵁
 		}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
index 536a3db..8c39b08 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java
@@ -20,8 +20,12 @@
 
 import java.text.ParseException;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 public class TkPreGenObjs extends TaskSurpport {
+
+	private static final Map<String, Boolean> onceUpDataRtus = new HashMap<>();
 	
 	private static final Logger log = LogManager.getLogger(TkPreGenObjs.class.getName()) ;
 
@@ -36,6 +40,19 @@
 	public void execute(Object data) throws ParseException {
 		Data d = (Data)data ;
 		String rtuAddr = d.getRtuAddr() ;//TkRtuData閲屽垽鏂簡rtuAddr涓虹┖
+		if(d.subData != null && d.subData instanceof DataV1_0_1){
+			DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.subData ;
+			if(dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){
+				//杩囨护鎺夊績璺虫暟鎹�
+				if(onceUpDataRtus.containsKey(rtuAddr)){
+					return ;
+				}
+			}
+		}
+		if(!onceUpDataRtus.containsKey(rtuAddr)){
+			onceUpDataRtus.put(rtuAddr, true) ;
+		}
+
 		DbSv sv = (DbSv)SpringContextUtil.getBean(DbSv.class) ;
 		if(sv != null){
 			PrController controller = sv.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ;
@@ -53,8 +70,7 @@
 				}
 			}else{
 				if(d.subData != null && d.subData instanceof DataV1_0_1){
-					DataV1_0_1 d1 = (DataV1_0_1)d.subData ;
-					clientVo = this.getClient(sv, d1);
+					clientVo = this.getClient(sv, (DataV1_0_1)d.subData);
 				}
 			}
 			//涓嶈鏄惁涓烘祦娴帶鍒跺櫒锛圧TU瀹炰綋锛夛紝閮借杩涜涓嬫宸ヤ綔锛岃褰曞叾涓婃姤鐨勪竴浜涙暟鎹紝褰撶粦瀹氭帶鍒跺櫒鍚庯紝鏁版嵁鑷姩鏈変簡褰掑睘
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java
index 33c8cb4..2ea92e3 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java
@@ -1,8 +1,10 @@
 package com.dy.rtuMw.server.rtuData.p206V202404;
 
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd02Vo;
 import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp;
 import com.dy.rtuMw.server.rtuData.TaskSurpport;
-import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -26,10 +28,22 @@
      */
     @Override
     public void execute(Object data) {
+        Data d = (Data)data ;
         Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ;
         PrControllerTramp tramp = (PrControllerTramp)objs[2] ;
         if(tramp == null){
-            this.toNextTasks(data);
+            //鏃犲懡浠D
+            boolean toNext = true ;
+            if(d.getSubData() != null) {
+                DataV202404 dataV202404 = (DataV202404)d.getSubData() ;
+                if(dataV202404 != null && dataV202404.subData != null && dataV202404.subData instanceof DataCd02Vo){
+                    //杩囨护鎺夊績璺虫暟鎹�
+                    toNext = false ;
+                }
+            }
+            if(toNext){
+                this.toNextTasks(data);
+            }
         }
     }
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java
index f196071..917fedf 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java
@@ -23,18 +23,7 @@
         Data d = (Data)data ;
         if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V202404.protocolName)){
             //璇嗗埆鍑烘槸P206V202404鍗忚鏁版嵁
-            //鏃犲懡浠D
-            boolean toNext = true ;
-            if(d.getSubData() != null) {
-                DataV202404 dataV202404 = (DataV202404)d.getSubData() ;
-                if(dataV202404 != null && dataV202404.subData != null && dataV202404.subData instanceof DataCd02Vo){
-                    //杩囨护鎺夊績璺虫暟鎹�
-                    toNext = false ;
-                }
-            }
-            if(toNext){
-                this.toNextTasks(data);
-            }
+            this.toNextTasks(data);
         }else{
             //涓嶆槸鏈崗璁殑鏁版嵁
         }
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 1f1db97..9fe739a 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
@@ -4,8 +4,7 @@
         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://8.140.179.55: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
         username: root
         password: dysql,;.abc!@#
         druid:
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java
index 98c4ab9..5391201 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java
@@ -1,5 +1,7 @@
 package com.dy.pipIrrMwTestRtu;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -24,10 +26,43 @@
                 })
         }
 )
-public class PipIrrMwTestRtuApplication{
+public class PipIrrMwTestRtuApplication implements CommandLineRunner {
 
     public static void main(String[] args) {
         SpringApplication.run(PipIrrMwTestRtuApplication.class, args);
     }
 
+
+    /**
+     * Spring瀹瑰櫒鍚姩瀹屾垚鍚庯紝鎵ц涓嬮潰鏂规硶
+     * @param args 鍙傛暟
+     * @throws Exception 寮傚父
+     */
+    @Override
+    public void run(String... args) throws Exception {
+        try{
+            //绛夊緟涓�涓�
+            Thread.sleep(500L);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        finally {
+            this.startMwSv() ;
+        }
+    }
+
+    private void startMwSv(){
+        if(sv != null){
+            sv.startServer();
+        }
+    }
+
+
+    private Server sv ;
+
+    @Autowired
+    public void setSv(Server sv){
+        this.sv = sv ;
+    }
 }
+
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java
new file mode 100644
index 0000000..a7da4eb
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java
@@ -0,0 +1,116 @@
+package com.dy.pipIrrMwTestRtu;
+
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.util.ConfigXml;
+import com.dy.pipIrrMwTestRtu.tcpClient.TcpClUnit;
+import com.dy.pipIrrMwTestRtu.tcpClient.TcpClUnitConfigVo;
+import org.jdom2.Document;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/12 8:50
+ * @Description
+ */
+
+@Component
+public class Server {
+
+    private ConfigXml conf = null ;
+    private Document doc = null ;
+    private boolean showStartInfo = false ;
+
+    private String mwServerUrl ;
+
+    private List<UnitInterface> units = new ArrayList<UnitInterface>() ;
+
+	/*
+	 * @param args 鍙傛暟
+	public static void main(String[] args) {
+		new Server().startServer();
+	}
+	*/
+    /**
+     * 鍚姩鏈嶅姟
+     */
+    public void startServer(){
+        long start = System.currentTimeMillis() ;
+        try {
+            //ConfigProperties.init(this.getClass().getResourceAsStream("/config/config.properties"), false);
+
+            this.conf = new ConfigXml() ;
+            this.doc = this.conf.createDom(this.getClass(), "config.xml") ;
+            ////////////////
+            //鏈嶅姟 閰嶇疆
+            this.showStartInfo = this.conf.getSetAttrBoolean(this.doc, "config.server", "showStartInfo", null, null) ;
+
+            this.startUnits() ;
+
+            String svName ;
+            try{
+                svName = this.conf.getSetAttrTxt(this.doc, "config.server", "name", null, false, null) ;
+            }catch(Exception e){
+                svName = "" ;
+            }
+
+            String company ;
+            try{
+                company = this.conf.getSetAttrTxt(this.doc, "config.server", "company", null, true, null) ;
+            }catch(Exception e){
+                company = "" ;
+            }
+            System.out.println("OOOOOOOOOO           OOOOOOOO       OOOOOOOO") ;
+            System.out.println("@@@@@@@@@@@@@@@@#O    $@@@@@@@@&    @@@@@@@@#") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@#    @@@@@@@@# $@@@@@@@@&") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@#   #@@@@@@@@@@@@@@@@O") ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@@@   &@@@@@@@@@@@@@@") ;
+            System.out.println("@@@@@@$      $@@@@@@@@@&   O@@@@@@@@@@@#") ;
+            System.out.println("@@@@@@$        @@@@@@@@@     @@@@@@@@@&      " + svName ) ;
+            System.out.println("@@@@@@$       O@@@@@@@@@     &@@@@@@@@") ;
+
+            if(this.mwServerUrl != null){
+                System.out.println("@@@@@@$       O@@@@@@@@@     &@@@@@@@@       涓棿浠舵湇鍔$ " + this.mwServerUrl ) ;
+            }else{
+                System.out.println("@@@@@@$       O@@@@@@@@@     &@@@@@@@@") ;
+            }
+            System.out.println("@@@@@@$      #@@@@@@@@@$     &@@@@@@@@" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@@#      &@@@@@@@@       Runing in standalone mode" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@@@&       &@@@@@@@@       Startup in " + (System.currentTimeMillis() - start) + " MS" ) ;
+            System.out.println("@@@@@@@@@@@@@@@@@@@#         &@@@@@@@@       " + company) ;
+            System.out.println("@@@@@@@@@@@@@@@@#O           &@@@@@@@@") ;
+
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+    private void startUnits() {
+        try {
+
+            // ///////////////
+            // 鍩虹閰嶇疆
+            ServerProperties.rtuAddr = conf.getSetAttrTxt(doc, "config.base", "rtuAddr", null, false, null);
+            ServerProperties.icCardAddr = conf.getSetAttrTxt(doc, "config.base", "icCardAddr", null, false, null);
+            ServerProperties.icCardNo = conf.getSetAttrTxt(doc, "config.base", "icCardNo", null, false, null);
+
+            // ///////////////
+            // TCP 妯″潡
+            TcpClUnitConfigVo tcpVo = new TcpClUnitConfigVo();
+            tcpVo.mwServerIp = conf.getSetAttrTxt(doc, "config.tcpCl", "mwServerIp", null, false, null);
+            tcpVo.mwServerPort = conf.getSetAttrPlusInt(doc, "config.tcpCl", "mwServerPort", null, 100, 65535, null);
+            tcpVo.connectTimeout = conf.getSetAttrPlusInt(doc, "config.tcpCl", "connectTimeout", null, 1000, 10000, null);
+            this.mwServerUrl = tcpVo.mwServerIp + ":" + tcpVo.mwServerPort ;
+            AdapterImp_TcpClUnit tcpAdap = new AdapterImp_TcpClUnit();
+            tcpAdap.setConfig(tcpVo);
+            TcpClUnit tcpUnit = TcpClUnit.getInstance();
+            tcpUnit.setAdapter(tcpAdap);
+            tcpUnit.start(obj -> {
+            });
+            units.add(tcpUnit) ;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java
new file mode 100644
index 0000000..229a7c7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java
@@ -0,0 +1,12 @@
+package com.dy.pipIrrMwTestRtu;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/12 8:19
+ * @Description
+ */
+public class ServerProperties {
+    public static String rtuAddr ;
+    public static String icCardAddr ;
+    public static String icCardNo ;
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java
new file mode 100644
index 0000000..4550f5a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java
@@ -0,0 +1,49 @@
+package com.dy.pipIrrMwTestRtu.p206V1_0_0;
+
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpCd83Close;
+import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpCd83Open;
+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;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/6/29 6:46
+ * @Description
+ */
+@Slf4j
+@RestController
+@RequestMapping(path="rtuP206V1_0_0")
+@SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class RtuP206V1_0_0Ctrl {
+
+    @GetMapping(path = "test")
+    public BaseResponse<String> test(String com) {
+        if(com.equals("83Open")){
+            this.cd83Open() ;
+        }else if(com.equals("83Close")){
+            this.cd83Close() ;
+        }
+        BaseResponse<String> rt = new BaseResponse<String>() ;
+        rt.setCode("001") ;
+        rt.setMsg("宸茬粡涓婃姤鏁版嵁") ;
+        rt.setSuccess(true) ;
+        return rt ;
+    }
+
+
+    private void cd83Open(){
+        UpCd83Open.upCd83Data();
+    }
+
+
+    private void cd83Close(){
+        UpCd83Close.upCd83Data();
+    }
+
+
+
+}
+
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java
index a030b2d..38c0359 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java
@@ -19,7 +19,7 @@
      */
     public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws IOException, Exception{
         byte[] data = (byte[])message;
-        log.info("涓嬭鏁版嵁锛�" + ByteUtil.bytes2Hex(data, true));
+        //log.info("涓婅鏁版嵁锛�" + ByteUtil.bytes2Hex(data, true));
 
         out.write(IoBuffer.allocate((data==null?0:data.length), false).put(data).flip());
     }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java
new file mode 100644
index 0000000..d698a66
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java
@@ -0,0 +1,124 @@
+package com.dy.pipIrrMwTestRtu.tcpClient;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitStartedCallbackInterface;
+import com.dy.common.util.Callback;
+import com.dy.pipIrrMwTestRtu.ServerProperties;
+import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpData;
+import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpHeartBeat;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.session.IoSession;
+
+
+public class TcpClUnit implements UnitInterface {
+
+    private static final Logger log = LogManager.getLogger(TcpClUnit.class) ;
+
+    private static TcpClUnit instance = new TcpClUnit() ;
+
+    public static TcpClUnitAdapter adapter ;
+    public static TcpClUnitConfigVo confVo ;
+
+    public static IoSession session ;
+
+    private TcpClUnit(){} ;
+
+    public static TcpClUnit getInstance(){
+        return instance ;
+    }
+
+    @Override
+    public void setAdapter(UnitAdapterInterface adapter) throws Exception {
+        if(adapter == null){
+            throw new Exception("Tcp Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ;
+        }
+        TcpClUnit.adapter = (TcpClUnitAdapter)adapter ;
+        TcpClUnit.confVo = TcpClUnit.adapter.getConfig() ;
+        if(TcpClUnit.confVo == null){
+            throw new Exception("Tcp Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ;
+        }
+    }
+
+    @Override
+    public void start(UnitStartedCallbackInterface callback) throws Exception {
+        System.out.println("Tcp Client妯″潡鎴愬姛鍚姩");
+        this.doStart();
+        callback.call(null) ;
+    }
+
+    @Override
+    public void stop(UnitStartedCallbackInterface callback) throws Exception {
+        callback.call(null);
+    }
+
+    private void doStart(){
+        new Thread(new Runnable(){
+            @Override
+            public void run() {
+                Exception ex = null ;
+                while(true){
+                    ex = null ;
+                    try {
+                        new TcpConnect().createSession(
+                                confVo.mwServerIp,
+                                confVo.mwServerPort,
+                                confVo.connectTimeout,
+                                new TcpHandler(),
+                                new Callback() {
+                                    @Override
+                                    public void call(Object obj) {
+                                        if (obj == null) {
+                                            log.error("鍒涘缓缃戠粶浼氳瘽杩斿洖涓簄ull");
+                                        } else {
+                                            TcpClUnit.session = (IoSession) obj;
+                                            log.info("鎴愬姛鍒涘缓涓庨�氫俊涓棿浠剁殑缃戠粶杩炴帴");
+                                            UpData.setSession(TcpClUnit.session);
+                                            heartBeat() ;
+                                        }
+                                    }
+
+                                    @Override
+                                    public void call(Object... objs) {
+                                    }
+
+                                    @Override
+                                    public void exception(Exception e) {
+                                    }
+                                });
+                    }catch (Exception e){
+                       ex = e ;
+                    }
+                    if(ex == null){
+                        break ;
+                    }else{
+                        try{
+                            Thread.sleep(100);
+                        }catch (Exception e){
+                        }
+                    }
+                }
+            }
+        }).start();
+    }
+
+
+    private void heartBeat(){
+        new Thread(new Runnable(){
+            @Override
+            public void run() {
+                while(true){
+                    try {
+                        UpHeartBeat.upCd02Data(ServerProperties.rtuAddr);
+                        Thread.sleep(30000L);
+                        //Thread.sleep(30000000L);
+                    }catch (Exception e){
+                        continue;
+                    }
+                }
+            }
+        }).start();
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java
index 96f34d8..3359576 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java
@@ -3,4 +3,5 @@
 public class TcpClUnitConfigVo {
     public String  mwServerIp ;
     public Integer  mwServerPort ;
+    public Integer  connectTimeout ;
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java
index 01c4a53..c8882d0 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java
@@ -1,5 +1,6 @@
 package com.dy.pipIrrMwTestRtu.tcpClient;
 
+import com.dy.common.util.ByteUtil;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.mina.core.service.IoHandlerAdapter;
@@ -16,6 +17,7 @@
      */
     @Override
     public void sessionCreated(IoSession session) throws Exception {
+        super.sessionCreated(session);
     }
 
     /**
@@ -23,6 +25,7 @@
      */
     @Override
     public void sessionOpened(IoSession session) throws Exception {
+        super.sessionOpened(session);
     }
 
     /**
@@ -30,6 +33,7 @@
      */
     @Override
     public void sessionClosed(IoSession session) throws Exception {
+        super.sessionClosed(session);
     }
 
     /**
@@ -37,6 +41,7 @@
      */
     @Override
     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+        super.sessionIdle(session, status);
     }
 
     /**
@@ -51,6 +56,10 @@
      */
     @Override
     public void messageReceived(IoSession session, Object message) throws Exception {
+        if(message != null){
+            byte[] bs = (byte[])message ;
+            log.info("鏀跺埌涓棿浠舵暟鎹細" + ByteUtil.bytes2Hex(bs, true));
+        }
     }
 
     /**
@@ -58,6 +67,12 @@
      */
     @Override
     public void messageSent(IoSession session, Object message) throws Exception {
+        log.info("缃戠粶鍙戦�佷簡鏁版嵁锛�"
+                + (session==null?"":(session.getRemoteAddress() != null?("涓棿浠剁綉鍧�鏄細" + session.getRemoteAddress().toString()):"")) );
+        if(message != null){
+            byte[] bs = (byte[])message ;
+            log.info("缃戠粶鍙戦�佷簡鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, true));
+        }
     }
 
     /**
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java
new file mode 100644
index 0000000..9a82f4c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java
@@ -0,0 +1,109 @@
+package com.dy.pipIrrMwTestRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.pipIrrMwTestRtu.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/15 14:58
+ * @Description
+ */
+public class UpCd83Close extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpCd83Close.class);
+
+    public static void upCd83Data() {
+        try {
+            if (UpData.session != null && UpData.session.isConnected()) {
+                byte[] bs = createData(ServerProperties.rtuAddr);
+                UpData.upSend(bs);
+            } else {
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        } catch (Exception e) {
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犲績璺虫暟鎹�
+     *
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        UpConstant.closeValve();
+        byte[] bytes = creatHead(rtuAddr, "83", (byte)0xB0);
+
+        byte[] bs = new byte[1] ;
+        bs[0] = (byte)0x02 ;//鍒峰崱鍏抽榾
+
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[5] ;//绱娴侀噺
+        ByteUtil.int2BCD_LE(UpConstant.totalAmount, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[8] ;//IC鍗$紪鍙�
+        GlCreate.createIcCardNo(ServerProperties.icCardNo, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//IC鍗″湴鍧�
+        ByteUtil.hex2Bytes_LE(ServerProperties.icCardAddr, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//鐢ㄦ按鎴蜂綑棰�
+        ByteUtil.int2BCD_LE(UpConstant.remainMoney, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[6] ;//寮�闃�鏃堕棿
+        GlCreate.createTp(UpConstant.openValveDt(), bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+        UpConstant.clearOpenValveDt();//娓呯┖寮�闃�鏃堕棿
+
+        bs = new byte[6] ;//鍏抽榾鏃堕棿
+        GlCreate.createTp(UpConstant.closeValveDt(), bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[5] ;//鐢ㄦ按鎴锋湰娆$敤姘撮噺
+        ByteUtil.int2BCD_LE(UpConstant.thisAmount, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//鐢ㄦ按鎴锋湰娆℃秷璐归噾棰�
+        ByteUtil.int2BCD_LE(UpConstant.thisMoney, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;//鐢ㄦ按鎴锋湰娆$敤姘存椂闀�
+        ByteUtil.int2BCD_LE(UpConstant.thisTime, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[1] ;//姘翠环绫诲瀷
+        bs[0] = ByteUtil.int2BCD_LE (1)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[2] ;//姘翠环
+        ByteUtil.int2BCD_LE(UpConstant.thisPrice, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[1] ;//鍗$被鍨�
+        bs[0] = ByteUtil.int2BCD_LE (1)[0] ;
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[6] ;//鎺у埗鍣ㄦ椂閽�
+        GlCreate.createTp(bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java
new file mode 100644
index 0000000..9273b94
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java
@@ -0,0 +1,79 @@
+package com.dy.pipIrrMwTestRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import com.dy.common.util.ByteUtilUnsigned;
+import com.dy.pipIrrMwTestRtu.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/15 14:58
+ * @Description
+ */
+public class UpCd83Open extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpCd83Open.class);
+
+    public static void upCd83Data() {
+        try {
+            if (UpData.session != null && UpData.session.isConnected()) {
+                byte[] bs = createData(ServerProperties.rtuAddr);
+                UpData.upSend(bs);
+            } else {
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        } catch (Exception e) {
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犲績璺虫暟鎹�
+     *
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        byte[] bytes = creatHead(rtuAddr, "83", (byte)0xB0);
+
+        byte[] bs = new byte[1] ;
+        bs[0] = (byte)0x01 ;//鍒峰崱寮�闃�
+
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[5] ;//绱娴侀噺
+        ByteUtil.int2BCD_LE(UpConstant.totalAmount, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[8] ;//IC鍗$紪鍙�
+        GlCreate.createIcCardNo(ServerProperties.icCardNo, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//IC鍗″湴鍧�
+        ByteUtil.hex2Bytes_LE(ServerProperties.icCardAddr, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[4] ;//鐢ㄦ按鎴蜂綑棰�
+        ByteUtil.int2BCD_LE(UpConstant.remainMoney, bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[6] ;//寮�闃�鏃堕棿
+        GlCreate.createTp(UpConstant.openValveDt(), bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        bs = new byte[6] ;//鎺у埗鍣ㄦ椂閽�
+        GlCreate.createTp(bs, 0);
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java
new file mode 100644
index 0000000..ce2ba66
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java
@@ -0,0 +1,47 @@
+package com.dy.pipIrrMwTestRtu.tcpClient.upData;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/15 15:02
+ * @Description
+ */
+public class UpConstant {
+
+    private static String openValveDt ;
+    private static String closeValveDt ;
+
+    public static Integer totalAmount = 1234567;//瀹炰负12345.67
+    public static Integer remainMoney = 56789;//瀹炰负567.89
+    public static Integer thisAmount = 1000;//瀹炰负10.00
+    public static Integer thisMoney = 1000;//瀹炰负10.00
+    public static Integer thisTime = 10;//瀹炰负10
+    public static Integer thisPrice = 100;//瀹炰负1.00
+
+    public static Integer perAmount = thisAmount;
+    public static Integer perMoney = thisMoney;
+
+
+    public static void clearOpenValveDt(){
+        openValveDt = null ;
+    }
+
+    public static String openValveDt(){
+        if(openValveDt == null){
+            openValveDt = new SimpleDateFormat("yyMMddHHmmss", Locale.CHINA).format(System.currentTimeMillis());
+        }
+        return openValveDt ;
+    }
+
+    public static String closeValveDt(){
+        closeValveDt = new SimpleDateFormat("yyMMddHHmmss", Locale.CHINA).format(System.currentTimeMillis());
+        return closeValveDt ;
+    }
+
+    public static void closeValve(){
+        totalAmount = totalAmount + perAmount ;
+        remainMoney = remainMoney - perMoney ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java
new file mode 100644
index 0000000..f18558b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java
@@ -0,0 +1,51 @@
+package com.dy.pipIrrMwTestRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import org.apache.mina.core.session.IoSession;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/15 14:20
+ * @Description
+ */
+public class UpData {
+
+    protected static IoSession session ;
+
+    private static Object synObj = new Object() ;
+
+    public static void setSession(IoSession session){
+        UpData.session = session ;
+    }
+
+    protected static void upSend(byte[] bs) throws Exception{
+        synchronized (synObj){
+            session.write(bs) ;
+        }
+    }
+
+    protected static byte[] creatHead(String rtuAddr, String code, byte ctrl)throws Exception {
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = ctrl; //鎺у埗鍩熷姛鑳界爜
+
+        index++ ;
+        GlCreate.createRtuAddr(rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes(code, bsHead, index) ;
+
+        return bsHead ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java
new file mode 100644
index 0000000..8f7b38f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java
@@ -0,0 +1,52 @@
+package com.dy.pipIrrMwTestRtu.tcpClient.upData;
+
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
+import com.dy.common.util.ByteUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2024/7/15 14:18
+ * @Description
+ */
+public class UpHeartBeat extends UpData {
+
+    private static final Logger log = LogManager.getLogger(UpHeartBeat.class) ;
+
+    public static void upCd02Data(String rtuAddr){
+        try{
+            if(UpData.session != null && UpData.session.isConnected()){
+                byte[] bs = createData(rtuAddr) ;
+                UpData.upSend(bs) ;
+            }else{
+                log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�");
+            }
+        }catch (Exception e){
+            log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e);
+        }
+    }
+
+
+    /**
+     * 鏋勯�犲績璺虫暟鎹�
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    private static byte[] createData(String rtuAddr) throws Exception {
+        byte[] bytes = creatHead(rtuAddr, "02", (byte)0xB0);
+
+        byte[] bs = new byte[1] ;
+        bs[0] = (byte)0xF2 ;//鏁版嵁鍩燂細 1 涓瓧鑺傦紝F0 鐧诲綍锛� F1 閫�鍑虹櫥褰曪紝F2 鍦ㄧ嚎淇濇寔銆�
+
+        bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+        return bytes ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
index b35e39d..d2541cf 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <config>
-	<server name="RTU妯℃嫙" showStartInfo="true" company="http://www.dyjs.com"/>
+	<server name="RTU妯℃嫙鍣�" showStartInfo="true" company="http://www.dyjs.com"/>
 
-	<!--
-	enable:鏄惁鍚姩
-	 -->
-	<tcpCl mwServerIp="127.0.0.1" mwServerPort="60000" />
+	<base rtuAddr="532328059995" icCardAddr="3B7D1E1A" icCardNo="61181622830147821"></base>
+	<!-- -->
+	<tcpCl mwServerIp="127.0.0.1" mwServerPort="60000" connectTimeout="3000" />
 </config>		
\ No newline at end of file
diff --git "a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt" "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..dae77e1
--- /dev/null
+++ "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt"
@@ -0,0 +1 @@
+RTU妯℃嫙鍣�
\ No newline at end of file
diff --git "a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt" "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..fef05cb
--- /dev/null
+++ "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt"
@@ -0,0 +1 @@
+妯℃嫙web绔悜閫氫俊涓棿浠朵笅鍙戝懡浠�
\ No newline at end of file

--
Gitblit v1.8.0