whyclxw
2 天以前 65af9227c2ec7ac93dfa237e635af334560fe198
src/main/java/com/whyc/webSocket/RealTimeSocket.java
@@ -1,14 +1,24 @@
package com.whyc.webSocket;
import com.whyc.config.WebSocketConfig;
import com.whyc.constant.BattStateEnum;
import com.whyc.constant.DevStateEnum;
import com.whyc.constant.FailReasonEnum;
import com.whyc.constant.StopReasonEnum;
import com.whyc.dto.Real.SticRealRtdataDto;
import com.whyc.dto.Real.TopDto;
import com.whyc.dto.RealTimeDto;
import com.whyc.dto.Response;
import com.whyc.factory.BattCapFactory;
import com.whyc.pojo.db_batt_testdata.BattresdataInf;
import com.whyc.pojo.db_batt_testdata.BatttestdataInf;
import com.whyc.pojo.db_ram_db.BattRtdata;
import com.whyc.pojo.db_ram_db.BattRtstate;
import com.whyc.pojo.db_ram_db.DeviceState;
import com.whyc.pojo.db_ram_db.PwrdevAcdcdata;
import com.whyc.pojo.db_station.BattInf;
import com.whyc.pojo.db_station.PowerInf;
import com.whyc.pojo.db_station.StationInf;
import com.whyc.pojo.db_user.User;
import com.whyc.service.*;
import com.whyc.util.ActionUtil;
@@ -19,7 +29,9 @@
import javax.servlet.http.HttpSession;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@@ -47,6 +59,18 @@
    //电池组信息
    private static BattInfService battInfService;
    //机房信息
    private static StationInfService stationInfService;
    //电源信息
    private static PowerInfService powerInfService;
    //单体信息
    private static BattRtdataService rtdataService;
    //内阻测试信息
    private static BattresdataInfService battresdataInfService;
    private volatile boolean runFlag = true;
