From 251f61887e8c26db51df7f8d0c3b5464dc1fa6e3 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 03 十二月 2024 16:59:34 +0800 Subject: [PATCH] (1)升级过程中死掉的RTU经过可配置的一段时间后设置成升级失败; (2)升级状态向Remote模块通知时,当升级任务结束后,仍要向remote模块通知可配置的次数; --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java | 139 ++++++++++++++++++++++++++++++++------------- 1 files changed, 98 insertions(+), 41 deletions(-) diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java index 7d5409d..a31da14 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -41,6 +42,13 @@ private RtuUpgradeSv sv ; /** + * 寮哄埗缁撴潫鍗囩骇浠诲姟閫氫俊涓棿浠舵垚鍔熸墽琛屽悗 + */ + public static void afterMwForceOverCurUgTask(){ + cache = null ; + } + + /** * rtu杩滅▼鍗囩骇浠诲姟閫氫俊涓棿浠舵墽琛屾儏鍐电粺璁″洖鏀� * @param info 鏁版嵁 * @return 鎿嶄綔缁撴灉 @@ -48,15 +56,8 @@ @Hidden //涓嶅叕寮�鎺ュ彛锛屽叾鍙湁閫氫俊涓棿浠惰皟鐢� @PostMapping(path = "/receive") public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo info, HttpServletRequest req, HttpServletResponse rep){ + /* log.info("鎺ユ敹鍒扮殑RTU杩滅▼鍗囩骇鐘舵�佹暟鎹负锛歿}", info.toString("532328000214")); - //杩涜鎺掑簭 - //Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder()); - //info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList()); - - //閫氫俊涓棿浠朵紶杩囨潵鐨勬満鏋則ag锛屼互鐢ㄤ簬鏌ユ壘鏁版嵁婧� - String token = req.getHeader(Constant.UserTokenKeyInHeader); - DataSourceContext.set(token); - if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ if(info.ugRtuStateList.size() < 10){ for (UpgradeRtu rtuVo : info.ugRtuStateList) { @@ -64,12 +65,22 @@ } } } + */ + + //杩涜鎺掑簭 + Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder()); + info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList()); + + //閫氫俊涓棿浠朵紶杩囨潵鐨勬満鏋則ag锛屼互鐢ㄤ簬鏌ユ壘鏁版嵁婧� + String token = req.getHeader(Constant.UserTokenKeyInHeader); + DataSourceContext.set(token); + if(cache == null){ + cache = info; //姝ゆ椂涓嶅仛浠诲姟鎿嶄綔锛屽彧淇濋殰cache涓嶄负绌猴紝 绛夊緟涓嬫鍙戞潵鏁版嵁 if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ List<UpgradeRtu> overList = info.ugRtuStateList.stream().filter(itemVo -> itemVo.isOver).collect(Collectors.toList()) ; if(overList != null && overList.size() > 0){ - cache = info; this.save2Db(info.ugTaskId, overList); } } @@ -78,7 +89,11 @@ if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ //姝ゆ椂淇濊瘉涓や釜闆嗗悎閮戒笉涓簄ull this.save2Db(info.ugTaskId, info.ugRtuStateList, cache.ugRtuStateList); - cache = info; + } + //cache璧嬪�煎繀椤绘斁鍦ㄤ笂闈㈠鐞嗙殑鍚庨潰锛屽惁鍒欎笂闈㈢殑姣旇緝涓嶆垚鍔� + cache = info; + if(info.ugOverallState != null && info.ugOverallState.allOver){ + this.saveTaskOver(info.ugTaskId) ; } } return null; @@ -103,15 +118,31 @@ */ private void save2Db(String taskId, List<UpgradeRtu> newList, List<UpgradeRtu> oldList){ List<UpgradeRtu> newOverList = newList.stream().filter(vo -> vo.isOver).collect(Collectors.toList()) ; + List<UpgradeRtu> oldNoOverList = newList.stream().filter(vo -> !vo.isOver).collect(Collectors.toList()) ; + boolean oldExist = false ; for(UpgradeRtu nvo : newOverList){ - if(nvo != null) { - if(oldList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr) && vo.isOver == false)){ - //涓婃娌℃湁鍗囩骇缁撴潫锛岃�屽綋鍓嶅崌绾х粨鏉熶簡 - this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo); - } + oldExist = false ; + if(oldNoOverList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr))){ + oldExist = true ; + } + if(!oldExist){ + //涓婃娌℃湁鍗囩骇缁撴潫锛岃�屽綋鍓嶅崌绾х粨鏉熶簡 + this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo); } } } + + /** + * 淇濆瓨鍗囩骇浠诲姟宸茬粡鎵ц瀹屾垚 + * @param taskId + */ + private void saveTaskOver(String taskId){ + this.sv.updateTaskOver(taskId) ; + } + + + + ///////////////////////////////////////////////////// // // 浠ヤ笅妯℃嫙鏁版嵁 @@ -154,7 +185,7 @@ @Override public Object execute() throws Exception { while(!this.stop){ - if(!runDemo()){ + if(!runInDemo()){ this.stop = true ; }else{ try { @@ -188,7 +219,7 @@ } } } - private boolean runDemo(){ + private boolean runInDemo(){ for(UpgradeRtu rtu : cache.ugRtuStateList){ this.rtuUpgrade(rtu) ; } @@ -210,6 +241,7 @@ rtu.currentPackage = 0 ; rtu.currentRamAddr = 0x00 ; rtu.lastDownDt = "" ; + rtu.lastDownDtAt = 0L ; rtu.reTryTimes = 0 ; rtu.isOver = false ; }else{ @@ -217,6 +249,7 @@ rtu.currentPackage = 1 ; rtu.currentRamAddr = 0x00 ; rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + rtu.lastDownDtAt = System.currentTimeMillis() ; rtu.reTryTimes = 0 ; rtu.isOver = false ; } @@ -226,22 +259,25 @@ //绂荤嚎鐨勶紝涓嶅鐞� return ; } - int n = Integer.parseInt(new CreateRandom().create(2)) ; - if(n == 4 - || n == 14 - || n == 24 - || n == 34 - || n == 44 - || n == 54 - || n == 64 - || n == 74 - || n == 84 - || n == 95 - || n == 45 - || n == 46 - || n == 47 - || n == 48 - || n == 49){ + + if(rtu.currentPackage == rtu.totalPackage){ + //鍗囩骇缁撴潫 + rtu.state = UpgradeRtu.STATE_SUCCESS ; + rtu.isOver = true ; + return ; + } + if(rtu.reTryTimes >= 2){ + //閲嶈瘯娆℃暟杈惧埌鏈�澶у�� + if(rtu.state == UpgradeRtu.STATE_FAILONE || + rtu.state == UpgradeRtu.STATE_FAIL){ + //鍙堝け璐ヤ簡锛岃涓虹粨鏉熶簡 + rtu.isOver = true ; + return ; + } + } + + int n = Integer.parseInt(new CreateRandom().create(3)) ; + if(n == 540 || n == 541 || n == 542 || n == 543 || n == 544 || n == 545 || n == 546 || n == 547 || n == 548 || n == 549 ){ if(rtu.currentPackage == 1){ //1鍖呮 rtu.state = UpgradeRtu.STATE_FAILONE ; @@ -249,7 +285,7 @@ } } - if(n == 45){ + if(n == 450 || n == 451 || n == 452 || n == 453 || n == 454 || n == 455){ if(rtu.currentPackage != 1){ //鍗囨 rtu.state = UpgradeRtu.STATE_FAIL ; @@ -257,11 +293,18 @@ } } - if(rtu.currentPackage == rtu.totalPackage){ - //鍗囩骇缁撴潫 - rtu.state = UpgradeRtu.STATE_SUCCESS ; - rtu.isOver = true ; - return ; + if(rtu.state == UpgradeRtu.STATE_FAILONE || + rtu.state == UpgradeRtu.STATE_FAIL){ + if(rtu.reTryTimes < 2){ + rtu.state = UpgradeRtu.STATE_RUNNING ; + rtu.currentPackage = 1 ; + rtu.currentRamAddr = 0x00 ; + rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + rtu.lastDownDtAt = System.currentTimeMillis() ; + rtu.reTryTimes++ ; + rtu.isOver = false ; + return ; + } } if(rtu.state != UpgradeRtu.STATE_FAILONE && @@ -270,7 +313,7 @@ rtu.currentPackage += 1 ; rtu.currentRamAddr = 0x00 + UpgradeRtu.RAMADDRADD ; rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - rtu.reTryTimes = 0 ; + rtu.lastDownDtAt = System.currentTimeMillis() ; rtu.isOver = false ; } @@ -288,6 +331,7 @@ for(UpgradeRtu rtu : cache.ugRtuStateList){ if(rtu.state == UpgradeRtu.STATE_OFFLINE){ cache.ugOverallState.offLineTotal ++ ; + cache.ugOverallState.failTotal++; }else if(rtu.state == UpgradeRtu.STATE_UNSTART){ cache.ugOverallState.unStartTotal ++ ; }else if(rtu.state == UpgradeRtu.STATE_RUNNING){ @@ -296,9 +340,10 @@ }else if(rtu.state == UpgradeRtu.STATE_SUCCESS) { cache.ugOverallState.successTotal++; }else if(rtu.state == UpgradeRtu.STATE_FAILONE) { - cache.ugOverallState.failOneTotal++; + cache.ugOverallState.dieOneTotal++; cache.ugOverallState.failTotal++; }else if(rtu.state == UpgradeRtu.STATE_FAIL) { + cache.ugOverallState.dieMultiTotal++; cache.ugOverallState.failTotal++; } if(rtu.isOver){ @@ -306,6 +351,18 @@ } } } + if(!hasRunning){ + cache.ugOverallState.allOver = true ; + } + if(cache.ugOverallState.allOver){ + cache.ugOverallState.overTotal = 0; + if(cache.ugRtuStateList != null && cache.ugRtuStateList.size() > 0){ + for(UpgradeRtu rtu : cache.ugRtuStateList){ + rtu.isOver = true ; + cache.ugOverallState.overTotal++; + } + } + } return hasRunning ; } } -- Gitblit v1.8.0