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