From 7d885c1d4c86f40927af50e6e7bfa13aac0c2180 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期四, 21 十二月 2023 21:47:15 +0800
Subject: [PATCH] 1、common模块优化代码,Command命令中增加RTU命令结果返回webRul; 2、通信中间件增加了接收http下发RTU命令和内部命令的Controler; 3、RTU模拟器和控制器增加了上报完数据是否关闭TCP连接的控制。

---
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ParseParamsForDownV1_0_1.java         |   13 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuDataConstantTask.java        |    4 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java                 |    3 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineVo.java      |   39 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java                 |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java                 |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java                                 |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java                                        |   16 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java                     |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java                  |   12 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java                   |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java                         |  108 +++++++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java                |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/WebResponseVo.java                 |   19 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/ServerProperties.java                   |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java                                     |   28 +
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineDeal.java    |   13 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultNode.java             |   54 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoPowerAspect.java                                      |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java             |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java              |   32 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/MwConfigVo.java                  |   11 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockVo.java          |   64 ++++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/Server.java                             |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockDeal.java        |   20 +
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java                   |    5 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultCache.java            |   65 ++++
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuComResultConstantTask.java   |   42 +-
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java        |   25 +
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoAspect.java                                           |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolsDeal.java |   14 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java             |   51 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java                              |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java                       |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java                                      |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java                     |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/ReturnCommand.java                  |   43 ++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java                               |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/CommandInnerDeaLer.java             |   57 +++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java                   |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolVo.java    |   38 ++
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java              |   10 
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/Config.xml                                           |    2 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultFromRtu.java                            |    9 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java                 |    1 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java                   |    1 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/CodeLocal.java        |   11 
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java                   |    1 
 48 files changed, 776 insertions(+), 71 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoAspect.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoAspect.java
index 2619ddc..660982d 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoAspect.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoAspect.java
@@ -104,7 +104,6 @@
                     .queryParam("token", token)
                     .build()
                     .toUriString();
-            // 鐢变簬鑾峰彇student鎺ュ彛鍜变滑璁剧疆浜哹asicauth锛屾墍浠ラ渶瑕佸湪璇锋眰鏃堕厤缃�
             HttpHeaders headers = new HttpHeaders();
             HttpEntity<?> httpEntity = new HttpEntity<>(headers);
             ResponseEntity<SsoVo> response = null;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoPowerAspect.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoPowerAspect.java
index a9423ed..6535d5e 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoPowerAspect.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/aop/SsoPowerAspect.java
@@ -121,7 +121,6 @@
                     .queryParam("anyPower", (Object) anyPower)
                     .build()
                     .toUriString();
-            // 鐢变簬鑾峰彇student鎺ュ彛鍜变滑璁剧疆浜哹asicauth锛屾墍浠ラ渶瑕佸湪璇锋眰鏃堕厤缃�
             HttpHeaders headers = new HttpHeaders();
             HttpEntity<?> httpEntity = new HttpEntity<>(headers);
             ResponseEntity<SsoVo> response = null;
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
index d2f7afc..933e980 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Command.java
@@ -3,6 +3,7 @@
 import java.io.Serializable;
 
 import com.alibaba.fastjson2.JSON ;
+import com.alibaba.fastjson2.JSONObject;
 
 public class Command implements Serializable{
 
@@ -50,6 +51,11 @@
 	public Boolean noRtMwDealRes ;
 
 	/**
+	 * rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+	 */
+	public String rtuResultSendWebUrl ;
+
+	/**
 	 * 鍏蜂綋鍙傛暟鏁版嵁
 	 */
 	public Object param ;
@@ -63,9 +69,9 @@
 		String s = "鍛戒护id=" + id + "\n" ;
 		s += (protocol == null ? "" : ("鍗忚=" + protocol + "\n"));
 		s += (rtuAddr == null ? "" : ("Rtu鍦板潃=" + rtuAddr + "\n"));
-		s += "鍛戒护绫诲瀷=" + (type.equals(CommandType.innerCommand)?"鍐呴儴鍛戒护":"缁堢鍛戒护") + "\n" ;
+		s += "鍛戒护绫诲瀷=" + (type.equals(CommandType.innerCommand)?"鍐呴儴鍛戒护":"RTU鍛戒护") + "\n" ;
 		s += (code == null ? "" : ("鍔熻兘鐮�=" + code + "\n")) ;
-		s += "杩斿洖涓棿浠跺鍛戒护澶勭悊缁撴灉=" + (noRtMwDealRes == null?"杩斿洖":(noRtMwDealRes?"涓嶈繑鍥�":"杩斿洖") + "\n") ;
+		s += "鏄惁杩斿洖涓棿浠跺鍛戒护澶勭悊缁撴灉=" + (noRtMwDealRes == null?"鏄�":(noRtMwDealRes?"鏄�":"鍚�") + "\n") ;
 		if(param != null){
 			s += "鍙傛暟:" + param  ;
 		}
@@ -82,7 +88,8 @@
 	@SuppressWarnings("unused")
 	public String toJson()throws Exception{
 		try{
-			return JSON.toJSONString(this) ;
+			String json = JSON.toJSONString(this) ;
+			return json ;
 		}catch(Exception e){
 			throw new Exception(e.getMessage() , e ) ;
 		}
@@ -96,7 +103,10 @@
 	@SuppressWarnings("unused")
 	public static Command jsonToObject(String json)throws Exception{
 		try{
-			return JSON.parseObject(json, Command.class) ;
+			JSONObject jsonObject = JSON.parseObject(json);
+			Command command = jsonObject.to(Command.class) ;
+			//command.param = jsonObject.getObject("param", class);
+			return command ;
 		}catch(Exception e){
 			throw new Exception(e.getMessage() , e ) ;
 		}
@@ -167,7 +177,15 @@
 		this.rtuAddr = rtuAddr;
 		return this ;
 	}
-	
+
+	public String getRtuResultSendWebUrl() {
+		return rtuResultSendWebUrl;
+	}
+
+	public void setRtuResultSendWebUrl(String rtuResultSendWebUrl) {
+		this.rtuResultSendWebUrl = rtuResultSendWebUrl;
+	}
+
 	public String getProtocol() {
 		return protocol;
 	}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java
index df5a37a..84869f0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/CommandType.java
@@ -12,7 +12,6 @@
 	 * 閽堝Rtu澶栭儴鍛戒护
 	 * 鍙兘鏄紓姝ワ紝鍛戒护缁撴灉閫氳繃鐩稿叧鐨勪俊鎭彂甯冮�氶亾鍙戝竷鍑哄幓
 	 */
-	@SuppressWarnings("unused")
 	public static final String outerCommand = "outerCommand" ;
 	
 	/**
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java
index 68bc9f8..1bc29b7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/Data.java
@@ -12,6 +12,7 @@
 	@Serial
 	private static final long serialVersionUID = 20160805192500101L;
 
+	public String rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 	private String commandId ;//鍛戒护ID锛屽彲鑳戒负null
 	private String rtuAddr ;//缁堢鍦板潃
 	private String protocol ;//鏁版嵁鎵�瀵瑰簲鐨勫崗璁悕绉�
@@ -23,6 +24,9 @@
 		StringBuilder sb = new StringBuilder() ;
 		sb.append("涓婅鎶ユ枃(鍗佸叚杩涘埗): ").append((hex == null?"":hex)).append("\n") ; //
 		sb.append("Rtu鍦板潃 : ").append((rtuAddr==null?"":rtuAddr)).append("\n") ;
+		if(rtuResultSendWebUrl != null){
+			sb.append("鍛戒护缁撴灉鍙戝線 : ").append(rtuResultSendWebUrl).append("\n") ; //rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+		}
 		if(commandId != null){
 			sb.append("鍛戒护ID : ").append(commandId).append("\n") ; //鍛戒护ID
 		}
@@ -116,6 +120,18 @@
 		this.hex = hex;
 	}
 
+	public String getRtuResultSendWebUrl() {
+		return rtuResultSendWebUrl;
+	}
+	/**
+	 * 寰楀埌rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
+	 * 濡傛灉鏄富鍔ㄤ笂鎶ユ暟鎹紝鍒欐web URL涓虹┖
+	 * @return  rtuResultSendWebUrl
+	 */
+	public void setRtuResultSendWebUrl(String rtuResultSendWebUrl) {
+		this.rtuResultSendWebUrl = rtuResultSendWebUrl;
+	}
+
 	public void setCommandId(String commandId) {
 		this.commandId = commandId;
 	}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultFromRtu.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultFromRtu.java
index 4813115..51289ac 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultFromRtu.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultFromRtu.java
@@ -11,7 +11,8 @@
 	}
 
 	public String commandId ;//鍙戦�佸懡浠ょ殑ID锛屽鏋滄槸鍛戒护缁撴灉锛屽苟涓斿尮閰嶄簡涓嬪彂鍛戒护锛屾鍊间笉涓虹┖
-	
+
+	public String rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 	public String protocolName ;//鍗忚鍚嶇О
 	public String rtuAddr ;//Rtu鍦板潃
 	public String upCode ;//涓婅鏁版嵁涓殑鍔熻兘鐮�
@@ -25,11 +26,15 @@
 		ProtocolUnit.getInstance().adapter.getSingleActionFromRtu(this.protocolName).doAction(this); 
 	}
 	
