From 10238b43c767fba6a900680da3280f66994f3847 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期一, 11 十一月 2024 18:52:43 +0800 Subject: [PATCH] 继续实现通信中间件RTU嵌入式软件远程升级功能,并修改完善之前实现的部分。 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java | 53 +- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test测试).xml | 12 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ym元谋).xml | 12 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeTaskVo.java | 36 + pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/comResult/CommandResultDeal.java | 1 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java | 270 +++++++++---- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java | 6 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml | 12 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java | 33 + /dev/null | 29 - pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(sp沙盘).xml | 12 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java | 22 + pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ThreadJob.java | 19 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java | 10 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java | 19 + pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/webRequest/WebRequestDeal.java | 56 ++ pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java | 194 ++++++++++ pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java | 193 +++++++-- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeInfo.java | 20 + pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java | 78 ++++ 20 files changed, 881 insertions(+), 206 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java index 6e1bf56..9adc86b 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java @@ -4,6 +4,7 @@ import com.dy.common.util.ByteUtil; import java.io.*; +import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; @@ -156,6 +157,27 @@ /** * 浠�512涓哄崟浣嶅垎鍓叉暟鎹寘 + * @param bytes + */ + public List<byte[]> splitBytesByUnit512(byte[] bytes){ + List<byte[]> listByte512 = new ArrayList<>(); + if(bytes != null && bytes.length > 0){ + int index = 0 ; + while (true){ + if(index < bytes.length){ + byte[] bs = ByteUtil.bytesSplit(bytes, index, bytesSplitUnit512) ; + listByte512.add(bs) ; + }else{ + break ; + } + index += bytesSplitUnit512; + } + } + return listByte512 ; + } + + /** + * 浠�512涓哄崟浣嶅垎鍓叉暟鎹寘 * @param vo */ private void split(HexFileVo vo){ diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeInfo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeInfo.java new file mode 100644 index 0000000..7102291 --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeInfo.java @@ -0,0 +1,20 @@ +package com.dy.common.softUpgrade.state; + +import lombok.Data; + +import java.util.List; + +/** + * @Author: liurunyu + * @Date: 2024/11/11 17:32 + * @Description + */ +@Data +public class UpgradeInfo { + //鍗囩骇浠诲姟ID + public String ugTaskId; + //鍗囩骇浠诲姟鎬讳綋鐘舵�� + public UpgradeState ugOverallState; + //鍗囩骇浠诲姟RTU鐘舵�佸垪琛� + public List<UpgradeRtu> ugRtuStateList; +} diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java new file mode 100644 index 0000000..0c9b42b --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java @@ -0,0 +1,78 @@ +package com.dy.common.softUpgrade.state; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.dy.common.mw.protocol.Command; +import com.dy.common.util.Callback; +import lombok.Data; + +/** + * @Author: liurunyu + * @Date: 2024/11/11 17:33 + * @Description + */ +@Data +public class UpgradeRtu { + + @JSONField(serialize = false) + public static final int STATE_OFFLINE = -1 ;//-1-绂荤嚎 + @JSONField(serialize = false) + public static final int STATE_UNSTART = 0 ;//0-鏈紑濮� + @JSONField(serialize = false) + public static final int STATE_RUNNING = 1 ;//1-鍗囩骇涓� + @JSONField(serialize = false) + public static final int STATE_SUCCESS = 2 ;//2-鍗囩骇鎴愬姛 + @JSONField(serialize = false) + public static final int STATE_FAILONE = 3 ;//3-鍗囩骇澶辫触锛�1鍖呮锛� + @JSONField(serialize = false) + public static final int STATE_FAIL = 4 ;//4-鍗囩骇澶辫触锛堥潪1鍖呮锛� + @JSONField(serialize = false) + public static final int STATE_FAILOFFLINE = 5 ;//4-鍗囩骇澶辫触锛堢绾匡級 + @JSONField(serialize = false) + public static final int RAMADDRADD = 0x20 ;//绋嬪簭瀛樺偍鍐呭瓨鍦ㄥ潃澧為噺 + + public String rtuAddr ; + public int state ;// -1-绂荤嚎锛�0-鏈紑濮嬶紝1-鍗囩骇涓紝2-鍗囩骇鎴愬姛锛�3-鍗囩骇澶辫触锛�1鍖呮锛夛紝4-鍗囩骇澶辫触锛堥潪1鍖呮锛夛紝5-鍗囩骇澶辫触锛堢绾匡級 + public int totalPackage ;// 鎬诲寘鏁� + public int currentPackage ;// 褰撳墠涓嬪彂鍗囩骇鍖呮暟 + public int currentRamAddr ;// 褰撳墠涓嬪彂鍗囩骇鍖匯TU瀛樺偍鍦板潃 + public String lastDownDt ;// 鏈�鍚庝笅鍙戝崌绾ф暟鎹寘鏃堕棿锛坹yyy-mm-dd HH:HH:SS锛� + public int reTryTimes ;//鍗囩骇涓嶆垚鍔燂紝閲嶈瘯娆℃暟 + public boolean isOver ; + + /** + * 瑙﹀彂鍗囩骇 + * @param code + * @param softData + * @param callbackCom + */ + public void trigger(String code, + String protocolName, + Short protocolVersion, + byte[][] softData, + Callback callbackCom){ + return ; + } + + public Command createCommand1601(String protocolName, + Short protocolVersion){ + return null ; + } + + public Command createCommand1602(String protocolName, + Short protocolVersion, + int currentPackage, + Integer ramAddr, + byte[][] softData){ + return null ; + } + + public Command createCommand1603(String protocolName, + Short protocolVersion){ + return null ; + } + + public Command createCommand1600(String protocolName, + Short protocolVersion){ + return null ; + } +} diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java new file mode 100644 index 0000000..6e354ce --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java @@ -0,0 +1,33 @@ +package com.dy.common.softUpgrade.state; + +import lombok.Data; + +/** + * @Author: liurunyu + * @Date: 2024/11/4 15:14 + * @Description + */ +@Data +public class UpgradeState { + + public int rtuTotal ;//璁剧疆鍗囩骇RTU鏁� + public int offLineTotal ;//鎵�鏈夌绾跨殑 + public int unStartTotal ;//鎵�鏈夋湭寮�濮� + public int runningTotal ;//鎵�鏈夋鍦ㄥ崌绾� + public int overTotal ;//鎵�鏈夌粨鏉燂紙鍖呮嫭鎴愬姛涓庢墍鏈夊け璐ワ級 + public int successTotal ;//鎵�鏈夋垚鍔� + public int failTotal ;//鎵�鏈夊け璐� + public int failOneTotal ;//鎵�鏈変竴鍖呮澶辫触 + + public UpgradeState() { + this.rtuTotal = 0; + this.offLineTotal = 0; + this.unStartTotal = 0; + this.runningTotal = 0; + this.overTotal = 0; + this.successTotal = 0; + this.failTotal = 0; + } + + +} diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeTaskVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeTaskVo.java new file mode 100644 index 0000000..172cae9 --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeTaskVo.java @@ -0,0 +1,36 @@ +package com.dy.common.softUpgrade.state; + +import lombok.Data; + +import java.util.List; + +/** + * @Author: liurunyu + * @Date: 2024/11/8 13:40 + * @Description + */ +@Data +public class UpgradeTaskVo { + public String id ;//鍗囩骇浠诲姟ID + public String softFileName ;//鍗囩骇绋嬪簭鏂囦欢鍚� + public String softStoreAddr ;//鍗囩骇绋嬪簭瀛樻斁鍦板潃 + public String softStartAddr ;//绋嬪簭瑕嗙洊璧峰鍦板潃 + public byte[] softFileData ;//鏈夋晥鍗囩骇绋嬪簭瀛楄妭鏁扮粍 + public Integer softBytesCalculate ;//鏍规嵁鍏紡璁$畻寰楀埌鐨勬湁鏁堝崌绾х▼搴忓瓧鑺傛暟 + public Integer softByteSrc16 ;//鏈夋晥鍗囩骇绋嬪簭瀛楄妭鏁癈RC16鏍¢獙鍊� + public List<String> rtuAddrList ;//鎵�鍦ㄥ崌绾х殑鎺у埗鍣ㄥ湴鍧� + public String callbackWebUrl ;//鍥炶皟URL + + public String toString(){ + return "鍗囩骇浠诲姟:" + + " 鍗囩骇浠诲姟ID=" + id + "\n" + + " 鍗囩骇绋嬪簭鏂囦欢鍚�=" + softFileName + "\n" + + " 鍗囩骇绋嬪簭瀛樻斁鍦板潃=" + softStoreAddr + "\n" + + " 绋嬪簭瑕嗙洊璧峰鍦板潃=" + softStartAddr + "\n" + + " 鏈夋晥鍗囩骇绋嬪簭瀛楄妭鏁�=" + softFileData.length + "\n" + + " 鍏紡璁$畻绋嬪簭瀛楄妭鏁�=" + softBytesCalculate + + " 绋嬪簭CRC16鏍¢獙鍊�=" + softByteSrc16 + "\n" + + " 鍗囩骇鎺у埗鍣ㄦ暟閲�=" + rtuAddrList.size() + "\n" + + " 鍗囩骇鐘舵�侀�氱煡URL=" + callbackWebUrl + "\n" ; + } +} diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ThreadJob.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ThreadJob.java index aa3d138..35c75e0 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ThreadJob.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ThreadJob.java @@ -3,8 +3,19 @@ @SuppressWarnings("unused") public abstract class ThreadJob { - public void start(Callback callback){ - new Thread(() -> { + protected Thread thread ; + protected boolean stop = false ; + public void stop(){ + this.stop = true ; + } + public boolean isStop(){ + return this.stop ; + } + public Thread getThread(){ + return this.thread ; + } + public void start(Callback callback) throws Exception { + this.thread = new Thread(() -> { Exception[] exe = {null} ; Object[] obj = {null} ; try { @@ -21,9 +32,9 @@ } } } - }).start(); + }); + thread.start() ; } - public abstract Object execute() throws Exception ; } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java index 5813c26..e8edcb1 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/Server.java @@ -337,7 +337,11 @@ UpgradeUnitConfigVo ugVo = new UpgradeUnitConfigVo(); ugVo.enable = conf.getSetAttrBoolean(doc, "config.upgrade", "enable", null, null) ; ugVo.failTryTimes = conf.getSetAttrPlusInt(doc, "config.upgrade", "failTryTimes", null, 0, 100, null); - ugVo.ugMaxRtuSameTime = conf.getSetAttrPlusInt(doc, "config.upgrade", "ugMaxRtuSameTime", null, 1, 1000000, null); + ugVo.ugMaxRtuAtOnce = conf.getSetAttrPlusInt(doc, "config.upgrade", "ugMaxRtuSameTime", null, 0, 1000000, null); + ugVo.rtuOffLineWaitDuration = conf.getSetAttrPlusInt(doc, "config.upgrade", "rtuOffLineWaitDuration", null, 1, 36000, null); + ugVo.rtuOffLineWaitDuration = ugVo.rtuOffLineWaitDuration + 1000;//鍙樻垚姣 + ugVo.notifyStateInterval = conf.getSetAttrPlusInt(doc, "config.upgrade", "notifyStateInterval", null, 1, 300, null); + ugVo.notifyStateInterval = ugVo.notifyStateInterval + 1000;//鍙樻垚姣 ugVo.showStartInfo = showStartInfo ; AdapterImp_UpgradeUnit ugAdap = new AdapterImp_UpgradeUnit(); ugAdap.setConfig(ugVo); diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java index aff5c1b..540e811 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java @@ -1,6 +1,16 @@ package com.dy.rtuMw.server.upgrade; +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.softUpgrade.state.UpgradeTaskVo; +import com.dy.common.springUtil.SpringContextUtil; import com.dy.common.util.Callback; +import com.dy.common.util.DateTime; +import com.dy.common.util.ThreadJob; +import com.dy.rtuMw.web.webRequest.WebRequestDeal; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.List; @@ -9,7 +19,9 @@ * @Date: 2024/11/4 16:03 * @Description */ -public class UpgradeManager { +public class UpgradeManager extends ThreadJob implements Callback { + + private static final Logger log = LogManager.getLogger(UpgradeManager.class.getName()); private static final UpgradeManager INSTANCE = new UpgradeManager(); @@ -17,9 +29,6 @@ private Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁� private UpgradeTask task ;//鍗囩骇浠诲姟 - - private boolean taskIsOver = false ;//鍗囩骇浠诲姟鏄惁缁撴潫 - private int triggerTimes = 0 ;//杩炴帴瑙﹀彂娆℃暟 private UpgradeManager(){} @@ -32,46 +41,33 @@ */ public void initOption(UpgradeUnitConfigVo configVo) { this.failTryTimes = configVo.failTryTimes; - this.ugMaxRtuSameTime = configVo.ugMaxRtuSameTime; + this.ugMaxRtuSameTime = configVo.ugMaxRtuAtOnce; } /** * 璁剧疆鍗囩骇浠诲姟 - * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚� - * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃 - * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃 - * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍 - * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�) - * @param rtuAddrList 鍗囩骇RTU + * @param vo UpgradeTaskVo 鍗囩骇浠诲姟瀵硅薄 * @throws Exception */ - public void setUpgradeTask(String softFileName, - String softStoreAddr, - String softStartAddr, - byte[] softFileData, - Integer softBytesCalculate, - List<String> rtuAddrList) throws Exception { - if(this.task != null && !this.task.isOver()){ - throw new Exception("褰撳墠瀛樺湪鍗囩骇浠诲姟锛岃绛夊緟褰撳墠浠诲姟鎵ц瀹屾垨寮哄埗鍋滄褰撳墠浠诲姟"); - }else{ + public void setUpgradeTask(UpgradeTaskVo vo) throws Exception { + if(this.task != null && !this.task.taskIsOver){ + throw new Exception("褰撳墠瀛樺湪鍗囩骇浠诲姟锛岃绛夊緟褰撳墠浠诲姟鎵ц瀹屾垨寮哄埗缁撴潫褰撳墠浠诲姟"); + }else { this.task.forceOver(); this.task = new UpgradeTask(); this.task.initOption(this.failTryTimes, this.ugMaxRtuSameTime); - this.task.setTask(softFileName, - softStoreAddr, - softStartAddr, - softFileData, - softBytesCalculate, - rtuAddrList); + this.task.setTask(vo); + this.start(this); } } /** - * 鍋滄褰撳墠鍗囩骇浠诲姟 + * 缁撴潫褰撳墠鍗囩骇浠诲姟 * @throws Exception */ - public void stopUpgradeTask() throws Exception { + public void overUpgradeTask() throws Exception { if(this.task != null){ + this.stop(); this.task.forceOver(); } this.task = null ; @@ -83,20 +79,11 @@ * @param code * @param protocolName * @param protocolVersion - * @param callback + * @param callbackCom */ - public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callback){ - if(task != null && !taskIsOver){ - triggerTimes ++ ; - if(triggerTimes == 100){ - triggerTimes = 0 ; - if(this.task.isOver()){ - taskIsOver = true ; - } - } - if(!taskIsOver){ - this.task.trigger(rtuAddr, code, protocolName, protocolVersion, callback); - } + public void trigger(String rtuAddr, String code, String protocolName, Short protocolVersion, Callback callbackCom){ + if(task != null && !task.taskIsOver){ + this.task.trigger(rtuAddr, code, protocolName, protocolVersion, callbackCom); } } @@ -122,7 +109,7 @@ * @param rtuAddr * @return */ - public UpgradeRtu upgradeInfos(String rtuAddr){ + public UpgradeRtu upgradeRtuInfo(String rtuAddr){ if(task != null){ return task.upgradeInfos(rtuAddr) ; }else{ @@ -135,7 +122,7 @@ * @param rtuAddrList * @return */ - public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){ + public List<UpgradeRtu> upgradeRtuInfos(List<String> rtuAddrList){ if(task != null){ return task.upgradeInfos(rtuAddrList) ; }else{ @@ -144,4 +131,124 @@ } + /** + * Rtu鍗囩骇淇℃伅 + * @return + */ + public List<UpgradeRtu> upgradeRtuInfoAll(){ + if(task != null){ + return task.upgradeInfoAll() ; + }else{ + return null ; + } + } + + + //////////////////////////////////////////////////// + // + // 鍗囩骇鏈嶅姟宸ヤ綔绾跨▼鎵ц鐨勬柟娉� + // 缁熻鐘舵�� + 鐘舵�侀�氱煡 + // + //////////////////////////////////////////////////// + @Override + public Object execute() throws Exception { + boolean first = true ; + while (true){ + if(this.isStop()){ + break ; + } + if(first){ + try{ + //棣栨鍚姩锛屽仠1绉� + Thread.sleep(1000L); + }catch (Exception e){ + } + }else{ + try{ + //鍋淴姣 + Thread.sleep(UpgradeUnit.confVo.notifyStateInterval); + }catch (Exception e){ + } + } + if(this.task == null + || this.task.taskVo == null + || this.task.taskVo.rtuAddrList == null + || this.task.taskVo.rtuAddrList.size() == 0){ + //浠诲姟涓虹┖ + break ; + }else{ + if(!this.task.taskIsOver){ + //鍗囩骇浠诲姟鏈畬鎴� + //宸ヤ綔1锛氱粺璁″綋鍓嶆鍦ㄥ崌绾х殑RTU鏁伴噺锛屼负鍙楅檺鍚屾椂鍗囩骇鏁伴噺鍋氬噯澶� + this.task.statisticsRunningRtuCount() ; + + //宸ヤ綔2锛氱粺璁¢渶瑕佸崌绾т絾褰撳墠绂荤嚎RTU鐨勬儏鍐� + this.task.statisticsOffRtuCountAndSet() ; + + //宸ヤ綔3锛氱粺璁℃槸鍚﹀叏閮ㄥ崌绾у畬鎴� + this.task.taskIsOver = this.task.statisticsIsAllOver() ; + + if(this.task.taskIsOver){ + if(!this.task.taskOverType.equals(UpgradeTask.TaskOverType_Force)){ + //浠诲姟涓嶆槸寮哄埗缁撴潫鐨� + this.task.taskOverType = UpgradeTask.TaskOverType_Natural ;//浠诲姟瀹屾垚鏂瑰紡锛堣嚜鐒讹紝寮哄埗锛� + this.task.taskOverDt = DateTime.yyyy_MM_dd_HH_mm_ss() ;//浠诲姟瀹屾垚鏃堕棿(yyyy-mm-dd HH:MM:SS) + } + //浠诲姟瀹屾垚锛屾墽琛屾渶鍚庝竴娆″崌绾х姸鎬侀�氱煡 + //宸ヤ綔4锛氬崌绾х姸鎬侀�氱煡 + if(!first){ + this.notifyUpgradeStatus() ; + } + }else{ + //浠诲姟鏈畬鎴愶紝缁х画鎵ц鍗囩骇鐘舵�侀�氱煡 + //宸ヤ綔4锛� 鍗囩骇鐘舵�侀�氱煡 + if(!first){ + this.notifyUpgradeStatus() ; + } + } + }else{ + //浠诲姟宸茬粡瀹屾垚 + this.stop(); + } + } + if(first){ + first = false ; + } + } + return true ; + } + + /** + * 鍗囩骇鐘舵�侀�氱煡 + */ + private void notifyUpgradeStatus(){ + if(this.task.taskVo.callbackWebUrl != null && this.task.taskVo.callbackWebUrl.length() > 0){ + UpgradeInfo info = new UpgradeInfo() ; + info.ugTaskId = this.task.taskVo.id ;//浠诲姟ID + info.ugOverallState = this.currentUpgradeState() ; + info.ugRtuStateList = this.upgradeRtuInfoAll() ; + WebRequestDeal deal = SpringContextUtil.getBean(WebRequestDeal.class) ; + deal.deal(this.task.taskVo.callbackWebUrl, info); + } + } + + //////////////////////////////////////////////////// + // + // 鍗囩骇鐘舵�侀�氱煡宸ヤ綔绾跨▼鎵ц瀹屾垚鍚庡洖璋冪殑鏂规硶锛� + // 涔熷氨鏄笂闈xecute鏂规硶鎵ц瀹屾垚杩斿洖鎴栨姏鍑哄紓甯稿悗锛屾墽琛屼笅闈笁涓柟娉� + // + //////////////////////////////////////////////////// + @Override + public void call(Object obj) { + //绾跨▼宸ヤ綔鎵ц瀹屼簡锛宱bj = Boolean(true) + this.thread = null ;//璧嬪�间负null锛屼娇绾跨▼瀵硅薄琚瀮鍦惧洖鏀跺櫒鍥炴敹 + } + @Override + public void call(Object... objs) { + } + @Override + public void exception(Exception e) { + log.error("杩滅▼鍗囩骇浼烘湇绾跨▼鍙戠敓寮傚父", e); + } + } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java deleted file mode 100644 index 20bd36a..0000000 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java +++ /dev/null @@ -1,178 +0,0 @@ -package com.dy.rtuMw.server.upgrade; - -import com.alibaba.fastjson2.annotation.JSONField; -import com.dy.common.mw.protocol.Command; -import com.dy.common.mw.protocol.CommandType; -import com.dy.common.softUpgrade.Com1601Vo; -import com.dy.common.util.Callback; -import com.dy.common.util.DateTime; -import lombok.Data; - -/** - * @Author: liurunyu - * @Date: 2024/11/4 15:00 - * @Description - */ -@Data -public class UpgradeRtu { - - @JSONField(serialize = false) - public static final int STATE_UNSTART = 0 ; - @JSONField(serialize = false) - public static final int STATE_RUNNING = 1 ; - @JSONField(serialize = false) - public static final int STATE_SUCCESS = 2 ; - @JSONField(serialize = false) - public static final int STATE_FAILONE = 3 ; - @JSONField(serialize = false) - public static final int STATE_FAIL = 4 ; - @JSONField(serialize = false) - public static final int RAMADDRADD = 0x20 ;//绋嬪簭瀛樺偍鍐呭瓨鍦ㄥ潃澧為噺 - - @JSONField(serialize = false) - private UpgradeTask task ; - - public String rtuAddr ; - public int state ;// 0-鏈紑濮嬶紝1-鍗囩骇涓紝2-鍗囩骇鎴愬姛锛�3-鍗囩骇澶辫触锛�1鍖呮锛夛紝4-鍗囩骇澶辫触锛堥潪1鍖呮锛� - public int totalPackage ;// 鎬诲寘鏁� - public int currentPackage ;// 褰撳墠涓嬪彂鍗囩骇鍖呮暟 - public int currentRamAddr ;// 褰撳墠涓嬪彂鍗囩骇鍖匯TU瀛樺偍鍦板潃 - public String lastDownDt ;// 鏈�鍚庝笅鍙戝崌绾ф暟鎹寘鏃堕棿锛坹yyy-mm-dd HH:HH:SS锛� - public int reTryTimes ;//鍗囩骇涓嶆垚鍔燂紝閲嶈瘯娆℃暟 - - private UpgradeRtu(){ - } - - public UpgradeRtu(UpgradeTask task, String rtuAddr, int totalPackage) { - this.task = task ; - this.rtuAddr = rtuAddr ; - this.state = STATE_UNSTART ; - this.totalPackage = totalPackage ; - this.currentPackage = 0 ; - this.currentRamAddr = 0 ; - this.lastDownDt = "" ; - this.reTryTimes = 0 ; - } - - /** - * 瑙﹀彂鍗囩骇 - * @param code - * @param softData - * @param callback - */ - public void trigger(String code, String protocolName, Short protocolVersion, byte[][] softData, Callback callback){ - if(this.state == STATE_UNSTART){ - //褰撳墠鏈紑濮嬪崌绾ц繃绋� - this.state = STATE_RUNNING; - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护 - }else if(this.state == STATE_RUNNING){ - //褰撳墠鍗囩骇杩囩▼涓� - if(code.equals(UpgradeCode.cd_1601)){ - //涓嬪彂閰嶇疆杩斿洖 - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));//涓嬪彂鏁版嵁鍖呮寚浠� - }else if(code.equals(UpgradeCode.cd_1602)){ - //涓嬪彂鏁版嵁鍖呰繑鍥� - currentPackage++ ; - currentRamAddr += RAMADDRADD ; - if(currentPackage < totalPackage){ - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData)); - }else{ - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1603(protocolName, protocolVersion));//涓嬪彂鏍¢獙鎸囦护 - } - }else if(code.equals(UpgradeCode.cd_1603)){ - //涓嬪彂鏍¢獙杩斿洖 - this.state = STATE_SUCCESS ; - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1600(protocolName, protocolVersion));//涓嬪彂澶嶄綅鎸囦护锛屾鎸囦护鏃犲簲绛� - }else{ - if(this.state == STATE_FAILONE || this.state == STATE_FAIL){ - //宸茬粡鏄崌绾уけ璐ユ�� - if(this.reTryTimes < task.failTryTimes){ - //褰撳墠鏈紑濮嬪崌绾ц繃绋� - this.reTryTimes += 1 ; - this.state = STATE_RUNNING; - this.currentPackage = 0 ; - this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; - callback.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护 - } - }else{ - //闈炲崌绾у姛鑳界爜锛屽鏋滃湪鍗囩骇杩囩▼涓敹鍒拌繖涓姛鑳界爜鐨勪笂琛屾暟鎹紝璇存槑鍗囩骇澶辫触浜� - if(currentPackage == 0 || currentPackage == 1){ - //1鍖呮锛屽崌绾уけ璐� - this.state = STATE_FAILONE ; - }else{ - //闈�1鍖呮锛屽崌绾уけ璐� - this.state = STATE_FAIL ; - } - } - } - }else{ - //鍦ㄥ叾浠栫姸鎬佷笅锛屼笉瑙﹀彂浠诲姟宸ヤ綔 - } - } - - public Command createCommand1601(String protocolName, Short protocolVersion){ - Command com = new Command() ; - com.id = Command.defaultId ; - com.type = CommandType.outerCommand ; - com.rtuAddr = this.rtuAddr ; - com.code = UpgradeCode.cd_1601 ; - com.protocol = protocolName ; - com.protocolVersion = protocolVersion ; - com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; - - Com1601Vo vo = new Com1601Vo() ; - vo.softStoreAddr = this.task.softStoreAddr ; - vo.softStartAddr = this.task.softStartAddr ; - vo.totalByte = this.task.softBytesCalculate ; - vo.softCrc = this.task.softByteSrc16; - com.param = vo ; - return com ; - } - - public Command createCommand1602(String protocolName, Short protocolVersion, int currentPackage, Integer ramAddr, byte[][] softData){ - Command com = new Command() ; - com.id = Command.defaultId ; - com.type = CommandType.outerCommand ; - com.rtuAddr = this.rtuAddr ; - com.code = UpgradeCode.cd_1602 ; - com.protocol = protocolName ; - com.protocolVersion = protocolVersion ; - - com.param = ramAddr ; - - if(currentPackage < softData.length){ - com.attachment = softData[currentPackage] ; - } - com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; - return com ; - } - - public Command createCommand1603(String protocolName, Short protocolVersion){ - Command com = new Command() ; - com.id = Command.defaultId ; - com.type = CommandType.outerCommand ; - com.rtuAddr = this.rtuAddr ; - com.code = UpgradeCode.cd_1603 ; - com.protocol = protocolName ; - com.protocolVersion = protocolVersion ; - com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; - return com ; - } - - public Command createCommand1600(String protocolName, Short protocolVersion){ - Command com = new Command() ; - com.id = Command.defaultId ; - com.type = CommandType.outerCommand ; - com.rtuAddr = this.rtuAddr ; - com.code = UpgradeCode.cd_1600 ; - com.protocol = protocolName ; - com.protocolVersion = protocolVersion ; - com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; - return com ; - } -} diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java new file mode 100644 index 0000000..08b0b4f --- /dev/null +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java @@ -0,0 +1,194 @@ +package com.dy.rtuMw.server.upgrade; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.dy.common.mw.protocol.Command; +import com.dy.common.mw.protocol.CommandType; +import com.dy.common.softUpgrade.Com1601Vo; +import com.dy.common.softUpgrade.state.UpgradeRtu; +import com.dy.common.util.Callback; +import com.dy.common.util.DateTime; +import lombok.Data; + +/** + * @Author: liurunyu + * @Date: 2024/11/4 15:00 + * @Description + */ +@Data +public class UpgradeRtuDev extends UpgradeRtu { + + @JSONField(serialize = false) + private UpgradeTask task ; + + private UpgradeRtuDev(){ + } + + public UpgradeRtuDev(UpgradeTask task, String rtuAddr, int totalPackage) { + super(); + this.task = task ; + this.rtuAddr = rtuAddr ; + this.state = STATE_UNSTART ; + this.totalPackage = totalPackage ; + this.currentPackage = 0 ; + this.currentRamAddr = 0 ; + this.lastDownDt = "" ; + this.reTryTimes = 0 ; + this.isOver = false ; + } + + public UpgradeRtuDev(UpgradeTask task, String rtuAddr, int totalPackage, int state) { + super(); + this.task = task ; + this.rtuAddr = rtuAddr ; + this.state = state ; + this.totalPackage = totalPackage ; + this.currentPackage = 0 ; + this.currentRamAddr = 0 ; + this.lastDownDt = "" ; + this.reTryTimes = 0 ; + this.isOver = false ; + } + + /** + * 瑙﹀彂鍗囩骇 + * @param code + * @param softData + * @param callbackCom + */ + @Override + public void trigger(String code, String protocolName, Short protocolVersion, byte[][] softData, Callback callbackCom){ + if(this.state == STATE_OFFLINE || this.state == STATE_UNSTART){ + //褰撳墠鏈紑濮嬪崌绾ц繃绋嬶紝涓嬪彂鍗囩骇閰嶇疆鎸囦护 + this.setStateAtCom1601Time(); + callbackCom.call(createCommand1601(protocolName, protocolVersion)); + }else if(this.state == STATE_RUNNING){ + //褰撳墠鍗囩骇杩囩▼涓� + if(code.equals(UpgradeCode.cd_1601)){ + //涓嬪彂閰嶇疆杩斿洖 + this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + callbackCom.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData));//涓嬪彂鏁版嵁鍖呮寚浠� + }else if(code.equals(UpgradeCode.cd_1602)){ + //涓嬪彂鏁版嵁鍖呰繑鍥� + currentPackage++ ; + currentRamAddr += RAMADDRADD ; + if(currentPackage < totalPackage){ + this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + callbackCom.call(createCommand1602(protocolName, protocolVersion, currentPackage, currentRamAddr, softData)); + }else{ + this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + callbackCom.call(createCommand1603(protocolName, protocolVersion));//涓嬪彂鏍¢獙鎸囦护 + } + }else if(code.equals(UpgradeCode.cd_1603)){ + //涓嬪彂鏍¢獙杩斿洖 + this.isOver = true ;//鍗囩骇瀹屾垚 + this.state = STATE_SUCCESS ; + this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + callbackCom.call(createCommand1600(protocolName, protocolVersion));//涓嬪彂澶嶄綅鎸囦护锛屾鎸囦护鏃犲簲绛� + }else{ + if(!this.isOver){ + //鍗囩骇鏈畬鎴� + if(this.state == STATE_FAILONE || this.state == STATE_FAIL){ + //宸茬粡鏄崌绾уけ璐ユ�� + if(this.reTryTimes < task.failTryTimes){ + //閲嶈瘯娆℃暟鏈揪鍒颁笂闄愶紝缁х画閲嶈瘯 + this.reTryTimes += 1 ; + this.setStateAtCom1601Time(); + callbackCom.call(createCommand1601(protocolName, protocolVersion));//涓嬪彂閰嶇疆鎸囦护 + }else{ + this.isOver = true ;//鍗囩骇瀹屾垚 + } + }else{ + //闈炲崌绾у姛鑳界爜锛屽鏋滃湪鍗囩骇杩囩▼涓敹鍒拌繖涓姛鑳界爜鐨勪笂琛屾暟鎹紝璇存槑鍗囩骇澶辫触浜� + if(currentPackage == 0 || currentPackage == 1){ + //1鍖呮锛屽崌绾уけ璐� + this.state = STATE_FAILONE ; + }else{ + //闈�1鍖呮锛屽崌绾уけ璐� + this.state = STATE_FAIL ; + } + } + }else{ + //鍗囩骇瀹屾垚锛屾棤涓氬姟閫昏緫 + } + } + }else{ + //鍦ㄥ叾浠栫姸鎬佷笅锛屼笉瑙﹀彂浠诲姟宸ヤ綔 + } + } + + /** + * 璁剧疆鍙戦�侀厤缃懡浠ゆ椂鍒荤殑鐘舵�� + */ + private void setStateAtCom1601Time(){ + this.state = STATE_RUNNING; + this.currentPackage = 0 ; + this.currentRamAddr = 0 ; + this.isOver = false ; + this.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; + } + + @Override + public Command createCommand1601(String protocolName, Short protocolVersion){ + Command com = new Command() ; + com.id = Command.defaultId ; + com.type = CommandType.outerCommand ; + com.rtuAddr = this.rtuAddr ; + com.code = UpgradeCode.cd_1601 ; + com.protocol = protocolName ; + com.protocolVersion = protocolVersion ; + com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; + + Com1601Vo vo = new Com1601Vo() ; + vo.softStoreAddr = this.task.taskVo.softStoreAddr ; + vo.softStartAddr = this.task.taskVo.softStartAddr ; + vo.totalByte = this.task.taskVo.softBytesCalculate ; + vo.softCrc = this.task.taskVo.softByteSrc16; + com.param = vo ; + return com ; + } + + @Override + public Command createCommand1602(String protocolName, Short protocolVersion, int currentPackage, Integer ramAddr, byte[][] softData){ + Command com = new Command() ; + com.id = Command.defaultId ; + com.type = CommandType.outerCommand ; + com.rtuAddr = this.rtuAddr ; + com.code = UpgradeCode.cd_1602 ; + com.protocol = protocolName ; + com.protocolVersion = protocolVersion ; + + com.param = ramAddr ; + + if(currentPackage < softData.length){ + com.attachment = softData[currentPackage] ; + } + com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; + return com ; + } + + @Override + public Command createCommand1603(String protocolName, Short protocolVersion){ + Command com = new Command() ; + com.id = Command.defaultId ; + com.type = CommandType.outerCommand ; + com.rtuAddr = this.rtuAddr ; + com.code = UpgradeCode.cd_1603 ; + com.protocol = protocolName ; + com.protocolVersion = protocolVersion ; + com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; + return com ; + } + + @Override + public Command createCommand1600(String protocolName, Short protocolVersion){ + Command com = new Command() ; + com.id = Command.defaultId ; + com.type = CommandType.outerCommand ; + com.rtuAddr = this.rtuAddr ; + com.code = UpgradeCode.cd_1600 ; + com.protocol = protocolName ; + com.protocolVersion = protocolVersion ; + com.rtuResultSendWebUrl = Command.ignoreRtuResultSendWebUrl ; + return com ; + } +} diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java deleted file mode 100644 index 5832d6a..0000000 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.dy.rtuMw.server.upgrade; - -import lombok.Data; - -/** - * @Author: liurunyu - * @Date: 2024/11/4 15:14 - * @Description - */ -@Data -public class UpgradeState { - - public int rtuTotal ; - public int unStartTotal ; - public int runningTotal ; - public int overTotal ;//缁撴潫锛堝寘鎷垚鍔熶笌鎵�鏈夊け璐ワ級 - public int successTotal ;//鎵�鏈夋垚鍔� - public int failTotal ;//鎵�鏈夊け璐� - public int failOneTotal ;//涓�鍖呮澶辫触 - - public UpgradeState() { - this.rtuTotal = 0; - this.unStartTotal = 0; - this.runningTotal = 0; - this.overTotal = 0; - this.successTotal = 0; - this.failTotal = 0; - } -} 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 ; + } } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java index 9308d9d..e923f27 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java @@ -3,9 +3,8 @@ import com.dy.common.mw.UnitAdapterInterface; import com.dy.common.mw.UnitCallbackInterface; import com.dy.common.mw.UnitInterface; +import com.dy.common.softUpgrade.state.UpgradeTaskVo; import com.dy.common.util.Callback; - -import java.util.List; /** * @Author: liurunyu @@ -57,34 +56,19 @@ @Override public void stop(UnitCallbackInterface callback) throws Exception { - stopUpgradeTask() ; + overUpgradeTask() ; } /** * 璁剧疆鍗囩骇浠诲姟 - * @param softFileName 鍗囩骇绋嬪簭鏂囦欢鍚� - * @param softStoreAddr 鍗囩骇绋嬪簭瀛樻斁鍦板潃 - * @param softStartAddr 绋嬪簭瑕嗙洊璧峰鍦板潃 - * @param softFileData 鍗囩骇绋嬪簭瀛楄妭鏁扮粍 - * @param softBytesCalculate 鍗囩骇绋嬪簭瀛楄妭鏁�(鎸夊叕寮忚绠�) - * @param rtuAddrList 鍗囩骇RTU + * @param vo UpgradeTaskVo 鍗囩骇浠诲姟瀵硅薄 * @throws Exception */ - public void setUpgradeTask(String softFileName, - String softStoreAddr, - String softStartAddr, - byte[] softFileData, - Integer softBytesCalculate, - List<String> rtuAddrList) throws Exception { + public void setUpgradeTask(UpgradeTaskVo vo) throws Exception { if(manager != null ){ - manager.setUpgradeTask(softFileName, - softStoreAddr, - softStartAddr, - softFileData, - softBytesCalculate, - rtuAddrList) ; + manager.setUpgradeTask(vo) ; } } @@ -92,9 +76,9 @@ * 鍋滄褰撳墠鍗囩骇浠诲姟 * @throws Exception */ - public void stopUpgradeTask() throws Exception { + public void overUpgradeTask() throws Exception { if(manager != null ){ - manager.stopUpgradeTask() ; + manager.overUpgradeTask() ; } } @@ -118,37 +102,44 @@ /** * 褰撳墠鍗囩骇鐘舵�� * @return - */ public UpgradeState currentUpgradeState() { if(manager != null ){ return manager.currentUpgradeState(); } return null ; - } + }*/ /** * Rtu鍗囩骇淇℃伅 * @param rtuAddr * @return - */ - public UpgradeRtu upgradeInfos(String rtuAddr){ + public UpgradeRtuDev upgradeRtuInfo(String rtuAddr){ if(manager != null ){ return manager.upgradeInfos(rtuAddr); } return null ; - } + }*/ /** * Rtu鍗囩骇淇℃伅 * @param rtuAddrList * @return - */ - public List<UpgradeRtu> upgradeInfos(List<String> rtuAddrList){ + public List<UpgradeRtuDev> upgradeRtuInfos(List<String> rtuAddrList){ if(manager != null ){ return manager.upgradeInfos(rtuAddrList); } return null ; - } + }*/ + + /** + * Rtu鍗囩骇淇℃伅 + * @return + public List<UpgradeRtuDev> upgradeRtuInfoAll(){ + if(manager != null ){ + return manager.upgradeInfoAll(); + } + return null ; + }*/ } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java index 13e8350..5cc3ea9 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnitConfigVo.java @@ -9,12 +9,16 @@ public Boolean showStartInfo ; public Boolean enable ;//妯″潡鏄惁鍚姩 - public Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛�0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� - public Integer ugMaxRtuSameTime ;//鍚屾椂鍗囩骇RTU鏈�澶т釜鏁� + public Integer failTryTimes ;//鍗囩骇澶辫触鍚庯紙閽堝鐨勬槸鍦ㄧ嚎杩涜浜嗗崌绾т笅鍙戝懡浠わ級锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� + public Integer ugMaxRtuAtOnce;//涓轰簡缂撹В閫氫俊涓棿浠剁殑鍘嬪姏锛屽悓鏃舵敮鎸佸崌绾х殑RTU鍙版暟 + public Integer rtuOffLineWaitDuration;//rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀�(姣)锛岃秴杩囪繖涓椂闂达紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴� + public Integer notifyStateInterval;//鍗囩骇鐘舵�侀�氱煡闂撮殧锛堟绉掞級 public UpgradeUnitConfigVo(){ this.enable = false ; this.failTryTimes = 0 ; - this.failTryTimes = 1000000 ; + this.ugMaxRtuAtOnce = Integer.MAX_VALUE ; + this.rtuOffLineWaitDuration = 10 * 60 * 60 * 1000 ; + this.notifyStateInterval = 2000 ; } } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java index 3541104..46ad9d1 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java @@ -1,5 +1,6 @@ package com.dy.rtuMw.web.com; +import com.dy.common.softUpgrade.state.UpgradeTaskVo; import com.dy.rtuMw.resource.ResourceUnit; import com.dy.rtuMw.server.ServerProperties; import com.dy.rtuMw.server.forTcp.TcpSessionCache; @@ -11,6 +12,7 @@ import com.dy.common.mw.protocol.CommandType; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; +import com.dy.rtuMw.server.upgrade.UpgradeUnit; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -142,6 +144,23 @@ } } /** + * 鎺ユ敹web绯荤粺鍙戞潵鍗囩骇浠诲姟 + * @param vo + * @return + */ + @PostMapping(path = "upgradeRtu", consumes = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse<Boolean> upgradeRtu(@RequestBody UpgradeTaskVo vo) { + log.info("鏀跺埌RTU鍗囩骇浠诲姟锛歕n" + vo.toString()) ; + try{ + UpgradeUnit.getInstance().setUpgradeTask(vo); + }catch (Exception e){ + log.error("璁剧疆RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�", e); + return BaseResponseUtils.buildError("璁剧疆RTU鍗囩骇浠诲姟鏃跺彂鐢熷紓甯�" + (e.getMessage() == null?"":("锛�" + e.getMessage()))); + } + return BaseResponseUtils.buildSuccess(true); + } + + /** * 鎺ユ敹web绯荤粺鍙戞潵鐨勫懡浠� * @param com * @return diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/comResult/CommandResultDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/comResult/CommandResultDeal.java index 58b046e..4049247 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/comResult/CommandResultDeal.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/comResult/CommandResultDeal.java @@ -47,6 +47,7 @@ // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛 response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, WebResponseVo.class); } catch (Exception e) { + log.error("鍛戒护缁撴灉鍥炶皟鍙戠敓寮傚父", e); e.printStackTrace(); } //assert response != null; diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/webRequest/WebRequestDeal.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/webRequest/WebRequestDeal.java new file mode 100644 index 0000000..5a422e2 --- /dev/null +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/webRequest/WebRequestDeal.java @@ -0,0 +1,56 @@ +package com.dy.rtuMw.web.webRequest; + +import com.dy.common.mw.protocol.Command; +import com.dy.rtuMw.web.comResult.WebResponseVo; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.*; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.nio.charset.StandardCharsets; + +/** + * @Author: liurunyu + * @Date: 2024/11/11 16:29 + * @Description + */ +@Component() +public class WebRequestDeal { + + private static final Logger log = LogManager.getLogger(WebRequestDeal.class.getName()); + + private RestTemplate restTemplate; + + @Autowired + public void setRestTemplate(RestTemplate restTemplate){ + this.restTemplate = restTemplate ; + } + + public void deal(String webUrl, Object obj) { + if (webUrl != null + && !webUrl.trim().equals("") + && !webUrl.trim().equals(Command.ignoreRtuResultSendWebUrl)) { + String url = UriComponentsBuilder.fromUriString(webUrl) + .build() + .toUriString(); + restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8")); + HttpEntity<?> httpEntity = new HttpEntity<>(obj, headers); + ResponseEntity<WebResponseVo> response = null; + try { + // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛 + response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, WebResponseVo.class); + } catch (Exception e) { + log.error("web璁块棶璇锋眰鍙戠敓寮傚父", e); + } + //assert response != null; + } else { + log.error("涓ラ噸閿欒锛寃eb璁块棶鐨刄RL涓虹┖"); + } + } +} diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" index c6199ea..50849b5 100644 --- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" +++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050sp\346\262\231\347\233\230\051.xml" @@ -56,9 +56,17 @@ <!-- RTU 杞欢鍗囩骇 enable: 妯″潡鏄惁鍚姩 - failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� + failTryTimes锛氬崌绾уけ璐ュ悗锛堥拡瀵圭殑鏄湪绾胯繘琛屼簡鍗囩骇涓嬪彂鍛戒护锛夛紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉閲嶆柊鍋胯瘯鍗囩骇 + ugMaxRtuAtOnce锛氫负浜嗙紦瑙i�氫俊涓棿浠剁殑鍘嬪姏锛屽悓鏃舵敮鎸佸崌绾х殑RTU鍙版暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉鍙楅檺鍒� + rtuOffLineWaitDuration: rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀匡紙绉掞級锛岃秴杩囪繖涓椂闂达紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴� + notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛� --> - <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> + <upgrade enable="true" + failTryTimes="1" + ugMaxRtuAtOnce="1000" + rtuOffLineWaitDuration="1200" + notifyStateInterval="2" + /> <!-- 鏀寔妯″潡 diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" index 1d9e0bb..7270793 100644 --- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" +++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050test\346\265\213\350\257\225\051.xml" @@ -56,9 +56,17 @@ <!-- RTU 杞欢鍗囩骇 enable: 妯″潡鏄惁鍚姩 - failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� + failTryTimes锛氬崌绾уけ璐ュ悗锛堥拡瀵圭殑鏄湪绾胯繘琛屼簡鍗囩骇涓嬪彂鍛戒护锛夛紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉閲嶆柊鍋胯瘯鍗囩骇 + ugMaxRtuAtOnce锛氫负浜嗙紦瑙i�氫俊涓棿浠剁殑鍘嬪姏锛屽悓鏃舵敮鎸佸崌绾х殑RTU鍙版暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉鍙楅檺鍒� + rtuOffLineWaitDuration: rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀匡紙绉掞級锛岃秴杩囪繖涓椂闂达紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴� + notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛� --> - <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> + <upgrade enable="true" + failTryTimes="1" + ugMaxRtuAtOnce="1000" + rtuOffLineWaitDuration="1200" + notifyStateInterval="2" + /> <!-- 鏀寔妯″潡 diff --git "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" index 271c312..b061c20 100644 --- "a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" +++ "b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config\050ym\345\205\203\350\260\213\051.xml" @@ -56,9 +56,17 @@ <!-- RTU 杞欢鍗囩骇 enable: 妯″潡鏄惁鍚姩 - failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� + failTryTimes锛氬崌绾уけ璐ュ悗锛堥拡瀵圭殑鏄湪绾胯繘琛屼簡鍗囩骇涓嬪彂鍛戒护锛夛紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉閲嶆柊鍋胯瘯鍗囩骇 + ugMaxRtuAtOnce锛氫负浜嗙紦瑙i�氫俊涓棿浠剁殑鍘嬪姏锛屽悓鏃舵敮鎸佸崌绾х殑RTU鍙版暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉鍙楅檺鍒� + rtuOffLineWaitDuration: rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀匡紙绉掞級锛岃秴杩囪繖涓椂闂达紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴� + notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛� --> - <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> + <upgrade enable="true" + failTryTimes="1" + ugMaxRtuAtOnce="1000" + rtuOffLineWaitDuration="1200" + notifyStateInterval="2" + /> <!-- 鏀寔妯″潡 diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml index 037768a..d004b59 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml @@ -56,9 +56,17 @@ <!-- RTU 杞欢鍗囩骇 enable: 妯″潡鏄惁鍚姩 - failTryTimes锛氬崌绾уけ璐ュ悗锛岄噸鏂板伩璇曞崌绾ф鏁帮紝0琛ㄧず涓嶉噸鏂板伩璇曞崌绾� + failTryTimes锛氬崌绾уけ璐ュ悗锛堥拡瀵圭殑鏄湪绾胯繘琛屼簡鍗囩骇涓嬪彂鍛戒护锛夛紝閲嶆柊鍋胯瘯鍗囩骇娆℃暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉閲嶆柊鍋胯瘯鍗囩骇 + ugMaxRtuAtOnce锛氫负浜嗙紦瑙i�氫俊涓棿浠剁殑鍘嬪姏锛屽悓鏃舵敮鎸佸崌绾х殑RTU鍙版暟锛屽綋璁剧疆涓�0鏃惰〃绀轰笉鍙楅檺鍒� + rtuOffLineWaitDuration: rtu绂荤嚎锛岀瓑寰呭叾鍗囩骇鐨勬椂闀匡紙绉掞級锛岃秴杩囪繖涓椂闂达紝璁剧疆鍏跺崌绾уけ璐ワ紝涓旇缃崌绾т换鍔″畬鎴� + notifyStateInterval: 鍗囩骇鐘舵�侀�氱煡闂撮殧锛堢锛� --> - <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> + <upgrade enable="true" + failTryTimes="1" + ugMaxRtuAtOnce="1000" + rtuOffLineWaitDuration="1200" + notifyStateInterval="2" + /> <!-- 鏀寔妯″潡 -- Gitblit v1.8.0