whyclxw
2024-11-29 a1acba74cdb0738bd1f1594c42cf6b976949b0d3
实时信息推送
8个文件已添加
5个文件已修改
510 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/PowerFkInfController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerFkInfMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerStateMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_power_fk_inf/PowerFkInf.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_power_fk_rt/PowerState.java 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerFkInfService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerStateService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/swagger/SwaggerConfig4Knife.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/PowerInfRtSocket.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/config/application-prod.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/config/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
target/classes/config/application-prod.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/PowerFkInfController.java
New file
@@ -0,0 +1,29 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.pojo.db_power_fk_inf.PowerFkInf;
import com.whyc.service.PowerFkInfService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@Api(tags = "电源管理")
@RequestMapping("powerInf")
public class PowerFkInfController {
    @Autowired
    private PowerFkInfService service;
    @ApiOperation(value = "查询所有电源信息和实时数据")
    @GetMapping("getPowerInfRt")
    public Response getPowerInfRt(){
        List list= service.getPowerInfRt();
        return new Response().setII(1,list!=null,list,"");
    }
}
src/main/java/com/whyc/mapper/PowerFkInfMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_power_fk_inf.PowerFkInf;
public interface PowerFkInfMapper extends CustomMapper<PowerFkInf>{
}
src/main/java/com/whyc/mapper/PowerStateMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_power_fk_rt.PowerState;
public interface PowerStateMapper extends CustomMapper<PowerState>{
}
src/main/java/com/whyc/pojo/db_power_fk_inf/PowerFkInf.java
New file
@@ -0,0 +1,66 @@
package com.whyc.pojo.db_power_fk_inf;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.whyc.pojo.db_power_fk_rt.PowerState;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 电源信息配置表
 * </p>
 *
 * @author lxw
 * @since 2024-11-29
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(schema ="db_power_fk_inf", value="tb_power_fk_inf")
@ApiModel(value="PowerFkInf对象", description="电源信息配置表")
public class PowerFkInf implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "电源ID")
    private Integer powerId;
    @ApiModelProperty(value = "电源IP地址")
    private String powerIp;
    @ApiModelProperty(value = "电源名称")
    private String powerName;
    @ApiModelProperty(value = "电源品牌")
    private String powerProducer;
    @ApiModelProperty(value = "电源型号")
    private String powerModel;
    @ApiModelProperty(value = "电源生产日期")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date producerTime;
    @ApiModelProperty(value = "电源使用日期")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date powerUsetime;
    @TableField(exist = false)
    private PowerState state;
}
src/main/java/com/whyc/pojo/db_power_fk_rt/PowerState.java
New file
@@ -0,0 +1,223 @@
package com.whyc.pojo.db_power_fk_rt;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
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-11-29
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(schema ="db_power_fk_rt", value="tb_power_state")
@ApiModel(value="PowerState对象", description="")
public class PowerState implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增ID")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "电源ID")
    private Integer powerId;
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date recordTime;
    @ApiModelProperty(value = "电源版本[V硬件.软件]")
    private String powerVersion;
    @ApiModelProperty(value = "开关状态")
    private Integer powerWorkstat;
    @ApiModelProperty(value = "电源工作方向")
    private Integer powerFlow;
    @ApiModelProperty(value = "总告警状态[重置全部告警]")
    private Integer allFault;
    @ApiModelProperty(value = "继电器状态")
    private Integer relayStat;
    @ApiModelProperty(value = "风机状态")
    private Integer fanStat;
    @ApiModelProperty(value = "设置的并网输出电流")
    private Float gridIrefCurrSet;
    @ApiModelProperty(value = "设置的VBus电压")
    private Float vbusVerfVolSet;
    @ApiModelProperty(value = "测试模式")
    private Integer testModelab;
    @ApiModelProperty(value = "设置的LLC Buck 电压")
    private Float llcBuckVolSet;
    @ApiModelProperty(value = "设置的LLC Buck电流")
    private Float llcBuckCurrSet;
    @ApiModelProperty(value = "母线电压")
    private Float vbusVol;
    @ApiModelProperty(value = "A相电压(IIC读取)")
    private Float vgridVolaIic;
    @ApiModelProperty(value = "B相电压")
    private Float vgridVolbIic;
    @ApiModelProperty(value = "C相电压")
    private Float vgridVolcIic;
    @ApiModelProperty(value = "A相电流")
    private Float vgridCurraIic;
    @ApiModelProperty(value = "B相电流")
    private Float vgridCurrbIic;
    @ApiModelProperty(value = "C相电流")
    private Float vgridCurrcIic;
    @ApiModelProperty(value = "A相电压(单片机ADC采样)")
    private Float iinvVolaAdc;
    @ApiModelProperty(value = "B相电压")
    private Float iinvVolbAdc;
    @ApiModelProperty(value = "C相电压")
    private Float iinvVolcAdc;
    @ApiModelProperty(value = "A相电流")
    private Float iinvCurraAdc;
    @ApiModelProperty(value = "B相电流")
    private Float iinvCurrbAdc;
    @ApiModelProperty(value = "C相电流")
    private Float iinvCurrcAdc;
    @ApiModelProperty(value = "BUS+正电压")
    private Float vmidVol;
    @ApiModelProperty(value = "交流频率")
    private Float gridFreq;
    @ApiModelProperty(value = "A相功率")
    private Float powerRmsa;
    @ApiModelProperty(value = "B相功率")
    private Float powerRmsb;
    @ApiModelProperty(value = "C相功率")
    private Float powerRmsc;
    @ApiModelProperty(value = "A相电流有效值")
    private Float igridrmsCurra;
    @ApiModelProperty(value = "B相电流有效值")
    private Float igridrmsCurrb;
    @ApiModelProperty(value = "C相电流有效值")
    private Float igridrmsCurrc;
    @ApiModelProperty(value = "A相电压有效值")
    private Float vgridrmsVola;
    @ApiModelProperty(value = "B相电压有效值")
    private Float vgridrmsVolb;
    @ApiModelProperty(value = "C相电压有效值")
    private Float vgridrmsVolc;
    @ApiModelProperty(value = "A散热器温度")
    private Float degreeTempa;
    @ApiModelProperty(value = "B散热器温度")
    private Float degreeTempb;
    @ApiModelProperty(value = "C散热器温度")
    private Float degreeTempc;
    @ApiModelProperty(value = "PCB板温度")
    private Float degreeTemppcb;
    @ApiModelProperty(value = "A相过流(0-正常 1-告警)")
    private Integer acinOverCurra;
    @ApiModelProperty(value = "B相过流")
    private Integer acinOverCurrb;
    @ApiModelProperty(value = "C相过流")
    private Integer acinOverCurrc;
    @ApiModelProperty(value = "BUS过压")
    private Integer busOverVol;
    @ApiModelProperty(value = "BUS欠压")
    private Integer busUnderVol;
    @ApiModelProperty(value = "A相过压")
    private Integer vgridOverVola;
    @ApiModelProperty(value = "B相过压")
    private Integer vgridOverVolb;
    @ApiModelProperty(value = "C相过压")
    private Integer vgridOverVolc;
    @ApiModelProperty(value = "A相欠压")
    private Integer vgridUnderVola;
    @ApiModelProperty(value = "B相欠压")
    private Integer vgridUnderVolb;
    @ApiModelProperty(value = "C相欠压")
    private Integer vgridUnderVolc;
    @ApiModelProperty(value = "A散热器温度过温")
    private Integer mosaOverTemp;
    @ApiModelProperty(value = "B散热器温度过温")
    private Integer mosbOverTemp;
    @ApiModelProperty(value = "C散热器温度过温")
    private Integer moscOverTemp;
    @ApiModelProperty(value = "风机故障")
    private Integer fanAlarm;
    @ApiModelProperty(value = "12V辅助电源故障")
    private Integer vdc12vFault;
    @ApiModelProperty(value = "总通信计数")
    private Integer commCountTotal;
    @ApiModelProperty(value = "总错误计数")
    private Integer errorCountTotal;
    @ApiModelProperty(value = "连续错误计数")
    private Integer errorCount;
}
src/main/java/com/whyc/service/PowerFkInfService.java
New file
@@ -0,0 +1,30 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.mapper.PowerFkInfMapper;
import com.whyc.pojo.db_power_fk_inf.PowerFkInf;
import com.whyc.pojo.db_power_fk_rt.PowerState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PowerFkInfService {
    @Autowired(required = false)
    private PowerFkInfMapper mapper;
    @Autowired
    private PowerStateService stateService;
    //实时数据
    public List getPowerInfRt() {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.orderByAsc("power_id");
        List<PowerFkInf> infList=mapper.selectList(wrapper);
        for (PowerFkInf inf:infList) {
            PowerState state=stateService.getRtById(inf.getPowerId());
            inf.setState(state);
        }
        return infList;
    }
}
src/main/java/com/whyc/service/PowerStateService.java
New file
@@ -0,0 +1,21 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.mapper.PowerStateMapper;
import com.whyc.pojo.db_power_fk_rt.PowerState;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PowerStateService {
    @Autowired(required = false)
    private PowerStateMapper mapper;
    //根据电源id获取试试数据
    public PowerState getRtById(Integer powerId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("power_id",powerId);
        wrapper.last("limit 1");
        PowerState state=mapper.selectOne(wrapper);
        return state;
    }
}
src/main/java/com/whyc/swagger/SwaggerConfig4Knife.java
@@ -22,7 +22,7 @@
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("钟铮蓝牙锁平台")
                .groupName("F15K-S380_220F平台")
                .select()
                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.whyc.controller"))