-	public void setCommandId(String commandId){
+	public void matchedCommand(String commandId, String rtuResultSendWebUrl){
 		this.commandId = commandId ;
 		if(this.data != null){
 			this.data.setCommandId(commandId);
 		}
+		this.rtuResultSendWebUrl = rtuResultSendWebUrl ;
+		if(this.data != null){
+			this.data.setRtuResultSendWebUrl(rtuResultSendWebUrl);
+		}
 	}
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
index 087aa53..c607c43 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/MidResultToRtu.java
@@ -10,6 +10,7 @@
 		serialVersionUID = 201606271057003L;
 	}
 
+	public String rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 	public String protocolName ;//鍗忚鍚嶇О
 	public String rtuAddr ;//Rtu鍦板潃
 	public String commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
index 5cc2092..32c3863 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/CodeV1_0_1.java
@@ -3,7 +3,7 @@
 public class CodeV1_0_1 {
 	//鍔熻兘鐮佷负瀛楃涓诧紝鍗佸叚杩涘埗鏁版嵁
 	public static final String cd_02 = "02" ;//閬ユ祴绔欓摼璺娴�
-	public static final String cd_71 = "71" ;//鏌ヨ闃�闂ㄧ姸鎬侊紙鏉庡ぉ璧愬埗瀹氱殑鍗忚锛屽綋鍓嶆湭瀹炵幇锛�
+	public static final String cd_71 = "71" ;//璁剧疆宸ヤ綔妯″紡锛堟潕澶╄祼鍒跺畾鐨勫崗璁紝褰撳墠鏈疄鐜帮級
 	public static final String cd_83 = "83" ;//閬ユ祴绔欏紑鍏抽榾鑷姤
 	public static final String cd_84 = "84" ;//寮�闃�宸ヤ綔鎶�
 	public static final String cd_C0 = "C0" ;//閬ユ祴绔欒嚜鎶ュ疄鏃舵暟鎹�
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
index ea3fefd..8d2ac78 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/DriverV1_0_1.java
@@ -115,8 +115,12 @@
 	 */
 	@Override
 	public MidResult[] createCommand(Boolean isLowPower, Command command, Object... params) {
+		String RtuResultSendWebUrl = command.getRtuResultSendWebUrl() ;
+		if(RtuResultSendWebUrl == null || RtuResultSendWebUrl.trim().equals("")){
+			return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, null, "涓ラ噸閿欒锛屽懡浠や腑rtu杩斿洖鍛戒护缁撴灉鍙戝悜鐩殑鍦皐eb URL涓虹┖锛屼笉鑳芥瀯寤轰换浣曞懡浠わ紒", null))} ;
+		}
 		String rtuAddr = command.getRtuAddr() ;
