From 02319a08079d4800c11d96bb4afe7999156686d9 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 12 十一月 2024 15:07:51 +0800
Subject: [PATCH] 根据RTU上报状态清除虚拟IC卡占用状态逻辑中,增加一个日期时间限制,以防止清除计划开阀命令的中虚拟IC卡占用状态。
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java | 193 +++++++++++++++++++++++++++++++++++++----------
1 files changed, 150 insertions(+), 43 deletions(-)
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);
+ }
+
}
--
Gitblit v1.8.0