From 00d54db361d697cf8fdf2f15940f4650b21b3185 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期一, 21 四月 2025 15:05:35 +0800 Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java | 368 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 368 insertions(+), 0 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 new file mode 100644 index 0000000..a31da14 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java @@ -0,0 +1,368 @@ +package com.dy.pipIrrRemote.rtuUpgrage; + +import com.dy.common.contant.Constant; +import com.dy.common.multiDataSource.DataSourceContext; +import com.dy.common.softUpgrade.state.UpgradeInfo; +import com.dy.common.softUpgrade.state.UpgradeRtu; +import com.dy.common.softUpgrade.state.UpgradeState; +import com.dy.common.util.Callback; +import com.dy.common.util.CreateRandom; +import com.dy.common.util.DateTime; +import com.dy.common.util.ThreadJob; +import com.dy.common.webUtil.BaseResponse; +import com.dy.pipIrrGlobal.pojoUg.UgRtuProgram; +import com.dy.pipIrrGlobal.pojoUg.UgRtuTask; +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: liurunyu + * @Date: 2024/11/12 9:24 + * @Description + */ +@Slf4j +@Tag(name = "rtu杩滅▼鍗囩骇浠诲姟閫氫俊涓棿浠舵墽琛屾儏鍐电粺璁″洖鏀�", description = "rtu杩滅▼鍗囩骇浠诲姟閫氫俊涓棿浠舵墽琛屾儏鍐电粺璁″洖鏀�") +@RestController +@RequestMapping(path = "rtuUpgradeStateReceiver") +public class RtuUpgradeStateReceiverCtrl { + + protected static UpgradeInfo cache ; + + @Autowired + private RtuUpgradeSv sv ; + + /** + * 寮哄埗缁撴潫鍗囩骇浠诲姟閫氫俊涓棿浠舵垚鍔熸墽琛屽悗 + */ + public static void afterMwForceOverCurUgTask(){ + cache = null ; + } + + /** + * rtu杩滅▼鍗囩骇浠诲姟閫氫俊涓棿浠舵墽琛屾儏鍐电粺璁″洖鏀� + * @param info 鏁版嵁 + * @return 鎿嶄綔缁撴灉 + */ + @Hidden //涓嶅叕寮�鎺ュ彛锛屽叾鍙湁閫氫俊涓棿浠惰皟鐢� + @PostMapping(path = "/receive") + public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo info, HttpServletRequest req, HttpServletResponse rep){ + /* + log.info("鎺ユ敹鍒扮殑RTU杩滅▼鍗囩骇鐘舵�佹暟鎹负锛歿}", info.toString("532328000214")); + if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ + if(info.ugRtuStateList.size() < 10){ + for (UpgradeRtu rtuVo : info.ugRtuStateList) { + log.info(rtuVo.toString()); + } + } + } + */ + + //杩涜鎺掑簭 + 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){ + this.save2Db(info.ugTaskId, overList); + } + } + }else{ + //褰揷ache涓湁鍊兼椂锛岃繘琛屾瘮瀵瑰瓨鍌紝瀵规瘮鐩殑鏄槻姝㈤噸澶嶆搷浣滄暟鎹簱 + if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ + //姝ゆ椂淇濊瘉涓や釜闆嗗悎閮戒笉涓簄ull + this.save2Db(info.ugTaskId, info.ugRtuStateList, cache.ugRtuStateList); + } + //cache璧嬪�煎繀椤绘斁鍦ㄤ笂闈㈠鐞嗙殑鍚庨潰锛屽惁鍒欎笂闈㈢殑姣旇緝涓嶆垚鍔� + cache = info; + if(info.ugOverallState != null && info.ugOverallState.allOver){ + this.saveTaskOver(info.ugTaskId) ; + } + } + return null; + } + /** + * 姣斿骞舵暟鎹簱瀛樺偍 + * @param taskId + * @param list + */ + private void save2Db(String taskId, List<UpgradeRtu> list){ + list.stream().forEach(vo -> { + if(vo != null) { + this.sv.saveRtuUpgradeState(Long.parseLong(taskId), vo); + } + }); + } + + /** + * 姣斿骞舵暟鎹簱瀛樺偍 + * @param newList + * @param oldList + */ + 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){ + 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) ; + } + + + + + ///////////////////////////////////////////////////// + // + // 浠ヤ笅妯℃嫙鏁版嵁 + // + ///////////////////////////////////////////////////// + + private static ThreadJob threadJob ; + + protected void resetDemo(){ + if(threadJob != null){ + threadJob.stop() ; + threadJob = null ; + } + cache = null ; + } + + protected void demo(){ + if(cache == null){ + UgRtuTask tpo = this.sv.selectLastTask() ; + if(tpo != null) { + UgRtuProgram ppo = this.sv.selectProgramById(tpo.programId); + if (ppo != null) { + List<String> taskRtuAddrs = this.sv.selectAllRtuAddrByTask("" + tpo.id); + if (taskRtuAddrs != null && taskRtuAddrs.size() > 0) { + cache = new UpgradeInfo(); + cache.ugTaskId = "" + tpo.id; + cache.ugOverallState = new UpgradeState() ; + cache.ugOverallState.rtuTotal = taskRtuAddrs.size() ; + cache.ugRtuStateList = new ArrayList<>() ; + for (String addr : taskRtuAddrs) { + UpgradeRtu rtu = new UpgradeRtu() ; + rtu.rtuAddr = addr ; + rtu.state = UpgradeRtu.STATE_UNSTART ; + rtu.totalPackage = (ppo.programBytes.length / 512) + ((ppo.programBytes.length % 512)>0?1:0) ; + rtu.isOver = false ; + cache.ugRtuStateList.add(rtu) ; + } + if(threadJob == null){ + threadJob = new ThreadJob() { + @Override + public Object execute() throws Exception { + while(!this.stop){ + if(!runInDemo()){ + this.stop = true ; + }else{ + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + return null; + } + }; + try{ + threadJob.start(new Callback() { + @Override + public void call(Object obj) { + } + @Override + public void call(Object... objs) { + } + @Override + public void exception(Exception e) { + } + }); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + } + } + } + } + private boolean runInDemo(){ + for(UpgradeRtu rtu : cache.ugRtuStateList){ + this.rtuUpgrade(rtu) ; + } + return this.statisticsNowUpgradeState() ; + } + private void rtuUpgrade(UpgradeRtu rtu){ + if(rtu.lastDownDt == null){ + //绗竴娆� + this.dealUpgradeFirstTime(rtu); + }else{ + this.dealUpgrade(rtu); + } + + } + private void dealUpgradeFirstTime(UpgradeRtu rtu){ + int n = Integer.parseInt(new CreateRandom().create(1)) ; + if(n == 0){ + rtu.state = UpgradeRtu.STATE_OFFLINE ; + rtu.currentPackage = 0 ; + rtu.currentRamAddr = 0x00 ; + rtu.lastDownDt = "" ; + rtu.lastDownDtAt = 0L ; + rtu.reTryTimes = 0 ; + rtu.isOver = false ; + }else{ + 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 = 0 ; + rtu.isOver = false ; + } + } + private void dealUpgrade(UpgradeRtu rtu){ + if(rtu.state == UpgradeRtu.STATE_OFFLINE){ + //绂荤嚎鐨勶紝涓嶅鐞� + return ; + } + + 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 ; + return ; + } + } + + if(n == 450 || n == 451 || n == 452 || n == 453 || n == 454 || n == 455){ + if(rtu.currentPackage != 1){ + //鍗囨 + rtu.state = UpgradeRtu.STATE_FAIL ; + 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 && + rtu.state != UpgradeRtu.STATE_FAIL){ + rtu.state = UpgradeRtu.STATE_RUNNING ; + rtu.currentPackage += 1 ; + rtu.currentRamAddr = 0x00 + UpgradeRtu.RAMADDRADD ; + rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + rtu.lastDownDtAt = System.currentTimeMillis() ; + rtu.isOver = false ; + } + + } + + /** + * 褰撳墠鍗囩骇鐘舵�� + * @return + */ + public boolean statisticsNowUpgradeState() { + boolean hasRunning = false ; + if(cache.ugRtuStateList != null && cache.ugRtuStateList.size() > 0){ + cache.ugOverallState.init(); + cache.ugOverallState.rtuTotal = cache.ugRtuStateList.size() ; + 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){ + cache.ugOverallState.runningTotal ++ ; + hasRunning = true ; + }else if(rtu.state == UpgradeRtu.STATE_SUCCESS) { + cache.ugOverallState.successTotal++; + }else if(rtu.state == UpgradeRtu.STATE_FAILONE) { + cache.ugOverallState.dieOneTotal++; + cache.ugOverallState.failTotal++; + }else if(rtu.state == UpgradeRtu.STATE_FAIL) { + cache.ugOverallState.dieMultiTotal++; + cache.ugOverallState.failTotal++; + } + if(rtu.isOver){ + cache.ugOverallState.overTotal++; + } + } + } + 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