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 { // 静态变量,记录当前在线连接数