From d79d2f12c82cac10ba28117a9ee49bc5fdc2842d Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期三, 13 十一月 2024 16:05:28 +0800 Subject: [PATCH] 1、完善通信中间件远程升级任务模块; 2、web端实现升级任务发布执行功能; 3、web端实现升级任务执行监视功能; 4、web端添加模拟升级过程逻辑。 --- pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java | 42 ++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/CurUpgradeStateVo.java | 24 ++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java | 35 +++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoUpgradeDetail.java | 36 +++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java | 15 + pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml | 37 ++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java | 51 +++++ pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java | 245 +++++++++++++++++++++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml | 53 ++++ pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java | 14 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java | 2 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java | 8 12 files changed, 530 insertions(+), 32 deletions(-) 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 index e7ee7f7..09b02b9 100644 --- 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 @@ -37,7 +37,7 @@ public int currentRamAddr ;// 褰撳墠涓嬪彂鍗囩骇鍖匯TU瀛樺偍鍦板潃 public String lastDownDt ;// 鏈�鍚庝笅鍙戝崌绾ф暟鎹寘鏃堕棿锛坹yyy-mm-dd HH:HH:SS锛� public int reTryTimes ;//鍗囩骇涓嶆垚鍔燂紝閲嶈瘯娆℃暟 - public boolean isOver ; + public boolean isOver ;//鏄惁鍗囩骇杩囩▼缁撴潫锛�1锛氱粨鏉燂紝0锛氭湭缁撴潫 public String toString(){ StringBuilder sb = new StringBuilder(); diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java index a40bec4..a71e642 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuControllerMapper.java +++ b/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) ; } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java index fc74ad8..e3f4419 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/UgRtuTaskMapper.java +++ b/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) ; - /** * 寰楀埌鎵�鏈夊崌绾х▼搴忚褰旾D鍜屾枃浠跺悕绉� * @return 瀹炰綋闆嗗悎 * */ List<UgRtuTask> selectAll() ; + + /** + * 鏌ヨ涓�涓崌绾т换鍔℃墍鏈夋帶鍒跺櫒鍦板潃 + * @return 涓�浜涗竴浜涙帶鍒跺櫒鍦板潃 + */ + List<VoUpgradeDetail> selectTaskDetail(Long taskId) ; + + /** + * 鏌ヨ鏈�鏂颁竴鏉′换鍔� + * @return + */ + UgRtuTask selectLastTask() ; + /** * update record selective * @param record the updated record diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java index 60d0287..6656e9f 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/UgRtuController.java +++ b/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; + } + } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoUpgradeDetail.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoUpgradeDetail.java new file mode 100644 index 0000000..fdc0cd2 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoUpgradeDetail.java @@ -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; +} diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml index 4f7c663..a0015a4 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml +++ b/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> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml index a8d38c4..e91d8e6 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuTaskMapper.xml +++ b/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--> 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 e0b3d13..a8a05fc 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 @@ -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){ diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/CurUpgradeStateVo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/CurUpgradeStateVo.java new file mode 100644 index 0000000..1f094e8 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/CurUpgradeStateVo.java @@ -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; + +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java index c8436a0..8b53bb0 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java +++ b/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 = "杩斿洖鎿嶄綔鎴愬姛涓庡惁鏁版嵁锛圔aseResponse.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("褰撳墠娌℃湁鍗囩骇浠诲姟") ; + //姝e紡杩愯鏃讹紝涓嬮潰涓よ鍘绘帀锛屼笂闈竴琛屾墦寮� + 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) ; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java index 8032651..3c7ffa2 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java +++ b/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{ + //褰揷ache涓湁鍊兼椂锛岃繘琛屾瘮瀵瑰瓨鍌紝瀵规瘮鐩殑鏄槻姝㈤噸澶嶆搷浣滄暟鎹簱 + if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){ + //姝ゆ椂淇濊瘉涓や釜闆嗗悎閮戒笉涓簄ull + 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 ; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java index 59aa42f..626af0e 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java +++ b/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(); + } + } -- Gitblit v1.8.0