lxw
2023-11-09 4c1e83565c2e527746ecef780c5fda75bbb98a11
实时推送设备连接情况
7个文件已添加
443 ■■■■■ 已修改文件
src/main/java/com/whyc/mapper/DevStateMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/DevState.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/FgcdFiledownload.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DevStateService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/websocket/DevSocket.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/websocket/WebSocketEncoder.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DevStateMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/DevStateMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.DevState;
public interface DevStateMapper extends CustomMapper<DevState>{
}
src/main/java/com/whyc/pojo/DevState.java
New file
@@ -0,0 +1,78 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2023-11-09
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_ram_db",value = "tb_dev_state")
@ApiModel(value="DevState对象", description="")
public class DevState implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private String devIp;
    @ApiModelProperty(value = "设备版本号")
    private String devVersion;
    @ApiModelProperty(value = "设备id")
    private Long devId;
    @ApiModelProperty(value = "更新时间")
    private String recordDatetime;
    private String devDatetime;
    private Integer devTesttype;
    private Integer devTestgroupnum;
    private Integer devWorkstate;
    private Integer devEachgroupBattsum;
    private Float devCaptestOnlinevol;
    private Float devCaptestGroupvol;
    private Float devCaptestCurr;
    private Float devCaptestCap;
    private Integer devCaptestTimelong;
    @ApiModelProperty(value = "设备通信计数")
    private Integer devCommcount;
    @ApiModelProperty(value = "设备通信错误计数")
    private Integer devErrcommcount;
    private Integer devRxnullerrcount;
    private Float devTemp;
}
src/main/java/com/whyc/pojo/FgcdFiledownload.java
New file
@@ -0,0 +1,220 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 远程数据文件下载表
 * </p>
 *
 * @author lxw
 * @since 2023-11-09
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_ram_db",value = "tb_fgcd_filedownload")
@ApiModel(value="FgcdFiledownload对象", description="远程数据文件下载表")
public class FgcdFiledownload implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "设备id")
    private Integer devId;
    @ApiModelProperty(value = "命令")
    private Integer opCmd;
    @ApiModelProperty(value = "总的文件数目")
    private Integer fileTotal;
    @ApiModelProperty(value = "当前页数据文件数")
    private Integer fileCount;
    @ApiModelProperty(value = "需要下载文件索引")
    private Integer fileIndex;
    @ApiModelProperty(value = "文件名1")
    private String fileName1;
    @ApiModelProperty(value = "文件索引1")
    private Integer fileIndex1;
    @ApiModelProperty(value = "下载标识1")
    private Integer downloadFlag1;
    @ApiModelProperty(value = "下载状态1")
    private Integer downloadState1;
    @ApiModelProperty(value = "文件名2")
    private String fileName2;
    @ApiModelProperty(value = "文件索引2")
    private Integer fileIndex2;
    @ApiModelProperty(value = "下载标识2")
    private Integer downloadFlag2;
    @ApiModelProperty(value = "下载状态2")
    private Integer downloadState2;
    @ApiModelProperty(value = "文件名3")
    private String fileName3;
    @ApiModelProperty(value = "文件索引3")
    private Integer fileIndex3;
    @ApiModelProperty(value = "下载标识3")
    private Integer downloadFlag3;
    @ApiModelProperty(value = "下载状态3")
    private Integer downloadState3;
    @ApiModelProperty(value = "文件名4")
    private String fileName4;
    @ApiModelProperty(value = "文件索引4")
    private Integer fileIndex4;
    @ApiModelProperty(value = "下载标识4")
    private Integer downloadFlag4;
    @ApiModelProperty(value = "下载状态4")
    private Integer downloadState4;
    @ApiModelProperty(value = "停止原因4")
    private Integer stopType4;
    @ApiModelProperty(value = "文件名5")
    private String fileName5;
    @ApiModelProperty(value = "文件索引5")
    private Integer fileIndex5;
    @ApiModelProperty(value = "下载标识5")
    private Integer downloadFlag5;
    @ApiModelProperty(value = "下载状态5")
    private Integer downloadState5;
    @ApiModelProperty(value = "文件名6")
    private String fileName6;
    @ApiModelProperty(value = "文件索引6")
    private Integer fileIndex6;
    @ApiModelProperty(value = "下载标识6")
    private Integer downloadFlag6;
    @ApiModelProperty(value = "下载状态6")
    private Integer downloadState6;
    @ApiModelProperty(value = "文件名7")
    private String fileName7;
    @ApiModelProperty(value = "文件索引7")
    private Integer fileIndex7;
    @ApiModelProperty(value = "下载状态7")
    private Integer downloadFlag7;
    @ApiModelProperty(value = "下载状态7")
    private Integer downloadState7;
    @ApiModelProperty(value = "文件名8")
    private String fileName8;
    @ApiModelProperty(value = "文件索引8")
    private Integer fileIndex8;
    @ApiModelProperty(value = "下载标识8")
    private Integer downloadFlag8;
    @ApiModelProperty(value = "下载状态8")
    private Integer downloadState8;
    @ApiModelProperty(value = "异常停止原因")
    private Integer stopReason;
    @ApiModelProperty(value = "下载状态[1:下载文件;2:生成文件;3:解析数据;4:导入完成]")
    private Integer downloadState;
    @ApiModelProperty(value = "当前下载进度")
    private Integer nowDataBlock;
    @ApiModelProperty(value = "总的数据块数")
    private Integer totalDataBlock;
    @ApiModelProperty(value = "文件1当前下载进度")
    private Integer nowDataBlock1;
    @ApiModelProperty(value = "文件1总的数据块数")
    private Integer totalDataBlock1;
    @ApiModelProperty(value = "文件2当前下载进度")
    private Integer nowDataBlock2;
    @ApiModelProperty(value = "文件2总的数据块数")
    private Integer totalDataBlock2;
    @ApiModelProperty(value = "文件3当前下载进度")
    private Integer nowDataBlock3;
    @ApiModelProperty(value = "文件3总的数据块数")
    private Integer totalDataBlock3;
    @ApiModelProperty(value = "文件4当前下载进度")
    private Integer nowDataBlock4;
    @ApiModelProperty(value = "文件4总的数据块数")
    private Integer totalDataBlock4;
    @ApiModelProperty(value = "文件5当前下载进度")
    private Integer nowDataBlock5;
    @ApiModelProperty(value = "文件5总的数据块数")
    private Integer totalDataBlock5;
    @ApiModelProperty(value = "文件6当前下载进度")
    private Integer nowDataBlock6;
    @ApiModelProperty(value = "文件6总的数据块数")
    private Integer totalDataBlock6;
    @ApiModelProperty(value = "文件7当前下载进度")
    private Integer nowDataBlock7;
    @ApiModelProperty(value = "文件7总的数据块数")
    private Integer totalDataBlock7;
    @ApiModelProperty(value = "文件8当前下载进度")
    private Integer nowDataBlock8;
    @ApiModelProperty(value = "文件8总的数据块数")
    private Integer totalDataBlock8;
    @ApiModelProperty(value = "读取的电池组个数")
    private Integer readbattcount;
    @ApiModelProperty(value = "电池组总组数")
    private Integer batttotalcount;
    @ApiModelProperty(value = "电池组列表名称,分割")
    private String battnamelist;
}
src/main/java/com/whyc/service/DevStateService.java
New file
@@ -0,0 +1,21 @@
package com.whyc.service;
import com.whyc.mapper.DevStateMapper;
import com.whyc.pojo.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DevStateService {
    @Autowired(required = false)
    private DevStateMapper mapper;
    //查询所有的记录
    public Response getAllDev(){
        List list=mapper.selectList(null);
        return new Response().setII(1,list!=null,list,"查询所有的记录");
    }
}
src/main/java/com/whyc/websocket/DevSocket.java
New file
@@ -0,0 +1,82 @@
package com.whyc.websocket;
import com.whyc.config.WebSocketConfig;
import com.whyc.pojo.DevState;
import com.whyc.pojo.Response;
import com.whyc.service.DevStateService;
import com.whyc.util.ActionUtil;
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 = "/dev",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
public class DevSocket {
    private Session session;
    private static final int executeTime = 2000;
    private Thread thread;
    private volatile boolean runFlag=true;
    private volatile Map<String,Thread> threadMap = new HashMap<>();
    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
    private static DevStateService devService;
    @Autowired
    public void setHistoryService(DevStateService devService){
        DevSocket.devService=devService;
    }
    @OnOpen
    public void onOpen(Session session){
        this.session=session;
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    while (!currentThread().isInterrupted()) {
                        Response res = devService.getAllDev();
                        session.getBasicRemote().sendObject(res);
                        sleep(4000);
                    }
                } catch (Exception e) {
                    this.interrupt();
                }
            }
        };
        thread.start();
        this.thread = thread;
    }
    @OnMessage
    public void onMessage(Session session, String message){
        this.session=session;
    }
    @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());
    }
}
src/main/java/com/whyc/websocket/WebSocketEncoder.java
New file
@@ -0,0 +1,30 @@
package com.whyc.websocket;
import com.google.gson.GsonBuilder;
import com.whyc.pojo.Response;
import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;
/**
 * 编译器
 */
public class WebSocketEncoder implements Encoder.Text<Response> {
    @Override
    public String encode(Response o) throws EncodeException {
        return new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create().toJson(o);
    }
    @Override
    public void init(EndpointConfig endpointConfig) {
    }
    @Override
    public void destroy() {
    }
}
src/main/resources/mapper/DevStateMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.whyc.mapper.DevStateMapper">
</mapper>