| | |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | |
| | | //rtu不在升级之列 |
| | | return ; |
| | | } |
| | | } |
| | | if(ugRtu != null){ |
| | | }else{ |
| | | if(ugRtu.isOver){ |
| | | //当前RTU已经升级完成,无需再升级 |
| | | return; |
| | |
| | | ugRtu.trigger(code, protocolName, protocolVersion, this.softFileDataGrp, callbackCom) ; |
| | | } |
| | | } |
| | | }else{ |
| | | //rtu不在升级之列 |
| | | return ; |
| | | } |
| | | } |
| | | } |
| | |
| | | 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){ |
| | | AtomicBoolean hasRunning = new AtomicBoolean(false); |
| | | this.upgradeRtus.values().forEach(info ->{ |
| | | if(info.state == UpgradeRtu.STATE_OFFLINE){ |
| | | state.offLineTotal ++ ; |
| | | state.offLineTotal++ ; |
| | | }else if(info.state == UpgradeRtu.STATE_UNSTART){ |
| | | state.unStartTotal ++ ; |
| | | }else if(info.state == UpgradeRtu.STATE_RUNNING){ |
| | |
| | | state.failOneTotal++; |
| | | state.failTotal++; |
| | | }else if(info.state == UpgradeRtu.STATE_FAIL) { |
| | | state.failMultiTotal++; |
| | | state.failTotal++; |
| | | }else if(info.state == UpgradeRtu.STATE_FAILOFFLINE) { |
| | | state.failTotal++; |
| | | state.failOffTotal++; |
| | | } |
| | | if(info.isOver){ |
| | | state.overTotal++; |
| | | }else{ |
| | | hasRunning.set(true); |
| | | } |
| | | }); |
| | | if(!hasRunning.get()){ |
| | | state.allOver = true ; |
| | | }else{ |
| | | state.allOver = false ; |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /////////////////////////////////////////////////////////// |
| | | //以下方法为内部服务,不对外提供服务 |
| | | // |
| | | // 以下方法为内部服务,不对外提供服务 |
| | | // |
| | | /////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * 判断是否没用任何一个RTU进行过升级,而且超过了时限 |
| | | * @return -1:无一RTU升级且超时,0:无RTU升级但未超时等待,1有RTU升级正常执行 |
| | | */ |
| | | protected int countNoOneRtuUpgrade(){ |
| | | protected int countNoOneRtuUpgradeInDuration(){ |
| | | if(this.upgradeRtus == null || upgradeRtus.size() == 0){ |
| | | //当前没有任何一个设备进行过升级 |
| | | Long now = System.currentTimeMillis() ; |
| | |
| | | /** |
| | | * 统计当前正在升级的RTU数量,为同时升级数量限制做准备 |
| | | */ |
| | | protected void statisticsRunningRtuCount(){ |
| | | protected void countRunningRtuCount(){ |
| | | int runningTotal = 0 ; |
| | | Collection<UpgradeRtu> col = this.upgradeRtus.values() ; |
| | | for(UpgradeRtu info : col){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 统计需要升级但当前离线RTU的情况 |
| | | * 统计需要升级但当前离线RTU的情况,超过时限的设备为升级完成 |
| | | * @return -1:没有超时,0超时了且无因离线被强制设置升级完成的RTU,>0离线被强制设置升级完成的RTU数量 |
| | | */ |
| | | protected void statisticsOffRtuCountAndSet() { |
| | | protected int countOffRtuAndSetIfOver() { |
| | | Long now = System.currentTimeMillis() ; |
| | | if(now - this.setupDtLong > UpgradeUnit.confVo.rtuOffLineWaitDuration){ |
| | | //rtu离线,等待其升级的时长(毫秒),超过配置的最大时长,设置其升级失败,且设置升级任务完成 |
| | | int count = 0 ; |
| | | 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 ; |
| | | count ++ ; |
| | | } |
| | | } |
| | | } |
| | | return count ; |
| | | }else{ |
| | | return -1 ; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 统计是否升级全部结束 |
| | | */ |
| | | protected boolean statisticsIsAllOver() { |
| | | protected boolean countIsAllOver() { |
| | | if (this.taskVo.rtuAddrList != null && this.taskVo.rtuAddrList.size() > 0) { |
| | | Collection<UpgradeRtu> col = this.upgradeRtus.values() ; |
| | | for(UpgradeRtu info : col){ |