From b3b17b231e2f2840332ce6eb96f791865fdec6d5 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 14 四月 2025 16:38:16 +0800
Subject: [PATCH] 代码优化
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 105 insertions(+), 14 deletions(-)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
index b19ea75..7c61420 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
@@ -1,12 +1,14 @@
package com.dy.rtuMw.server.upgrade;
import com.alibaba.fastjson2.annotation.JSONField;
+import com.dy.common.mw.protocol.rtuState.RtuStatus;
import com.dy.common.softUpgrade.parse.HexFileParse;
import com.dy.common.softUpgrade.state.UpgradeRtu;
import com.dy.common.softUpgrade.state.UpgradeState;
import com.dy.common.softUpgrade.state.UpgradeTaskVo;
import com.dy.common.util.Callback;
import com.dy.common.util.DateTime;
+import com.dy.rtuMw.server.forTcp.RtuStatusDealer;
import lombok.Data;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -32,6 +34,10 @@
protected Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
@JSONField(serialize = false)
protected Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
+ @JSONField(serialize = false)
+ private Boolean openNoUpgrade ;//闃�寮�锛堟车寮�锛変笉鎵ц鍗囩骇
+ @JSONField(serialize = false)
+ private Integer lastOpenMaxGoOn ;//闃�寮�锛堟车寮�锛夌姸鎬佽缃互鏉ユ寔缁渶闀挎椂闂达紙绉掗挓锛夛紝瓒呰繃杩欎釜鏃堕棿璁や负鐘舵�佹棤鏁堬紙杩欎釜鏃堕暱鍙栧喅浜庡伐浣滄姤闂撮殧锛�
public String setupDt ;//璁剧疆鏃堕棿(yyyy-mm-dd HH:MM:SS)
@JSONField(serialize = false)
@@ -52,7 +58,7 @@
///////////////////////////////////////////////////
//浠ヤ笅鍐呴儴鎺у埗鐢�
@JSONField(serialize = false)
- private int curUgRunningRtuTotal = 0 ;//褰撳墠姝e湪鍗囩骇鐨凴TU涓暟
+ protected int curUgRunningRtuTotal = 0 ;//褰撳墠姝e湪鍗囩骇鐨凴TU涓暟
public UpgradeTask() {
this.curUgRunningRtuTotal = 0 ;
@@ -60,7 +66,12 @@
/**
* 鍒濆鍖栭厤缃俊鎭�
*/
- public void initOption(Integer failTryTimes, Integer ugMaxRtuSameTime) {
+ public void initOption(Boolean openNoUpgrade,
+ Integer lastOpenMaxGoOn,
+ Integer failTryTimes,
+ Integer ugMaxRtuSameTime) {
+ this.openNoUpgrade = openNoUpgrade;
+ this.lastOpenMaxGoOn = lastOpenMaxGoOn;
this.failTryTimes = failTryTimes;
this.ugMaxRtuSameTime = ugMaxRtuSameTime;
}
@@ -123,7 +134,7 @@
* @param code
* @param callbackCom
*/
- public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callbackCom){
+ public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callbackCom, Object ...objects){
if(this.upgradeRtus != null && this.upgradeRtus.size() > 0
&& this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0){
UpgradeRtu ugRtu = this.upgradeRtus.get(rtuAddr) ;
@@ -142,13 +153,32 @@
//褰撳墠RTU宸茬粡鍗囩骇瀹屾垚锛屾棤闇�鍐嶅崌绾�
return;
}else{
+ if(this.openNoUpgrade){
+ //棣栧厛鍒ゆ柇鏄惁鏄榾闂ㄦ墦寮�鐘舵��
+ RtuStatus rtuStatus = RtuStatusDealer.oneStatus(rtuAddr) ;
+ if(rtuStatus != null
+ && rtuStatus.valveOpenTrueCloseFalse != null
+ && rtuStatus.valveOpenTrueCloseFalse.booleanValue() == true
+ && rtuStatus.valveStatusLastTimeStamp != null){
+ //鏈夌姸鎬侊紝骞朵笖鏄榾寮�锛堟车寮�锛�
+ Long now = System.currentTimeMillis() ;
+ Long gap = now - rtuStatus.valveStatusLastTimeStamp ;
+ if(gap < this.lastOpenMaxGoOn){
+ //杩欐椂閲囩撼闃�闂ㄦ墦寮�鐘舵�侊紝杩涜�屼笉鑳藉崌绾�
+ ugRtu.isOver = true ;
+ ugRtu.state = UpgradeRtu.STATE_FAILOPEN ;
+ return;
+ }
+ }
+ }
+
if(UpgradeUnit.confVo.ugMaxRtuAtOnce > 0){
//璁剧疆浜嗗悓鏃跺崌绾х殑RTU鏈�澶ф暟閲忕殑闄愬埗
if(ugRtu.state == UpgradeRtuDev.STATE_OFFLINE){
//鍒濆鎬侊紝璇存槑鍗囩骇浠诲姟璁剧疆浠ユ潵锛岃RTU绗竴娆′笂琛屾暟鎹�
if(this.curUgRunningRtuTotal <= UpgradeUnit.confVo.ugMaxRtuAtOnce){
//褰撳墠姝e湪鍗囩骇鐨凴TU鏁伴噺杩樻湭鍙楅檺
- ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom, objects) ;
}else{
//鍚屾椂鍗囩骇鐨凴TU鏁伴噺鍙楅檺锛岀瓑寰呬笅娆℃満浼�
//浣嗗厛琛ㄦ槑涓�涓嬬姸鎬�
@@ -159,24 +189,23 @@
//鏍规嵁涓婇潰閫昏緫锛� 璇存槑蹇呯劧鍦ㄧ嚎浜�
if(this.curUgRunningRtuTotal <= UpgradeUnit.confVo.ugMaxRtuAtOnce){
//褰撳墠姝e湪鍗囩骇鐨凴TU鏁伴噺杩樻湭鍙楅檺
- ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom, objects) ;
}else{
//鍚屾椂鍗囩骇鐨凴TU鏁伴噺鍙楅檺锛岀瓑寰呬笅娆℃満浼�
return ;
}
}else{
//RTU宸茬粡澶勪簬鍗囩骇杩囩▼涓�
- ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom, objects) ;
}
}else{
//娌℃湁璁剧疆鍚屾椂鍗囩骇鐨凴TU鏈�澶ф暟閲忕殑闄愬埗
- ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom, objects) ;
}
}
}
}
}
-
/**
* 寮哄埗缁撴潫鍗囩骇浠诲姟
*/
@@ -189,6 +218,7 @@
//this.upgradeState.clear();
}
}
+
/**
* 褰撳墠鍗囩骇鐘舵��
@@ -210,14 +240,21 @@
}else if(info.state == UpgradeRtu.STATE_SUCCESS) {
state.successTotal++;
}else if(info.state == UpgradeRtu.STATE_FAILONE) {
- state.failOneTotal++;
- state.failTotal++;
+ state.dieOneTotal++;
+ if(info.isOver){
+ state.failTotal++;
+ }
}else if(info.state == UpgradeRtu.STATE_FAIL) {
- state.failMultiTotal++;
- state.failTotal++;
+ state.dieMultiTotal++;
+ if(info.isOver) {
+ state.failTotal++;
+ }
}else if(info.state == UpgradeRtu.STATE_FAILOFFLINE) {
state.failTotal++;
state.failOffTotal++;
+ }else if(info.state == UpgradeRtu.STATE_FAILOPEN) {
+ state.failTotal++;
+ state.failOpenTotal++;
}
if(info.isOver){
state.overTotal++;
@@ -278,6 +315,29 @@
///////////////////////////////////////////////////////////
/**
+ * 闃�寮�锛堟车寮�锛変笉鍗囩骇澶勭悊
+ */
+ protected void openNoUpgrade(){
+ if(this.upgradeRtus != null && this.upgradeRtus.size() > 0){
+ Map<String, RtuStatus> rsAllMap = RtuStatusDealer.allStatus() ;
+ Long now = System.currentTimeMillis() ;
+ this.upgradeRtus.values().stream().forEach(a -> {
+ RtuStatus rs = rsAllMap.get(a.rtuAddr) ;
+ if(rs != null
+ && rs.valveOpenTrueCloseFalse != null && rs.valveOpenTrueCloseFalse.booleanValue() == true
+ && rs.valveStatusLastTimeStamp != null){
+ //鏈夌姸鎬侊紝骞朵笖鏄榾寮�锛堟车寮�锛�
+ Long gap = now - rs.valveStatusLastTimeStamp ;
+ if(gap < this.lastOpenMaxGoOn){
+ //杩欐椂閲囩撼闃�闂ㄦ墦寮�鐘舵�佷笉鑳藉崌绾�
+ a.isOver = true ;
+ a.state = UpgradeRtu.STATE_FAILOPEN ;
+ }
+ }
+ });
+ }
+ }
+ /**
* 鍒ゆ柇鏄惁娌$敤浠讳綍涓�涓猂TU杩涜杩囧崌绾э紝鑰屼笖瓒呰繃浜嗘椂闄�
* @return -1:鏃犱竴RTU鍗囩骇涓旇秴鏃讹紝0锛氭棤RTU鍗囩骇浣嗘湭瓒呮椂绛夊緟锛�1鏈塕TU鍗囩骇姝e父鎵ц
*/
@@ -307,7 +367,7 @@
/**
* 缁熻褰撳墠姝e湪鍗囩骇鐨凴TU鏁伴噺锛屼负鍚屾椂鍗囩骇鏁伴噺闄愬埗鍋氬噯澶�
*/
- protected void countRunningRtuCount(){
+ protected int countRunningRtuCount(){
int runningTotal = 0 ;
Collection<UpgradeRtu> col = this.upgradeRtus.values() ;
for(UpgradeRtu info : col){
@@ -315,7 +375,7 @@
runningTotal ++ ;
}
}
- this.curUgRunningRtuTotal = runningTotal ;
+ return this.curUgRunningRtuTotal = runningTotal ;
}
/**
@@ -344,6 +404,37 @@
}
/**
+ * 缁熻:宸茬粡杩涘崌绾т絾RTU鍙堣繘鍏ュ仠姝㈠崌绾у彂鍛嗙姸鎬侊紝瓒呰繃涓�瀹氭椂闄愶紝璁剧疆璁惧涓�鍖呮鎴栧鍖呮锛屽苟璁剧疆涓哄崌绾у畬鎴�
+ * @return -1:娌℃湁瓒呮椂锛�0瓒呮椂浜嗕笖鏃犲洜绂荤嚎琚己鍒惰缃崌绾у畬鎴愮殑RTU锛�>0绂荤嚎琚己鍒惰缃崌绾у畬鎴愮殑RTU鏁伴噺
+ */
+ protected int countRunningIdleRtuAndSetIfOver() {
+ Long now = System.currentTimeMillis() ;
+ int count = -1 ;
+ if(now - this.setupDtLong > UpgradeUnit.confVo.rtuOffLineWaitDuration){
+ //璁剧疆涓婂彞锛岄槻姝㈤绻佽繘鍏ヤ笅闈㈣鍙ヨ繘琛岃绠�
+ if (this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0) {
+ Collection<UpgradeRtu> col = this.upgradeRtus.values() ;
+ for(UpgradeRtu info : col){
+ if(info.state == UpgradeRtu.STATE_RUNNING && info.isOver == false){
+ //鍗囩骇涓紝浣嗘湭鍗囩骇瀹屾垚
+ if(now - info.lastDownDtAt > UpgradeUnit.confVo.runningAndIdleDuration){
+ if(info.currentPackage <= 1){
+ //涓�鍖呮
+ info.state = UpgradeRtu.STATE_FAILONE ;
+ }else{
+ //澶氬寘姝�
+ info.state = UpgradeRtu.STATE_FAIL ;
+ }
+ info.isOver = true ;
+ count ++ ;
+ }
+ }
+ }
+ }
+ }
+ return count ;
+ }
+ /**
* 缁熻鏄惁鍗囩骇鍏ㄩ儴缁撴潫
*/
protected boolean countIsAllOver() {
--
Gitblit v1.8.0