From aec4636e4fb430055feb66751da0e6c05bb864df Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 30 四月 2025 16:25:30 +0800
Subject: [PATCH] fix(irrigatePlan): 修复终止灌溉计划时长设置错误- 将终止计划的默认时长从 9999 修改为 0 - 此修改确保在终止灌溉计划时,不会出现时长设置过长的问题
---
pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 251 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
new file mode 100644
index 0000000..4537b10
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java
@@ -0,0 +1,251 @@
+package com.dy.testClient.tcpClient;
+
+import com.dy.common.mw.UnitAdapterInterface;
+import com.dy.common.mw.UnitInterface;
+import com.dy.common.mw.UnitCallbackInterface;
+import com.dy.common.threadPool.ThreadPool;
+import com.dy.common.threadPool.TreadPoolFactory;
+import com.dy.common.util.Callback;
+import com.dy.testClient.ServerProperties;
+import com.dy.testClient.rmiClient.RmiClUnit;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.session.IoSession;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+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 ;
+
+ private static ThreadPool.Pool pool ;
+ private static Map<String, MyThreadJob> jobMap = new HashMap<>() ;
+
+ private static Integer totalRtuClientCount = 0;
+ private static Integer totalSendDataCount = 0;
+ private static Integer totalOverClientCount = 0;
+
+ private static Long startTime = 0L ;
+
+ 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(UnitCallbackInterface callback) throws Exception {
+ pool = TreadPoolFactory.getThreadPoolLong() ;
+ System.out.println("Tcp Client妯″潡鎴愬姛鍚姩");
+ this.doStart();
+ callback.call(null) ;
+ }
+
+ @Override
+ public void stop(UnitCallbackInterface callback) throws Exception {
+ callback.call(null);
+ }
+
+ private void doStart(){
+ new Thread(new Runnable(){
+ @Override
+ public void run() {
+ try {
+ while(true){
+ if(!ServerProperties.startTcpConnectWork){
+ Thread.sleep(100L);
+ }else{
+ try{
+ startTime = System.currentTimeMillis() ;
+ for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){
+ totalRtuClientCount++ ;
+ createImitate(addr) ;
+ }
+ log.info("鍏辨ā鎷熶簡" + totalRtuClientCount + "鍙癛TU");
+
+ Collection<MyThreadJob> collection = jobMap.values() ;
+ int connectedCount = 0 ;
+ for(MyThreadJob job : collection){
+ connectServer(job) ;
+ connectedCount++ ;
+ log.info("褰撳墠寤虹珛涓庨�氫俊涓棿浠惰繛鎺ョ殑RTU鏁伴噺涓猴細" + connectedCount);
+ }
+ log.info("鎵�鏈塕TU宸蹭笌閫氫俊涓棿浠跺缓绔嬭繛鎺�");
+
+ while (true){
+ int noConnectedCount = checkConnected() ;
+ if(noConnectedCount > 0){
+ log.info("绛夊緟" + noConnectedCount + "鍙癛TU杩炴帴缃戠粶");
+ Thread.sleep(100L);
+ }else{
+ break ;
+ }
+ }
+
+ while (true){
+ if(!ServerProperties.startRtuReportWork){
+ Thread.sleep(100L);
+ }else{
+ startJob() ;
+ break ;
+ }
+ }
+
+ while(true){
+ if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
+ Long seconds = (System.currentTimeMillis() - startTime)/1000 ;
+ RmiClUnit.getInstance().allOver(seconds) ;
+ log.info("鍏辩敤鏃�" + seconds + "绉�");
+ break ;
+ }else{
+ Thread.sleep(100L);
+ }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ break ;
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ /**
+ * 鍒涘缓RTU妯℃嫙MyThreadJob
+ * @param rtuAddr rtu鍦板潃
+ */
+ private void createImitate(Long rtuAddr){
+ jobMap.put("" + rtuAddr, new MyThreadJob("" + rtuAddr, ServerProperties.tcpServerIp, ServerProperties.tcpServerPort)) ;
+ }
+
+
+ private void connectServer(MyThreadJob job){
+ if(job.session == null){
+ try{
+ new TcpConnect().createSession(job.rtuAddr,
+ job,
+ job.serverIp,
+ job.serverPort,
+ job.connectTimeout,
+ new TcpHandler(),
+ new Callback() {
+ @Override
+ public void call(Object obj) {
+ if(obj == null){
+ log.error("鍒涘缓缃戠粶浼氳瘽杩斿洖涓簄ull");
+ }else{
+ job.session = (IoSession)obj ;
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ }) ;
+ }catch (Exception e){
+ job.exceptionOnConnect = true ;
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private int checkConnected(){
+ int noConnectedCount = 0 ;
+ Collection<MyThreadJob> collection = jobMap.values() ;
+ for(MyThreadJob job : collection){
+ if(job.session == null && !job.exceptionOnConnect){
+ noConnectedCount++ ;
+ }
+ }
+ return noConnectedCount;
+ }
+
+ private void startJob(){
+ new Thread(() -> {
+ try {
+ int notOverCount;
+ while(true){
+ notOverCount = 0 ;
+ Collection<MyThreadJob> collection = jobMap.values() ;
+ for(MyThreadJob job : collection){
+ if(!job.isOver){
+ notOverCount++ ;
+ pool.putJob(job);
+ }
+ }
+ if(notOverCount > 0){
+ log.info("褰撳墠杩樻湁" + notOverCount + "鍙癛TU鏈畬鎴愪换鍔�");
+ Thread.sleep(ServerProperties.sendInterval * 1000);
+ }else{
+ break ;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }).start();
+ }
+
+
+ public static synchronized void clientSendData(){
+ totalSendDataCount++;
+ if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
+ RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
+ System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級");
+ }else{
+ if(totalRtuClientCount > 100){
+ if(totalSendDataCount % 100 == 0){
+ RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
+ System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級");
+ }
+ }else{
+ RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount);
+ System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級");
+ }
+ }
+ }
+
+ public static synchronized void clientOver(){
+ totalOverClientCount++;
+ if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){
+ RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
+ System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+ }else{
+ if(totalRtuClientCount > 100) {
+ if (totalOverClientCount % 100 == 0) {
+ RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
+ System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+ }
+ }else{
+ RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount);
+ System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�");
+ }
+ }
+ }
+}
--
Gitblit v1.8.0