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){ pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeInfo.java
New file @@ -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; } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
New file @@ -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 ;// å½åä¸åå级å RTUåå¨å°å public String lastDownDt ;// æåä¸ååçº§æ°æ®å æ¶é´ï¼yyyy-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 ; } } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java
New file @@ -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; } } pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeTaskVo.java
New file @@ -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 ;//ææå级ç¨åºåèæ°CRC16æ ¡éªå¼ 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" ; } } 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 ; } 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); 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{ //åXæ¯«ç§ 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); } } //////////////////////////////////////////////////// // // åçº§ç¶æéç¥å·¥ä½çº¿ç¨æ§è¡å®æååè°çæ¹æ³ï¼ // ä¹å°±æ¯ä¸é¢executeæ¹æ³æ§è¡å®æè¿åææåºå¼å¸¸åï¼æ§è¡ä¸é¢ä¸ä¸ªæ¹æ³ // //////////////////////////////////////////////////// @Override public void call(Object obj) { //线ç¨å·¥ä½æ§è¡å®äºï¼obj = Boolean(true) this.thread = null ;//èµå¼ä¸ºnullï¼ä½¿çº¿ç¨å¯¹è±¡è¢«åå¾åæ¶å¨åæ¶ } @Override public void call(Object... objs) { } @Override public void exception(Exception e) { log.error("è¿ç¨å级伺æçº¿ç¨åçå¼å¸¸", e); } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtu.java
File was deleted pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeRtuDev.java
New file @@ -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 ; } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeState.java
File was deleted 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 ;//å级软件ï¼hexï¼æä»¶åç§° 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 ;//å½åæ£å¨å级çRTUä¸ªæ° 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("å级软件ï¼hexï¼æä»¶åç§°å¿ é¡»æä¾") ; } 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("ææå级ç¨åºåèæ°CRC16æ ¡éªå¼å¿ é¡»æä¾") ; } 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çé»è¾ï¼åªè¦RTUå¨å级ä¹åï¼æ¤å¤ugRtuStateä¸å®ä¸ä¸ºnull //为ä¿é©ï¼å®ç°ä¸é¢é»è¾ 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){ //å½åæ£å¨å级çRTUæ°éè¿æªåé ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ; }else{ //åæ¶å级çRTUæ°éåéï¼çå¾ ä¸æ¬¡æºä¼ //ä½å 表æä¸ä¸ç¶æ ugRtu.state = UpgradeRtuDev.STATE_UNSTART ; return ; } }else if(ugRtu.state == UpgradeRtuDev.STATE_UNSTART){ //æ ¹æ®ä¸é¢é»è¾ï¼ 说æå¿ ç¶å¨çº¿äº if(this.curUgRunningRtuTotal <= UpgradeUnit.confVo.ugMaxRtuAtOnce){ //å½åæ£å¨å级çRTUæ°éè¿æªåé ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ; }else{ //åæ¶å级çRTUæ°éåéï¼çå¾ ä¸æ¬¡æºä¼ return ; } }else{ //RTUå·²ç»å¤äºå级è¿ç¨ä¸ ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ; } }else{ //没æè®¾ç½®åæ¶å级çRTUæå¤§æ°éçéå¶ 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åçº§ä¿¡æ¯ * ä¸äºRtuåçº§ä¿¡æ¯ * @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 ; } } /////////////////////////////////////////////////////////// //以䏿¹æ³ä¸ºå 鍿å¡ï¼ä¸å¯¹å¤æä¾æå¡ /////////////////////////////////////////////////////////// /** * ç»è®¡å½åæ£å¨å级çRTUæ°éï¼ä¸ºåéåæ¶å级æ°éååå¤ */ 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 ; } } 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 ; }*/ } 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 ; } } 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 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; pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/webRequest/WebRequestDeal.java
New file @@ -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("严éé误ï¼web访é®çURL为空"); } } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(spɳÅÌ).xml
@@ -56,9 +56,17 @@ <!-- RTU 软件å级 enable: æ¨¡åæ¯å¦å¯å¨ failTryTimesï¼å级失败åï¼éæ°å¿è¯å级次æ°ï¼0表示ä¸éæ°å¿è¯å级 failTryTimesï¼å级失败åï¼éå¯¹çæ¯å¨çº¿è¿è¡äºå级ä¸åå½ä»¤ï¼ï¼éæ°å¿è¯å级次æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸éæ°å¿è¯å级 ugMaxRtuAtOnceï¼ä¸ºäºç¼è§£éä¿¡ä¸é´ä»¶çååï¼åæ¶æ¯æå级çRTUå°æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸åéå¶ rtuOffLineWaitDuration: rtu离线ï¼çå¾ å ¶åçº§çæ¶é¿ï¼ç§ï¼ï¼è¶ è¿è¿ä¸ªæ¶é´ï¼è®¾ç½®å ¶å级失败ï¼ä¸è®¾ç½®å级任å¡å®æ notifyStateInterval: åçº§ç¶æéç¥é´éï¼ç§ï¼ --> <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> <upgrade enable="true" failTryTimes="1" ugMaxRtuAtOnce="1000" rtuOffLineWaitDuration="1200" notifyStateInterval="2" /> <!-- æ¯ææ¨¡å pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(test²âÊÔ).xml
@@ -56,9 +56,17 @@ <!-- RTU 软件å级 enable: æ¨¡åæ¯å¦å¯å¨ failTryTimesï¼å级失败åï¼éæ°å¿è¯å级次æ°ï¼0表示ä¸éæ°å¿è¯å级 failTryTimesï¼å级失败åï¼éå¯¹çæ¯å¨çº¿è¿è¡äºå级ä¸åå½ä»¤ï¼ï¼éæ°å¿è¯å级次æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸éæ°å¿è¯å级 ugMaxRtuAtOnceï¼ä¸ºäºç¼è§£éä¿¡ä¸é´ä»¶çååï¼åæ¶æ¯æå级çRTUå°æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸åéå¶ rtuOffLineWaitDuration: rtu离线ï¼çå¾ å ¶åçº§çæ¶é¿ï¼ç§ï¼ï¼è¶ è¿è¿ä¸ªæ¶é´ï¼è®¾ç½®å ¶å级失败ï¼ä¸è®¾ç½®å级任å¡å®æ notifyStateInterval: åçº§ç¶æéç¥é´éï¼ç§ï¼ --> <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> <upgrade enable="true" failTryTimes="1" ugMaxRtuAtOnce="1000" rtuOffLineWaitDuration="1200" notifyStateInterval="2" /> <!-- æ¯ææ¨¡å pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config(ymԪı).xml
@@ -56,9 +56,17 @@ <!-- RTU 软件å级 enable: æ¨¡åæ¯å¦å¯å¨ failTryTimesï¼å级失败åï¼éæ°å¿è¯å级次æ°ï¼0表示ä¸éæ°å¿è¯å级 failTryTimesï¼å级失败åï¼éå¯¹çæ¯å¨çº¿è¿è¡äºå级ä¸åå½ä»¤ï¼ï¼éæ°å¿è¯å级次æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸éæ°å¿è¯å级 ugMaxRtuAtOnceï¼ä¸ºäºç¼è§£éä¿¡ä¸é´ä»¶çååï¼åæ¶æ¯æå级çRTUå°æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸åéå¶ rtuOffLineWaitDuration: rtu离线ï¼çå¾ å ¶åçº§çæ¶é¿ï¼ç§ï¼ï¼è¶ è¿è¿ä¸ªæ¶é´ï¼è®¾ç½®å ¶å级失败ï¼ä¸è®¾ç½®å级任å¡å®æ notifyStateInterval: åçº§ç¶æéç¥é´éï¼ç§ï¼ --> <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> <upgrade enable="true" failTryTimes="1" ugMaxRtuAtOnce="1000" rtuOffLineWaitDuration="1200" notifyStateInterval="2" /> <!-- æ¯ææ¨¡å pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.xml
@@ -56,9 +56,17 @@ <!-- RTU 软件å级 enable: æ¨¡åæ¯å¦å¯å¨ failTryTimesï¼å级失败åï¼éæ°å¿è¯å级次æ°ï¼0表示ä¸éæ°å¿è¯å级 failTryTimesï¼å级失败åï¼éå¯¹çæ¯å¨çº¿è¿è¡äºå级ä¸åå½ä»¤ï¼ï¼éæ°å¿è¯å级次æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸éæ°å¿è¯å级 ugMaxRtuAtOnceï¼ä¸ºäºç¼è§£éä¿¡ä¸é´ä»¶çååï¼åæ¶æ¯æå级çRTUå°æ°ï¼å½è®¾ç½®ä¸º0æ¶è¡¨ç¤ºä¸åéå¶ rtuOffLineWaitDuration: rtu离线ï¼çå¾ å ¶åçº§çæ¶é¿ï¼ç§ï¼ï¼è¶ è¿è¿ä¸ªæ¶é´ï¼è®¾ç½®å ¶å级失败ï¼ä¸è®¾ç½®å级任å¡å®æ notifyStateInterval: åçº§ç¶æéç¥é´éï¼ç§ï¼ --> <upgrade enable="true" failTryTimes="0" ugMaxRtuSameTime="1000" /> <upgrade enable="true" failTryTimes="1" ugMaxRtuAtOnce="1000" rtuOffLineWaitDuration="1200" notifyStateInterval="2" /> <!-- æ¯ææ¨¡å