@@ -93,8 +117,28 @@
    }
    @Autowired
    public void seBattInfService(BattInfService battInfService) {
    public void setBattInfService(BattInfService battInfService) {
        RealTimeSocket.battInfService = battInfService;
    }
    @Autowired
    public void setStationInfService(StationInfService stationInfService) {
        RealTimeSocket.stationInfService = stationInfService;
    }
    @Autowired
    public void setPowerInfService(PowerInfService powerInfService) {
        RealTimeSocket.powerInfService = powerInfService;
    }
    @Autowired
    public void setBattRtdataService(BattRtdataService rtdataService) {
        RealTimeSocket.rtdataService = rtdataService;
    }
    @Autowired
    public void setBattresdataInfService(BattresdataInfService battresdataInfService) {
        RealTimeSocket.battresdataInfService = battresdataInfService;
    }
@@ -161,26 +205,47 @@
            BattRtstate battRtstate = battRtstateService.getBattRealInfo(realDto.getBattgroupId());
            if (battRtstate != null) {
                topDto.setBattState(battRtstate.getBattState());
                topDto.setBattStateName(BattStateEnum.getValue(battRtstate.getBattState()));
                topDto.setVbusVol(battRtstate.getVbusVol());
                topDto.setOnlineVol(battRtstate.getOnlineVol());
                topDto.setRecordtime(ThreadLocalUtil.format(battRtstate.getRecDatetime(),1));
            }
            //实时获取电池组信息
            BattInf binf=battInfService.getBinfByBattgroupId(realDto.getBattgroupId());
            if(binf!=null){
                topDto.setBattGroupName(binf.getBattgroupName());
                topDto.setDevName(binf.getDevName());
            }
            //获取机房信息
            StationInf stationInf = stationInfService.getStationInfById(binf.getStationId());
            if(stationInf!=null){
                topDto.setStationName(stationInf.getStationName());
                topDto.setProvice(stationInf.getProvice());
                topDto.setCity(stationInf.getCity());
                topDto.setCounty(stationInf.getCountry());
                topDto.setFullName(stationInf.getFullName());
            }
            //获取电源信息
            PowerInf powerInf = powerInfService.getPowerInfById(binf.getPowerId());
            if(powerInf!=null){
                topDto.setPowerName(powerInf.getPowerName());
            }
            //实时获取设备信息
            DeviceState deviceState = deviceStateService.getDevRealInfo(realDto.getDevId());
            if (deviceState != null) {
                topDto.setDevState(deviceState.getDevWorkstate());
                if (deviceState.getDevWorkstate() == 1) {//核容放电
                topDto.setDevStateName(DevStateEnum.getValue(deviceState.getDevWorkstate()));
                if (deviceState.getDevWorkstate() == DevStateEnum.DEVSTATE_2.getStateId()) {//核容放电
                    topDto.setCaptestGroupvol(deviceState.getDevCaptestGroupvol());
                    topDto.setCaptestCurr(deviceState.getDevCaptestCurr());
                    topDto.setCaptestTimelong(deviceState.getDevCaptestTimelong());
                    topDto.setCaptestCap(deviceState.getDevCaptestCap());
                    //剩余容量和剩余时间计算
                    Float restCap = batttestdataInfService.getLastTestDataRestCap(realDto.getBattgroupId());
                    Float restCap = batttestdataInfService.getLastTestDataRestCap(binf.getMoncapstd(),realDto.getBattgroupId());
                    topDto.setRestCap(restCap);
                    BattInf binf=battInfService.getBinfByBattgroupId(realDto.getBattgroupId());
                    //实时组端电流,剩余容量,标称容量
                    if(battRtstate!=null){
                        Float restTime= BattCapFactory.getTheoryTime(battRtstate.getGroupCurr(), restCap, binf.getMoncapstd());
                        Float restTime= BattCapFactory.getTheoryTime(battRtstate.getLoadCurr(), restCap, binf.getMoncapstd());
                        topDto.setRestTime(restTime);
                    }
                }
@@ -196,12 +261,19 @@
                topDto.setPwrALmNum(pwrALmNum);
                //实时获取电源信息(是否存在电源告警信息)
                //PwrdevAcdcdata pwrdevAcdcdata = pwrdevAcdcdataService.getPwrRealInfo(realDto.getPowerId());
                topDto.setPwrState((pwrALmNum > 0 ? 1 : 0));
                PwrdevAcdcdata pwrdevAcdcdata = pwrdevAcdcdataService.getPwrRealInfo(realDto.getPowerId());
                topDto.setPwrState(pwrdevAcdcdata.getIsJunCharge());
                //查看当前是否存在交流停电告警(is_jun_charge   电源是否均充[1-均充 0-浮充],若当前电源存在交流停电告警则显示停电其他按照状态展示。)
                int stopFalg=pwrdevAlarmService.judge3100014(realDto.getPowerId());
                if(stopFalg==1){
                    topDto.setPwrStateName("停电");
                }else{
                    topDto.setPwrStateName((pwrdevAcdcdata.getIsJunCharge()==1 ? "均充" : "浮充"));
                }
                Integer allALmNum = battALmNum + devALmNum + pwrALmNum;
                topDto.setAllALmNum(allALmNum);
                topDto.setSystemState((allALmNum > 0 ? 1 : 0));
                topDto.setSystemStateName((allALmNum > 0 ? "异常" : "正常"));
            }
            return new Response().setII(1, true, topDto, "实时页面头部数据推送");
        } catch (Exception e) {
@@ -228,41 +300,301 @@
    }
    //获取管理界面信息
    private Response getManagePage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        try {
            StationInf sinf=stationInfService.getStationInfById(realDto.getStationId());
            map.put("sinf",sinf);
            PowerInf pinf=powerInfService.getPowerInfById(realDto.getPowerId());
            map.put("pinf",pinf);
            BattInf binf=battInfService.getBinfByBattgroupId(realDto.getBattgroupId());
            map.put("binf",binf);
            map.put("pageType",realDto.getPageType());
            return new Response().setII(1,true,map,"管理界面信息推送");
        }catch (Exception e){
            return new Response().set(1,false,"管理界面信息推送");
        }
    }
    //获取自愈能力界面信息
    private Response getSelfPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        map.put("pageType",realDto.getPageType());
        return new Response().setII(1,true,map,"自愈能力界面信息推送");
    }
    //获取3D界面信息
    private Response get3DPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        map.put("pageType",realDto.getPageType());
        return new Response().setII(1,true,map,"3D界面信息信息推送");
    }
    //获取图片界面信息
    private Response getImgPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        map.put("pageType",realDto.getPageType());
        return new Response().setII(1,true,map,"图片界面信息信息推送");
    }
    //获取温度界面信息
    private Response getTmpPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        Float maxData=0f;
        Float minData=0f;
        Float avgData=0f;
        try {
            //实时获取单体信息
            List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId());
            if(rtdataList!=null&&rtdataList.size()>0){
                for(int i=0;i<rtdataList.size();i++) {
                    BattRtdata battRtdata=rtdataList.get(i);
                    if(i==0){
                        maxData=battRtdata.getMonTmp();
                        minData=battRtdata.getMonTmp();
                    }
                    if (battRtdata.getMonTmp() >= maxData) {
                        maxData = battRtdata.getMonTmp();
                    }
                    if (battRtdata.getMonTmp() <= minData) {
                        minData = battRtdata.getMonTmp();
                    }
                    avgData += battRtdata.getMonTmp();
                }
                avgData=avgData/rtdataList.size();
            }
            map.put("rtdataList",rtdataList!=null?rtdataList:"");
            map.put("maxData",maxData);
            map.put("minData",minData);
            map.put("avgData",avgData);
            map.put("pageType",realDto.getPageType());
            return new Response().setII(1,true,map,"温度界面信息推送");
        }catch (Exception e){
            return new Response().set(1,false,"温度界面信息推送");
        }
    }
    //获取内阻界面信息
    private Response getResPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        Float maxData=0f;
        Float minData=0f;
        Float avgData=0f;
        try {
            //实时获取单体信息
            List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId());
            if(rtdataList!=null&&rtdataList.size()>0){
                for(int i=0;i<rtdataList.size();i++) {
                    BattRtdata battRtdata=rtdataList.get(i);
                    if(i==0){
                        maxData=battRtdata.getMonRes();
                        minData=battRtdata.getMonRes();
                    }
                    if (battRtdata.getMonRes() >= maxData) {
                        maxData = battRtdata.getMonRes();
                    }
                    if (battRtdata.getMonRes() <= minData) {
                        minData = battRtdata.getMonRes();
                    }
                    avgData += battRtdata.getMonRes();
                }
                avgData=avgData/rtdataList.size();
            }
            map.put("rtdataList",rtdataList!=null?rtdataList:"");
            map.put("maxData",maxData);
            map.put("minData",minData);
            map.put("avgData",avgData);
            //上一次内阻测试数据
            BattresdataInf rinfData= battresdataInfService.getLastTestData(realDto.getBattgroupId());
            map.put("rinfData",rinfData!=null?rinfData:"");
            map.put("pageType",realDto.getPageType());
            return new Response().setII(1,true,map,"内阻界面信息推送");
        }catch (Exception e){
            return new Response().set(1,false,"内阻界面信息推送");
        }
    }
    //获取电压界面信息
    private Response getVolPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        Float maxData=0f;
        Float minData=0f;
        Float avgData=0f;
        try {
            //实时获取单体信息
            List<BattRtdata> rtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId());
            if(rtdataList!=null&&rtdataList.size()>0){
                for(int i=0;i<rtdataList.size();i++) {
                    BattRtdata battRtdata=rtdataList.get(i);
                    if(i==0){
                        maxData=battRtdata.getMonVol();
                        minData=battRtdata.getMonVol();
                    }
                    if (battRtdata.getMonVol() >= maxData) {
                        maxData = battRtdata.getMonVol();
                    }
                    if (battRtdata.getMonVol() <= minData) {
                        minData = battRtdata.getMonVol();
                    }
                    avgData += battRtdata.getMonVol();
                }
                avgData=avgData/rtdataList.size();
            }
            map.put("rtdataList",rtdataList!=null?rtdataList:"");
            map.put("maxData",maxData);
            map.put("minData",minData);
            map.put("avgData",avgData);
            map.put("pageType",realDto.getPageType());
            return new Response().setII(1,true,map,"电压界面信息推送");
        }catch (Exception e){
            return new Response().set(1,false,"电压界面信息推送");
        }
    }
    //获取电源界面信息
    private Response getPowerPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        try {
            //实时获取电源信息
            PwrdevAcdcdata pwrdevAcdcdata = pwrdevAcdcdataService.getPwrRealInfo(realDto.getPowerId());
            map.put("pwrdevAcdcdata",pwrdevAcdcdata!=null?pwrdevAcdcdata:"");
            //电源对象(整流器使用情况)
            PowerInf powerInf = powerInfService.getPowerInfById(realDto.getPowerId());
            map.put("powerInf",powerInf!=null?powerInf:"");
            map.put("pageType",realDto.getPageType());
            return new Response().setII(1,true,map,"电源界面信息推送");
        }catch (Exception e){
            return new Response().set(1,false,"电源界面信息推送");
        }
    }
    //获取系统概述界面信息
    private Response getSystemPage(RealTimeDto realDto) {
        return new Response().set(1);
        Map<String, Object> map=new HashMap<>();
        map.put("pageType",realDto.getPageType());
        try {
            //实时获取电池组信息
            BattRtstate battRtstate = battRtstateService.getBattRealInfo(realDto.getBattgroupId());
            if(battRtstate!=null){
                battRtstate.setLastCaptestStopTypeReason(StopReasonEnum.getValue(battRtstate.getLastCaptestStopType()));
                battRtstate.setControlFailTypeReason(FailReasonEnum.getValue(battRtstate.getControlFailType()));
            }
            map.put("battRtstate",battRtstate!=null?battRtstate:"");
            //实时获取设备信息
            DeviceState deviceState = deviceStateService.getDevRealInfo(realDto.getDevId());
            map.put("deviceState",deviceState!=null?deviceState:"");
            //获取上一次标准核容信息
            BatttestdataInf tinfData= batttestdataInfService.getLastStandardTestData(realDto.getBattgroupId());
            map.put("tinfData",tinfData!=null?tinfData:"");
            //获取近半小时电源数据,整流器数据,核容设备数据(推送实时,接口查询最近半小时数据)
            PwrdevAcdcdata pwrdevAcdcdata = pwrdevAcdcdataService.getPwrRealInfo(realDto.getPowerId());
            map.put("pwrdevAcdcdata",pwrdevAcdcdata!=null?pwrdevAcdcdata:"");
            //电源对象(整流器使用情况)
            PowerInf powerInf = powerInfService.getPowerInfById(realDto.getPowerId());
            map.put("powerInf",powerInf!=null?powerInf:"");
            //获取电池组的蓄电池信息
            List<BattRtdata> battRtdataList = rtdataService.getRtdataRealInfo(realDto.getBattgroupId());
            SticRealRtdataDto dto=setMaxMinData(battRtdataList);
            map.put("sticRtdata",dto);
            return new Response().setII(1,true,map,"系统概述推送");
        }catch (Exception e) {
            e.printStackTrace();
        }
        return new Response().set(1,false,"系统概述推送");
    }
    //计算集合中单体电压,内阻,温度,容量的最大最小值
    public SticRealRtdataDto setMaxMinData(List<BattRtdata> battRtdataList){
        SticRealRtdataDto dto=new SticRealRtdataDto();
        Float maxCap = 0.0f;
        Float minCap = 0.0f;
        Float maxVol = 0.0f;
        Float minVol = 0.0f;
        Float maxTmp = 0.0f;
        Float minTmp = 0.0f;
        Float maxRes = 0.0f;
        Float minRes = 0.0f;
        List<Integer> maxCapNumList = new ArrayList<>();
        List<Integer> minCapNumList = new ArrayList<>();
        List<Integer> maxVolNumList = new ArrayList<>();
        List<Integer> minVolNumList = new ArrayList<>();
        List<Integer> maxTmpNumList = new ArrayList<>();
        List<Integer> minTmpNumList = new ArrayList<>();
        List<Integer> maxResNumList = new ArrayList<>();
        List<Integer> minResNumList = new ArrayList<>();
          //计算集合中单体电压,内阻,温度,容量的最大最小值
        for (int i=0;i<battRtdataList.size();i++) {
            BattRtdata rtdata=battRtdataList.get(i);
            if(i==0){
                //赋值初始值
                maxVol = rtdata.getMonVol();
                minVol = rtdata.getMonVol();
                maxTmp = rtdata.getMonTmp();
                minTmp = rtdata.getMonTmp();
                maxRes = rtdata.getMonRes();
                minRes = rtdata.getMonRes();
                maxCap = rtdata.getMonCap();
                minCap = rtdata.getMonCap();
            }
            if(rtdata.getMonVol()>=maxVol){
                maxVol = rtdata.getMonVol();
            }
            if(rtdata.getMonVol()<=minVol){
                minVol = rtdata.getMonVol();
            }
            if(rtdata.getMonTmp()>=maxTmp){
                maxTmp = rtdata.getMonTmp();
            }
            if(rtdata.getMonTmp()<=minTmp){
                minTmp = rtdata.getMonTmp();
            }
            if(rtdata.getMonRes()>=maxRes){
                maxRes = rtdata.getMonRes();
            }
            if(rtdata.getMonRes()<=minRes){
                minRes = rtdata.getMonRes();
            }
            if(rtdata.getMonCap()>=maxCap){
                maxCap = rtdata.getMonCap();
            }
            if(rtdata.getMonCap()<=minCap){
                minCap = rtdata.getMonCap();
            }
        }
        dto.setMaxCap(maxCap);
        dto.setMinCap(minCap);
        dto.setMaxVol(maxVol);
        dto.setMinVol(minVol);
        dto.setMaxTmp(maxTmp);
        dto.setMinTmp(minTmp);
        dto.setMaxRes(maxRes);
        dto.setMinRes(minRes);
        for (BattRtdata rtdata:battRtdataList) {
            if(rtdata.getMonVol()==maxVol){
                maxVolNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonVol()==minVol){
                minVolNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonTmp()==maxTmp){
                maxTmpNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonTmp()==minTmp){
                minTmpNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonRes()==maxRes){
                maxResNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonRes()==minRes){
                minResNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonCap()==maxCap){
                maxCapNumList.add(rtdata.getMonNum());
            }
            if(rtdata.getMonCap()==minCap){
                minCapNumList.add(rtdata.getMonNum());
            }
        }
        dto.setMaxCapNumList(maxCapNumList);
        dto.setMinCapNumList(minCapNumList);
        dto.setMaxVolNumList(maxVolNumList);
        dto.setMinVolNumList(minVolNumList);
        dto.setMaxTmpNumList(maxTmpNumList);
        dto.setMinTmpNumList(minTmpNumList);
        dto.setMaxResNumList(maxResNumList);
        dto.setMinResNumList(minResNumList);
        return dto;
    }
    @OnClose
    public void onClose(CloseReason closeReason){
        System.err.println("closeReason = " + closeReason);