@@ -31,9 +31,9 @@
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("钟铮蓝牙锁平台")               //大标题 title
                .title("F15K-S380_220F平台")               //大标题 title
                .contact(new Contact("lxw","todo","todo"))
                .description("钟铮蓝牙锁平台")             //小标题
                .description("F15K-S380_220F平台")             //小标题
                .version("1.0")                           //版本
//                .termsOfServiceUrl("http://xxx.xxx.com")    //终端服务程序
//                .license("LICENSE")                         //链接显示文字
src/main/java/com/whyc/webSocket/PowerInfRtSocket.java
New file
@@ -0,0 +1,99 @@
package com.whyc.webSocket;
import com.whyc.config.WebSocketConfig;
import com.whyc.dto.Response;
import com.whyc.pojo.db_power_fk_inf.PowerFkInf;
import com.whyc.pojo.db_power_fk_rt.PowerState;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.service.PowerFkInfService;
import com.whyc.service.PowerStateService;
import com.whyc.util.ActionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpSession;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 设备实时连接信息
 */
@Component
@ServerEndpoint(value = "/powerSocket",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
public class PowerInfRtSocket {
    private Session session;
    private Thread thread;
    private static PowerFkInfService infService;
    private static PowerStateService stateService;
    private volatile boolean runFlag = true;
    private volatile Map<String, Thread> threadMap = new HashMap<>();
    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
    @Autowired
    public void setPowerFkInfService(PowerFkInfService infService) {
        PowerInfRtSocket.infService = infService;
    }
    @Autowired
    public void setPowerStateService(PowerStateService stateService) {
        PowerInfRtSocket.stateService = stateService;
    }
    @OnOpen
    public void onOpen(Session session){
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    while (!currentThread().isInterrupted()) {
                        Response res = getPowerInfRt();
                        session.getBasicRemote().sendObject(res);
                        sleep(4000);
                    }
                } catch (Exception e) {
                    this.interrupt();
                }
            }
        };
        thread.start();
        this.thread = thread;
    }
    //实时数据
    private Response getPowerInfRt() {
        List list=infService.getPowerInfRt();
        return new Response().setII(1,true,list,"实时数据");
    }
    @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/resources/config/application-dev.yml
