package com.whyc.webSocket;
|
|
import com.whyc.dto.DeviceTypeDTO;
|
import com.whyc.dto.Response;
|
import com.whyc.dto.paramter.RealTimePar;
|
import com.whyc.service.*;
|
import com.whyc.util.ActionUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import javax.websocket.*;
|
import javax.websocket.server.ServerEndpoint;
|
import java.io.IOException;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
@Component
|
@ServerEndpoint(value = "/RealTime",encoders = WebSocketEncoder.class)
|
public class RealTimeWebsocket {
|
private volatile Thread thread;
|
|
private static final int executeTime = 5000;
|
|
private static boolean exit=false;
|
|
private static Map<String,Thread> threadMap = new HashMap<>();
|
|
private volatile Map<Long,Boolean> threadFlagMap = new HashMap<>();
|
|
private static BattRtstateService rtstateservice; //组端
|
|
private static Fbs9100StateService f9100service; //fbs9100
|
|
private static BattRtdataService rtdataservice; //单体
|
|
private static Fbs9100sFodStateService fodservice; //除硫
|
|
private static BattRtalarmService rtalarmService; //电池告警
|
|
private static BattRsalarmService rsalarmService; //组端告警
|
|
private static Ld9StateService ld9Service; //ld9
|
|
private static Li9130BmsStateService li9130Service; //li9130、
|
|
private static Fbs9100SetparamService f9100setservice;//setparam
|
|
private static Ess3100SysstateService ess3100Sysservice;//3100sys
|
|
private static Ess3100PcsStateService ess3100Pcsservice;//3100pcs
|
|
private static BattGtstateService gtsservice;//gts
|
|
private static LithiumDataService lithiumservice;//Lithium
|
|
private static PwrdevAcdcdataService pwrdevAcdcservice;//PwrdevAcdc
|
|
private static Fbs9100InsulatstateService f9100Insulatstateservice;//Fbs9100Insulatstate
|
|
private static Fbs9100ChargerstateService f9100Chargerstateservice;//Fbs9100Chargerstate
|
|
private Session session;
|
|
@Autowired
|
public void setService(BattRtstateService rtstateservice) {
|
RealTimeWebsocket.rtstateservice = rtstateservice;
|
}
|
|
@Autowired
|
public void setService(Fbs9100StateService f9100service) {
|
RealTimeWebsocket.f9100service = f9100service;
|
}
|
|
@Autowired
|
public void setService(BattRtdataService rtdataservice) {
|
RealTimeWebsocket.rtdataservice = rtdataservice;
|
}
|
|
@Autowired
|
public void setService(Fbs9100sFodStateService fodservice) {
|
RealTimeWebsocket.fodservice = fodservice;
|
}
|
|
@Autowired
|
public void setService(BattRtalarmService rtalarmService) {
|
RealTimeWebsocket.rtalarmService = rtalarmService;
|
}
|
|
@Autowired
|
public void setService(BattRsalarmService rsalarmService) {
|
RealTimeWebsocket.rsalarmService = rsalarmService;
|
}
|
|
@Autowired
|
public void setService(Ld9StateService ld9Service) {
|
RealTimeWebsocket.ld9Service = ld9Service;
|
}
|
|
@Autowired
|
public void setService(Li9130BmsStateService li9130Service) {
|
RealTimeWebsocket.li9130Service = li9130Service;
|
}
|
|
@Autowired
|
public void setService(Fbs9100SetparamService f9100setservice) {
|
RealTimeWebsocket.f9100setservice = f9100setservice;
|
}
|
@Autowired
|
public void setService(Ess3100SysstateService ess3100Sysservice) {
|
RealTimeWebsocket.ess3100Sysservice = ess3100Sysservice;
|
}
|
@Autowired
|
public void setService(Ess3100PcsStateService ess3100Pcsservice) {
|
RealTimeWebsocket.ess3100Pcsservice = ess3100Pcsservice;
|
}
|
@Autowired
|
public void setService(BattGtstateService gtsservice) {
|
RealTimeWebsocket.gtsservice = gtsservice;
|
}
|
@Autowired
|
public void setService(LithiumDataService lithiumservice) {
|
RealTimeWebsocket.lithiumservice = lithiumservice;
|
}
|
@Autowired
|
public void setService(PwrdevAcdcdataService pwrdevAcdcservice) {
|
RealTimeWebsocket.pwrdevAcdcservice = pwrdevAcdcservice;
|
}
|
@Autowired
|
public void setService(Fbs9100InsulatstateService f9100Insulatstateservice) {
|
RealTimeWebsocket.f9100Insulatstateservice = f9100Insulatstateservice;
|
}
|
@Autowired
|
public void setService(Fbs9100ChargerstateService f9100Chargerstateservice) {
|
RealTimeWebsocket.f9100Chargerstateservice = f9100Chargerstateservice;
|
}
|
|
@OnOpen
|
public void onOpen(Session session){
|
this.session=session;
|
}
|
@OnMessage
|
public void onMessage(Session session, String message){
|
RealTimePar realTimePar= ActionUtil.getGson().fromJson(message,RealTimePar.class);
|
realTimePar.setDevType(realTimePar.getDevId()/100000);
|
thread = new Thread("Thread_RealTime") {
|
public void run() {
|
while (true) {
|
Thread thread = currentThread();
|
threadFlagMap.put(thread.getId(),true);
|
try {
|
Response res=new Response();
|
switch (realTimePar.getPageType()){
|
case "standard": res=getStandard(realTimePar);break;
|
case "a059": res=getA059(realTimePar);break;
|
case "enestorage": res=getEnestorage(realTimePar);break;
|
case "btssreen": res=getBtssreen(realTimePar);break;
|
case "power": res=getPower(realTimePar);break;
|
case "isolating": res=getIsolating(realTimePar);break;
|
case "charger": res=getCharger(realTimePar);break;
|
case "power1": res=getPower1(realTimePar);break;
|
case "totalInfo": res=getTotalInfo(realTimePar);break;
|
}
|
if (session.isOpen()) {
|
//推送信息
|
synchronized (session) {
|
session.getBasicRemote().sendObject(new Response().set(1, res));
|
}
|
threadFlagMap.put(thread.getId(),false);
|
}
|
//if (session.isOpen()) {
|
// Response res=new Response();
|
// switch (realTimePar.getPageType()){
|
// case "standard": res=getStandard(realTimePar);break;
|
// case "a059": res=getA059(realTimePar);break;
|
// case "enestorage": res=getEnestorage(realTimePar);break;
|
// case "btssreen": res=getBtssreen(realTimePar);break;
|
// case "power": res=getPower(realTimePar);break;
|
// case "isolating": res=getIsolating(realTimePar);break;
|
// case "charger": res=getCharger(realTimePar);break;
|
// case "power1": res=getPower1(realTimePar);break;
|
// case "totalInfo": res=getTotalInfo(realTimePar);break;
|
// }
|
// //推送信息
|
// session.getBasicRemote().sendObject(res);
|
//}
|
sleep(executeTime);
|
//} catch (IOException | InterruptedException | EncodeException e) {
|
} 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);
|
}
|
|
@OnClose
|
public void onClose(CloseReason closeReason){
|
System.err.println("closeReason = " + closeReason);
|
if (thread != null && thread.isAlive()) {
|
thread.interrupt();
|
}
|
}
|
|
@OnError
|
public void onError(Throwable error) {
|
error.printStackTrace();
|
if (thread != null && thread.isAlive()) {
|
thread.interrupt();
|
}
|
}
|
//标准的实时页面信息
|
public Response getStandard(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询fbs9100信息
|
Response f9100stateRes=f9100service.serchContactorState(realTimePar.getDevId());
|
res.put("f9100state",f9100stateRes);
|
//查询电池组端信息
|
Response rtstateRes=rtstateservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtstate",rtstateRes);
|
//查询电池组单体信息
|
Response rtdataRes=rtdataservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtdata",rtdataRes);
|
//查询fod信息
|
Response fodRes=fodservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("fod",fodRes);
|
//电池告警
|
Response rtalarmRes=rtalarmService.getInfo(realTimePar.getBattGroupId());
|
res.put("rtalarm",rtalarmRes);
|
//组端告警
|
Response rsalarmRes=rsalarmService.getInfo(realTimePar.getBattGroupId());
|
res.put("rsalarm",rsalarmRes);
|
if(realTimePar.getDevType()== DeviceTypeDTO.DEVICELD94019){//ld-9
|
//ld-9数据
|
Response ld9Res=ld9Service.searchByDevId(realTimePar.getDevId());
|
res.put("ld9",ld9Res);
|
}
|
if(realTimePar.getDevType()==DeviceTypeDTO.DEVICE9130){//正常锂电池
|
//锂电池数据
|
Response li9130Res=li9130Service.searchParam(realTimePar.getDevId());
|
res.put("li9130",li9130Res);
|
}
|
return new Response().set(1,res);
|
}
|
//A059的实时页面信息
|
public Response getA059(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询fbs9100信息
|
Response f9100stateRes=f9100service.serchContactorState(realTimePar.getDevId());
|
res.put("f9100state",f9100stateRes);
|
//查询电池组端信息
|
Response rtstateRes=rtstateservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtstate",rtstateRes);
|
//查询电池组单体信息
|
Response rtdataRes=rtdataservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtdata",rtdataRes);
|
//查询放电参数
|
Response setparamRes=f9100setservice.serchCharHighTmp(realTimePar.getDevId());
|
res.put("setparam",setparamRes);
|
return new Response().set(1,res);
|
}
|
//储能的实时页面信息
|
public Response getEnestorage(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询所有的系统状态信息
|
Response ess3100SysRes=ess3100Sysservice.searchAll();
|
res.put("ess3100Sys",ess3100SysRes);
|
//查询所有的pcs状态信息
|
Response ess3100PcsRes=ess3100Pcsservice.searchAll();
|
res.put("ess3100Pcs",ess3100PcsRes);
|
//根据电池组id查询储能电池组信息
|
Response gtsRes=gtsservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("gts",gtsRes);
|
//查询电池组单体信息
|
Response rtdataRes=rtdataservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtdata",rtdataRes);
|
return new Response().set(1,res);
|
}
|
//BTSSreen的实时页面信息
|
public Response getBtssreen(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询电池组单体信息
|
Response rtdataRes=rtdataservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtdata",rtdataRes);
|
//根据电池id查询锂电池信息
|
Response lithiumRes=lithiumservice.getInfoByBattGroupId(realTimePar.getBattGroupId());
|
res.put("lithium",lithiumRes);
|
//查询电池组端信息
|
Response rtstateRes=rtstateservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtstate",rtstateRes);
|
|
return new Response().set(1,res);
|
}
|
//电源信息的实时页面信息
|
public Response getPower(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询电源的ACDC信息
|
Response pwrdevAcdcRes=pwrdevAcdcservice.getDataByDevId(realTimePar.getPowerDeviceId());
|
res.put("pwrdevAcdc",pwrdevAcdcRes);
|
return new Response().set(1,res);
|
}
|
//获取绝缘装置的实时信息
|
public Response getIsolating(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//获取绝缘装置的实时信息
|
Response f9100InsulatstateRes=f9100Insulatstateservice.getDataByDevId(realTimePar.getPowerDeviceId());
|
res.put("f9100Insulatstate",f9100InsulatstateRes);
|
return new Response().set(1,res);
|
}
|
//获取充电机的实时信息
|
public Response getCharger(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//获取充电机的实时信息
|
Response f9100ChargerstateRes=f9100Chargerstateservice.getDataByDevId(realTimePar.getPowerDeviceId());
|
res.put("f9100Chargerstate",f9100ChargerstateRes);
|
return new Response().set(1,res);
|
}
|
//获取配电柜的实时数据
|
public Response getPower1(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//获取配电柜的实时数据
|
Response pwrdevInfoRes=pwrdevAcdcservice.getPowerInfoById(realTimePar.getPowerDeviceId());
|
res.put("pwrdevInfo",pwrdevInfoRes);
|
return new Response().set(1,res);
|
}
|
//TotalInfo 山西
|
public Response getTotalInfo(RealTimePar realTimePar){
|
Map<String,Response> res=new HashMap<>();
|
//查询电池组单体信息
|
Response rtdataRes=rtdataservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtdata",rtdataRes);
|
//查询电池组端信息
|
Response rtstateRes=rtstateservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("rtstate",rtstateRes);
|
//查询fbs9100信息
|
Response f9100stateRes=f9100service.serchContactorState(realTimePar.getDevId());
|
res.put("f9100state",f9100stateRes);
|
//查询fod信息
|
Response fodRes=fodservice.serchByCondition(realTimePar.getBattGroupId());
|
res.put("fod",fodRes);
|
//查询电源的ACDC信息
|
Response pwrdevAcdcRes=pwrdevAcdcservice.getDataByDevId(realTimePar.getPowerDeviceId());
|
res.put("pwrdevAcdc",pwrdevAcdcRes);
|
return new Response().set(1,res);
|
}
|
}
|