whyclxw
2024-12-04 ed093002ab4882ca377430b2f8506cb5ed72fdbd
power实时推送
2个文件已修改
15个文件已添加
764 ■■■■■ 已修改文件
src/main/java/com/whyc/mapper/PowerBattRtMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerInfMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerRealRt1Mapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerRealRt2Mapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerRealRt3Mapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/PowerBattRt.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/PowerInf.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/PowerRealRt1.java 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/PowerRealRt2.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/PowerRealRt3.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/StationInf.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerBattRtService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerInfService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerRealRt1Service.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerRealRt2Service.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PowerRealRt3Service.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/PowerSocket.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PowerBattRtMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.PowerBattRt;
public interface PowerBattRtMapper extends CustomMapper<PowerBattRt>{
}
src/main/java/com/whyc/mapper/PowerInfMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.PowerInf;
public interface PowerInfMapper extends CustomMapper<PowerInf>{
}
src/main/java/com/whyc/mapper/PowerRealRt1Mapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.PowerRealRt1;
public interface PowerRealRt1Mapper extends CustomMapper<PowerRealRt1>{
}
src/main/java/com/whyc/mapper/PowerRealRt2Mapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.PowerRealRt2;
public interface PowerRealRt2Mapper extends CustomMapper<PowerRealRt2>{
}
src/main/java/com/whyc/mapper/PowerRealRt3Mapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.PowerRealRt3;
public interface PowerRealRt3Mapper extends CustomMapper<PowerRealRt3>{
}
src/main/java/com/whyc/pojo/PowerBattRt.java
New file
@@ -0,0 +1,57 @@
package com.whyc.pojo;
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.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-12-04
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_power_rt",value = "tb_power_batt_rt")
@ApiModel(value="PowerBattRt对象", description="")
public class PowerBattRt 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 = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordTime;
    @ApiModelProperty(value = "单体编号")
    private Integer monNum;
    @ApiModelProperty(value = "单体电压")
    private Float monVol;
    @ApiModelProperty(value = "单体内阻")
    private Float monRes;
    @ApiModelProperty(value = "单体温度")
    private Float monTmp;
}
src/main/java/com/whyc/pojo/PowerInf.java
@@ -45,5 +45,13 @@
    @ApiModelProperty("直流输出电压下限阈值")
    private Float dcoutvolLowLimit;
    @TableField("power_ip")
    @ApiModelProperty("电源ip")
    private String powerIp;
    @TableField("dev_type")
    @ApiModelProperty("电源类型:1<包含电源实时rt>,2<包含电源实时rt>,3<不包含电源实时rt>")
    private Integer devType;
}
src/main/java/com/whyc/pojo/PowerRealRt1.java
New file
@@ -0,0 +1,182 @@
package com.whyc.pojo;
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.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-12-04
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_power_rt",value = "tb_power_real_rt1")
@ApiModel(value="PowerRealRt1对象", description="")
public class PowerRealRt1 implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private Integer powerId;
    @ApiModelProperty(value = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordTime;
    private Float charOutVol;
    private Float charOutCurr;
    private Float groupVol;
    private Float groupCurr;
    private Float groupTmp;
    private Float busVol;
    private Float ac1Vola;
    private Float ac1Volb;
    private Float ac1Volc;
    private Float ac2Vola;
    private Float ac2Volb;
    private Float ac2Volc;
    private Float busVolPositive;
    private Float busVolNegative;
    private Float busResPositive;
    private Float busResNegative;
    private Integer charJunFloat;
    private Integer charOpenClose;
    private Integer charModelError;
    private Integer charOutOvervol;
    private Integer charOutLessvol;
    private Integer battOvervol;
    private Integer battLessvol;
    private Integer battMonOvervol;
    private Integer battMonLessvol;
    private Integer battState;
    private Integer controlBusOvervol;
    private Integer controlBusLessvol;
    private Integer insualBusVolError;
    private Integer controlBusPositiveError;
    private Integer controlBusNegativeError;
    private Integer insualBusAcvolOvervol;
    private Integer battPatrolDetectorError;
    private Integer insualError;
    private Integer acin1Qf11;
    private Integer acin1Qf12;
    private Integer charOutBusDk11;
    private Integer charOutBattDk12;
    private Integer battOutQf1;
    private Integer busSwitchN1lzk;
    private Integer ac1Fault;
    private Integer ac2Fault;
    private Integer mainSwitchFault;
    private Integer feederTripFault;
    private Integer thunderFault;
    private Integer feedersCommFault;
    private Integer dcFeeder7to9Switch1;
    private Integer dcFeeder7Switch;
    private Integer dcFeeder7Bus1Zk11;
    private Integer dcFeeder7Bus2Zk12;
    private Integer dcFeeder8Switch;
    private Integer dcFeeder8Bus1Zk11;
    private Integer dcFeeder8Bus2Zk12;
    private Integer dcFeeder9Switch;
    private Integer dcFeeder9Bus1Zk11;
    private Integer dcFeeder9Bus2Zk12;
    private Integer acFeeder7Switch;
    private Integer acFeeder7Acin1Q11;
    private Integer acFeeder7Acin2Q12;
    private Integer acFeeder7Acin1Fault;
    private Integer acFeeder7Acin2Fault;
    private Integer acFeeder9Switch;
    private Integer acFeeder9Acin1Q11;
    private Integer acFeeder9Acin2Q12;
    private Integer acFeeder9Acin1Fault;
    private Integer acFeeder9Acin2Fault;
    private Integer insualCommFault;
    private Integer insualInsualFault;
    private Integer insualMiainCommFault;
}
src/main/java/com/whyc/pojo/PowerRealRt2.java
New file
@@ -0,0 +1,170 @@
package com.whyc.pojo;
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.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-12-04
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_power_rt",value = "tb_power_real_rt2")
@ApiModel(value="PowerRealRt2对象", description="")
public class PowerRealRt2 implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private Integer powerId;
    @ApiModelProperty(value = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordTime;
    private Float charOutVol;
    private Float charOutCurr;
    private Float groupVol;
    private Float groupCurr;
    private Float groupTmp;
    private Float busVol;
    private Float ac1Vola;
    private Float ac1Volb;
    private Float ac1Volc;
    private Float ac2Vola;
    private Float ac2Volb;
    private Float ac2Volc;
    private Float busVolPositive;
    private Float busVolNegative;
    private Float busResPositive;
    private Float busResNegative;
    private Integer charJunFloat;
    private Integer charOpenClose;
    private Integer charModelError;
    private Integer charOutOvervol;
    private Integer charOutLessvol;
    private Integer battOvervol;
    private Integer battLessvol;
    private Integer battMonOvervol;
    private Integer battMonLessvol;
    private Integer battState;
    private Integer controlBusOvervol;
    private Integer controlBusLessvol;
    private Integer insualBusVolError;
    private Integer controlBusPositiveError;
    private Integer controlBusNegativeError;
    private Integer insualBusAcvolOvervol;
    private Integer battPatrolDetectorError;
    private Integer insualError;
    private Integer acin2Qf21;
    private Integer acin2Qf22;
    private Integer charOutBusDk21;
    private Integer charOutBattDk22;
    private Integer battOutQf1;
    private Integer ac1Fault;
    private Integer ac2Fault;
    private Integer mainSwitchFault;
    private Integer feederTripFault;
    private Integer thunderFault;
    private Integer feedersCommFault;
    private Integer dcFeeder7to9Switch1;
    private Integer dcFeeder7Switch;
    private Integer dcFeeder7Bus1Zk21;
    private Integer dcFeeder7Bus2Zk22;
    private Integer dcFeeder8Switch;
    private Integer dcFeeder8Bus1Zk21;
    private Integer dcFeeder8Bus2Zk22;
    private Integer dcFeeder9Switch;
    private Integer dcFeeder9Bus1Zk21;
    private Integer dcFeeder9Bus2Zk22;
    private Integer acFeeder8Switch;
    private Integer acFeeder8Acin1Q11;
    private Integer acFeeder8Acin2Q12;
    private Integer acFeeder8Acin1Fault;
    private Integer acFeeder8Acin2Fault;
    private Integer insualCommFault;
    private Integer insualInsualFault;
    private Integer insualMiainCommFault;
}
src/main/java/com/whyc/pojo/PowerRealRt3.java
New file
@@ -0,0 +1,86 @@
package com.whyc.pojo;
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.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2024-12-04
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_power_rt",value = "tb_power_real_rt3")
@ApiModel(value="PowerRealRt3对象", description="")
public class PowerRealRt3 implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    private Integer powerId;
    @ApiModelProperty(value = "记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordTime;
    private Float charOutVol;
    private Float charOutCurr;
    private Float ac1Vola;
    private Float ac1Volb;
    private Float ac1Volc;
    private Float ac2Vola;
    private Float ac2Volb;
    private Float ac2Volc;
    private Integer charJunFloat;
    private Integer charOpenClose;
    private Integer charModelError;
    private Integer charOutOvervol;
    private Integer charOutLessvol;
    private Integer acin3Qf31;
    private Integer acin3Qf32;
    private Integer charOutBatt1Dk31;
    private Integer charOutBatt2Dk31;
    private Integer ac1Fault;
    private Integer ac2Fault;
    private Integer mainSwitchFault;
    private Integer thunderFault;
}
src/main/java/com/whyc/pojo/StationInf.java
@@ -28,7 +28,7 @@
    @TableField("stype")
    @ApiModelProperty("机房类型: 1<电池组> 2<电源>")
    @ApiModelProperty("机房类型: 0<包含电池组和电源>1<电池组> 2<电源>")
    private Integer stype;
    @TableField(exist = false)
