zhubaomin
2025-04-07 9fb370afff71f4d5659d8904e8751479280d5b48
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

 Conflicts:
 pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
6个文件已修改
84 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/msCenter/TestMsResource.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/config/WebSocketConfig.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/largeScreen/WebSocketServer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/msCenter/TestMsResource.java
@@ -46,6 +46,19 @@
    // 设置定时N秒一次
    @Scheduled(cron = "0/10 * * * * ?")
    public void test4() throws Exception {
        MsObj msObj = new MsObj() ;
        msObj.put("name", "阀态");
        msObj.put("rtuAddr","123456789");
        msObj.put("intakeId", 2024090517395800007L);
        msObj.put("state", 0);
        msObj.put("stateName", "开");
        msObj.put("dt", DateTime.yyyy_MM_dd_HH_mm_ss());
        MsCenterUnit.getInstance().pushMs(msObj);
    }
    // 设置定时N秒一次
    @Scheduled(cron = "0/15 * * * * ?")
    public void test3() throws Exception {
        MsObj msObj = new MsObj() ;
        msObj.put("name", "报警");
@@ -56,4 +69,5 @@
        MsCenterUnit.getInstance().pushMs(msObj);
    }
}
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealAlarmStatus.java
@@ -123,6 +123,16 @@
            msObj.put("dt", dV1.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
        if(stateVo != null && controller != null && stateVo.valveState != null){
            MsObj msObj = new MsObj() ;
            msObj.put("name", "阀态");
            msObj.put("rtuAddr", rtuAddr);
            msObj.put("intakeId", controller.getIntakeId());
            msObj.put("state", stateVo.valveState);
            msObj.put("stateName", stateVo.valveState==0?"开":"关");
            msObj.put("dt", dV1.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
    }
    /**
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealAlarmStatusV2.java
@@ -142,6 +142,16 @@
            msObj.put("dt", dV12.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
        if(stateVo != null && controller != null && stateVo.valveState != null){
            MsObj msObj = new MsObj() ;
            msObj.put("name", "阀态");
            msObj.put("rtuAddr", rtuAddr);
            msObj.put("intakeId", controller.getIntakeId());
            msObj.put("state", stateVo.valveState);
            msObj.put("stateName", stateVo.valveState==0?"开":"关");
            msObj.put("dt", dV12.dt);
            MsCenterUnit.getInstance().pushMs(msObj);
        }
    }
    /**
     * 保存报警状态最新数据
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
@@ -7,6 +7,8 @@
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory;
import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateLast;
import com.dy.rtuMw.server.msCenter.MsCenterUnit;
import com.dy.rtuMw.server.msCenter.MsObj;
import com.dy.rtuMw.server.rtuData.TaskSurpport;
import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
import org.apache.logging.log4j.LogManager;
@@ -41,6 +43,7 @@
            if(cdObj instanceof DataCd81Vo){
                //设备终端随机自报
                DataCd81Vo cdData = (DataCd81Vo)(cdObj) ;
                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
@@ -52,6 +55,7 @@
            }else if(cdObj instanceof DataCd80_5BVo){
                //设备终端工作上报 + 查询设备终端实时值
                DataCd80_5BVo cdData = (DataCd80_5BVo)(cdObj) ;
                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
@@ -63,6 +67,7 @@
            }else if(cdObj instanceof DataCd93_A3Vo){
                //平台/APP远程关闭水泵/阀门   +  刷卡关泵/阀上报
                DataCd93_A3Vo cdData = (DataCd93_A3Vo)(cdObj) ;
                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ;
                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ;
                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
@@ -74,6 +79,7 @@
            }else if(cdObj instanceof DataCd84Vo){
                //设备终端刷卡开泵/阀上报
                DataCd84Vo cdData = (DataCd84Vo)(cdObj) ;
                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ;
                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ;
                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
@@ -85,6 +91,7 @@
            }else if(cdObj instanceof DataCdC2Vo){
                //设备终端开关水泵/阀门成功/失败上报
                DataCdC2Vo cdData = (DataCdC2Vo)(cdObj) ;
                this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
                this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
                if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
@@ -101,6 +108,38 @@
            this.toNextTasks(d);
        }
    }
    /**
     * 报警状态数据存入消息中心
     * @param controller 控制器对象
     * @param rtuAddr 控制器地址
     * @param dataV202404 数据对象
     * @param alarmVo 报警+状态对象
     */
    private void toMsCenter(PrController controller, String rtuAddr, DataV202404 dataV202404,  AlarmVo alarmVo, String dt){
        if(alarmVo != null && controller != null){
            if(alarmVo.hasAlarm()){
                MsObj msObj = new MsObj() ;
                msObj.put("name", "报警");
                msObj.put("rtuAddr", rtuAddr);
                msObj.put("intakeId", controller.getIntakeId());
                msObj.put("state", alarmVo.alarmContent());
                msObj.put("dt", dt);
                MsCenterUnit.getInstance().pushMs(msObj);
            }
            if(alarmVo.statePump != null){
                MsObj msObj = new MsObj() ;
                msObj.put("name", "阀态");
                msObj.put("rtuAddr", rtuAddr);
                msObj.put("intakeId", controller.getIntakeId());
                msObj.put("state", alarmVo.statePump);
                msObj.put("stateName", alarmVo.statePump==1?"开":"关");
                msObj.put("dt", dt);
                MsCenterUnit.getInstance().pushMs(msObj);
            }
        }
    }
    /**
     * 保存报警状态最新数据
     * @param sv 服务
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/config/WebSocketConfig.java
@@ -12,8 +12,15 @@
//开启WebSocket的支持,并把该类注入到spring容器中
@Configuration
public class WebSocketConfig {
    /**
     * ServerEndpointExporter:它是 Spring 提供的一个 Bean,其作用是扫描带有 @ServerEndpoint 注解的类,
     * 并将它们注册为 WebSocket 端点。也就是说,借助 ServerEndpointExporter,Spring 可以把使用 Java WebSocket
     * 规范注解(如 @ServerEndpoint)定义的端点集成到 Spring 应用中。
     * @return
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/largeScreen/WebSocketServer.java
@@ -1,6 +1,7 @@
package com.dy.pipIrrRemote.largeScreen;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import jakarta.websocket.*;
@@ -13,10 +14,13 @@
 * @Author: liurunyu
 * @Date: 2025/2/10 15:25
 * @Description 客户端(浏览器)每建立一个websocket连接,服务端就会创建一个WebSocketServer实例
 * 应用前提是存在一个Config类,如本模块的WebSocketConfig,这时@ServerEndpoint受SpringBoot容器
 * 管理了(在嵌入式web Servlet环境中)
 */
@Slf4j
@ServerEndpoint("/websocket/ls/{id}")
@Component
@Scope("prototype") // 非单例,每次请求都会创建新的实例
public class WebSocketServer {
    // 静态变量,记录当前在线连接数