wuzeyu
2024-11-29 ac87f61568a68501aa50d5c3f0d083e8ea36ebb3
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
1 文件已重命名
31个文件已修改
1个文件已添加
1个文件已删除
1118 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CreateRandom.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeTaskTypeMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoProcessingResult.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoTaskType.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voUg/VoUgResult.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voUg/VoUgRtuResult.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(sp沙盘系统).yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test测试系统).yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ym元谋系统).yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(开发测试---166PC机).yml 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeTaskTypeMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryUgResultVo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultSv.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeRtu.java
@@ -65,7 +65,7 @@
            case STATE_FAILONE:
                return "一包死";
            case STATE_FAIL:
                return "升级中死";
                return "多包死";
            case STATE_FAILOFFLINE:
                return "离线失败";
            default:
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/state/UpgradeState.java
@@ -17,8 +17,8 @@
    public int overTotal ;//所有结束(包括成功与所有失败)
    public int successTotal ;//所有成功
    public int failTotal ;//所有失败(一包死失败+多包死失败+离线失败)
    public int failOneTotal ;//所有一包死失败
    public int failMultiTotal ;//所有多包死失败
    public int dieOneTotal;//所有一包死
    public int dieMultiTotal;//所有多包死
    public int failOffTotal ;//所有离线失败
    public Boolean allOver ;//所有都结束(true:是,false:否)
@@ -35,8 +35,8 @@
        this.overTotal = 0;
        this.successTotal = 0;
        this.failTotal = 0;
        this.failOneTotal = 0;
        this.failMultiTotal = 0;
        this.dieOneTotal = 0;
        this.dieMultiTotal = 0;
        this.failOffTotal = 0;
        this.allOver = false ;
    }
@@ -51,8 +51,8 @@
        sb.append("    \n已结束总数:" + overTotal) ;
        sb.append("    \n成功总数:" + successTotal) ;
        sb.append("    \n失败总数:" + failTotal) ;
        sb.append("    \n一包死失败总数:" + failOneTotal) ;
        sb.append("    \n多包死失败总数:" + failMultiTotal) ;
        sb.append("    \n一包死失败总数:" + dieOneTotal) ;
        sb.append("    \n多包死失败总数:" + dieMultiTotal) ;
        sb.append("    \n离线失败总数:" + failOffTotal) ;
        sb.append("    \n全结束:" + allOver) ;
        return sb.toString() ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CreateRandom.java
@@ -11,17 +11,20 @@
    /*
    public static void main(String[] args) {
        System.out.println(CreateRandom.random(1, 0));
        System.out.println(CreateRandom.random(2, 0));
        System.out.println(CreateRandom.random(3, 0));
        System.out.println(CreateRandom.random(4, 0));
        System.out.println(CreateRandom.random(5, 0));
        System.out.println(CreateRandom.random(100, 0));
        System.out.println(CreateRandom.random(1256, 1234));
//        System.out.println(CreateRandom.random(1, 0));
//        System.out.println(CreateRandom.random(2, 0));
//        System.out.println(CreateRandom.random(3, 0));
//        System.out.println(CreateRandom.random(4, 0));
//        System.out.println(CreateRandom.random(5, 0));
//        System.out.println(CreateRandom.random(100, 0));
//        System.out.println(CreateRandom.random(1256, 1234));
        System.out.println("=======================");
        System.out.println(create_between(10, 100));
        for(int i = 0 ; i < 100; i++){
            System.out.println(create_between(10, 100));
        }
    }
    */
    
    /**
     * 4位随机数据
@@ -81,13 +84,8 @@
        if(max - min < min/2){
            return min ;
        }
        String minStr = String.valueOf(min) ;
        int len = minStr.length() ;
        char minFirst = minStr.charAt(0) ;
        double d = Math.random();
        d = d * 10000000 ;
        String s = String.valueOf(d);
        s = minFirst + s ;
        int len = String.valueOf(min).length() ;
        String s = String.valueOf(Math.random() * 10000000);
        s = s.substring(0 ,len) ;
        int n = Integer.parseInt(s) ;
        if(n < min || n > max){
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeTaskTypeMapper.java
@@ -2,7 +2,10 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeTaskType;
import com.dy.pipIrrGlobal.voOp.VoTaskType;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * @author ZhuBaoMin
@@ -24,4 +27,12 @@
    int updateByPrimaryKeySelective(OpeTaskType record);
    int updateByPrimaryKey(OpeTaskType record);
    /**
     * èŽ·å–ä»»åŠ¡ç±»åž‹åˆ—è¡¨
     * @return
     */
    List<VoTaskType> getTaskTypes();
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/Web2RtuMw.java
File was renamed from pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/rtuMw/ToRtuMwCom.java
@@ -19,33 +19,71 @@
 * @Date: 2024/10/23 11:45
 * @Description
 */
