pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voUg/VoUgRtuResult.java
New file @@ -0,0 +1,30 @@ package com.dy.pipIrrGlobal.voUg; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; import com.alibaba.excel.enums.poi.VerticalAlignmentEnum; import lombok.Data; /** * @Author: liurunyu * @Date: 2024/11/22 14:26 * @Description */ @Data @HeadRowHeight(26) @ContentRowHeight(22) public class VoUgRtuResult { @ExcelProperty("控制器地址") @ColumnWidth(20) @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER) public String rtuAddr; @ExcelProperty("升级结果") @ColumnWidth(30) @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT, verticalAlignment = VerticalAlignmentEnum.CENTER) public String result; } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
@@ -1,7 +1,8 @@ package com.dy.pipIrrRemote.rtuUpgrage; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.dy.common.aop.SsoAop; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.common.softUpgrade.state.UpgradeTaskVo; import com.dy.common.springUtil.SpringContextUtil; @@ -12,6 +13,8 @@ import com.dy.pipIrrGlobal.pojoUg.UgRtuProgram; import com.dy.pipIrrGlobal.pojoUg.UgRtuTask; import com.dy.pipIrrGlobal.rtuMw.ToRtuMwCom; import com.dy.pipIrrGlobal.voPr.VoDivide; import com.dy.pipIrrGlobal.voUg.VoUgRtuResult; import com.dy.pipIrrGlobal.voUg.VoWatch; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -19,15 +22,19 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -44,6 +51,9 @@ public class RtuUpgradeCtrl extends ToRtuMwCom { @Autowired private RtuUpgradeSv sv ; @Autowired RtuUpgradeResSv resSv ; @Autowired private Environment env; @@ -128,9 +138,10 @@ vo.softBytesCalculate = ppo.programCalculateBytes ; vo.softByteSrc16 = ppo.programCrc16 ; } /** * 监视: * 重置,演示的重置 * 重置远程升级演示程序 * @return 操作结果 */ @GetMapping(path = "/demoReset") @@ -166,7 +177,7 @@ if(qvo == null){ qvo = new QueryVo(); qvo.pageCurr = 1 ; qvo.pageSize = 50 ; qvo.pageSize = 49 ; } if(RtuUpgradeStateReceiverCtrl.cache == null){ //return BaseResponseUtils.buildError("当前没有升级任务") ; @@ -174,96 +185,50 @@ RtuUpgradeStateReceiverCtrl ctrl = SpringContextUtil.getBean(RtuUpgradeStateReceiverCtrl.class); ctrl.demo(); } QueryResultVo<VoWatch> rsVo = new QueryResultVo(); VoWatch vo = new VoWatch() ; List<UpgradeRtu> listFiltered = null ; if(RtuUpgradeStateReceiverCtrl.cache != null && RtuUpgradeStateReceiverCtrl.cache.ugTaskId != null){ vo.upgrade = this.sv.selectTaskDetail(RtuUpgradeStateReceiverCtrl.cache.ugTaskId); vo.overall = RtuUpgradeStateReceiverCtrl.cache.ugOverallState ; vo.rtus = new ArrayList<>() ; if(RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList != null && RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.size() > 0) { listFiltered = filterByQuery(qvo) ; if (listFiltered.size() > 0) { if(qvo.pageCurr < 1){ qvo.pageCurr = 1 ; } int start = (qvo.pageCurr - 1) * qvo.pageSize ; if(start >= listFiltered.size()){ if(listFiltered.size()%qvo.pageSize > 0){ start = listFiltered.size() - listFiltered.size()%qvo.pageSize ; }else{ start = listFiltered.size() - qvo.pageSize ; } } for(int i = start; i < (start + qvo.pageSize) && i < listFiltered.size(); i++){ UpgradeRtu ugRtu = listFiltered.get(i) ; VoWatch.VoWatchRtu rtu = new VoWatch.VoWatchRtu() ; rtu.fromCache(ugRtu) ; vo.rtus.add(rtu) ; } } } } rsVo.obj = vo ; rsVo.pageSize = qvo.pageSize ; rsVo.pageCurr = qvo.pageCurr ; rsVo.calculateAndSet(0L + (listFiltered==null?0:listFiltered.size()), null); QueryResultVo<VoWatch> rsVo = this.resSv.curUpgradeState(qvo) ; return BaseResponseUtils.buildSuccess(rsVo) ; } private List<UpgradeRtu> filterByQuery(QueryVo qvo){ if (qvo.status != null || qvo.result != null) { final Integer qvoStatus = qvo.status ; final Integer qvoResult = qvo.result ; final String qvoRtuAddr = qvo.rtuAddr ; return RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.stream().filter(rtu -> { boolean ok = false; if (qvoStatus != null) { if (qvoStatus.intValue() == 1) { if (rtu.state == UpgradeRtu.STATE_RUNNING) { ok = true; }else{ ok = false ; } } else if (qvoStatus.intValue() == 0) { if (rtu.isOver) { ok = true; }else{ ok = false ; } } } if (qvoResult != null) { if (qvoResult.intValue() == 1) { if (rtu.state == UpgradeRtu.STATE_SUCCESS) { ok = true; }else{ ok = false ; } } else if (qvoResult.intValue() == 0) { if (rtu.state == UpgradeRtu.STATE_OFFLINE || rtu.state == UpgradeRtu.STATE_FAILONE || rtu.state == UpgradeRtu.STATE_FAIL || rtu.state == UpgradeRtu.STATE_FAILOFFLINE) { ok = true; }else{ ok = false ; } } } if(qvoRtuAddr != null && !qvoRtuAddr.trim().equals("")){ if(rtu.rtuAddr.equals(qvoRtuAddr)){ ok = true; }else{ ok = false ; } } return ok; }).toList() ; }else{ return RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList ; } /** * 导出升级失败RTU列表 * @param response */ @RequestMapping(value = "/exportUgFail", method = RequestMethod.GET) public void exportUgFail(HttpServletResponse response) throws Exception { setExcelRespProp(response, "升级失败RTU列表"); List<VoUgRtuResult> rsList = resSv.exportUgFail(); EasyExcel.write(response.getOutputStream()) .head(VoUgRtuResult.class) .excelType(ExcelTypeEnum.XLSX) .sheet("升级失败RTU列表") .doWrite(rsList); } /** * 导出长级成功RTU列表 * @param response */ @RequestMapping(value = "/exportUgSuccess", method = RequestMethod.GET) public void exportUgSuccess(HttpServletResponse response) throws Exception { setExcelRespProp(response, "升级成功RTU列表"); List<VoUgRtuResult> rsList = resSv.exportUgSuccess(); EasyExcel.write(response.getOutputStream()) .head(VoUgRtuResult.class) .excelType(ExcelTypeEnum.XLSX) .sheet("升级成功RTU列表") .doWrite(rsList); } /** * 设置excel下载响应头属性 */ private void setExcelRespProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeResSv.java
New file @@ -0,0 +1,160 @@ package com.dy.pipIrrRemote.rtuUpgrage; import com.dy.common.softUpgrade.state.UpgradeRtu; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrGlobal.voUg.VoUgRtuResult; import com.dy.pipIrrGlobal.voUg.VoWatch; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * @Author liurunyu * @Date 2024/11/22 14:40 * @Description */ @Slf4j @Service public class RtuUpgradeResSv { @Autowired private RtuUpgradeSv sv ; public QueryResultVo<VoWatch> curUpgradeState(QueryVo qvo){ QueryResultVo<VoWatch> rsVo = new QueryResultVo<>(); VoWatch vo = new VoWatch() ; List<UpgradeRtu> listFiltered = null ; if(RtuUpgradeStateReceiverCtrl.cache != null && RtuUpgradeStateReceiverCtrl.cache.ugTaskId != null){ vo.upgrade = this.sv.selectTaskDetail(RtuUpgradeStateReceiverCtrl.cache.ugTaskId); vo.overall = RtuUpgradeStateReceiverCtrl.cache.ugOverallState ; vo.rtus = new ArrayList<>() ; if(RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList != null && RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.size() > 0) { listFiltered = filterByQuery(qvo) ; if (listFiltered.size() > 0) { if(qvo.pageCurr < 1){ qvo.pageCurr = 1 ; } int start = (qvo.pageCurr - 1) * qvo.pageSize ; if(start >= listFiltered.size()){ if(listFiltered.size()%qvo.pageSize > 0){ start = listFiltered.size() - listFiltered.size()%qvo.pageSize ; }else{ start = listFiltered.size() - qvo.pageSize ; } } for(int i = start; i < (start + qvo.pageSize) && i < listFiltered.size(); i++){ UpgradeRtu ugRtu = listFiltered.get(i) ; VoWatch.VoWatchRtu rtu = new VoWatch.VoWatchRtu() ; rtu.fromCache(ugRtu) ; vo.rtus.add(rtu) ; } } } } rsVo.obj = vo ; rsVo.pageSize = qvo.pageSize ; rsVo.pageCurr = qvo.pageCurr ; rsVo.calculateAndSet((long)(listFiltered==null?0:listFiltered.size()), null); return rsVo ; } /** * 过滤结果 * @param qvo 查询参数 * @return 集合 */ private List<UpgradeRtu> filterByQuery(QueryVo qvo){ if (qvo.status != null || qvo.result != null) { Integer qvoStatus = qvo.status ; Integer qvoResult = qvo.result ; String qvoRtuAddr = qvo.rtuAddr ; return RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.stream().filter(rtu -> { boolean ok = false; if (qvoStatus != null) { if (qvoStatus == 1) { ok = rtu.state == UpgradeRtu.STATE_RUNNING; } else if (qvoStatus == 0) { ok = rtu.isOver; } } if (qvoResult != null) { if (qvoResult == 1) { ok = rtu.state == UpgradeRtu.STATE_SUCCESS; } else if (qvoResult == 0) { ok = rtu.state == UpgradeRtu.STATE_OFFLINE || rtu.state == UpgradeRtu.STATE_FAILONE || rtu.state == UpgradeRtu.STATE_FAIL || rtu.state == UpgradeRtu.STATE_FAILOFFLINE; } } if(qvoRtuAddr != null && !qvoRtuAddr.trim().equals("")){ ok = rtu.rtuAddr.equals(qvoRtuAddr); } return ok; }).toList() ; }else{ return RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList ; } } /** * 过滤出当前长级任务中升级失败的RTU * @return 集合 */ public List<VoUgRtuResult> exportUgFail(){ List<VoUgRtuResult> list = new ArrayList<>() ; if(RtuUpgradeStateReceiverCtrl.cache != null && RtuUpgradeStateReceiverCtrl.cache.ugTaskId != null){ if(RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList != null && RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.size() > 0) { RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.forEach(rtu -> { if(rtu.isOver){ if(rtu.state == UpgradeRtu.STATE_OFFLINE || rtu.state == UpgradeRtu.STATE_UNSTART || rtu.state == UpgradeRtu.STATE_FAILOFFLINE){ VoUgRtuResult vo = new VoUgRtuResult() ; vo.rtuAddr = rtu.rtuAddr ; vo.result = "离线" ; list.add(vo); }else if(rtu.state == UpgradeRtu.STATE_FAILONE){ VoUgRtuResult vo = new VoUgRtuResult() ; vo.rtuAddr = rtu.rtuAddr ; vo.result = "一包死" ; list.add(vo); }else if(rtu.state == UpgradeRtu.STATE_FAIL){ VoUgRtuResult vo = new VoUgRtuResult() ; vo.rtuAddr = rtu.rtuAddr ; vo.result = "多包死" ; list.add(vo); } } }); } } return list ; } /** * 过滤出当前长级任务中升级成功的RTU * @return 集合 */ public List<VoUgRtuResult> exportUgSuccess(){ List<VoUgRtuResult> list = new ArrayList<>() ; if(RtuUpgradeStateReceiverCtrl.cache != null && RtuUpgradeStateReceiverCtrl.cache.ugTaskId != null){ if(RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList != null && RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.size() > 0) { RtuUpgradeStateReceiverCtrl.cache.ugRtuStateList.forEach(rtu -> { if(rtu.isOver){ if(rtu.state == UpgradeRtu.STATE_SUCCESS){ VoUgRtuResult vo = new VoUgRtuResult() ; vo.rtuAddr = rtu.rtuAddr ; vo.result = "升级成功" ; list.add(vo); } } }); } } return list ; } } pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
@@ -58,28 +58,6 @@ } /** * 查询一个升级任务有关信息 * @return 升级任务有关信息 */ public VoUpgradeDetail selectTaskDetail(String taskId){ List<VoUpgradeDetail> list = this.tdao.selectTaskDetail(Long.valueOf(taskId)) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存升级任务为执行状态 * @param taskId 任务ID */ public void setUpgradeTaskExecuted(String taskId){ this.tdao.executeById(Long.valueOf(taskId)) ; } /** * 保存RTU升级结束状态 * @param taskId * @param rtu @@ -91,17 +69,38 @@ cdao.updateRtuUpgradeState(params) ; } ///////////////////////////////////////////////////// // // 以下模拟数据 // ///////////////////////////////////////////////////// /** * 通信主键查询一个升级任务 * 查询一个升级任务有关信息 * @return 升级任务有关信息 */ public VoUpgradeDetail selectTaskDetail(String taskId){ List<VoUpgradeDetail> list = this.tdao.selectTaskDetail(Long.valueOf(taskId)) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存升级任务为执行状态 * @param taskId 任务ID */ public void setUpgradeTaskExecuted(String taskId){ this.tdao.executeById(Long.valueOf(taskId)) ; } ///////////////////////////////////////////////////// // // 以下演示升级功能用到 // ///////////////////////////////////////////////////// /** * 查询最新一个升级任务 * @return */ public UgRtuTask selectLastTask(){ return tdao.selectLastTask(); } }