@@ -3,7 +3,7 @@
  type: 1
#服务端口号
server:
  port: 8100
  port: 8101
  servlet:
    context-path: /fksf
    session:
@@ -17,9 +17,9 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.10.82:3382/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false
    url: jdbc:mysql://192.168.10.82:3360/db_power_fk_inf?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false
    username: root
    password: Hdw8688139
    password: lmx8688139
    maxIdel: 60
    initialPoolSize: 2
    minPoolSize: 2
src/main/resources/config/application-prod.yml
@@ -3,7 +3,7 @@
  type: 1
#服务端口号
server:
  port: 8100
  port: 8101
  servlet:
    context-path: /fksf
    session:
@@ -17,9 +17,9 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3382/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    url: jdbc:mysql://localhost:3360/db_power_fk_inf?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    username: root
    password: Hdw8688139
    password: lmx8688139
    maxIdel: 60
    initialPoolSize: 2
    minPoolSize: 2
target/classes/config/application-dev.yml
@@ -3,7 +3,7 @@
  type: 1
#服务端口号
server:
  port: 8100
  port: 8101
  servlet:
    context-path: /fksf
    session:
@@ -17,9 +17,9 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.10.82:3382/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false
    url: jdbc:mysql://192.168.10.82:3360/db_power_fk_inf?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false
    username: root
    password: Hdw8688139
    password: lmx8688139
    maxIdel: 60
    initialPoolSize: 2
    minPoolSize: 2
target/classes/config/application-prod.yml
@@ -3,7 +3,7 @@
  type: 1
#服务端口号
server:
  port: 8100
  port: 8101
  servlet:
    context-path: /fksf
    session:
@@ -17,9 +17,9 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3382/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    url: jdbc:mysql://localhost:3360/db_power_fk_inf?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
    username: root
    password: Hdw8688139
    password: lmx8688139
    maxIdel: 60
    initialPoolSize: 2
    minPoolSize: 2