public abstract class ToRtuMwCom {
public abstract class Web2RtuMw {
    /**
     * pro_mw:属性
     * tag从控制器中获取
     * key_mw:url的key
     */
    private static final String pro_mw = "mw";
    private static final String key_mw = "comSendUrl";
    private static final String keyUg_mw = "ugTaskSendUrl";
    private static final String pro_url = "url";
    protected static final String ContextComSend = "/rtuMw/com/send";
    protected static final String ContextRtuLogFile = "/rtuMw/com/rtuLogFile";
    protected static final String ContextRtuLogText = "/rtuMw/com/rtuLogText";
    protected static final String ContextUgTaskSend = "/rtuMw/com/upgradeRtu";
    protected static final String ContextUgForceOver = "/rtuMw/com/ugForceOver";
    /**
     * å¾—到向通信中间件发送数据的URL
     * @param env
     * @return
     */
    protected String getToMwUrl(Environment env) {
        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw);
    protected String get2MwUrl(Environment env) {
        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + pro_url);
    }
    /**
     * å¾—到向通信中间件发送强制停止升级的命令URL
     * @param env
     * @return
     */
    protected String get2MwRequestUrl(Environment env, String context) {
        return get2MwUrl(env) + context;
    }
    /**
     * å¾—到向通信中间件发送数据的URL
     * @param env
     * å‘通信中间件发送rtu远程升级任务
     * @param restTemplate SpringBoot的RestTemplate
     * @param toMwUrl åˆ°é€šä¿¡ä¸­é—´ä»¶çš„web请求Url
     * @param param è¯·æ±‚参数
     * @return
     */
    protected String getToMwUgUrl(Environment env) {
        return env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + keyUg_mw);
    protected BaseResponse sendRequest2Mw(RestTemplate restTemplate, String toMwUrl, Object param) {
        String url = UriComponentsBuilder.fromUriString(toMwUrl)
                .build()
                .toUriString();
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<?> httpEntity ;
        if(param != null){
            httpEntity = new HttpEntity<>(param, headers);
        }else{
            httpEntity = new HttpEntity<>(headers);
        }
        ResponseEntity<BaseResponse> response = null;
        try {
            // é€šè¿‡Post方式调用接口
            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }
        if(response == null){
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }else{
            return response.getBody();
        }
    }
    /**
@@ -74,58 +112,4 @@
        return com ;
    }
    /**
     * å‘送命令
     *
     * @return
     */
    protected BaseResponse sendCom2Mw(RestTemplate restTemplate, String comSendUrl, Command com) {
        String url = UriComponentsBuilder.fromUriString(comSendUrl)
                .build()
                .toUriString();
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<Command> httpEntity = new HttpEntity<>(com, headers);
        ResponseEntity<BaseResponse> response = null;
        try {
            // é€šè¿‡Post方式调用接口
            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }
        if(response == null){
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }else{
            return response.getBody();
        }
    }
    /**
     * å‘通信中间件发送rtu远程升级任务
     * @param restTemplate
     * @param comSendUrl
     * @param vo
     * @return
     */
    protected BaseResponse sendUpgradeTask2Mw(RestTemplate restTemplate, String comSendUrl, UpgradeTaskVo vo) {
        String url = UriComponentsBuilder.fromUriString(comSendUrl)
                .build()
                .toUriString();
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<UpgradeTaskVo> httpEntity = new HttpEntity<>(vo, headers);
        ResponseEntity<BaseResponse> response = null;
        try {
            // é€šè¿‡Post方式调用接口
            response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class);
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }
        if(response == null){
            return BaseResponseUtils.buildError("后端系统出错,中间件调用异常");
        }else{
            return response.getBody();
        }
    }
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoProcessingResult.java
@@ -23,7 +23,7 @@
    public static final long serialVersionUID = 202411081500001L;
    /**
     * é—®é¢˜ç»“æžœID
     * å¤„理结果ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long proResultId;
@@ -35,7 +35,7 @@
    private Long workOrderId;
    /**
     * å·¡æ£€å‘˜ID
     * å·¡æ£€å‘˜
     */
    private String inspector;
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoTaskType.java
New file
@@ -0,0 +1,31 @@
package com.dy.pipIrrGlobal.voOp;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.dy.common.po.BaseEntity;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-11-28 14:39
 * @LastEditTime 2024-11-28 14:39
 * @Description ä»»åŠ¡ç±»åž‹è§†å›¾å¯¹è±¡
 */