src/main/java/com/whyc/service/PowerBattRtService.java
New file
@@ -0,0 +1,7 @@
package com.whyc.service;
import org.springframework.stereotype.Service;
@Service
public class PowerBattRtService {
}
src/main/java/com/whyc/service/PowerInfService.java
New file
@@ -0,0 +1,75 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.dto.Response;
import com.whyc.mapper.*;
import com.whyc.pojo.PowerBattRt;
import com.whyc.pojo.PowerInf;
import com.whyc.pojo.PowerRealRt1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class PowerInfService {
    @Autowired(required = false)
    private PowerInfMapper mapper;
    @Autowired(required = false)
    private PowerBattRtMapper powerRtmapper;
    @Autowired(required = false)
    private PowerRealRt1Mapper realRt1Mapper;
    @Autowired(required = false)
    private PowerRealRt2Mapper realRt2Mapper;
    @Autowired(required = false)
    private PowerRealRt3Mapper realRt3Mapper;
    //根据id获取电源信息
    public  Map<String,Object> getInfById(int powerId) {
        Map<String,Object> map=new HashMap<>();
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("power_id",powerId);
        wrapper.last("limit 1");
        PowerInf pinf=mapper.selectOne(wrapper);
        Integer devType=pinf.getDevType();
        map.put("devType",devType);
        if(devType!=3){//第三种不包含单体实时
            List<PowerBattRt> list=getBattRt(powerId);
            map.put("battRt",list);
        }
        Object obj=getRealRt(powerId,devType);
        map.put("realRt"+devType,obj);
        return map;
    }
    //获取电电源信息
    private Object getRealRt(int powerId,int devType) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("power_id",powerId);
        wrapper.last("limit 1");
        Object obj=null;
        if(devType==1){
            obj=realRt1Mapper.selectOne(wrapper);
        }
        if(devType==2){
            obj=realRt2Mapper.selectOne(wrapper);
        }
        if(devType==3){
            obj=realRt3Mapper.selectOne(wrapper);
        }
        return obj;
    }
    //获取电源电池组信息
    private List<PowerBattRt> getBattRt(int powerId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("power_id",powerId);
        List<PowerBattRt> list=mapper.selectList(wrapper);
        return list;
    }
}
src/main/java/com/whyc/service/PowerRealRt1Service.java
New file
@@ -0,0 +1,7 @@
package com.whyc.service;
import org.springframework.stereotype.Service;
@Service
public class PowerRealRt1Service {
}
src/main/java/com/whyc/service/PowerRealRt2Service.java
New file
@@ -0,0 +1,7 @@
package com.whyc.service;
import org.springframework.stereotype.Service;
@Service
public class PowerRealRt2Service {
}
src/main/java/com/whyc/service/PowerRealRt3Service.java
New file
@@ -0,0 +1,7 @@
package com.whyc.service;
import org.springframework.stereotype.Service;
@Service
public class PowerRealRt3Service {
}
src/main/java/com/whyc/webSocket/PowerSocket.java
New file
@@ -0,0 +1,126 @@
package com.whyc.webSocket;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.config.WebSocketConfig;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.pojo.PowerInf;
import com.whyc.pojo.RtState;
import com.whyc.pojo.StationInf;
import com.whyc.service.*;
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;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * packageName com.whyc.websocket
 *
 * @author lxw
 * @version JDK 8
 * @className PowerSocket (此处以class为例)
 * @date 2024/6/15
 * @description TODO
 */