-		if(rtuAddr == null){
+		if(rtuAddr == null || rtuAddr.trim().equals("")){
 			return new MidResult[]{(new MidResultError(ProtocolConstantV206V1_0_0.protocolName, null, "涓ラ噸閿欒锛屽懡浠や腑Rtu鍦板潃涓虹┖锛屼笉鑳芥瀯寤轰换浣曞懡浠わ紒", null))} ;
 		}
 		try {
@@ -124,6 +128,7 @@
 			
 			this.downCpParams.clear();
 			this.downCpParams.setValue(
+					RtuResultSendWebUrl,
 					ProtocolConstantV206V1_0_0.protocolName, 
 					rtuAddr, 
 					command.getId(),
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ParseParamsForDownV1_0_1.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ParseParamsForDownV1_0_1.java
index a0f2caa..fbef8cb 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ParseParamsForDownV1_0_1.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/ParseParamsForDownV1_0_1.java
@@ -3,7 +3,8 @@
 import com.dy.common.mw.protocol.CodeParseParams;
 
 public class ParseParamsForDownV1_0_1 implements CodeParseParams{
-	
+
+	public String rtuResultSendWebUrl ;//rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
 	public String protocolName ;
 	public String rtuAddr ;//鎺у埗鍣ㄥ湴鍧�
 	public String commandId ;
@@ -23,14 +24,16 @@
 	}
 	
 	public void setValue(
-			String protocolName, 
-			String rtuAddr, 
+			String rtuResultSendWebUrl,
+			String protocolName,
+			String rtuAddr,
 			String commandId,
 			String commandCode, 
 			Object param, 
 			Object attachment ){
-		this.protocolName = protocolName ; 
-		this.rtuAddr = rtuAddr ; 
+		this.rtuResultSendWebUrl = rtuResultSendWebUrl ;
+		this.protocolName = protocolName ;
+		this.rtuAddr = rtuAddr ;
 		this.commandId = commandId ;
 		this.commandCode = commandCode ; 
 		this.param = param ; 
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java
index dd96f44..0586760 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_02_Up.java
@@ -44,6 +44,7 @@
         String confirmComCode = para.upCode ;
         ParseParamsForDownV1_0_1 downCpParams  = new ParseParamsForDownV1_0_1() ;
         downCpParams.setValue(
+                null,
                 ProtocolConstantV206V1_0_0.protocolName,
                 para.rtuAddr,
                 Command.defaultId,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
index 4b269b6..d7a57f8 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_71_Down.java
@@ -21,6 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
@@ -67,7 +68,7 @@
 
         ByteUtil.hex2Bytes(para.commandCode, bsHead, index) ;
 
-        byte[] bs = new byte[0] ;
+        byte[] bs = new byte[1] ;
         //纭甯х殑鏁版嵁鍩熺敤浜庨仴娴嬬粓绔伐浣滄ā寮忕殑纭鎴栬浆鎹€�傛暟鎹负 1 涓瓧鑺� HEX锛�00H 鏃堕仴娴嬬粓
         //绔湪鍏煎宸ヤ綔鐘舵�侊紱 01H 鏃堕仴娴嬬粓绔湪鑷姤宸ヤ綔鐘舵�侊紱 02H 鏃堕仴娴嬬粓绔湪鏌ヨ/搴旂瓟宸ヤ綔
         //鐘舵�侊紱 03H 鏃堕仴娴嬬粓绔湪璋冭瘯/缁翠慨鐘舵�併��
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
index 57be9e7..d99d3f9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Down.java
@@ -21,6 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
index 15ff9f1..8326fb0 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_83_Up.java
@@ -43,6 +43,7 @@
         String confirmComCode = para.upCode ;
         ParseParamsForDownV1_0_1 downCpParams  = new ParseParamsForDownV1_0_1() ;
         downCpParams.setValue(
+                null,
                 ProtocolConstantV206V1_0_0.protocolName,
                 para.rtuAddr,
                 Command.defaultId,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
index 394c7e7..a90316a 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Down.java
@@ -21,6 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java
index a14fc36..6d36ca9 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_84_Up.java
@@ -43,6 +43,7 @@
         String confirmComCode = para.upCode ;
         ParseParamsForDownV1_0_1 downCpParams  = new ParseParamsForDownV1_0_1() ;
         downCpParams.setValue(
+                null,
                 ProtocolConstantV206V1_0_0.protocolName,
                 para.rtuAddr,
                 Command.defaultId,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
index f324ea9..28ab71f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Down.java
@@ -21,6 +21,7 @@
         byte[] bs = this.doParse(para) ;
 
         MidResultToRtu midRs = new MidResultToRtu() ;
+        midRs.rtuResultSendWebUrl = para.rtuResultSendWebUrl ;////rtu杩斿洖鍛戒护缁撴灉 鍙戝悜鐩殑鍦皐eb URL
         midRs.protocolName = para.protocolName ;//鍗忚鍚嶇О
         midRs.rtuAddr = para.rtuAddr ;//Rtu鍦板潃锛堢數淇″钩鍙拌澶嘔MEI锛�
         midRs.commandId = para.commandId ;//鍛戒护ID锛屽彂璧峰懡浠ょ殑瀹㈡埛绔�(web绔�)鐢熸垚锛屼互鍖归厤鍛戒护缁撴灉
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java
index dd61198..c4ae4d4 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1_0_0/parse/Cd_C0_Up.java
@@ -43,6 +43,7 @@
         String confirmComCode = para.upCode ;
         ParseParamsForDownV1_0_1 downCpParams  = new ParseParamsForDownV1_0_1() ;
         downCpParams.setValue(
+                null,
                 ProtocolConstantV206V1_0_0.protocolName,
                 para.rtuAddr,
                 Command.defaultId,
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java
index c55567e..64d0dda 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/webUtil/BaseResponseUtils.java
@@ -40,6 +40,10 @@
         return buildResult(ResultCodeMsg.RsCode.ERROR_CODE,ResultCodeMsg.RsMsg.ERROR_MESSAGE, message);
     }
 
+    public static BaseResponse buildError(Object obj){
+        return buildResult(ResultCodeMsg.RsCode.ERROR_CODE,ResultCodeMsg.RsMsg.ERROR_MESSAGE, obj);
+    }
+
     public static BaseResponse buildResult(String code, String msg, Object data){
         return BaseResponse.builder()
                 .code((code == null || "".equals(code)) ? ResultCodeMsg.RsCode.SUCCESS_CODE : code)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
index a368845..7e5642a 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/Server.java
@@ -6,9 +6,9 @@
 import com.dy.aceMw.server.*;
 import com.dy.aceMw.server.rtuData.RtuDataUnit;
 import com.dy.aceMw.server.rtuData.RtuDataUnitConfigVo;
-import com.dy.aceMw.server.tasks.FromRtuConstantTask;
+import com.dy.aceMw.server.tasks.FromRtuComResultConstantTask;
+import com.dy.aceMw.server.tasks.FromRtuDataConstantTask;
 import com.dy.common.mw.UnitInterface;
-import com.dy.common.mw.UnitStartedCallbackInterface;
 import com.dy.common.mw.channel.rmi.RmiConfigVo;
 import com.dy.common.mw.channel.rmi.RmiUnit;
 import com.dy.common.mw.channel.tcp.TcpConfigVo;
@@ -297,7 +297,8 @@
 			CoreUnit coreUnit = CoreUnit.getInstance();
 			coreUnit.setAdapter(coreAdap);
 			CoreUnit.addConstantTask(new ToRtuConstantTask());
-			CoreUnit.addConstantTask(new FromRtuConstantTask());
+			CoreUnit.addConstantTask(new FromRtuDataConstantTask());
+			CoreUnit.addConstantTask(new FromRtuComResultConstantTask());
 			coreUnit.start(obj -> {
 			});
 			units.add(coreUnit) ;
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
index 40747c2..b3ac066 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/forTcp/MidResultActionFromRtu.java
@@ -1,5 +1,7 @@
 package com.dy.aceMw.server.forTcp;
 
+import com.dy.aceMw.server.rtuData.RtuComResultCache;
+import com.dy.aceMw.server.rtuData.RtuComResultNode;
 import com.dy.aceMw.server.rtuData.RtuDataNode;
 import com.dy.aceMw.server.rtuData.RtuDataCache;
 import org.apache.logging.log4j.LogManager;
@@ -28,16 +30,17 @@
 				MidResultToRtu resToRtu = TcpDownCommandCache.matchFromHead(resFromRtu) ;
 				if(resToRtu != null){
 					//鍖归厤鍒颁笅鍙戠殑鍛戒护
-					resFromRtu.setCommandId(resToRtu.commandId) ;
-					this.nextDeal(false, resFromRtu);
+					resFromRtu.matchedCommand(resToRtu.rtuResultSendWebUrl, resToRtu.commandId) ;
+					this.nextDealRtuData(false, resFromRtu);
+					this.nextDealRtuComResult(resFromRtu);
 				}else{
-					this.nextDeal(false, resFromRtu);
+					this.nextDealRtuData(false, resFromRtu);
 					//鏈尮閰嶅埌涓嬪彂鐨勫懡浠わ紝鍛戒护鍦ㄧ紦瀛樺洜瓒呮椂琚竻闄や簡
 					RtuStatusDealer.commandFail2Success(resFromRtu.rtuAddr) ;
 				}
 			}else{
 				//涓诲姩涓婃姤鏁版嵁
-				this.nextDeal(true, resFromRtu);
+				this.nextDealRtuData(true, resFromRtu);
 			}
 		}
 	}
@@ -47,11 +50,23 @@
 	 * @param reportOrResponse_trueOrFalse
 	 * @param resFromRtu
 	 */
-	private void nextDeal(boolean reportOrResponse_trueOrFalse, MidResultFromRtu resFromRtu){
+	private void nextDealRtuData(boolean reportOrResponse_trueOrFalse, MidResultFromRtu resFromRtu){
 		try{
 			RtuDataCache.cacheRtuUpData(reportOrResponse_trueOrFalse, new RtuDataNode(resFromRtu.data));
 		}catch(Exception e){
 			log.error(e.getMessage(), e);
 		}
 	}
+
+	/**
+	 * 杩涘叆鍗曠嚎绋嬬幆澧冧腑杩愯
+	 * @param resFromRtu
+	 */
+	private void nextDealRtuComResult(MidResultFromRtu resFromRtu){
+		try{
+			RtuComResultCache.cacheRtuComResult(new RtuComResultNode(resFromRtu.data));
+		}catch(Exception e){
+			log.error(e.getMessage(), e);
+		}
+	}
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/CommandInnerDeaLer.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/CommandInnerDeaLer.java
new file mode 100644
index 0000000..d39f45f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/CommandInnerDeaLer.java
@@ -0,0 +1,57 @@
+package com.dy.aceMw.server.local;
+
+import com.dy.aceMw.server.local.localProtocol.*;
+import com.dy.common.mw.protocol.Command;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/21 15:56
+ * @LastEditTime 2023/12/21 15:56
+ * @Description
+ */
+public class CommandInnerDeaLer {
+    /**
+     * 澶勭悊鍐呴儴鍛戒护
+     * @param com
+     * @return
+     */
+    public Command deal(Command com) throws Exception{
+        String code = com.getCode() ;
+        if(code.equals(CodeLocal.clock)){
+            return this.clock(com) ;
+        }else if(code.equals(CodeLocal.onLine)){
+            return this.onLine(com) ;
+        }else if(code.equals(CodeLocal.allProtocols)){
+            return this.allProtocols(com) ;
+        }
+        return ReturnCommand.errored("鍑洪敊锛屾敹鍒板唴閮ㄥ懡浠ょ殑鍔熻兘鐮佷笉鑳借瘑鍒紒", com.getId(), com.getCode()) ;
+    }
+
+    /**
+     * 鏌ヨ閫氫俊涓棿浠舵椂閽�
+     * @throws Exception
+     */
+    private Command clock(Command command) throws Exception{
+        ClockVo c = new ClockDeal().deal() ;
+        return ReturnCommand.successed("鏌ヨ閫氫俊涓棿浠舵椂閽�", command.getId(), command.getCode(), c) ;
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈塕TU鍦ㄧ嚎鎯呭喌
+     * @throws Exception
+     */
+    private Command onLine(Command command) throws Exception{
+        RtuOnLineVo ol = new RtuOnLineDeal().deal() ;
+        return ReturnCommand.successed("鏌ヨ鎵�鏈夋祴绔欏湪绾挎儏鍐电粨鏋�", command.getId(), command.getCode(), ol) ;
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈塕TU鍗忚閰嶇疆
+     * @throws Exception
+     */
+    private Command allProtocols(Command command) throws Exception{
+        RtuProtocolVo mc = new RtuProtocolsDeal().deal() ;
+        return ReturnCommand.successed("鏌ヨ鎵�鏈夐�氫俊鍗忚閰嶇疆", command.getId(), command.getCode(), mc) ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/ReturnCommand.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/ReturnCommand.java
new file mode 100644
index 0000000..59f8fe2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/ReturnCommand.java
@@ -0,0 +1,43 @@
+package com.dy.aceMw.server.local;
+
+
+import com.dy.common.mw.protocol.Command;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+/**
+ * @Author liurunyu
+ * @Date 2023/12/21 15:17
+ * @LastEditTime 2023/12/21 15:17
+ * @Description
+ */
+public class ReturnCommand {
+
+    private static Logger log = LogManager.getLogger(ReturnCommand.class) ;
+
+    /**
+     * 澶勭悊鍛戒护鎴愬姛
+     * @param message
+     */
+    public static Command successed(String message, String commandId, String code, Object attachment){
+        log.info(message) ;
+        Command command = new Command().createReturnSuccessCommand(message, commandId, code) ;
+        command.setAttachment(attachment) ;
+        return command ;
+    }
+    /**
+     * 澶勭悊鍛戒护鎴愬姛
+     * @param message
+     */
+    public static Command successed(String message, String commandId, String code){
+        log.info(message) ;
+        return new Command().createReturnSuccessCommand(message, commandId, code) ;
+    }
+    /**
+     * 澶勭悊鍛戒护鍙戠敓閿欒
+     * @param message
+     */
+    public static Command errored(String message, String commandId, String code){
+        log.error(message) ;
+        return new Command().createReturnErrorCommand(message, commandId, code) ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockDeal.java
new file mode 100644
index 0000000..1a58e04
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockDeal.java
@@ -0,0 +1,20 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+import com.dy.common.util.DateTime;
+
+public class ClockDeal {
+	/**
+	 * 鏌ヨ閫氫俊涓棿浠舵椂閽�
+	 */
+	public ClockVo deal(){
+		ClockVo c = new ClockVo() ;
+		c.setClock(DateTime.yyyy_MM_dd_HH_mm_ss()) ;
+		c.setYear(Integer.parseInt(DateTime.yyyy())) ;
+		c.setMonth(Integer.parseInt(DateTime.MM())) ;
+		c.setDate(Integer.parseInt(DateTime.dd())) ;
+		c.setHour(Integer.parseInt(DateTime.HH())) ;
+		c.setMinute(Integer.parseInt(DateTime.mm())) ;
+		c.setSecond(Integer.parseInt(DateTime.ss())) ;
+		return c ;
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockVo.java
new file mode 100644
index 0000000..872ca25
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/ClockVo.java
@@ -0,0 +1,64 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+import java.io.Serializable;
+
+public class ClockVo implements Serializable{
+	
+	private static final long serialVersionUID = 201606251603001L;
+
+	public String clock ;
+	public Integer year ;
+	public Integer month ;
+	public Integer date ;
+	public Integer hour ;
+	public Integer minute ;
+	public Integer second ;
+	
+	public String toString(){
+		return clock ;
+	}
+	
+	public String getClock() {
+		return clock;
+	}
+	public void setClock(String clock) {
+		this.clock = clock;
+	}
+	public Integer getYear() {
+		return year;
+	}
+	public void setYear(Integer year) {
+		this.year = year;
+	}
+	public Integer getMonth() {
+		return month;
+	}
+	public void setMonth(Integer month) {
+		this.month = month;
+	}
+	public Integer getDate() {
+		return date;
+	}
+	public void setDate(Integer date) {
+		this.date = date;
+	}
+	public Integer getHour() {
+		return hour;
+	}
+	public void setHour(Integer hour) {
+		this.hour = hour;
+	}
+	public Integer getMinute() {
+		return minute;
+	}
+	public void setMinute(Integer minute) {
+		this.minute = minute;
+	}
+	public Integer getSecond() {
+		return second;
+	}
+	public void setSecond(Integer second) {
+		this.second = second;
+	}
+	
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/CodeLocal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/CodeLocal.java
new file mode 100644
index 0000000..dd1d981
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/CodeLocal.java
@@ -0,0 +1,11 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+public class CodeLocal {
+
+	public static final String clock = "LCD0000" ;//鏌ヨ鐩戞帶涓棿浠舵椂閽�
+
+	public static final String onLine = "LCD0001" ;//鏌ヨ鎵�鏈塕TU鍦ㄧ嚎鎯呭喌
+	
+	public static final String allProtocols = "LCD0100" ;//鏌ヨ鎵�鏈夊崗璁厤缃�
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineDeal.java
new file mode 100644
index 0000000..3255741
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineDeal.java
@@ -0,0 +1,13 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+import com.dy.aceMw.server.forTcp.TcpSessionCache;
+
+public class RtuOnLineDeal {
+
+	/**
+	 * 鏌ヨ鍦ㄧ嚎涓庝笉鍦ㄧ嚎鎯呭喌
+	 */
+	public RtuOnLineVo deal(){
+		return (new RtuOnLineVo()).setOnLine(TcpSessionCache.allOnLine());
+	}
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineVo.java
new file mode 100644
index 0000000..90728f8
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuOnLineVo.java
@@ -0,0 +1,39 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+public class RtuOnLineVo implements Serializable{
+	
+	private static final long serialVersionUID = 202312211559001L;
+
+	private HashMap<String , Boolean> onLineMap ;
+	
+	public String toString(){
+		String s = "" ;
+		if(onLineMap != null){
+			Iterator<Entry<String, Boolean>> it = onLineMap.entrySet().iterator() ;
+			Entry<String, Boolean> entry = null ;
+			while(it.hasNext()){
+				entry = it.next() ;
+				s += entry.getKey() + ": " + (entry.getValue().booleanValue()?"鍦ㄧ嚎":"绂荤嚎") + "\n";
+			}
+		}
+		return s ;
+	}
+	/**
+	 * 瀛樺叆RTU鍦ㄧ嚎鎯呭喌
+	 * @param onLineMap 鍦ㄧ嚎闆嗗悎
+	 */
+	public RtuOnLineVo setOnLine(HashMap<String , Boolean> onLineMap){
+		this.onLineMap = onLineMap ;
+		return this ;
+	}
+	
+	public HashMap<String, Boolean> getOnLineMap() {
+		return onLineMap;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolVo.java
new file mode 100644
index 0000000..482c006
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolVo.java
@@ -0,0 +1,38 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class RtuProtocolVo implements Serializable{
+	
+	private static final long serialVersionUID = 202312211601001001L;
+
+	private List<String> protocolList ;
+	
+	public RtuProtocolVo(){
+		this.protocolList = new ArrayList<String>() ;
+	}
+	public String toString(){
+		String s = "" ;
+		if(protocolList != null){
+			for(String str : protocolList){
+				s += str + "\n";
+			}
+		}
+		return s ;
+	}	
+	/**
+	 * 瀛樺叆RTU鍦ㄧ嚎鎯呭喌
+	 * @param protocolList 鍗忚闆嗗悎
+	 */
+	public RtuProtocolVo setRtuProtocolList(List<String> protocolList){
+		this.protocolList = protocolList ;
+		return this ;
+	}
+	
+	public List<String> getRtuProtocolList() {
+		return protocolList;
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolsDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolsDeal.java
new file mode 100644
index 0000000..54d7c22
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/local/localProtocol/RtuProtocolsDeal.java
@@ -0,0 +1,14 @@
+package com.dy.aceMw.server.local.localProtocol;
+
+
+import com.dy.common.mw.protocol.ProtocolCache;
+
+public class RtuProtocolsDeal {
+	/**
+	 * 鏌ヨ鎵�鏈夊崗璁�
+	 */
+	public RtuProtocolVo deal(){
+		return (new RtuProtocolVo()).setRtuProtocolList(ProtocolCache.getProtocolList());
+	}
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultCache.java
new file mode 100644
index 0000000..213b689
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultCache.java
@@ -0,0 +1,65 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.aceMw.server.ServerProperties;
+import com.dy.common.queue.Node;
+import com.dy.common.queue.Queue;
+
+public class RtuComResultCache {
+
+    //TCP涓嬭鍛戒护缂撳瓨闃熷垪
+    private static Queue cacheQueue = new Queue("RtuComResultCache") ;
+
+    private static RtuComResultCache instance = new RtuComResultCache() ;
+
+    private RtuComResultCache(){
+        cacheQueue.setLimit(ServerProperties.cacheUpDownDataWarnCount, ServerProperties.cacheUpDownDataMaxCount);
+    }
+
+    public static RtuComResultCache getInstance(){
+        return instance ;
+    }
+
+    /**
+     * 缂撳瓨鑺傜偣
+     * @param node node
+     * @throws Exception 寮傚父
+     */
+    public static void cacheRtuComResult(RtuComResultNode node) throws Exception{
+        if(node != null && node.obj != null){
+            cacheQueue.pushHead(node);
+        }
+    }
+
+    /**
+     * 寰楀埌绗竴涓妭鐐�
+     * @return Node
+     */
+    public static Node getFirstQueueNode(){
+        return cacheQueue.getFirstNode() ;
+    }
+
+    /**
+     * 寰楀埌鏈�鍚庝竴涓妭鐐�
+     * @return Node
+     */
+    public static Node getLastQueueNode(){
+        return cacheQueue.getLastNode() ;
+    }
+
+    /**
+     * 绉婚櫎鑺傜偣
+     * @param node
+     */
+    public static void removeNode(Node node){
+        cacheQueue.remove(node);
+    }
+
+    /**
+     * 缂撳瓨鐨勮妭鐐规暟
+     * @Return 缂撳瓨鑺傜偣鏁�
+     */
+    public static Integer size(){
+        return cacheQueue.size() ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultNode.java
new file mode 100644
index 0000000..1d5db33
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuComResultNode.java
@@ -0,0 +1,54 @@
+package com.dy.aceMw.server.rtuData;
+
+import com.dy.aceMw.server.rtuData.dbSv.RtuSv;
+import com.dy.aceMw.web.comResult.CommandResultDeal;
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.queue.NodeObj;
+import com.dy.common.springUtil.SpringContextUtil;
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.common.threadPool.TreadPoolFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class RtuComResultNode implements NodeObj {
+
+    private static final Logger log = LogManager.getLogger(RtuComResultNode.class.getName());
+
+    public Object obj ;//鏁版嵁
+
+    public RtuComResultNode(Object obj){
+        this.obj = obj ;
+    }
+    /**
+     * 鑷繁澶勭悊鑷繁
+     * @return
+     */
+    public boolean dealSelf(){
+        try {
+            ThreadPool.Pool pool = TreadPoolFactory.getThreadPoolLong() ;
+            pool.putJob(new ThreadPool.Job() {
+                public void execute() {
+                    if(obj != null){
+                        if(obj instanceof Data){
+                            CommandResultDeal deal = (CommandResultDeal) SpringContextUtil.getBean(CommandResultDeal.class) ;
+                            deal.deal((Data)obj);
+                        }
+                    }
+                }
+                @Override
+                public void destroy(){
+                }
+                @Override
+                public boolean isDestroy(){
+                    return false ;
+                }
+
+            });
+        } catch (Exception e) {
+            log.error("鍦≧tuComResultNode鍐呭彂鐢熷紓甯�", e);
+        }
+        return true ;
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java
index d007230..09ee99e 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/rtuData/RtuDataNode.java
@@ -25,18 +25,18 @@
             pool.putJob(new ThreadPool.Job() {
                 public void execute() {
                     if(obj != null){
-                        TaskSurpport t = null ;
+                        TaskSurpport task = null ;
                         try{
-                            t = TaskPool.popTask() ;
-                            if(t != null){
-                                t.execute(obj);
+                            task = TaskPool.popTask() ;
+                            if(task != null){
+                                task.execute(obj);
                             }else{
                                 log.error("鏈緱鍒癛TU涓诲姩涓婃姤鏁版嵁澶勭悊浠诲姟锛�");
                             }
                         }catch(Exception e){
-                            if(t != null){
+                            if(task != null){
                                 //褰撴湁寮傚父鏃讹紝try catch涓殑浠g爜鍙病鏈夋墽琛宖reeAndCleanTask
-                                TaskPool.freeAndCleanTask(t);
+                                TaskPool.freeAndCleanTask(task);
                             }
                         }
                     }
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/FromRtuComResultConstantTask.java
similarity index 66%
copy from pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
copy to pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuComResultConstantTask.java
index fbf4b7c..9c056ca 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/FromRtuComResultConstantTask.java
@@ -1,7 +1,7 @@
 package com.dy.aceMw.server.tasks;
 
-import com.dy.aceMw.server.rtuData.RtuDataNode;
-import com.dy.aceMw.server.rtuData.RtuDataCache;
+import com.dy.aceMw.server.rtuData.RtuComResultNode;
+import com.dy.aceMw.server.rtuData.RtuComResultCache;
 import com.dy.common.mw.core.CoreTask;
 import com.dy.common.queue.Node;
 import org.apache.logging.log4j.LogManager;
@@ -10,8 +10,8 @@
 /**
  * 瀵筊TU涓婅鏁版嵁杩涜涓氬姟澶勭悊
  */
-public class FromRtuConstantTask extends CoreTask {
-    private static final Logger log = LogManager.getLogger(FromRtuConstantTask.class.getName());
+public class FromRtuComResultConstantTask extends CoreTask {
+    private static final Logger log = LogManager.getLogger(FromRtuComResultConstantTask.class.getName());
 
     /**
      * 鍦ㄥ崟绾跨▼鐜涓繍琛�
@@ -19,21 +19,21 @@
     @Override
     public Integer execute() {
         try{
-            dealRtuUpData() ;
+            dealRtuComResult() ;
         }catch(Exception e){
             log.error(e);
         }
-        return RtuDataCache.size()>0?0:1 ;
+        return RtuComResultCache.size()>0?0:1 ;
     }
     /**
-     * 澶勭悊涓婅鏁版嵁
+     * 澶勭悊涓婅鍛戒护缁撴灉
      */
-    public void dealRtuUpData() {
-        Node first = RtuDataCache.getFirstQueueNode() ;
+    public void dealRtuComResult() {
+        Node first = RtuComResultCache.getFirstQueueNode() ;
         if(first != null){
-            Node last = RtuDataCache.getLastQueueNode() ;
+            Node last = RtuComResultCache.getLastQueueNode() ;
             while (last != null){
-                last = this.doDealRtuUpData(first, last);
+                last = this.doDealRtuComResult(first, last);
             }
         }
     }
@@ -43,7 +43,7 @@
      * @param first 绗竴涓妭鐐�
      * @param last 鏈�鍚庝竴涓妭鐐�
      */
-    private Node doDealRtuUpData(Node first, Node last){
+    private Node doDealRtuComResult(Node first, Node last){
         if(last != null){
             //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
             Node pre = last.pre ;
@@ -68,12 +68,12 @@
     /**
      * 澶勭悊涓婅鏁版嵁
      */
-    public Integer dealRtuUpData_() {
-        Node first = RtuDataCache.getFirstQueueNode() ;
+    public Integer dealRtuComResult_() {
+        Node first = RtuComResultCache.getFirstQueueNode() ;
         if(first != null){
-            Integer count = RtuDataCache.size() ;
-            Node last = RtuDataCache.getLastQueueNode() ;
-            this.doDealRtuUpData_(first, last);
+            Integer count = RtuComResultCache.size() ;
+            Node last = RtuComResultCache.getLastQueueNode() ;
+            this.doDealRtuComResult_(first, last);
             return count ;
         }
         return null ;
@@ -84,13 +84,13 @@
      * @param first 绗竴涓妭鐐�
      * @param last 鏈�鍚庝竴涓妭鐐�
      */
-    private void doDealRtuUpData_(Node first, Node last){
+    private void doDealRtuComResult_(Node first, Node last){
         if(last != null){
             //鍦╠ealNode鏂规硶涓紝鍙兘瑕佹妸last浠庨槦鍒椾腑绉婚櫎锛岃繖鏃秎ast.pre涓虹┖锛屾墍浠ユ彁鍓嶆妸last.pre鍙栧嚭鏉�
             Node pre = last.pre ;
             dealNode(last) ;
             if(first != last){
-                doDealRtuUpData(first, pre) ;
+                doDealRtuComResult_(first, pre) ;
             }else{
                 //鍋滄
             }
@@ -103,9 +103,9 @@
      */
     private void dealNode(Node node){
         if(node != null && node.obj != null){
-            RtuDataNode obj = (RtuDataNode)node.obj ;
+            RtuComResultNode obj = (RtuComResultNode)node.obj ;
             obj.dealSelf() ;
-            RtuDataCache.removeNode(node);
+            RtuComResultCache.removeNode(node);
         }
     }
 
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/FromRtuDataConstantTask.java
similarity index 96%
rename from pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuConstantTask.java
rename to pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/server/tasks/FromRtuDataConstantTask.java
index fbf4b7c..9943b46 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/FromRtuDataConstantTask.java
@@ -10,8 +10,8 @@
 /**
  * 瀵筊TU涓婅鏁版嵁杩涜涓氬姟澶勭悊
  */
-public class FromRtuConstantTask extends CoreTask {
-    private static final Logger log = LogManager.getLogger(FromRtuConstantTask.class.getName());
+public class FromRtuDataConstantTask extends CoreTask {
+    private static final Logger log = LogManager.getLogger(FromRtuDataConstantTask.class.getName());
 
     /**
      * 鍦ㄥ崟绾跨▼鐜涓繍琛�
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
index 454c899..ddfb760 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/com/CommandCtrl.java
@@ -1,6 +1,12 @@
 package com.dy.aceMw.web.com;
 
+import com.dy.aceMw.server.forTcp.TcpSessionCache;
+import com.dy.aceMw.server.local.CommandInnerDeaLer;
+import com.dy.aceMw.server.local.ReturnCommand;
+import com.dy.aceMw.server.tasks.RtuDownTask;
+import com.dy.common.mw.core.CoreUnit;
 import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.CommandType;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -15,7 +21,7 @@
  * @Author liurunyu
  * @Date 2023/12/21 13:58
  * @LastEditTime 2023/12/21 13:58
- * @Description
+ * @Description 鍛戒护鎺ユ敹
  */
 @Slf4j
 @RestController
@@ -25,6 +31,104 @@
 
     @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
     public BaseResponse<Command> send(@RequestBody Command com) {
-        return BaseResponseUtils.buildSuccess(com);
+        log.info("鏀跺埌web绯荤粺鍙戞潵鐨勫懡浠わ細\n" + com.toString()) ;
+
+        String commandType = com.getType() ;
+        if(commandType == null){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护绫诲瀷涓虹┖锛�", com.getId(), com.getCode()));
+        }
+        String commandId = com.getId() ;
+        if(commandId == null){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护ID涓虹┖锛�",null, com.getCode()));
+        }
+
+        String code = com.getCode() ;
+        if(code == null){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护鍔熻兘鐮佷负绌猴紒", com.getId(), null));
+        }
+
+        if(commandType.equals(CommandType.innerCommand)){
+            //閫氫俊涓棿浠跺唴閮ㄥ懡浠わ紝渚嬪鏌ヨ鐩戞帶涓棿浠舵椂閽燂紝鏌ヨRTU鍦ㄧ嚎鎯呭喌绛�
+            try{
+                Command reCom = new CommandInnerDeaLer().deal(com) ;
+                /*
+                boolean error = false ;
+                if(reCom.param != null && reCom.param != null){
+                    CommandBackParam cbp = (CommandBackParam)reCom.param ;
+                    if(cbp.getSuccess() != null && !cbp.getSuccess().booleanValue()){
+                        error = true ;
+                        return BaseResponseUtils.buildError(ReturnCommand.errored(cbp.getMessage(), com.getId(), null));
+                    }
+                }
+                if(!error){
+                    return BaseResponseUtils.buildError(ReturnCommand.errored(cbp.getMessage(), com.getId(), null));
+                }
+                */
+                return BaseResponseUtils.buildSuccess(reCom);
+            }catch(Exception e){
+                return BaseResponseUtils.buildError(ReturnCommand.errored("澶勭悊鍐呴儴鍛戒护鍑洪敊" + (e.getMessage() == null?"":("锛�" + e.getMessage())), com.getId(), com.getCode()) );
+            }
+
+        }else if(commandType.equals(CommandType.outerCommand)){
+            //鍙戝悜RTU鐨勫閮ㄥ懡浠わ紝寮傛澶勭悊锛寃eb绔痡roups鎴愬憳鍚屾寰楀埌鍛戒护澶勭悊缁撴灉锛屼絾鏋勯�犲懡浠ゅ強涓嬪彂鍛戒护鍜屽懡浠ょ粨鏋滄帴鏀惰寮傛寰楀埌
+            try{
+                return this.dealOuterCommand(com) ;
+            }catch(Exception e){
+                return BaseResponseUtils.buildError(ReturnCommand.errored("澶勭悊鍙戝悜RTU鐨勫閮ㄥ懡浠ゅ嚭閿�" + (e.getMessage() == null?"":("锛�" + e.getMessage())), com.getId(), com.getCode()) );
+            }
+        }else if(commandType.equals(CommandType.resultCommand)){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛岄�氫俊涓棿浠朵笉鎺ョ粨鏋滅被鍨嬬殑鍛戒护锛�", com.getId(), com.getCode()));
+        }else{
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛屾敹鍒板懡浠ょ殑鍛戒护鍔熻兘鐮佷负绌猴紒", com.getId(), com.getCode()));
+        }
     }
+
+    /**
+     * 澶勭悊鍙戝悜RTU鐨勫閮ㄥ懡浠�
+     * @return 缁撴灉
+     */
+    private BaseResponse<Command> dealOuterCommand(Command command){
+        String rtuAddr = command.getRtuAddr() ;
+        if(rtuAddr == null || rtuAddr.trim().equals("")){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU鍦板潃涓虹┖锛�", command.getId(), command.getCode())) ;
+        }
+        rtuAddr = rtuAddr.trim() ;
+        Boolean onLine = TcpSessionCache.isConnect(rtuAddr);
+        if(onLine == null){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夋湭涓婄嚎锛�", command.getId(), command.getCode())) ;
+        }else if(!onLine.booleanValue()){
+            return BaseResponseUtils.buildError(ReturnCommand.errored("鍑洪敊锛孯TU锛堝湴鍧�=" + rtuAddr + "锛夌绾匡紒", command.getId(), command.getCode())) ;
+        }
+
+        //鐢熸垚寮傛浠诲姟
+        RtuDownTask task = new RtuDownTask() ;
+        task.data = command ;
+        try{
+            log.info("鏋勯�犱笅鍙戣繙绋嬪懡浠�" + command.getCode() + "鐨勬牳蹇冧换鍔★紝骞舵斁鍏ヤ换鍔¢槦鍒椾腑");
+            CoreUnit.getInstance().pushCoreTask(task);
+        }catch(Exception e){
+            log.error(e.getMessage(), e);
+            return BaseResponseUtils.buildError(ReturnCommand.successed("鍛戒护澶勭悊澶辫触" + e.getMessage(), command.getId(), command.getCode())) ;
+        }
+
+        return BaseResponseUtils.buildSuccess(ReturnCommand.successed("鍛戒护宸叉帴鍙楋紝鍗冲皢鏋勯�犲苟涓嬪彂鍛戒护銆�", command.getId(), command.getCode()));
+    }
+
+    /**
+     * 鏀跺埌鍛戒护缁撴灉
+     * @param command
+    private void dealCommandResult(String jgSenderName, Command command){
+        Object obj = command.getParam() ;
+        if(obj != null){
+            CommandBackParam p = (CommandBackParam)obj ;
+            if(p.getSuccess()){
+                log.info("鍛戒护" + (command.getId().equals(Command.defaultId)?"":("(id=" + command.getId() + ")")) + "鎵ц鎴愬姛"
+                        + (p.getMessage() == null?"":(p.getMessage().equals("")?"":("锛�" + p.getMessage()))));
+            }else{
+                log.error("鍛戒护" + (command.getId().equals(Command.defaultId)?"":("(id=" + command.getId() + ")")) + "鎵ц澶辫触"
+                        + (p.getMessage() == null?"":(p.getMessage().equals("")?"":("锛�" + p.getMessage()))));
+            }
+        }
+    }
+    */
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java
new file mode 100644
index 0000000..4a7bbb6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/CommandResultDeal.java
@@ -0,0 +1,51 @@
+package com.dy.aceMw.web.comResult;
+
+import com.dy.common.mw.protocol.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/21 20:28
+ * @LastEditTime 2023/12/21 20:28
+ * @Description
+ */
+@Slf4j
+@Component()
+public class CommandResultDeal {
+
+    private RestTemplate restTemplate;
+
+    @Autowired
+    public void setRestTemplate(RestTemplate restTemplate){
+        this.restTemplate = restTemplate ;
+    }
+
+
+    public void deal(Data data) {
+        if (data.rtuResultSendWebUrl != null && data.rtuResultSendWebUrl.trim().equals("")) {
+            String url = UriComponentsBuilder.fromUriString(data.rtuResultSendWebUrl)
+                    .build()
+                    .toUriString();
+            HttpHeaders headers = new HttpHeaders();
+            HttpEntity<?> httpEntity = new HttpEntity<>(data, headers);
+            ResponseEntity<WebResponseVo> response = null;
+            try {
+                // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
+                response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, WebResponseVo.class);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            assert response != null;
+        } else {
+            log.error("涓ラ噸閿欒锛屽湪com.dy.aceMw.web.comResult.CommandResultDeal閲岋紝澶勭悊鐨勬槸RTU鍛戒护缁撴灉Node锛屼絾鏁版嵁涓璻tuResultSendWebUrl涓虹┖");
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/WebResponseVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/WebResponseVo.java
new file mode 100644
index 0000000..d45f243
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-accept/src/main/java/com/dy/aceMw/web/comResult/WebResponseVo.java
@@ -0,0 +1,19 @@
+package com.dy.aceMw.web.comResult;
+
+/**
+ * @Author liurunyu
+ * @Date 2023/12/21 20:43
+ * @LastEditTime 2023/12/21 20:43
+ * @Description
+ */
+public class WebResponseVo {
+    public boolean result ;
+
+    public boolean isResult() {
+        return result;
+    }
+
+    public void setResult(boolean result) {
+        this.result = result;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java
index c1462a6..5aa4fdb 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/ServerProperties.java
@@ -16,7 +16,10 @@
 	public static Integer heartbeatTimes = 3 ;
 	//鍙戦�佹暟鎹鏁�
 	public static Integer sendTimes = 0 ;
-	
+	//鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴锛�1鏄紝0鍚�
+	public static Integer sendOverThenCloseConnect = 0 ;
+
+
 	public static boolean startTcpConnectWork = false ;
 
 	//mwTestServer
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java
index 59df2ce..065e784 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/ResConfigVo.java
@@ -17,6 +17,8 @@
 	public Integer heartbeatTimes = 3 ;
 	//鍙戦�佹暟鎹鏁�
 	public Integer sendTimes = 0 ;
+	//鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴锛�1鏄紝0鍚�
+	public Integer sendOverThenCloseConnect = 0 ;
 
 	/**
 	 * 瀵硅薄杞垚json
@@ -101,4 +103,12 @@
 	public void setSendTimes(Integer sendTimes) {
 		this.sendTimes = sendTimes;
 	}
+
+	public Integer getSendOverThenCloseConnect() {
+		return sendOverThenCloseConnect;
+	}
+
+	public void setSendOverThenCloseConnect(Integer sendOverThenCloseConnect) {
+		this.sendOverThenCloseConnect = sendOverThenCloseConnect;
+	}
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
index fa47cd9..4f9fdad 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/rmiClient/RmiClUnit.java
@@ -202,6 +202,7 @@
 									ServerProperties.sendInterval = rVo.sendInterval ;
 									ServerProperties.heartbeatTimes = rVo.heartbeatTimes ;
 									ServerProperties.sendTimes = rVo.sendTimes ;
+									ServerProperties.sendOverThenCloseConnect = rVo.sendOverThenCloseConnect ;
 									log.info("寰楀埌閰嶇疆鎴愬姛");
 									log.info("    寮�濮婻tuAddr=" + ServerProperties.rtuAddrStart);
 									log.info("    鎴RtuAddr=" + ServerProperties.rtuAddrEnd);
@@ -210,6 +211,7 @@
 									log.info("    鍙戦�佹暟鎹棿闅�=" + ServerProperties.sendTimes);
 									log.info("    姣忚疆娆″彂閫佸績璺虫鏁�=" + ServerProperties.heartbeatTimes);
 									log.info("    姣廟TU涓婃姤鏁版嵁杞=" + ServerProperties.sendTimes);
+									log.info("    鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴(1鏄紝0鍚�)=" + ServerProperties.sendOverThenCloseConnect);
 									break ;
 								}else{
 									log.error("rmi寰楀埌閰嶇疆澶辫触锛歫son杞琑esConfigVo涓簄ull");
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
index 610257f..976f340 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/LocalDecoder.java
@@ -28,7 +28,7 @@
             byte[] preByte = new byte[remain];
             in.get(preByte) ;
             in.position(0) ;
-            log.info("鏀跺埌涓績搴旂瓟鏁版嵁锛�" + ByteUtil.bytes2Hex(preByte, true));
+            log.info("鏀跺埌涓績涓嬭鏁版嵁锛�" + ByteUtil.bytes2Hex(preByte, true));
         }
         return true;
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
index 7575093..0f58f3e 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -39,18 +39,24 @@
 
     @Override
     public void execute() throws Exception {
-        if(session != null){
-            if(sendTimes <= ServerProperties.sendTimes){
-                log.info("RTU" + rtuAddr + "寮�濮嬩换鍔�");
-                log.info("RTU" + rtuAddr + "灏嗚鎵ц" + ServerProperties.sendTimes + "杞浠诲姟锛屽綋鍓嶈疆娆℃槸" + sendTimes);
-                sendDataOfP206V1_0_0() ;
-            }else{
-                log.info("RTU" + rtuAddr + "绛夊緟涓�浼氾紝浠ユ帴鏀堕�氫俊涓棿浠朵笅琛屾暟鎹�");
-                if(overStart == 0){
-                    overStart = System.currentTimeMillis() ;
+        if(!this.isOver){
+            if(session != null){
+                if(sendTimes <= ServerProperties.sendTimes){
+                    log.info("RTU" + rtuAddr + "寮�濮嬩换鍔�");
+                    log.info("RTU" + rtuAddr + "灏嗚鎵ц" + ServerProperties.sendTimes + "杞浠诲姟锛屽綋鍓嶈疆娆℃槸" + sendTimes);
+                    sendDataOfP206V1_0_0() ;
                 }else{
-                    long now = System.currentTimeMillis() ;
-                    if(now - overStart >= 30 * 1000){
+                    if(ServerProperties.sendOverThenCloseConnect == 1){
+                        log.info("RTU" + rtuAddr + "绛夊緟涓�浼氾紝浠ユ帴鏀堕�氫俊涓棿浠朵笅琛屾暟鎹�");
+                        if(overStart == 0){
+                            overStart = System.currentTimeMillis() ;
+                        }else{
+                            long now = System.currentTimeMillis() ;
+                            if(now - overStart >= 30 * 1000){
+                                this.jobOver() ;
+                            }
+                        }
+                    }else{
                         this.jobOver() ;
                     }
                 }
@@ -95,7 +101,9 @@
     }
 
     private void jobOver(){
-        session.closeOnFlush() ;
+        if(ServerProperties.sendOverThenCloseConnect == 1){
+            session.closeOnFlush() ;
+        }
         this.isOver = true ;
         TcpClUnit.clientOver() ;
     }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/Server.java
index 6e08a2e..04d80ad 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/Server.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/Server.java
@@ -138,6 +138,7 @@
 			ServerProperties.sendInterval = conf.getSetAttrPlusInt(doc, "config.base", "sendInterval", null, 1, null, null) ;
 			ServerProperties.heartbeatTimes = conf.getSetAttrPlusInt(doc, "config.base", "heartbeatTimes", null, 1, null, null) ;
 			ServerProperties.sendTimes = conf.getSetAttrPlusInt(doc, "config.base", "sendTimes", null, 1, null, null) ;
+			ServerProperties.sendOverThenCloseConnect = conf.getSetAttrPlusInt(doc, "config.base", "sendOverThenCloseConnect", null, 0, 1, null) ;
 
 				
 			/////////////////
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/ServerProperties.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/ServerProperties.java
index 7bada8e..cb75a64 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/ServerProperties.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/ServerProperties.java
@@ -18,5 +18,7 @@
 	public static Integer heartbeatTimes = 0 ;
 	//鍙戦�佹暟鎹鏁�
 	public static Integer sendTimes = 0 ;
+	//鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴锛�1鏄紝0鍚�
+	public static Integer sendOverThenCloseConnect = 0 ;
 
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
index 2bbe053..8d9b36c 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/Manager.java
@@ -123,6 +123,7 @@
 			conVo.sendInterval = ServerProperties.sendInterval ;
 			conVo.heartbeatTimes = ServerProperties.heartbeatTimes ;
 			conVo.sendTimes = ServerProperties.sendTimes ;
+			conVo.sendOverThenCloseConnect = ServerProperties.sendOverThenCloseConnect ;
 			sta = new MwTestClientStatus() ;
 			sta.confVo = conVo ;
 			token2ClientMap.put("" + token, sta);
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/MwConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/MwConfigVo.java
index 1ee9d72..20a90e6 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/MwConfigVo.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/java/com/dy/testServer/forRmi/MwConfigVo.java
@@ -17,6 +17,9 @@
 	public Integer heartbeatTimes = 3 ;
 	//鍙戦�佹暟鎹鏁�
 	public Integer sendTimes = 0 ;
+	//鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴锛�1鏄紝0鍚�
+	public Integer sendOverThenCloseConnect = 0 ;
+
 	/**
 	 * 瀵硅薄杞垚json
 	 * @return 杩斿洖 json
@@ -100,4 +103,12 @@
 	public void setSendTimes(Integer sendTimes) {
 		this.sendTimes = sendTimes;
 	}
+
+	public Integer getSendOverThenCloseConnect() {
+		return sendOverThenCloseConnect;
+	}
+
+	public void setSendOverThenCloseConnect(Integer sendOverThenCloseConnect) {
+		this.sendOverThenCloseConnect = sendOverThenCloseConnect;
+	}
 }
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/Config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/Config.xml
index 9145942..b81f162 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/Config.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-server/src/main/resources/Config.xml
@@ -11,6 +11,7 @@
 		sendInterval锛氬彂閫佹暟鎹棿闅� 绉�
 		heartbeatTimes锛氭瘡涓�杞鍙戦�佹暟鎹紝鍏朵腑鍖呮嫭蹇冭烦鍙戦�佹鏁�
 		sendTimes锛氬彂閫佹暟鎹鏁�
+		sendOverThenCloseConnect:鍙戦�佸畬鏁版嵁鍚庯紝鏄惁鍏抽棴TCP杩炴帴锛�1鏄紝0鍚�
 		 -->
 		<base
 			rtuAddrStart="5323280000"
@@ -21,6 +22,7 @@
 			sendInterval="2"
 			heartbeatTimes="3"
 			sendTimes="1"
+			sendOverThenCloseConnect="0"
 		/>
 			
 		<!-- 

--
Gitblit v1.8.0