whyclxw
2024-04-23 ae9e46ca80914e42df6c4081641f4fedee0ec0e7
Intelligent的实时推送
4个文件已添加
210 ■■■■■ 已修改文件
src/main/java/com/whyc/mapper/IntelligentbusbarStateMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/IntelligentbusbarState.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/IntelligentbusbarStateService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/IntelligentSocket.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/IntelligentbusbarStateMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.IntelligentbusbarState;
public interface IntelligentbusbarStateMapper extends CustomMapper<IntelligentbusbarState>{
}
src/main/java/com/whyc/pojo/IntelligentbusbarState.java
New file
@@ -0,0 +1,80 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 智能母联实时状态表
 * </p>
 *
 * @author lxw
 * @since 2024-04-23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(schema = "db_ram_db",value ="tb_intelligentbusbar_state")
@ApiModel(value="IntelligentbusbarState对象", description="智能母联实时状态表")
public class IntelligentbusbarState implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    private Long num;
    @ApiModelProperty(value = "设备ID")
    private Integer devId;
    @ApiModelProperty(value = "记录时间")
    private Date recordTime;
    @ApiModelProperty(value = "DCDC1_实时温度")
    private Float dcdc1Temp;
    @ApiModelProperty(value = "DCDC2实时温度")
    private Float dcdc2Temp;
    @ApiModelProperty(value = "DCDC1实时输出电压")
    private Float dcdc1Outputvol;
    @ApiModelProperty(value = "DCDC2实时输出电压")
    private Float dcdc2Outputvol;
    @ApiModelProperty(value = "DCDC1实时输出电流")
    private Float dcdc1Outputcurr;
    @ApiModelProperty(value = "DCDC2实时输出电流")
    private Float dcdc2Outputcurr;
    @ApiModelProperty(value = "DCDC1实时输入电压")
    private Float dcdc1Inputvol;
    @ApiModelProperty(value = "DCDC2实时输入电压")
    private Float dcdc2Inputvol;
    @ApiModelProperty(value = "DCDC1实时输入电流")
    private Float dcdc1Inputcurr;
    @ApiModelProperty(value = "DCDC1实时输入电流")
    private Float dcdc2Inputcurr;
    @ApiModelProperty(value = "DCDC1 异常代码-状态")
    private Integer dcdc1Errcode;
    @ApiModelProperty(value = "DCDC2 异常代码-状态")
    private Integer dcdc2Errcode;
}
src/main/java/com/whyc/service/IntelligentbusbarStateService.java
New file
@@ -0,0 +1,23 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.dto.Response;
import com.whyc.mapper.IntelligentbusbarStateMapper;
import com.whyc.pojo.IntelligentbusbarState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class IntelligentbusbarStateService {
    @Autowired(required = false)
    private IntelligentbusbarStateMapper mapper;
    //读取设备2100信息
    public Response getIntelligentbusbarStateInfo(int devId){
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("dev_id",devId);
        wrapper.last("limit 1");
        IntelligentbusbarState state=mapper.selectOne(wrapper);
        return new Response().setII(1,state!=null,state,"读取设备信息");
    }
}
src/main/java/com/whyc/webSocket/IntelligentSocket.java
New file
@@ -0,0 +1,101 @@
package com.whyc.webSocket;
import com.whyc.config.WebSocketConfig;
import com.whyc.dto.Response;
import com.whyc.service.IntelligentbusbarStateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;
@Component
@ServerEndpoint(value = "/Intelligent", encoders = WebSocketEncoder.class, configurator = WebSocketConfig.class)
public class IntelligentSocket {
    private volatile Thread thread;
    private static final int executeTime = 5000;
    private volatile boolean runFlag = true;
    private volatile Map<String, Thread> threadMap = new HashMap<>();
    private volatile Map<Long, Boolean> threadFlagMap = new HashMap<>();
    private static IntelligentbusbarStateService service;
    private Session session;
    @Autowired
    public void setIntelligentbusbarStateService(IntelligentbusbarStateService service) {
        IntelligentSocket.service = service;
    }
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
    }
    @OnMessage
    public void onMessage(Session session, String message) {
        thread = new Thread("Thread_Intelligent") {
            @Override
            public void run() {
                while (runFlag && !isInterrupted()) {
                    Thread thread = currentThread();
                    threadFlagMap.put(thread.getId(), true);
                    try {
                        if (session.isOpen()) {
                            Response response = new Response();
                            try {
                                response=service.getIntelligentbusbarStateInfo(Integer.valueOf(message));
                            }catch (Exception e){
                                response.set(0,"发生异常:"+e.toString());
                            }
                            //推送信息
                            synchronized (session) {
                                session.getBasicRemote().sendObject(response);
                            }
                            threadFlagMap.put(thread.getId(), false);
                        }
                        sleep(executeTime);
                    } catch (Exception e) {
                        interrupt();
                    }
                }
            }
        };
        thread.start();
        threadFlagMap.put(thread.getId(), true);
        //停止老的socket线程
        Thread threadBefore = threadMap.get(session.getId());
        if (threadBefore != null && threadBefore.isAlive()) {
            while (threadFlagMap.get(threadBefore.getId())) {
            }
            threadBefore.interrupt();
        }
        //将线程存储,便于调用定位
        threadMap.put(session.getId(), this.thread);
    }
    @OnClose
    public void onClose(CloseReason closeReason) {
        System.err.println("closeReason = " + closeReason);
        runFlag = false;
        if (thread != null && thread.isAlive()) {
            thread.interrupt();
        }
        threadMap.remove(session.getId());
    }
    @OnError
    public void onError(Throwable error) {
        error.printStackTrace();
        if (thread != null && thread.isAlive()) {
            thread.interrupt();
        }
        threadMap.remove(session.getId());
    }
}