pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
@@ -37,7 +37,7 @@ public int currentRamAddr ;// 当前下发升级包RTU存储地址 public String lastDownDt ;// 最后下发升级数据包时间(yyyy-mm-dd HH:HH:SS) public int reTryTimes ;//升级不成功,重试次数 public boolean isOver ; public boolean isOver ;//是否升级过程结束,1:结束,0:未结束 public String toString(){ StringBuilder sb = new StringBuilder(); pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java
@@ -1,7 +1,6 @@ package com.dy.pipIrrGlobal.daoRm; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoRm.RmWorkReportHistory; import com.dy.pipIrrGlobal.pojoRm.UgRtuController; import com.dy.pipIrrGlobal.voPr.VoController; import org.apache.ibatis.annotations.Mapper; @@ -111,4 +110,11 @@ * @return update count */ int updateByPrimaryKey(UgRtuController record); /** * 更新升级RTU的升级完成状态 * @param params * @return */ int updateRtuUpgradeState(Map<?, ?> params) ; } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram; import com.dy.pipIrrGlobal.pojoRm.UgRtuTask; import com.dy.pipIrrGlobal.voRm.VoUpgradeDetail; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -64,12 +65,24 @@ * */ List<UgRtuTask> selectSome(Map<?,?> params) ; /** * 得到所有升级程序记录ID和文件名称 * @return 实体集合 * */ List<UgRtuTask> selectAll() ; /** * 查询一个升级任务所有控制器地址 * @return 一些一些控制器地址 */ List<VoUpgradeDetail> selectTaskDetail(Long taskId) ; /** * 查询最新一条任务 * @return */ UgRtuTask selectLastTask() ; /** * update record selective * @param record the updated record pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java
@@ -3,9 +3,11 @@ import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.writer.ObjectWriterImplToString; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.dy.common.po.BaseEntity; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -19,7 +21,6 @@ @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor @Schema(name = "RTU远程升级所关联的测控一体阀 ") public class UgRtuController implements BaseEntity { @@ -53,5 +54,44 @@ @Schema(description = "控制器地址", requiredMode = Schema.RequiredMode.REQUIRED) public String rtuAddr; /** * 升级是否结束 */ @Schema(description = "升级是否结束", requiredMode = Schema.RequiredMode.NOT_REQUIRED) public Byte isOver; /** * 升级是否结束 */ @Schema(description = "升级是否结束", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @TableField(exist = false) public String isOverStr; /** * 升级状态 */ @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED) public Integer ugState; /** * 升级状态 */ @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.NOT_REQUIRED) public String ugStateStr; /** * 升级结束时间 */ @Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS") public Integer overDt; /** * 无参数据构造方法 */ public UgRtuController(){ this.isOver = 0; } } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoUpgradeDetail.java
New file @@ -0,0 +1,36 @@ package com.dy.pipIrrGlobal.voRm; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.common.softUpgrade.state.UpgradeState; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; import java.util.List; /** * @Author: liurunyu * @Date: 2024/11/13 13:47 * @Description */ @Data public class VoUpgradeDetail { //升级任务ID public String taskId; //任务创建人 public String taskCreator; //任务创建时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS") public Date taskDt; //程序文件名 public String hexFileName; //升级任务总体状态 public UpgradeState ugOverallState; //升级任务RTU状态列表 public List<UpgradeRtu> ugRtuStateList; } pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml
@@ -8,10 +8,13 @@ <result column="task_id" jdbcType="BIGINT" property="taskId" /> <result column="controller_id" jdbcType="BIGINT" property="controllerId" /> <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr" /> <result column="is_over" jdbcType="TINYINT" property="isOver" /> <result column="ug_state" jdbcType="INTEGER" property="ugState" /> <result column="over_dt" jdbcType="TIMESTAMP" property="overDt" /> </resultMap> <sql id="Base_Column_List"> <!--@mbg.generated--> id, task_id, controller_id, rtu_addr id, task_id, controller_id, rtu_addr, is_over, ug_state, over_dt </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> @@ -131,8 +134,10 @@ <!--@mbg.generated--> insert into ug_rtu_controller (id, task_id, controller_id, rtu_addr) values (#{id,jdbcType=BIGINT}, #{taskId,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{rtuAddr,jdbcType=VARCHAR}) values (#{id,jdbcType=BIGINT}, #{taskId,jdbcType=BIGINT}, #{controllerId,jdbcType=BIGINT}, #{rtuAddr,jdbcType=VARCHAR}, #{isOver,jdbcType=TINYINT}, #{ugState,jdbcType=INTEGER}, #{overDt,jdbcType=TIMESTAMP}) </insert> <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuController"> <!--@mbg.generated--> @@ -150,6 +155,15 @@ <if test="rtuAddr != null"> rtu_addr, </if> <if test="isOver != null"> is_over, </if> <if test="ugState != null"> ug_state, </if> <if test="overDt != null"> over_dt, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> @@ -163,6 +177,15 @@ </if> <if test="rtuAddr != null"> #{rtuAddr,jdbcType=VARCHAR}, </if> <if test="isOver != null"> #{isOver,jdbcType=TINYINT}, </if> <if test="ugState != null"> #{ugState,jdbcType=INTEGER}, </if> <if test="overDt != null"> #{overDt,jdbcType=TIMESTAMP}, </if> </trim> </insert> @@ -179,6 +202,15 @@ <if test="rtuAddr != null"> rtu_addr = #{rtuAddr,jdbcType=VARCHAR}, </if> <if test="isOver != null"> is_over = #{isOver,jdbcType=TINYINT}, </if> <if test="ugState != null"> ug_state = #{isOver,jdbcType=INTEGER}, </if> <if test="overDt != null"> over_dt = #{isOver,jdbcType=TIMESTAMP}, </if> </set> where id = #{id,jdbcType=BIGINT} </update> @@ -187,7 +219,20 @@ update ug_rtu_controller set task_id = #{taskId,jdbcType=BIGINT}, controller_id = #{controllerId,jdbcType=BIGINT}, rtu_addr = #{rtuAddr,jdbcType=VARCHAR} rtu_addr = #{rtuAddr,jdbcType=VARCHAR}, is_over = #{isOver,jdbcType=TINYINT}, ug_state = #{ugState,jdbcType=INTEGER}, over_dt = #{overDt,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} </update> <update id="updateRtuUpgradeState" > <!--@mbg.generated--> update ug_rtu_controller set is_over = #{isOver,jdbcType=TINYINT}, ug_state = #{state,jdbcType=INTEGER}, over_dt = #{overDt,jdbcType=TIMESTAMP} where task_id = #{taskId,jdbcType=BIGINT} and rtu_addr = #{rtuAddr,jdbcType=VARCHAR} </update> </mapper> pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml
@@ -17,15 +17,6 @@ <!--@mbg.generated--> id, program_id, creator, remark, dt, is_execute, is_over, deleted </sql> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" />, (CASE WHEN is_execute = 1 THEN '是' ELSE '否' END) AS isExecuteStr, (CASE WHEN is_over = 1 THEN '是' ELSE '否' END) AS isOverStr from ug_rtu_task where id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> <!--@mbg.generated--> delete from ug_rtu_task @@ -37,6 +28,23 @@ where id = #{id,jdbcType=BIGINT} </delete> <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" />, (CASE WHEN is_execute = 1 THEN '是' ELSE '否' END) AS isExecuteStr, (CASE WHEN is_over = 1 THEN '是' ELSE '否' END) AS isOverStr from ug_rtu_task where id = #{id,jdbcType=BIGINT} </select> <select id="selectLastTask" parameterType="java.lang.Long" resultMap="BaseResultMap"> <!--@mbg.generated--> select <include refid="Base_Column_List" /> from ug_rtu_task order by id desc limit 0, 1 </select> <select id="selectTotal" parameterType="java.util.Map" resultType="java.lang.Long"> <!--@mbg.generated--> @@ -87,6 +95,17 @@ order by bd.id DESC </select> <select id="selectTaskDetail" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voRm.VoUpgradeDetail"> <!--@mbg.generated--> select ttb.id as taskId, ttb.creator as taskCreator, ttb.dt as taskDt, ptb.hex_file_name as hexFileName from ug_rtu_task ttb inner join ug_rtu_program ptb on ttb.program_id = ptb.id where ttb.id = #{taskId,jdbcType=BIGINT} </select> <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.UgRtuTask"> <!--@mbg.generated--> pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
@@ -101,7 +101,7 @@ 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) ; UpgradeRtuDev ugRtu = new UpgradeRtuDev(this, rtuAddr, this.softFileDataGrp.length, UpgradeRtuDev.STATE_OFFLINE) ; this.upgradeRtus.put(rtuAddr, ugRtu) ; } } @@ -192,18 +192,18 @@ if(this.upgradeRtus != null && this.upgradeRtus.size() > 0){ Collection<UpgradeRtu> col = this.upgradeRtus.values() ; for(UpgradeRtu info : col){ if(info.state == UpgradeRtuDev.STATE_OFFLINE){ if(info.state == UpgradeRtu.STATE_OFFLINE){ state.offLineTotal ++ ; }else if(info.state == UpgradeRtuDev.STATE_UNSTART){ }else if(info.state == UpgradeRtu.STATE_UNSTART){ state.unStartTotal ++ ; }else if(info.state == UpgradeRtuDev.STATE_RUNNING){ }else if(info.state == UpgradeRtu.STATE_RUNNING){ state.runningTotal ++ ; }else if(info.state == UpgradeRtuDev.STATE_SUCCESS) { }else if(info.state == UpgradeRtu.STATE_SUCCESS) { state.successTotal++; }else if(info.state == UpgradeRtuDev.STATE_FAILONE) { }else if(info.state == UpgradeRtu.STATE_FAILONE) { state.failOneTotal++; state.failTotal++; }else if(info.state == UpgradeRtuDev.STATE_FAIL) { }else if(info.state == UpgradeRtu.STATE_FAIL) { state.failTotal++; } if(info.isOver){ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/CurUpgradeStateVo.java
New file @@ -0,0 +1,24 @@ package com.dy.pipIrrRemote.rtuUpgrage; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.common.softUpgrade.state.UpgradeState; import com.dy.pipIrrGlobal.voRm.VoUpgradeDetail; import lombok.Data; import java.util.List; /** * @Author: liurunyu * @Date: 2024/11/13 15:58 * @Description */ @Data public class CurUpgradeStateVo { //升级任务ID public VoUpgradeDetail upgrade ; //升级任务总体状态 public UpgradeState ugOverallState; //升级任务RTU状态列表 public List<UpgradeRtu> ugRtuStateList; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
@@ -2,13 +2,16 @@ import com.dy.common.aop.SsoAop; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.softUpgrade.state.UpgradeInfo; import com.dy.common.softUpgrade.state.UpgradeTaskVo; import com.dy.common.springUtil.SpringContextUtil; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram; import com.dy.pipIrrGlobal.pojoRm.UgRtuTask; import com.dy.pipIrrGlobal.rtuMw.ToRtuMwCom; import com.dy.pipIrrGlobal.voRm.VoUpgradeDetail; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -95,6 +98,7 @@ BaseResponse res = sendUpgradeTask2Mw(restTemplate, ugSendUrl, vo) ; if(res != null){ if(res.isSuccess()){ this.sv.setUpgradeTaskExecuted(id); return BaseResponseUtils.buildSuccess(true) ; }else{ log.error("通信中间件执行下发升级任务失败" + (res.getMsg() == null? "" : ("," + res.getMsg()))) ; @@ -116,4 +120,35 @@ vo.softByteSrc16 = ppo.programCrc16 ; } /** * 当前rtu远程升级任务执行状态 * @return 操作结果 */ @Operation(summary = "当前rtu远程升级任务执行状态", description = "当前rtu远程升级任务执行状态") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回操作成功与否数据(BaseResponse.content:Boolean)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @GetMapping(path = "/curUpgradeState") @SsoAop() public BaseResponse<UpgradeInfo> curUpgradeState(){ if(RtuUpgradeStateReceiverCtrl.cache == null){ //return BaseResponseUtils.buildError("当前没有升级任务") ; //正式运行时,下面两行去掉,上面一行打开 RtuUpgradeStateReceiverCtrl ctrl = SpringContextUtil.getBean(RtuUpgradeStateReceiverCtrl.class); ctrl.demo(); } CurUpgradeStateVo vo = new CurUpgradeStateVo() ; List<VoUpgradeDetail> list = this.sv.selectTaskDetail(RtuUpgradeStateReceiverCtrl.cache.ugTaskId); if(list != null && list.size() > 0){ vo.upgrade = list.get(0) ; } vo.ugOverallState = RtuUpgradeStateReceiverCtrl.cache.ugOverallState ; vo.ugRtuStateList = RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList ; return BaseResponseUtils.buildSuccess(vo) ; } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java
@@ -2,11 +2,23 @@ import com.dy.common.softUpgrade.state.UpgradeInfo; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.common.softUpgrade.state.UpgradeState; import com.dy.common.util.Callback; import com.dy.common.util.CreateRandom; import com.dy.common.util.DateTime; import com.dy.common.util.ThreadJob; import com.dy.common.webUtil.BaseResponse; import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram; import com.dy.pipIrrGlobal.pojoRm.UgRtuTask; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @Author: liurunyu @@ -18,22 +30,241 @@ @RestController @RequestMapping(path = "rtuUpgradeStateReceiver") public class RtuUpgradeStateReceiverCtrl { protected static UpgradeInfo cache ; @Autowired private RtuUpgradeSv sv ; /** * rtu远程升级任务通信中间件执行情况统计回收 * @param vo 数据 * @param info 数据 * @return 操作结果 */ @Hidden //不公开接口,其只有通信中间件调用 @PostMapping(path = "/receive") public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo vo){ log.info("接收到的RTU远程升级状态数据为:{}",vo.toString()); if(vo.ugRtuStateList != null && vo.ugRtuStateList.size() > 0){ if(vo.ugRtuStateList.size() < 10){ for (UpgradeRtu upgradeRtu : vo.ugRtuStateList) { log.info(upgradeRtu.toString()); public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo info){ log.info("接收到的RTU远程升级状态数据为:{}", info.toString()); //进行排序 //Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder()); //info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList()); if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ if(info.ugRtuStateList.size() < 10){ for (UpgradeRtu rtuVo : info.ugRtuStateList) { log.info(rtuVo.toString()); } } } if(cache == null){ //此时不做任务操作,只保障cache不为空, 等待下次发来数据 if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ List<UpgradeRtu> overList = info.ugRtuStateList.stream().filter(itemVo -> itemVo.isOver).collect(Collectors.toList()) ; if(overList != null && overList.size() > 0){ cache = info; this.save2Db(info.ugTaskId, overList); } } }else{ //当cache中有值时,进行比对存储,对比目的是防止重复操作数据库 if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ //此时保证两个集合都不为null this.save2Db(info.ugTaskId, info.ugRtuStateList, cache.ugRtuStateList); cache = info; } } return null; } /** * 比对并数据库存储 * @param taskId * @param list */ private void save2Db(String taskId, List<UpgradeRtu> list){ list.stream().forEach(vo -> { if(vo != null) { this.sv.saveRtuUpgradeState(Long.parseLong(taskId), vo); } }); } /** * 比对并数据库存储 * @param newList * @param oldList */ private void save2Db(String taskId, List<UpgradeRtu> newList, List<UpgradeRtu> oldList){ List<UpgradeRtu> newOverList = newList.stream().filter(vo -> vo.isOver).collect(Collectors.toList()) ; for(UpgradeRtu nvo : newOverList){ if(nvo != null) { if(oldList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr) && vo.isOver == false)){ //上次没有升级结束,而当前升级结束了 this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo); } } } } ///////////////////////////////////////////////////// // // 以下模拟数据 // ///////////////////////////////////////////////////// private static ThreadJob threadJob ; protected void demo(){ if(cache == null){ UgRtuTask tpo = this.sv.selectLastTask() ; if(tpo != null) { UgRtuProgram ppo = this.sv.selectProgramById(tpo.programId); if (ppo == null) { List<String> taskRtuAddrs = this.sv.selectAllRtuAddrByTask("" + tpo.id); if (taskRtuAddrs != null && taskRtuAddrs.size() > 0) { cache = new UpgradeInfo(); cache.ugTaskId = "" + tpo.id; cache.ugOverallState = new UpgradeState() ; cache.ugOverallState.rtuTotal = taskRtuAddrs.size() ; cache.ugRtuStateList = new ArrayList<>() ; for (String addr : taskRtuAddrs) { UpgradeRtu rtu = new UpgradeRtu() ; rtu.rtuAddr = addr ; rtu.state = UpgradeRtu.STATE_UNSTART ; rtu.totalPackage = (ppo.programBytes.length / 512) + ((ppo.programBytes.length % 512)>0?1:0) ; rtu.isOver = false ; cache.ugRtuStateList.add(rtu) ; } if(threadJob == null){ threadJob = new ThreadJob() { @Override public Object execute() throws Exception { runDemo() ; return null; } }; try{ threadJob.start(new Callback() { @Override public void call(Object obj) { } @Override public void call(Object... objs) { } @Override public void exception(Exception e) { } }); }catch (Exception e){ e.printStackTrace(); } } } } } } } private void runDemo(){ boolean hasRunning = true ; while (true){ for(UpgradeRtu rtu : cache.ugRtuStateList){ this.rtuUpgrade(rtu) ; hasRunning = this.statisticsNowUpgradeState() ; if(!hasRunning){ break ; } } if(!hasRunning){ break ; } try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } private void rtuUpgrade(UpgradeRtu rtu){ if(rtu.lastDownDt == null){ //第一次 this.dealUpgradeFirstTime(rtu); }else{ this.dealUpgrade(rtu); } } private void dealUpgradeFirstTime(UpgradeRtu rtu){ int n = Integer.parseInt(new CreateRandom().create(1)) ; if(n == 0){ rtu.state = UpgradeRtu.STATE_OFFLINE ; rtu.currentPackage = 0 ; rtu.currentRamAddr = 0x00 ; rtu.lastDownDt = "" ; rtu.reTryTimes = 0 ; rtu.isOver = false ; }else{ rtu.state = UpgradeRtu.STATE_RUNNING ; rtu.currentPackage = 1 ; rtu.currentRamAddr = 0x00 ; rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; rtu.reTryTimes = 0 ; rtu.isOver = false ; } } private void dealUpgrade(UpgradeRtu rtu){ if(rtu.state == UpgradeRtu.STATE_OFFLINE){ //离线的,不处理 return ; } int n = Integer.parseInt(new CreateRandom().create(2)) ; if(n == 44 || n == 45 || n == 54){ if(rtu.currentPackage == 1){ //1包死 rtu.state = UpgradeRtu.STATE_FAILONE ; return ; } } if(rtu.currentPackage == rtu.totalPackage){ //升级结束 rtu.state = UpgradeRtu.STATE_SUCCESS ; rtu.isOver = true ; return ; } rtu.state = UpgradeRtu.STATE_RUNNING ; rtu.currentPackage += 1 ; rtu.currentRamAddr = 0x00 + UpgradeRtu.RAMADDRADD ; rtu.lastDownDt = DateTime.yyyy_MM_dd_HH_mm_ss() ; rtu.reTryTimes = 0 ; rtu.isOver = false ; } /** * 当前升级状态 * @return */ public boolean statisticsNowUpgradeState() { boolean hasRunning = false ; if(cache.ugRtuStateList != null && cache.ugRtuStateList.size() > 0){ for(UpgradeRtu rtu : cache.ugRtuStateList){ if(rtu.state == UpgradeRtu.STATE_OFFLINE){ cache.ugOverallState.offLineTotal ++ ; }else if(rtu.state == UpgradeRtu.STATE_UNSTART){ cache.ugOverallState.unStartTotal ++ ; }else if(rtu.state == UpgradeRtu.STATE_RUNNING){ cache.ugOverallState.runningTotal ++ ; hasRunning = true ; }else if(rtu.state == UpgradeRtu.STATE_SUCCESS) { cache.ugOverallState.successTotal++; }else if(rtu.state == UpgradeRtu.STATE_FAILONE) { cache.ugOverallState.failOneTotal++; cache.ugOverallState.failTotal++; }else if(rtu.state == UpgradeRtu.STATE_FAIL) { cache.ugOverallState.failTotal++; } if(rtu.isOver){ cache.ugOverallState.overTotal++; } } } return hasRunning ; } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
@@ -1,15 +1,20 @@ package com.dy.pipIrrRemote.rtuUpgrage; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.pipIrrGlobal.daoRm.UgRtuControllerMapper; import com.dy.pipIrrGlobal.daoRm.UgRtuProgramMapper; import com.dy.pipIrrGlobal.daoRm.UgRtuTaskMapper; import com.dy.pipIrrGlobal.pojoRm.UgRtuProgram; import com.dy.pipIrrGlobal.pojoRm.UgRtuTask; import com.dy.pipIrrGlobal.voRm.VoUpgradeDetail; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; /** * @Author: liurunyu @@ -28,7 +33,7 @@ /** * 通信主键查询一个升级任务 * @param id 主键 * @param taskId 主键 * @return */ public UgRtuTask selectTaskById(String taskId){ @@ -51,4 +56,48 @@ public List<String> selectAllRtuAddrByTask(String taskId){ return this.cdao.selectAllRtuAddrByTask(Long.valueOf(taskId)) ; } /** * 查询一个升级任务有关信息 * @return 升级任务有关信息 */ public List<VoUpgradeDetail> selectTaskDetail(String taskId){ return this.tdao.selectTaskDetail(Long.valueOf(taskId)) ; } /** * 保存升级任务为执行状态 * @param taskId 任务ID */ public void setUpgradeTaskExecuted(String taskId){ this.tdao.executeById(Long.valueOf(taskId)) ; } /** * 保存RTU升级结束状态 * @param taskId * @param rtu */ public void saveRtuUpgradeState(Long taskId, UpgradeRtu rtu){ Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(rtu) ; params.put("taskId", taskId) ; params.put("overDt", new Date()) ; cdao.updateRtuUpgradeState(params) ; } ///////////////////////////////////////////////////// // // 以下模拟数据 // ///////////////////////////////////////////////////// /** * 通信主键查询一个升级任务 * @return */ public UgRtuTask selectLastTask(){ return tdao.selectLastTask(); } }