lxw
2023-12-19 0db9d4c81b1fc70694e521a3ab7fc438e24c30a6
BreakInfAndRtSocket
2个文件已添加
2个文件已修改
120 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/BreakerInfController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/BreakInfAndRtDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BreakerInfService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/websocket/BreakInfAndRtSocket.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BreakerInfController.java
@@ -1,5 +1,6 @@
package com.whyc.controller;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.pojo.db_ckpwrdev_inf.BreakerInf;
import com.whyc.service.BreakerInfService;
@@ -21,7 +22,9 @@
    @ApiOperation("获取断路器开关")
    public Response getBreakerInf(@RequestParam int pageCurr, @RequestParam int pageSize
            ,@RequestParam(required = false) String breakerType,@RequestParam(required = false) String breakerAddr,@RequestParam(required = false) String gatewayName){
        return service.getbreakerInf(pageCurr,pageSize,breakerType,breakerAddr,gatewayName);
        PageInfo pageInfo= service.getbreakerInf(pageCurr,pageSize,breakerType,breakerAddr,gatewayName);
        return  new Response().setII(1,pageInfo.getList()!=null,pageInfo,"获取断路器开关");
    }
    @PostMapping("updateBreakerInf")
src/main/java/com/whyc/dto/BreakInfAndRtDto.java
New file
@@ -0,0 +1,12 @@
package com.whyc.dto;
import lombok.Data;
@Data
public class BreakInfAndRtDto {
    private int pageCurr;
    private int pageSize;
    private String breakerType;
    private String breakerAddr;
    private String gatewayName;
}
src/main/java/com/whyc/service/BreakerInfService.java
@@ -19,11 +19,11 @@
    private BreakerInfMapper mapper;
    //获取断路器开关
    public Response getbreakerInf(int pageCurr, int pageSize, String breakerType, String breakerAddr,  String gatewayName) {
    public PageInfo getbreakerInf(int pageCurr, int pageSize, String breakerType, String breakerAddr,  String gatewayName) {
        PageHelper.startPage(pageCurr,pageSize);
        List<BreakerInf> list=mapper.getbreakerInf(breakerType,breakerAddr,gatewayName);
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list!=null,pageInfo,"获取断路器开关");
        return pageInfo;
    }
    //编辑断路器开关
src/main/java/com/whyc/websocket/BreakInfAndRtSocket.java
New file
@@ -0,0 +1,99 @@
package com.whyc.websocket;
import com.github.pagehelper.PageInfo;
import com.whyc.config.WebSocketConfig;
import com.whyc.dto.BreakInfAndRtDto;
import com.whyc.dto.Response;
import com.whyc.pojo.db_ckpwrdev_data_rt.CKPowerDevSignal;
import com.whyc.service.BreakerInfService;
import com.whyc.service.CKPowerDevSignalService;
import com.whyc.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.swing.*;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * 断路器实时推送
 */
@Component
@ServerEndpoint(value = "/breakerInfAndRt",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
public class BreakInfAndRtSocket {
    private Session session;
    private Thread thread;
    private volatile Map<String,Thread> threadMap = new HashMap<>();
    private static BreakerInfService service;
    private static CKPowerDevSignalService ckPowerDevSignalService;
    @Autowired
    public void setService(BreakerInfService service) {
        BreakInfAndRtSocket.service = service;
    }
    @Autowired
    public void setCkPowerDevSignalService(CKPowerDevSignalService ckPowerDevSignalService) {
        BreakInfAndRtSocket.ckPowerDevSignalService = ckPowerDevSignalService;
    }
    @OnOpen
    public void onOpen(Session session){
        this.session = session;
    }
    @OnMessage
    public void onMessage(String message){
        BreakInfAndRtDto dto= JsonUtil.getGson().fromJson(message,BreakInfAndRtDto.class);
        Thread thread = new Thread() {
            @Override
            public void run() {
                try{
                    while (!currentThread().isInterrupted()) {
                        CKPowerDevSignal ckPowerDevSignal = ckPowerDevSignalService.get();
                        PageInfo pageInfo=service.getbreakerInf(dto.getPageCurr(),dto.getPageSize(),dto.getBreakerType(),dto.getBreakerAddr(),dto.getGatewayName());
                        session.getBasicRemote().sendObject(new Response().setIII(1,pageInfo,ckPowerDevSignal,new Date(),"断路器状态"));
                        sleep(4000);
                    }
                } catch (Exception e) {
                    this.interrupt();
                }
            }
        };
        thread.start();
        this.thread = thread;
        //停止老的socket线程
        Thread threadBefore = threadMap.get(session.getId());
        if(threadBefore !=null && threadBefore.isAlive()){
            threadBefore.interrupt();
        }
        //将线程存储,便于调用定位
        threadMap.put(session.getId(), this.thread);
    }
    @OnClose
    public void onClose(CloseReason closeReason) throws IOException {
        System.err.println("closeReason = " + closeReason);
        if(session.isOpen()){
            session.close();
        }
    }
    @OnError
    public void onError(Throwable error) throws IOException {
        error.printStackTrace();
        thread.isInterrupted();
        if(session.isOpen()){
            session.close();
        }
    }
}