From ba2c5cb35e1bd1a81bf4027b7aeab16a0a26bb05 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期三, 13 十一月 2024 10:00:43 +0800
Subject: [PATCH] 获取未关阀记录接口,返回多条记录
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java | 270 ++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 183 insertions(+), 87 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 631aacd..e0b3d13 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
@@ -2,7 +2,9 @@
import com.alibaba.fastjson2.annotation.JSONField;
import com.dy.common.softUpgrade.parse.HexFileParse;
-import com.dy.common.softUpgrade.parse.HexFileVo;
+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 lombok.Data;
@@ -17,30 +19,37 @@
@Data
public class UpgradeTask {
+ protected static final String TaskOverType_Natural = "鑷劧" ;
+ protected static final String TaskOverType_Force = "寮哄埗" ;
+
@JSONField(serialize = false)
protected Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾�
@JSONField(serialize = false)
protected Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁�
public String setupDt ;//璁剧疆鏃堕棿(yyyy-mm-dd HH:MM:SS)
+ @JSONField(serialize = false)
+ private Long setupDtLong ;//璁剧疆鏃堕棿
- public String softFileName ;//鍗囩骇杞欢锛坔ex锛夋枃浠跺悕绉�
- public String softStoreAddr ;//鍗囩骇绋嬪簭瀛樻斁鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛屽崌绾х▼搴忓湪FLASH涓瓨鏀惧湴鍧�
- public String softStartAddr ;//绋嬪簭瑕嗙洊璧峰鍦板潃(4瀛楄妭锛�8瀛楃HEX瀛楃涓�)锛岃鍒锋柊绋嬪簭鐨勮捣濮嬪湴鍧�楂樺瓧鑺傚湪鍓� 锛屼綆瀛楄妭鍦ㄥ悗
+ public UpgradeTaskVo taskVo ;//鍗囩骇浠诲姟鍊煎璞�
@JSONField(serialize = false)
- public byte[][] softData ;//鍗囩骇绋嬪簭鏁版嵁(姣忓寘鏁版嵁鏄�512瀛楄妭)
- @JSONField(serialize = false)
- public int softByteSrc16;//鍗囩骇绋嬪簭鏍¢獙鐮� CRC16
-
- public int softBytesCalculate;//鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
-
- public List<String> rtuAddrList ;//闇�瑕佸崌绾х殑RTU鍦板潃闆嗗悎
+ protected byte[][] softFileDataGrp ;//浠�512瀛楄妭涓哄崟浣嶆妸鍗囩骇绋嬪簭鏁版嵁鍒嗙粍
@JSONField(serialize = false)
- public Map<String, UpgradeRtu> upgradeState ;//鍗囩骇鐘舵��
+ protected Map<String, UpgradeRtu> upgradeRtus;//鍗囩骇鐘舵��
+
+ public boolean taskIsOver = false ;//浠诲姟鏄惁瀹屾垚
+ public String taskOverType = "" ;//浠诲姟瀹屾垚鏂瑰紡锛堣嚜鐒讹紝寮哄埗锛�
+ public String taskOverDt = "" ;//浠诲姟瀹屾垚鏃堕棿(yyyy-mm-dd HH:MM:SS)
+
+ ///////////////////////////////////////////////////
+ //浠ヤ笅鍐呴儴鎺у埗鐢�
+ @JSONField(serialize = false)
+ private int curUgRunningRtuTotal = 0 ;//褰撳墠姝e湪鍗囩骇鐨凴TU涓暟
public UpgradeTask() {
+ this.curUgRunningRtuTotal = 0 ;
}
/**
* 鍒濆鍖栭厤缃俊鎭�
@@ -51,70 +60,112 @@
}
/**
* 璁剧疆鍗囩骇浠诲姟
- * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚�
- * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃
- * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃
- * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍
- * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�)
- * @param rtuAddrList 鍗囩骇RTU
+ * @param taskVo UpgradeTaskVo 鍗囩骇浠诲姟瀵硅薄
* @throws Exception
*/
- public void setTask(String softFileName,
- String softStoreAddr,
- String softStartAddr,
- byte[] softFileData,
- Integer softBytesCalculate,
- List<String> rtuAddrList) throws Exception {
- if(softFileName == null || softFileName.trim().length() == 0){
+ public void setTask(UpgradeTaskVo taskVo) throws Exception {
+ if(taskVo.id == null || taskVo.id.trim().length() == 0){
+ throw new Exception("鍗囩骇浠诲姟id蹇呴』鎻愪緵") ;
+ }
+ if(taskVo.softFileName == null || taskVo.softFileName.trim().length() == 0){
throw new Exception("鍗囩骇杞欢锛坔ex锛夋枃浠跺悕绉板繀椤绘彁渚�") ;
}
- if(softStoreAddr == null || softStoreAddr.trim().length() != 8){
+ if(taskVo.softStoreAddr == null || taskVo.softStoreAddr.trim().length() != 8){
throw new Exception("鍗囩骇绋嬪簭瀛樻斁鍦板潃涓嶅悎娉曪紝蹇呴』鏄�8瀛楃锛堝崄鍏繘鍒讹級鐨勫瓧绗︿覆") ;
}
- if(softStartAddr == null || softStartAddr.trim().length() != 8){
+ if(taskVo.softStartAddr == null || taskVo.softStartAddr.trim().length() != 8){
throw new Exception("绋嬪簭瑕嗙洊璧峰鍦板潃涓嶅悎娉曪紝蹇呴』鏄�8瀛楃锛堝崄鍏繘鍒讹級鐨勫瓧绗︿覆") ;
}
- if(softFileData == null || softFileData.length <= 0){
+ if(taskVo.softFileData == null || taskVo.softFileData.length <= 0){
throw new Exception("鍗囩骇绋嬪簭鍐呭蹇呴』鎻愪緵") ;
}
- if(rtuAddrList == null || rtuAddrList.size() <= 0){
+ if(taskVo.softBytesCalculate == null){
+ throw new Exception("鍏紡璁$畻鍗囩骇绋嬪簭鏈夋晥搴忓瓧鑺傛暟蹇呴』鎻愪緵") ;
+ }
+ if(taskVo.softByteSrc16 == null){
+ throw new Exception("鏈夋晥鍗囩骇绋嬪簭瀛楄妭鏁癈RC16鏍¢獙鍊煎繀椤绘彁渚�") ;
+ }
+ if(taskVo.rtuAddrList == null || taskVo.rtuAddrList.size() <= 0){
throw new Exception("鍗囩骇璁惧RTU鍦板潃蹇呴』鎻愪緵") ;
}
+ if(taskVo.callbackWebUrl == null || taskVo.callbackWebUrl.trim().equals("")){
+ throw new Exception("鍥炶皟缃戝潃蹇呴』鎻愪緵") ;
+ }
this.setupDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;
- this.softFileName = softFileName;
- this.softStoreAddr = softStoreAddr;
- this.softStartAddr = softStartAddr;
- this.softBytesCalculate = softBytesCalculate;
- this.rtuAddrList = rtuAddrList;
+ this.setupDtLong = System.currentTimeMillis() ;
+ this.taskVo = taskVo ;
- this.upgradeState = new HashMap<>();
- if(softFileData != null && softFileData.length >0){
- HexFileVo vo = new HexFileParse().doParse(softFileData);
- this.softData = vo.listByte512.toArray(new byte[0][]);
- this.softByteSrc16 = vo.bytesCrc16 ;
+ this.upgradeRtus = new HashMap<>();
+ if(taskVo.softFileData != null && taskVo.softFileData.length >0){
+ List<byte[]> listBytes = new HexFileParse().splitBytesByUnit512(taskVo.softFileData);
+ this.softFileDataGrp = listBytes.toArray(new byte[0][]);
+ for(String rtuAddr : this.taskVo.rtuAddrList){
+ //姝ゆ椂鐘舵�佽缃垚绂荤嚎鐘舵��
+ UpgradeRtuDev ugRtu = new UpgradeRtuDev(this, rtuAddr, this.taskVo.softFileData.length, UpgradeRtuDev.STATE_OFFLINE) ;
+ this.upgradeRtus.put(rtuAddr, ugRtu) ;
+ }
}
}
/**
* RTU鏈変笂琛屾暟鎹簡锛岃Е鍙戜笅鍙戝崌绾ф暟鎹�
* @param rtuAddr
* @param code
- * @param callback
+ * @param callbackCom
*/
- public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callback){
- if(upgradeState != null && upgradeState.size() > 0
- && rtuAddrList != null && rtuAddrList.size() > 0){
- UpgradeRtu info = upgradeState.get(rtuAddr) ;
- if(info == null){
- if(rtuAddrList.contains(rtuAddr)){
- info = new UpgradeRtu(this, rtuAddr, softData.length) ;
- upgradeState.put(rtuAddr, info) ;
+ public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callbackCom){
+ if(this.upgradeRtus != null && this.upgradeRtus.size() > 0
+ && this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0){
+ UpgradeRtu ugRtu = this.upgradeRtus.get(rtuAddr) ;
+ if(ugRtu == null){
+ //鏍规嵁鏂规硶setTask鐨勯�昏緫锛屽彧瑕丷TU鍦ㄥ崌绾т箣鍒楋紝姝ゅugRtuState涓�瀹氫笉涓簄ull
+ //涓轰繚闄╋紝瀹炵幇涓嬮潰閫昏緫
+ if(taskVo.rtuAddrList.contains(rtuAddr)){
+ ugRtu = new UpgradeRtuDev(this, rtuAddr, this.taskVo.softFileData.length) ;
+ upgradeRtus.put(rtuAddr, ugRtu) ;
}else{
//rtu涓嶅湪鍗囩骇涔嬪垪
return ;
}
}
- if(info != null){
- info.trigger(code, protocolName, protocolVersion, this.softData, callback) ;
+ if(ugRtu != null){
+ if(ugRtu.isOver){
+ //褰撳墠RTU宸茬粡鍗囩骇瀹屾垚锛屾棤闇�鍐嶅崌绾�
+ return;
+ }else{
+ 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) ;
+ }else{
+ //鍚屾椂鍗囩骇鐨凴TU鏁伴噺鍙楅檺锛岀瓑寰呬笅娆℃満浼�
+ //浣嗗厛琛ㄦ槑涓�涓嬬姸鎬�
+ ugRtu.state = UpgradeRtuDev.STATE_UNSTART ;
+ return ;
+ }
+ }else if(ugRtu.state == UpgradeRtuDev.STATE_UNSTART){
+ //鏍规嵁涓婇潰閫昏緫锛� 璇存槑蹇呯劧鍦ㄧ嚎浜�
+ if(this.curUgRunningRtuTotal <= UpgradeUnit.confVo.ugMaxRtuAtOnce){
+ //褰撳墠姝e湪鍗囩骇鐨凴TU鏁伴噺杩樻湭鍙楅檺
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ }else{
+ //鍚屾椂鍗囩骇鐨凴TU鏁伴噺鍙楅檺锛岀瓑寰呬笅娆℃満浼�
+ return ;
+ }
+ }else{
+ //RTU宸茬粡澶勪簬鍗囩骇杩囩▼涓�
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ }
+ }else{
+ //娌℃湁璁剧疆鍚屾椂鍗囩骇鐨凴TU鏈�澶ф暟閲忕殑闄愬埗
+ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ;
+ }
+ }
+ }else{
+ //rtu涓嶅湪鍗囩骇涔嬪垪
+ return ;
}
}
}
@@ -123,29 +174,11 @@
* 寮哄埗缁撴潫鍗囩骇浠诲姟
*/
public void forceOver(){
- this.rtuAddrList.clear();
- this.upgradeState.clear();
- }
-
- /**
- * 鍗囩骇浠诲姟鏄惁瀹屾垚
- * @return
- */
- public boolean isOver() {
- boolean isOver = true ;
- if(upgradeState != null && upgradeState.size() > 0){
- Collection<UpgradeRtu> col = upgradeState.values() ;
- for(UpgradeRtu info : col){
- if(info.state == UpgradeRtu.STATE_UNSTART){
- isOver = false ;
- break ;
- }else if(info.state == UpgradeRtu.STATE_RUNNING){
- isOver = false ;
- break ;
- }
- }
- }
- return isOver ;
+ this.taskIsOver = true ;//寮哄埗璁剧疆浠诲姟瀹屾垚
+ this.taskOverType = TaskOverType_Force ;//浠诲姟瀹屾垚鏂瑰紡锛堣嚜鐒讹紝寮哄埗锛�
+ this.taskOverDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;//浠诲姟瀹屾垚鏃堕棿(yyyy-mm-dd HH:MM:SS)
+ //this.taskVo.rtuAddrList.clear();
+ //this.upgradeState.clear();
}
/**
@@ -154,24 +187,26 @@
*/
public UpgradeState currentUpgradeState() {
UpgradeState state = new UpgradeState() ;
- if(rtuAddrList != null && rtuAddrList.size() > 0){
- state.rtuTotal = rtuAddrList.size() ;
- if(upgradeState != null && upgradeState.size() > 0){
- Collection<UpgradeRtu> col = upgradeState.values() ;
+ if(this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0){
+ state.rtuTotal = this.taskVo.rtuAddrList.size() ;
+ if(this.upgradeRtus != null && this.upgradeRtus.size() > 0){
+ Collection<UpgradeRtu> col = this.upgradeRtus.values() ;
for(UpgradeRtu info : col){
- if(info.state == UpgradeRtu.STATE_UNSTART){
+ if(info.state == UpgradeRtuDev.STATE_OFFLINE){
+ state.offLineTotal ++ ;
+ }else if(info.state == UpgradeRtuDev.STATE_UNSTART){
state.unStartTotal ++ ;
- }else if(info.state == UpgradeRtu.STATE_RUNNING){
+ }else if(info.state == UpgradeRtuDev.STATE_RUNNING){
state.runningTotal ++ ;
- }else if(info.state == UpgradeRtu.STATE_SUCCESS) {
+ }else if(info.state == UpgradeRtuDev.STATE_SUCCESS) {
state.successTotal++;
- state.overTotal++;
- }else if(info.state == UpgradeRtu.STATE_FAILONE) {
+ }else if(info.state == UpgradeRtuDev.STATE_FAILONE) {
state.failOneTotal++;
state.failTotal++;
- state.overTotal++;
- }else if(info.state == UpgradeRtu.STATE_FAIL) {
+ }else if(info.state == UpgradeRtuDev.STATE_FAIL) {
state.failTotal++;
+ }
+ if(info.isOver){
state.overTotal++;
}
}
@@ -186,23 +221,84 @@
* @return
*/
public UpgradeRtu upgradeInfos(String rtuAddr){
- return upgradeState.get(rtuAddr) ;
+ return this.upgradeRtus.get(rtuAddr) ;
}
/**
- * Rtu鍗囩骇淇℃伅
+ * 涓�浜汻tu鍗囩骇淇℃伅
* @param rtuAddrList
* @return
*/
public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){
List<UpgradeRtu> list = new ArrayList<>() ;
for(String rtuAddr : rtuAddrList){
- UpgradeRtu info = upgradeState.get(rtuAddr) ;
+ UpgradeRtu info = this.upgradeRtus.get(rtuAddr) ;
if(info != null){
list.add(info) ;
}
}
return list ;
}
+ /**
+ * 鍏ㄩ儴Rtu鍗囩骇淇℃伅
+ * @return
+ */
+ public List<UpgradeRtu> upgradeInfoAll(){
+ if(this.upgradeRtus != null && this.upgradeRtus.size() > 0){
+ return this.upgradeRtus.values().stream().toList();
+ }else{
+ return null ;
+ }
+ }
+ ///////////////////////////////////////////////////////////
+ //浠ヤ笅鏂规硶涓哄唴閮ㄦ湇鍔★紝涓嶅澶栨彁渚涙湇鍔�
+ ///////////////////////////////////////////////////////////
+ /**
+ * 缁熻褰撳墠姝e湪鍗囩骇鐨凴TU鏁伴噺锛屼负鍙楅檺鍚屾椂鍗囩骇鏁伴噺鍋氬噯澶�
+ */
+ protected void statisticsRunningRtuCount(){
+ int runningTotal = 0 ;
+ Collection<UpgradeRtu> col = this.upgradeRtus.values() ;
+ for(UpgradeRtu info : col){
+ if(info.state == UpgradeRtu.STATE_RUNNING){
+ runningTotal ++ ;
+ }
+ }
+ this.curUgRunningRtuTotal = runningTotal ;
+ }
+
+ /**
+ * 缁熻闇�瑕佸崌绾т絾褰撳墠绂荤嚎RTU鐨勬儏鍐�
+ */
+ protected void statisticsOffRtuCountAndSet() {
+ Long now = System.currentTimeMillis() ;
+ if(now - this.setupDtLong > UpgradeUnit.confVo.rtuOffLineWaitDuration){
+ //rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀�(姣)锛岃秴杩囬厤缃殑鏈�澶ф椂闀匡紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴�
+ 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_OFFLINE){
+ info.isOver = true ;
+ info.state = UpgradeRtu.STATE_FAILOFFLINE ;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 缁熻鏄惁鍗囩骇鍏ㄩ儴缁撴潫
+ */
+ protected boolean statisticsIsAllOver() {
+ if (this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0) {
+ Collection<UpgradeRtu> col = this.upgradeRtus.values() ;
+ for(UpgradeRtu info : col){
+ if(info.isOver == false){
+ return false ;
+ }
+ }
+ }
+ return true ;
+ }
}
--
Gitblit v1.8.0