liurunyu
2024-11-29 053d5042846ae96c9c7ba031bae9d9221745cd7f
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/web/com/CommandCtrl.java
@@ -1,16 +1,19 @@
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;
import com.dy.rtuMw.server.local.CommandInnerDeaLer;
import com.dy.rtuMw.server.local.ReturnCommand;
import com.dy.rtuMw.server.tasks.RtuDownTask;
import com.dy.rtuMw.server.tasks.WebDownComTask;
import com.dy.common.mw.core.CoreUnit;
import com.dy.common.mw.protocol.Command;
import com.dy.common.mw.protocol.CommandType;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.rtuMw.server.upgrade.UpgradeUnit;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@@ -20,7 +23,10 @@
import java.io.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -102,18 +108,26 @@
     */
    @GetMapping("/rtuLogText")
    public BaseResponse<List<String>> rtuLogText(String rtuAddr){
        List<String> list = new ArrayList() ;
        List<String> list ;
        File logFile = ResourceUnit.getInstance().getLogFile(rtuAddr + ".log") ;
        if(logFile != null && logFile.exists()){
            BufferedReader reader = null ;
            try {
                reader = new BufferedReader(new FileReader(logFile)) ;
                //新的实现方法
                Stream<String> linesStream = reader.lines() ;
                //list = linesStream.toList() ; //按原来顺序
                list = linesStream.sorted(Comparator.reverseOrder()).collect(Collectors.toList()) ;//倒序
                /* 原来的实现方法
                list = new ArrayList() ;
                String line ;
                while((line = reader.readLine()) != null){
                    list.add(line) ;
                }
                */
                return BaseResponseUtils.buildSuccess(list);
            } catch (Exception e) {
                list = new ArrayList() ;
                list.add("读取控制器(" + rtuAddr + ")的日志文件异常:" + (e.getMessage() == null?"":("," + e.getMessage()))) ;
                return BaseResponseUtils.buildSuccess(list);
            }finally{
@@ -125,10 +139,47 @@
                }
            }
        }else{
            list = new ArrayList() ;
            list.add("未得到控制器(" + rtuAddr + ")的日志文件") ;
            return BaseResponseUtils.buildSuccess(list);
        }
    }
    /**
     * 接收web系统发来升级任务
     * @param vo
     * @return
     */
    @PostMapping(path = "upgradeRtu", consumes = MediaType.APPLICATION_JSON_VALUE)
    public BaseResponse<Boolean> upgradeRtu(@RequestBody UpgradeTaskVo vo) {
        log.info("收到RTU升级任务:\n" + vo.toString()) ;
        try{
            UpgradeUnit.getInstance().setUpgradeTask(vo);
        }catch (Exception e){
            log.error("设置RTU升级任务时发生异常", e);
            return BaseResponseUtils.buildError("设置RTU升级任务时发生异常" + (e.getMessage() == null?"":(":" + e.getMessage())));
        }
        return BaseResponseUtils.buildSuccess(true);
    }
    /**
     * 接收web系统发来强制结束升级任务
     * @return
     */
    @GetMapping(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
@@ -189,7 +240,7 @@
    }
    /**
     * 本地调用,例如重任务树中某个任务下发的命令(如清空命令)
     * 本地调用,例如任务树中某个任务下发的命令(如清空命令)
     * @param com
     * @return
     */
@@ -222,7 +273,7 @@
        }
        //生成异步任务
        RtuDownTask task = new RtuDownTask() ;
        WebDownComTask task = new WebDownComTask() ;
        task.data = command ;
        try{
            log.info("构造下发远程命令" + command.getCode() + "的核心任务,并放入任务队列中");