| | |
| | | package com.whyc.webSocket; |
| | | |
| | | import com.whyc.config.WebSocketConfig; |
| | | import com.whyc.constant.DevStateEnum; |
| | | 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 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 |
| | |
| | | |
| | | //电源信息 |
| | | private static PowerInfService powerInfService; |
| | | |
| | | //单体信息 |
| | | private static BattRtdataService rtdataService; |
| | | |
| | | //内阻测试信息 |
| | | private static BattresdataInfService battresdataInfService; |
| | | |
| | | |
| | | private volatile boolean runFlag = true; |
| | |
| | | @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; |
| | | } |
| | | |
| | | |
| | |
| | | DeviceState deviceState = deviceStateService.getDevRealInfo(realDto.getDevId()); |
| | | if (deviceState != null) { |
| | | topDto.setDevState(deviceState.getDevWorkstate()); |
| | | if (deviceState.getDevWorkstate() == 1) {//核容放电 |
| | | if (deviceState.getDevWorkstate() == DevStateEnum.DEVSTATE_2.getStateId()) {//核容放电 |
| | | topDto.setCaptestGroupvol(deviceState.getDevCaptestGroupvol()); |
| | | topDto.setCaptestCurr(deviceState.getDevCaptestCurr()); |
| | | topDto.setCaptestTimelong(deviceState.getDevCaptestTimelong()); |
| | |
| | | topDto.setRestCap(restCap); |
| | | //实时组端电流,剩余容量,标称容量 |
| | | if(battRtstate!=null){ |
| | | Float restTime= BattCapFactory.getTheoryTime(battRtstate.getGroupCurr(), restCap, binf.getMoncapstd()); |
| | | Float restTime= BattCapFactory.getTheoryTime(battRtstate.getLoadCurr(), restCap, binf.getMoncapstd()); |
| | | topDto.setRestTime(restTime); |
| | | } |
| | | } |
| | |
| | | } |
| | | //获取管理界面信息 |
| | | private Response getManagePage(RealTimeDto realDto) { |
| | | return new Response().set(1); |
| | | Map<String, Object> map=new HashMap<>(); |
| | | try { |
| | | StationInf sinf=stationInfService.getStationInfById(realDto.getStaitonId()); |
| | | 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:""); |
| | | 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())); |
| | | } |
| | | 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 (BattRtdata rtdata:battRtdataList) { |
| | | 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()); |
| | | } |
| | | } |
| | | return dto; |
| | | } |
| | | @OnClose |
| | | public void onClose(CloseReason closeReason){ |
| | | System.err.println("closeReason = " + closeReason); |