@Data
@JsonPropertyOrder({"taskTypeId", "taskType"})
public class VoTaskType implements BaseEntity {
    public static final long serialVersionUID = 202411281440001L;
    /**
     * ä»»åŠ¡ç±»åž‹ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long taskTypeId;
    /**
     * ä»»åŠ¡ç±»åž‹
     */
    private String taskType;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java
@@ -17,7 +17,7 @@
 */
@Data
@JsonPropertyOrder({"workOrderId", "dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "clientReportId", "inspectorReportId", "completeTime", "dispatchTime", "rejectTimes", "state", "processingState"})
@JsonPropertyOrder({"workOrderId", "dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "clientReportId", "inspectorReportId", "completeTime", "dispatchTime", "rejectTimes", "state", "processingState", "proResultId"})
public class VoWorkOrder implements BaseEntity {
    public static final long serialVersionUID = 202411061524001L;
@@ -114,4 +114,10 @@
     * å¤„理状态
     */
    private String processingState;
    /**
     * å¤„理结果ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long proResultId;
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voUg/VoUgResult.java
@@ -1,12 +1,21 @@
package com.dy.pipIrrGlobal.voUg;
import com.alibaba.excel.annotation.ExcelIgnore;
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 com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
 * @Author: liurunyu
@@ -15,50 +24,68 @@
 */
@Data
@JsonPropertyOrder({ "id", "rtuAddr", "intakeName", "isOver", "isOverStr", "ugState", "ugStateStr", "overDt"})
@HeadRowHeight(26)
@ContentRowHeight(22)
@JsonPropertyOrder({ "id", "intakeNum", "rtuAddr", "isOverStr", "ugStateStr", "overDt"})
public class VoUgResult {
    /**
     * ä¸»é”®
     */
    @Schema(description = "主键" )
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    @ExcelIgnore()
    public Long id;
    /**
     * æŽ§åˆ¶å™¨åœ°å€
     */
    @Schema(description = "控制器地址" )
    @ExcelProperty("控制器地址")
    @ColumnWidth(20)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    public String rtuAddr;
    /**
     * å–水编号
     */
    @Schema(description = "取水口编号")
    @ExcelProperty("取水编号")
    @ColumnWidth(20)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    private String intakeNum;
    /**
     * å‡çº§æ˜¯å¦ç»“束
     */
    @Schema(description = "升级是否结束" )
    @JSONField(serialize = false)
    @ExcelIgnore()
    public Byte isOver;
    /**
     * å‡çº§æ˜¯å¦ç»“束
     */
    @Schema(description = "升级是否结束" )
    @TableField(exist = false)
    @ExcelProperty("升级结束")
    @ColumnWidth(10)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    public String isOverStr;
    /**
     * å‡çº§çŠ¶æ€
     */
    @Schema(description = "升级状态" )
    @JSONField(serialize = false)
    @ExcelIgnore()
    public Integer ugState;
    /**
     * å‡çº§çŠ¶æ€
     */
    @Schema(description = "升级状态" )
    @ExcelProperty("升级结果")
    @ColumnWidth(16)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    public String ugStateStr;
    /**
@@ -66,7 +93,10 @@
     */
    @Schema(description = "升级结束时间" )
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS")
    public Integer overDt;
    @ExcelProperty("结束时间")
    @ColumnWidth(30)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    public Date overDt;
    /**
     * æ— å‚数据构造方法
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voUg/VoUgRtuResult.java
@@ -25,6 +25,6 @@
    @ExcelProperty("升级结果")
    @ColumnWidth(30)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT, verticalAlignment = VerticalAlignmentEnum.CENTER)
    @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
    public String result;
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global(spɳÅÌϵͳ).yml
@@ -310,22 +310,16 @@
#通讯中间件相关配置
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    #命令发送通信中间件地址
    ym:
        url: "http://127.0.0.1:8070"
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    sp:
        url: "http://127.0.0.1:8073"
        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
    test:
        url: "http://127.0.0.1:8072"
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #rtu远程升级模块回调地址
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test²âÊÔϵͳ).yml
@@ -310,22 +310,16 @@
#通讯中间件相关配置
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    #命令发送通信中间件地址
    ym:
        url: "http://127.0.0.1:8070"
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    sp:
        url: "http://127.0.0.1:8073"
        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
    test:
        url: "http://127.0.0.1:8072"
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #rtu远程升级模块回调地址
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ymԪıϵͳ).yml
@@ -310,22 +310,16 @@
#通讯中间件相关配置
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    #命令发送通信中间件地址
    ym:
        url: "http://127.0.0.1:8070"
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    sp:
        url: "http://127.0.0.1:8073"
        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
    test:
        url: "http://127.0.0.1:8072"
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #rtu远程升级模块回调地址
pipIrr-platform/pipIrr-global/src/main/resources/application-global(¿ª·¢²âÊÔ---166PC»ú).yml
File was deleted
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -310,22 +310,16 @@
#通讯中间件相关配置
#protocol: DYJS_2023,DYJS_2024
mw:
    #命令发送地址(中缀是机构tag,其也是数据源后缀名称)
    #命令发送通信中间件地址
    ym:
        url: "http://127.0.0.1:8070"
        comSendUrl: "http://127.0.0.1:8070/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8070/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8070/rtuMw/com/rtuLogText"
    sp:
        url: "http://127.0.0.1:8073"
        comSendUrl: "http://127.0.0.1:8073/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8073/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8073/rtuMw/com/rtuLogText"
    test:
        url: "http://127.0.0.1:8072"
        comSendUrl: "http://127.0.0.1:8072/rtuMw/com/send"
        ugTaskSendUrl: "http://127.0.0.1:8072/rtuMw/com/upgradeRtu"
        rtuLogFileUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogFile"
        rtuLogTextUrl: "http://127.0.0.1:8072/rtuMw/com/rtuLogText"
    #监测控制模块回调地址
    rtuCallbackUrl_rm: "http://127.0.0.1:8081/remote/comRes/receive"
    #rtu远程升级模块回调地址
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeTaskTypeMapper.xml
@@ -77,4 +77,13 @@
      deleted = #{deleted,jdbcType=BIGINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--获取任务类型列表-->
  <select id="getTaskTypes" resultType="com.dy.pipIrrGlobal.voOp.VoTaskType">
    SELECT
      id AS taskTypeId,
      task_type AS taskType
    FROM ope_task_type
    WHERE deleted = 0
  </select>
</mapper>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
@@ -285,6 +285,10 @@
        AND us2.name like CONCAT('%',#{inspector},'%')
      </if>
      <if test = "state != null">
        AND ord.state = #{state}
      </if>
      <if test = "timeStart != null and timeStop != null">
        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
      </if>
@@ -316,7 +320,8 @@
            WHEN res.state = 2 THEN    '已通过'
            WHEN res.state = 3 THEN    '已驳回'
            ELSE '未上报'
        END AS processingState
        END AS processingState,
        res.id AS proResultId
    FROM ope_work_order ord
        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
@@ -341,6 +346,10 @@
        AND us2.name like CONCAT('%',#{inspector},'%')
      </if>
      <if test = "state != null">
        AND ord.state = #{state}
      </if>
      <if test = "timeStart != null and timeStop != null">
        AND ord.dispatch_time BETWEEN #{timeStart} AND #{timeStop}
      </if>
pipIrr-platform/pipIrr-global/src/main/resources/mapper/UgRtuControllerMapper.xml
@@ -125,10 +125,28 @@
    <!--@mbg.generated-->
    select
    count(*)
    from ug_rtu_controller
    from ug_rtu_controller ugCon
    inner join ug_rtu_task ugTask on ugCon.task_id = ugTask.id
    inner join pr_controller con on ugCon.controller_id = con.id
    inner join pr_intake inta on con.intakeId = inta.id
    <where>
      <if test="taskId != null">
        AND task_id = #{taskId,jdbcType=BIGINT}
        AND ugCon.task_id = #{taskId,jdbcType=BIGINT}
      </if>
      <if test="intakeNum != null and intakeNum != ''">
        AND inta.name = #{intakeNum,jdbcType=VARCHAR}
      </if>
      <if test="rtuAddr != null and rtuAddr != ''">
        AND ugCon.rtu_addr = #{rtuAddr,jdbcType=VARCHAR}
      </if>
      <if test="state != null and state == 1">
        AND ugCon.ug_state = 1
      </if>
      <if test="state != null and state == 0">
        AND ugCon.ug_state != 1
      </if>
      <if test="fail != null">
        AND ugCon.ug_state = #{fail,jdbcType=INTEGER}
      </if>
    </where>
  </select>
@@ -136,20 +154,37 @@
  <select id="selectControllerUpgradeResults" resultType="com.dy.pipIrrGlobal.voUg.VoUgResult">
    <!--@mbg.generated-->
    select
    ctb.id as id,
    inTb.name as intakeNum,
    ctb.rtu_addr as rtuAddr,
    ctb.is_over as isOver,
    ctb.ug_state as ugState,
    ctb.over_dt as overDt
    from ug_rtu_controller ctb
    inner join pr_intake inTb on ctb.task_id = inTb.id
    ugCon.id as id,
    inta.name as intakeNum,
    ugCon.rtu_addr as rtuAddr,
    ugCon.is_over as isOver,
    ugCon.ug_state as ugState,
    ugCon.over_dt as overDt
    from ug_rtu_controller ugCon
    inner join ug_rtu_task ugTask on ugCon.task_id = ugTask.id
    inner join pr_controller con on ugCon.controller_id = con.id
    inner join pr_intake inta on con.intakeId = inta.id
    <where>
      <if test="taskId != null">
        AND ctb.task_id = #{taskId,jdbcType=BIGINT}
        AND ugCon.task_id = #{taskId,jdbcType=BIGINT}
      </if>
      <if test="intakeNum != null and intakeNum != ''">
        AND inta.name = #{intakeNum,jdbcType=VARCHAR}
      </if>
      <if test="rtuAddr != null and rtuAddr != ''">
        AND ugCon.rtu_addr = #{rtuAddr,jdbcType=VARCHAR}
      </if>
      <if test="state != null and state == 1">
        AND ugCon.ug_state = 1
      </if>
      <if test="state != null and state == 0">
        AND ugCon.ug_state != 1
      </if>
      <if test="fail != null">
        AND ugCon.ug_state = #{fail,jdbcType=INTEGER}
      </if>
    </where>
    ORDER BY ctb.id ASC
    ORDER BY ugCon.id ASC
    <trim prefix="limit " >
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeManager.java
@@ -88,12 +88,19 @@
     * å› ä¸ºå¼ºåˆ¶ç»“束升级任务,对一个未升级完成的RTU就会卡死,
     * æ‰€ä»¥å½“强制结束升级任务,代码逻辑并没有强制结果RTU升级过程,如果升级过程也强制停止,那么RTU真会卡死
     */
    public void forceOverUpgradeTask() {
    public String forceOverUpgradeTask() {
        if(this.task != null){
            this.stop();
            this.task.forceOver();
            this.task.countRunningRtuCount();
            if(this.task.curUgRunningRtuTotal > 0){
                return "当前存在升级中的设备,不能结束升级任务" ;
            }else{
                this.stop();
                this.task.forceOver();
                return null ;
            }
        }else{
            return "当前没有升级任务" ;
        }
        this.task = null ;
    }
    /**
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeTask.java
@@ -52,7 +52,7 @@
    ///////////////////////////////////////////////////
    //以下内部控制用
    @JSONField(serialize = false)
    private int curUgRunningRtuTotal = 0 ;//当前正在升级的RTU个数
    protected int curUgRunningRtuTotal = 0 ;//当前正在升级的RTU个数
    public UpgradeTask() {
        this.curUgRunningRtuTotal = 0 ;
@@ -176,7 +176,6 @@
            }
        }
    }
    /**
     * å¼ºåˆ¶ç»“束升级任务
     */
@@ -189,6 +188,7 @@
            //this.upgradeState.clear();
        }
    }
    /**
     * å½“前升级状态
@@ -210,11 +210,15 @@
                    }else if(info.state == UpgradeRtu.STATE_SUCCESS) {
                        state.successTotal++;
                    }else if(info.state == UpgradeRtu.STATE_FAILONE) {
                        state.failOneTotal++;
                        state.failTotal++;
                        state.dieOneTotal++;
                        if(info.isOver){
                            state.failTotal++;
                        }
                    }else if(info.state == UpgradeRtu.STATE_FAIL) {
                        state.failMultiTotal++;
                        state.failTotal++;
                        state.dieMultiTotal++;
                        if(info.isOver) {
                            state.failTotal++;
                        }
                    }else if(info.state == UpgradeRtu.STATE_FAILOFFLINE) {
                        state.failTotal++;
                        state.failOffTotal++;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/upgrade/UpgradeUnit.java
@@ -56,7 +56,7 @@
    @Override
    public void stop(UnitCallbackInterface callback) throws Exception {
        overUpgradeTask() ;
        forceOverUpgradeTask() ;
    }
@@ -73,12 +73,15 @@
    }
    /**
     * åœæ­¢å½“前升级任务
     * ç»“束当前升级任务
     * @throws Exception
     * @return null:结束任务成功,否则返回失败原因
     */
    public void overUpgradeTask() throws Exception {
    public String forceOverUpgradeTask() throws Exception {
        if(manager != null ){
            manager.forceOverUpgradeTask() ;
            return manager.forceOverUpgradeTask() ;
        }else{
            return "通信中间件内部错误" ;
        }
    }
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -1,6 +1,7 @@
package com.dy.rtuMw.web.com;
import com.dy.common.softUpgrade.state.UpgradeTaskVo;
import com.dy.common.webUtil.ResultCodeMsg;
import com.dy.rtuMw.resource.ResourceUnit;
import com.dy.rtuMw.server.ServerProperties;
import com.dy.rtuMw.server.forTcp.TcpSessionCache;
@@ -161,6 +162,25 @@
    }
    /**
     * æŽ¥æ”¶web系统发来强制结束升级任务
     * @return
     */
    @PostMapping(path = "ugForceOver", consumes = MediaType.APPLICATION_JSON_VALUE)
    public BaseResponse<String> ugForceOver() {
        log.info("收到停止RTU升级任务命令") ;
        try{
            String mes = UpgradeUnit.getInstance().forceOverUpgradeTask();
            if(mes == null){
                mes = "停止升级任务成功" ;
            }
            return BaseResponseUtils.buildResult(ResultCodeMsg.RsCode.SUCCESS_CODE, mes, mes);
        }catch (Exception e){
            log.error("停止RTU升级任务时发生异常", e);
            return BaseResponseUtils.buildError("停止RTU升级任务时发生异常" + (e.getMessage() == null?"":(":" + e.getMessage())));
        }
    }
    /**
     * æŽ¥æ”¶web系统发来的命令
     * @param com
     * @return
pipIrr-platform/pipIrr-mw/pipIrr-mw-simulate-rtu/src/main/java/com/dy/simRtu/tcpClient/downData/DownData.java
@@ -42,27 +42,28 @@
                String cd = cdPre + cdSuf;
                if(cd.equals("1601")){
                    //升级配置
                    if(ServerProperties.argOneDie){
                        UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                    }else{
                        UpCd9601.upData() ;
                    }
                    UpCd9601.upData() ;
                }else if(cd.equals("1602")){
                    //升级数据
                    count9602 ++ ;
                    if(ServerProperties.argMultiDie){
                        if(count9602 > 10){
                            int random =  CreateRandom.create_between(10, 100) ;
                            if(random > 50){
                                UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                    if(ServerProperties.argOneDie){
                        UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                    }else{
                        if(ServerProperties.argMultiDie){
                            if(count9602 > 10){
                                int random =  CreateRandom.create_between(10, 100) ;
                                if(random > 90){
                                    UpHeartBeat.upHeartBeat = true ;//使能上行心跳
                                }else{
                                    UpCd9602.upData() ;
                                }
                            }else{
                                UpCd9602.upData() ;
                            }
                        }else{
                            UpCd9602.upData() ;
                        }
                    }else{
                        UpCd9602.upData() ;
                    }
                }else if(cd.equals("1603")){
                    //升级校验
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
@@ -15,6 +15,7 @@
import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoProcessingResult;
import com.dy.pipIrrGlobal.voOp.VoTaskType;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
@@ -265,4 +266,19 @@
        return BaseResponseUtils.buildSuccess(true) ;
    }
    /**
     * èŽ·å–ä»»åŠ¡ç±»åž‹åˆ—è¡¨
     * @return
     */
    @GetMapping(path = "/getTaskTypes")
    @SsoAop()
    public BaseResponse<List<VoTaskType>> getTaskTypes() {
        try {
            return BaseResponseUtils.buildSuccess(workOrderSv.getTaskTypes());
        } catch (Exception e) {
            log.error("获取任务类型异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
@@ -4,11 +4,13 @@
import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder;
import com.dy.pipIrrGlobal.daoOp.OpeApproveResultMapper;
import com.dy.pipIrrGlobal.daoOp.OpeProcessingResultMapper;
import com.dy.pipIrrGlobal.daoOp.OpeTaskTypeMapper;
import com.dy.pipIrrGlobal.daoOp.OpeWorkOrderMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeApproveResult;
import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoProcessingResult;
import com.dy.pipIrrGlobal.voOp.VoTaskType;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
@@ -37,6 +39,9 @@
    @Autowired
    private OpeApproveResultMapper opeApproveResultMapper;
    @Autowired
    private OpeTaskTypeMapper opeTaskTypeMapper;
    /**
     * æ·»åŠ å·¥å•è®°å½•
@@ -227,4 +232,12 @@
        return "success";
    }
    /**
     * èŽ·å–ä»»åŠ¡ç±»åž‹åˆ—è¡¨
     * @return
     */
    public List<VoTaskType> getTaskTypes() {
        return opeTaskTypeMapper.getTaskTypes();
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/qo/QoWorkOrder.java
@@ -35,6 +35,11 @@
    private Long inspectorId;
    /**
     * çŠ¶æ€ï¼š1-未完成,2-已完成
     */
    private Integer state;
    /**
     * æŸ¥è¯¢å¼€å§‹æ—¶é—´
     */
    private String timeStart;
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/QueryUgResultVo.java
@@ -15,7 +15,7 @@
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(name = "查询升级任务RTU升级情况的条件")
@Schema(name = "查询升级任务RTU升级结果的条件")
public class QueryUgResultVo extends QueryConditionVo {
    @Schema(description = "升级任务id")
@@ -27,4 +27,10 @@
    @Schema(description = "控制器地址")
    public String rtuAddr;
    @Schema(description = "升级结果:1升级成功,0升级失败")
    public Integer state;
    @Schema(description = "失败类型:3一包死失败,4多包死失败,5离线失败")
    public Integer fail;
}
pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultCtrl.java
@@ -1,5 +1,7 @@
package com.dy.pipIrrBase.rtuUpgrade.task;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
@@ -7,19 +9,24 @@
import com.dy.common.webUtil.ResultCodeMsg;
import com.dy.pipIrrGlobal.pojoUg.UgRtuTask;
import com.dy.pipIrrGlobal.voUg.VoUgResult;
import com.dy.pipIrrGlobal.voUg.VoUgRtuResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
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.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 java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
/**
@@ -59,12 +66,50 @@
        if (vo.taskId == null) {
            return BaseResponseUtils.buildErrorMsg("升级任务id不能为空");
        }
        try {
            QueryResultVo<List<VoUgResult>> res = this.sv.selectSome(vo);
            return BaseResponseUtils.buildSuccess(res);
        } catch (Exception e) {
            log.error("查询RTU升级任务异常", e);
            return BaseResponseUtils.buildErrorMsg(e.getMessage());
        if(vo.state != null && vo.state == 1){
            //查询升级成功的
            vo.fail = null ;
        }
        if(vo.state == null && vo.fail != null){
            //查询升级失败的
            vo.state = 0 ;
        }
        QueryResultVo<List<VoUgResult>> res = this.sv.selectSome(vo);
        return BaseResponseUtils.buildSuccess(res);
    }
    /**
     * å¯¼å‡ºå‡çº§ç»“æžœRTU列表
     * @param response
     */
    @RequestMapping(value = "/exportAll", method = RequestMethod.GET)
    @SsoAop()
    public void exportAll(HttpServletResponse response, QueryUgResultVo vo) throws Exception {
        if(vo.state != null && vo.state == 1){
            //查询升级成功的
            vo.fail = null ;
        }
        if(vo.state == null && vo.fail != null){
            //查询升级失败的
            vo.state = 0 ;
        }
        setExcelRespProp(response, "升级结果列表");
        List<VoUgResult> rsList = this.sv.selectAll(vo);
        EasyExcel.write(response.getOutputStream())
                .head(VoUgRtuResult.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("升级结果列表")
                .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-base/src/main/java/com/dy/pipIrrBase/rtuUpgrade/task/UgRtuResultSv.java
@@ -25,7 +25,7 @@
    private UgRtuControllerMapper dao ;
    /**
     * åˆ†é¡µæŸ¥è¯¢ä¸€ä¸ªå‡çº§ä»»åŠ¡ä¸­æ‰€æœ‰æŽ§åˆ¶å™¨å‡çº§ç»“æŸ¥
     * åˆ†é¡µæŸ¥è¯¢ä¸€ä¸ªå‡çº§ä»»åŠ¡ä¸­ä¸€äº›æŽ§åˆ¶å™¨å‡çº§ç»“æŸ¥
     * @return æŽ§åˆ¶å™¨å‡çº§ç»“查
     */
    public QueryResultVo<List<VoUgResult>> selectSome(QueryUgResultVo queryVo){
@@ -53,4 +53,26 @@
        return rsVo ;
    }
    /**
     * åˆ†é¡µæŸ¥è¯¢ä¸€ä¸ªå‡çº§ä»»åŠ¡ä¸­æ‰€æœ‰æŽ§åˆ¶å™¨å‡çº§ç»“æŸ¥
     * @return æŽ§åˆ¶å™¨å‡çº§ç»“查
     */
    public List<VoUgResult> selectAll(QueryUgResultVo queryVo){
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo) ;
        List<VoUgResult> list = this.dao.selectControllerUpgradeResults(params) ;
        if(list != null && list.size() > 0){
            for(VoUgResult vo : list){
                if(vo.isOver != null && vo.isOver.byteValue() == 1){
                    vo.isOverStr = "是" ;
                }else{
                    vo.isOverStr = "否" ;
                }
                if(vo.ugState != null){
                    vo.ugStateStr = UpgradeRtu.getStateName(vo.ugState) ;
                }
            }
        }
        return list ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/MonitorSv.java
@@ -9,7 +9,7 @@
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper;
import com.dy.pipIrrGlobal.rtuMw.CodeLocal;
import com.dy.pipIrrGlobal.rtuMw.ToRtuMwCom;
import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
import com.dy.pipIrrGlobal.voPr.VoOnLineIntake;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
@@ -29,7 +29,7 @@
 */
@Slf4j
@Service
public class MonitorSv extends ToRtuMwCom {
public class MonitorSv extends Web2RtuMw {
    @Autowired
    private PrIntakeMapper prIntakeMapper;
@@ -76,8 +76,8 @@
            //向通信中间件发关命令,查询部分RTU在线情况
            Command com = this.createInnerCommand(CodeLocal.onLinePart);
            com.setParam(rtuAddrs) ;
            String comSendUrl = this.getToMwUrl(this.env) ;
            BaseResponse res = sendCom2Mw(restTemplate, comSendUrl, com) ;
            String rqUrl = this.get2MwRequestUrl(this.env, ContextComSend) ;
            BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, com) ;
            if(res != null){
                if(res.isSuccess()){
                    Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ;
@@ -114,8 +114,8 @@
    private QueryResultVo<List<VoOnLineIntake>> selectIntakesOnOrOffLine(QueryVo vo) {
        //向通信中间件发关命令,查询部分RTU在线情况
        Command com = this.createInnerCommand(CodeLocal.onLineAll);
        String comSendUrl = this.getToMwUrl(this.env) ;
        BaseResponse res = sendCom2Mw(restTemplate, comSendUrl, com) ;
        String rqUrl = this.get2MwRequestUrl(this.env, ContextComSend) ;
        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, com) ;
        if(res != null){
            if(res.isSuccess()){
                Command reCom = JSON.parseObject(res.getContent() == null ? null : JSON.toJSONString(res.getContent()), Command.class) ;
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtu/RtuLogCtrl.java
@@ -1,9 +1,9 @@
package com.dy.pipIrrRemote.rtu;
import com.dy.common.aop.SsoAop;
import com.dy.common.multiDataSource.DataSourceContext;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -32,11 +32,7 @@
@Slf4j
@RestController
@RequestMapping(path="rtuLog")
public class RtuLogCtrl {
    private static final String pro_mw = "mw";
    private static final String key_mw_file = "rtuLogFileUrl";
    private static final String key_mw_text = "rtuLogTextUrl";
public class RtuLogCtrl extends Web2RtuMw {
    private Environment env ;
    private RestTemplate restTemplate;
@@ -55,10 +51,10 @@
    @GetMapping(path = "file")
    @SsoAop()
    public BaseResponse<List<String>> rtuLogFile(String rtuAddr, HttpServletRequest req, HttpServletResponse rep){
        String mwUrlRtuLogFile = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_file);
        String rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogFile) ;
        ServletOutputStream out = null ;
        try{
            byte[] bs = this.requestMw4File(rtuAddr, mwUrlRtuLogFile) ;
            byte[] bs = this.requestMw4File(rtuAddr, rqUrl) ;
            if(bs != null && bs.length > 0){
                String fileReName = rtuAddr + ".log" ;
                //URLEncoder.encode可以防止中文乱码
@@ -91,8 +87,9 @@
    @GetMapping(path="text")
    @SsoAop()
    public BaseResponse<List<String>> rtuLogText(String rtuAddr){
        String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text);
        BaseResponse<List<String>> text = this.requestMw4Text(rtuAddr, mwUrlRtuLogText);
        String rqUrl = this.get2MwRequestUrl(this.env, ContextRtuLogText) ;
        //String mwUrlRtuLogText = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw_text);
        BaseResponse<List<String>> text = this.requestMw4Text(rtuAddr, rqUrl);
        if (text != null){
            if (text.getContent().get(0).contains("控制器")){
                return BaseResponseUtils.buildErrorMsg(""+text.getContent().get(0)+"") ;
@@ -101,7 +98,6 @@
        }else {
            return BaseResponseUtils.buildErrorMsg("获取日志文件为null") ;
        }
//        return this.requestMw4Text(rtuAddr, mwUrlRtuLogText) ;
    }
@@ -141,5 +137,4 @@
        return (response==null?null:response.getBody());
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeCtrl.java
@@ -3,7 +3,6 @@
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.dy.common.aop.SsoAop;
import com.dy.common.softUpgrade.state.UpgradeRtu;
import com.dy.common.softUpgrade.state.UpgradeTaskVo;
import com.dy.common.springUtil.SpringContextUtil;
import com.dy.common.webUtil.BaseResponse;
@@ -12,8 +11,7 @@
import com.dy.common.webUtil.ResultCodeMsg;
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.rtuMw.Web2RtuMw;
import com.dy.pipIrrGlobal.voUg.VoUgRtuResult;
import com.dy.pipIrrGlobal.voUg.VoWatch;
import io.swagger.v3.oas.annotations.Operation;
@@ -35,7 +33,6 @@
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@@ -48,7 +45,7 @@
@Tag(name = "rtu远程升级任务", description = "rtu远程升级任务相关操作")
@RestController
@RequestMapping(path = "rtuUpgrade")
public class RtuUpgradeCtrl extends ToRtuMwCom {
public class RtuUpgradeCtrl extends Web2RtuMw {
    @Autowired
    private RtuUpgradeSv sv ;
@@ -108,8 +105,8 @@
        vo.rtuAddrList = taskRtuAddrs ;
        vo.callbackWebUrl = ugCallbackUrl_rm ;
        String ugSendUrl = this.getToMwUgUrl(this.env) ;
        BaseResponse res = sendUpgradeTask2Mw(restTemplate, ugSendUrl, vo) ;
        String rqUrl = this.get2MwRequestUrl(this.env, ContextUgTaskSend) ;
        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, vo) ;
        if(res != null){
            if(res.isSuccess()){
                this.sv.setUpgradeTaskExecuted(id);
@@ -127,6 +124,41 @@
            return BaseResponseUtils.buildErrorMsg("通信中间件返回结果为null") ;
        }
    }
    /**
     * ä¸‹å‘强制结束当前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 = String.class))}
            )
    })
    @GetMapping(path = "/forceOver")
    @SsoAop()
    public BaseResponse<String> forceOver() {
        String rqUrl = this.get2MwRequestUrl(this.env, ContextUgForceOver) ;
        BaseResponse res = sendRequest2Mw(restTemplate, rqUrl, null) ;
        if(res != null){
            if(res.isSuccess()){
                return BaseResponseUtils.buildSuccess(true) ;
            }else{
                String msg = res.getContent()==null?null:(String)res.getContent() ;
                if(msg == null){
                    msg = res.getMsg() ;
                }
                log.error("通信中间件执行下发强制结束当前rtu远程升级任务失败:" + msg) ;
                return BaseResponseUtils.buildErrorMsg("通信中间件执行强制结束当前rtu远程升级任务失败:" + msg) ;
            }
        }else{
            log.error("通信中间件返回结果为null") ;
            return BaseResponseUtils.buildErrorMsg("通信中间件返回结果为null") ;
        }
    }
    private void valueFromPo(UpgradeTaskVo vo, UgRtuTask tpo, UgRtuProgram ppo){
        vo.id = "" + tpo.id ;
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeStateReceiverCtrl.java
@@ -21,6 +21,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@@ -48,15 +49,8 @@
    @Hidden //不公开接口,其只有通信中间件调用
    @PostMapping(path = "/receive")
    public BaseResponse<Boolean> receive(@RequestBody UpgradeInfo info, HttpServletRequest req, HttpServletResponse rep){
        /*
        log.info("接收到的RTU远程升级状态数据为:{}", info.toString("532328000214"));
        //进行排序
        //Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder());
        //info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList());
        //通信中间件传过来的机构tag,以用于查找数据源
        String token = req.getHeader(Constant.UserTokenKeyInHeader);
        DataSourceContext.set(token);
        if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){
            if(info.ugRtuStateList.size() < 10){
                for (UpgradeRtu rtuVo : info.ugRtuStateList) {
@@ -64,6 +58,16 @@
                }
            }
        }
         */
        //进行排序
        Comparator<UpgradeRtu> comparator = Comparator.comparing(UpgradeRtu::getRtuAddr, Comparator.naturalOrder());
        info.ugRtuStateList = info.ugRtuStateList.stream().sorted(comparator).collect(Collectors.toList());
        //通信中间件传过来的机构tag,以用于查找数据源
        String token = req.getHeader(Constant.UserTokenKeyInHeader);
        DataSourceContext.set(token);
        if(cache == null){
            cache = info;
            //此时不做任务操作,只保障cache不为空, ç­‰å¾…下次发来数据
@@ -74,11 +78,15 @@
                }
            }
        }else{
            cache = info;
            //当cache中有值时,进行比对存储,对比目的是防止重复操作数据库
            if(info.ugRtuStateList != null && info.ugRtuStateList.size() > 0){
                //此时保证两个集合都不为null
                this.save2Db(info.ugTaskId, info.ugRtuStateList, cache.ugRtuStateList);
            }
            //cache赋值必须放在上面处理的后面,否则上面的比较不成功
            cache = info;
            if(info.ugOverallState != null && info.ugOverallState.allOver){
                this.saveTaskOver(info.ugTaskId) ;
            }
        }
        return null;
@@ -103,15 +111,31 @@
     */
    private void save2Db(String taskId, List<UpgradeRtu> newList, List<UpgradeRtu> oldList){
        List<UpgradeRtu> newOverList = newList.stream().filter(vo -> vo.isOver).collect(Collectors.toList()) ;
        List<UpgradeRtu> oldNoOverList = newList.stream().filter(vo -> !vo.isOver).collect(Collectors.toList()) ;
        boolean oldExist = false ;
        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);
                }
            oldExist = false ;
            if(oldNoOverList.stream().anyMatch(vo -> vo.rtuAddr.equals(nvo.rtuAddr))){
                oldExist = true ;
            }
            if(!oldExist){
                //上次没有升级结束,而当前升级结束了
                this.sv.saveRtuUpgradeState(Long.parseLong(taskId), nvo);
            }
        }
    }
    /**
     * ä¿å­˜å‡çº§ä»»åŠ¡å·²ç»æ‰§è¡Œå®Œæˆ
     * @param taskId
     */
    private void saveTaskOver(String taskId){
        this.sv.updateTaskOver(taskId) ;
    }
    /////////////////////////////////////////////////////
    //
    // ä»¥ä¸‹æ¨¡æ‹Ÿæ•°æ®
@@ -305,10 +329,10 @@
                }else if(rtu.state == UpgradeRtu.STATE_SUCCESS) {
                    cache.ugOverallState.successTotal++;
                }else if(rtu.state == UpgradeRtu.STATE_FAILONE) {
                    cache.ugOverallState.failOneTotal++;
                    cache.ugOverallState.dieOneTotal++;
                    cache.ugOverallState.failTotal++;
                }else if(rtu.state == UpgradeRtu.STATE_FAIL) {
                    cache.ugOverallState.failMultiTotal++;
                    cache.ugOverallState.dieMultiTotal++;
                    cache.ugOverallState.failTotal++;
                }
                if(rtu.isOver){
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/rtuUpgrage/RtuUpgradeSv.java
@@ -90,6 +90,14 @@
    }
    /**
     * è®¾ç½®å‡çº§ä»»åŠ¡å·²ç»å®Œæˆ
     * @param taskId
     */
    public void updateTaskOver(String taskId){
        tdao.overById(Long.valueOf(taskId)) ;
    }
    /////////////////////////////////////////////////////
    //
    // ä»¥ä¸‹æ¼”示升级功能用到