@Component
@ServerEndpoint(value = "/power", encoders = WebSocketEncoder.class)
public class PowerSocket{
    private Session session;
    private Thread thread;
    private volatile boolean runFlag = true;
    private volatile Map<String, Thread> threadMap = new HashMap<>();
    private static final int executeTime = 5000;
    private static PowerInfService pinfService;
    private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
    @Autowired
    public void setPowerInfService(PowerInfService pinfService) {
        PowerSocket.pinfService = pinfService;
    }
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
    }
    @OnMessage
    public void onMessage(Session session, String message) {
        int powerId=Integer.valueOf(message);
        thread = new Thread("Thread_PowerSocket") {
            @Override
            public void run() {
                while (runFlag && !isInterrupted()) {
                    Thread thread = currentThread();
                    threadFlagMap.put(thread.getId(), true);
                    try {
                        Map<String,Object> map=getPowerRt(powerId);
                        if (session.isOpen()) {
                            //推送信息
                            synchronized (session) {
                                session.getBasicRemote().sendObject(new Response().set(1, map));
                            }
                            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);
    }
    //获取电源的实时数据
    private  Map<String,Object> getPowerRt(int powerId) {
        Map<String,Object> map=pinfService.getInfById(powerId);
        return map;
    }
    @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());
    }
}