whycxzp
2023-02-25 ade751704a36681e5eb0e55c3db8458896a0135c
大屏socket更新
6个文件已修改
2个文件已添加
437 ■■■■■ 已修改文件
src/main/java/com/whyc/constant/DeviceConstant.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattalarmDataMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/PwrdevAlarmMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattalarmDataService.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DevalarmDataService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/Fbs9100StateService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevAlarmService.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/webSocket/ScreenSocket.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/constant/DeviceConstant.java
New file
@@ -0,0 +1,16 @@
package com.whyc.constant;
/**
 * 设备常量
 */
public class DeviceConstant {
    //6185设备工作状态对应关系workState
    final public static  int DEV_ONLINE_CHARGE=0;  //在线浮充
    final public static  int DEV_PRE_CHARGE=1;     //预充电
    final public static  int DEV_NUCLEAR_CAP=2;    //核容测试
    final public static  int DEV_POWER_CUT=3;      //停电测试
    final public static  int DEV_RES_TEST=4;       //内阻测试
    final public static  int DEV_KD_TEST=5;        //kd测试
}
src/main/java/com/whyc/mapper/BattalarmDataMapper.java
@@ -59,4 +59,7 @@
    //查询分级告警的个数
    int serchByLevel(@Param("alarmLevel") int alarmLevel, @Param("uId") int uId);
    Integer getAlarmHighLow(@Param(value = "userId")int userId, @Param(value = "almSignalId")int almSignalId);
}
src/main/java/com/whyc/mapper/PwrdevAlarmMapper.java
@@ -31,4 +31,7 @@
    //查询分级告警的个数
    int serchByLevel(@Param("alarmLevel") int alarmLevel, @Param("uId") int uId, @Param("almTypes") List<Integer> almTypes);
    List<PwrdevAlarm> getAnalysis(int userId, List<Integer> types);
}
src/main/java/com/whyc/service/BattalarmDataService.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.AlarmConstant;
import com.whyc.dto.AlarmDaoFactory;
import com.whyc.dto.BattMaintDealarm;
import com.whyc.dto.Response;
@@ -387,4 +388,155 @@
        }
        return new Response().setII(1, list.size() > 0, list, "分级告警数");
    }
    /**
     * 单体容量 monCapStd
     * alm_id
     * Alarm_CapAlarm =119010
     * @param userId
     * @return
     */
    public Response<Map> getMonCapacityLowAnalysis(int userId) {
        Response<Map> response = new Response();
        Map<String, Object> resultMap = new HashMap<>();
        try {
            //单体容量低告警数和对应的告警机房数
            //BatteryAlarmDto batteryAlarmDto = mapper.getLowCapacityAlarms(userId,AlarmConstant.Alarm_IGNAL_ID_CapAlarmLow);
            //int alarmNum = batteryAlarmDto.getNum();
            Integer alarmLow = mapper.getAlarmHighLow(userId, AlarmConstant.Alarm_IGNAL_ID_CapAlarmLow);
            Integer alarmHigh = mapper.getAlarmHighLow(userId, AlarmConstant.Alarm_IGNAL_ID_CapAlarmHigh);
            //int stationNum = batteryAlarmDto.getStationNum();
            //总告警数
            //Integer totalAlarmNum = mapper.getTotalAlarms(userId);
            //总机房数
            //int totalStationNum = infoMapper.getStationCount(userId);
            //容量低告警占比
            //String capLowRateStr = (String) MathUtil.divide(alarmNum,totalAlarmNum,3);
            //容量低告警机房占比
            //String capLowStationRateStr = (String) MathUtil.divide(stationNum,totalStationNum,3);
            resultMap.put("单体容量低告警",alarmLow);
            resultMap.put("单体容量高告警",alarmHigh);
            //resultMap.put("告警总数",totalAlarmNum);
            //resultMap.put("告警占比",capLowRateStr);
            //resultMap.put("告警机房数",alarmNum);
            //resultMap.put("告警机房占比",capLowStationRateStr);
            response.set(1, resultMap);
        } catch (Exception e) {
            e.printStackTrace();
            return response.set(0);
        }
        return response;
    }
    /**
     * 单体电压、内阻和温度
     * alm_id 电池告警参数
     * 三个告警总数不同,带条件?电压、内阻、温度
     * @param userId
     * @return
     */
    public Response<Map> getMonVRTAnalysis(int userId) {
        Response<Map> response = new Response();
        HashMap<String, Object> resultMap = new HashMap<>();
        Map<String, Object> monVolMap = new HashMap<>();//单体电压  Alarm_vol_Monomer =119005;
        Map<String, Object> monResMap = new HashMap<>();//单体内阻  Alarm_res_Monomer =119007
        Map<String, Object> monTemMap = new HashMap<>();//单体温度  Alarm_tmp_Monomer =119006
        /*======单体电压======*/
        //高告警数量
        Integer volHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonVolHigh);
        //低告警数量
        Integer volLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonVolLow);
        //单体电压总告警数
        //Integer volTotalAlarmNum = volHighAlarmsNum+volLowAlarmsNum;
        //告警总数
        //Integer totalStationAlarmNum =mapper.getTotalAlarms(userId);
        //电压告警机房数
        //int volTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_vol_Monomer);
        //总机房数
        //int totalStationNum = infoMapper.getStationCount(userId);
        //电压告警占比
        //String volRateStr = (String) MathUtil.divide(volTotalAlarmNum,totalStationAlarmNum,3);
        //电压告警机房占比
        //String volStationRateStr = (String) MathUtil.divide(volTotalAlarmStations,totalStationNum,3);
        monVolMap.put("单体电压高告警", volHighAlarmsNum);     //高告警数量    alm_signal_id 9
        monVolMap.put("单体电压低告警", volLowAlarmsNum);     //低告警数量     alm_signal_id   10
        //monVolMap.put("告警总数", volTotalAlarmNum);        //告警总数
        //monVolMap.put("告警总数比例", volRateStr);      //告警总数比例
        //monVolMap.put("告警机房总数", volTotalAlarmStations);      //告警机房总数
        //monVolMap.put("告警机房数比例", volStationRateStr);    //告警机房数比例
        resultMap.put("单体电压", monVolMap);
        /*======单体内阻======*/
        //高告警数量
        Integer resHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonResHigh);
        //低告警数量
        Integer resLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonResLow);
        //单体内阻总告警数
        //Integer resTotalAlarmNum = resHighAlarmsNum+resLowAlarmsNum;
        //内阻告警机房数
        //int resTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_res_Monomer);
        //内阻告警占比
        //String resRateStr = (String) MathUtil.divide(resTotalAlarmNum,totalStationAlarmNum,3);
        //内阻告警机房占比
        //String resStationRateStr = (String) MathUtil.divide(resTotalAlarmStations,totalStationNum,3);
        monResMap.put("单体内阻高告警", resHighAlarmsNum);     //高告警数量    alm_signal_id 13
        monResMap.put("单体内阻低告警", resLowAlarmsNum);     //低告警数量     alm_signal_id 14
        //monResMap.put("告警总数", resTotalAlarmNum);        //告警总数
        //monResMap.put("告警总数比例", resRateStr);      //告警总数比例
        //monResMap.put("告警机房总数", resTotalAlarmStations);      //告警机房总数
        //monResMap.put("告警机房数比例", resStationRateStr);    //告警机房数比例
        resultMap.put("单体内阻", monResMap);
        /*======单体温度======*/
        //高告警数量
        Integer tempHighAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonTmpHigh);
        //低告警数量
        Integer tempLowAlarmsNum = mapper.getAlarmHighLow(userId,AlarmConstant.ALM_SIGNAL_ID_MonTmpLow);
        //单体温度总告警数
        //Integer tempTotalAlarmNum = tempHighAlarmsNum+tempLowAlarmsNum;
        //温度告警机房数
        //int tempTotalAlarmStations = mapper.getTotalAlarmStations(userId,AlarmConstant.Alarm_tmp_Monomer);
        //温度告警占比
        //String tempRateStr = (String) MathUtil.divide(tempTotalAlarmNum,totalStationAlarmNum,3);
        //温度告警机房占比
        //String tempStationRateStr = (String) MathUtil.divide(tempTotalAlarmStations,totalStationNum,3);
        monTemMap.put("单体温度高告警", tempHighAlarmsNum);     //高告警数量    alm_signal_id 13
        monTemMap.put("单体温度低告警", tempLowAlarmsNum);     //低告警数量     alm_signal_id 14
        //monTemMap.put("告警总数", tempTotalAlarmNum);        //告警总数
        //monTemMap.put("告警总数比例", tempRateStr);      //告警总数比例
        //monTemMap.put("告警机房总数", tempTotalAlarmStations);      //告警机房总数
        //monTemMap.put("告警机房数比例", tempStationRateStr);    //告警机房数比例
        resultMap.put("单体温度", monTemMap);
        response.setCode(1);
        response.setData(resultMap);
        return response;
    }
}
src/main/java/com/whyc/service/DevalarmDataService.java
@@ -5,6 +5,7 @@
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
import com.whyc.dto.paramter.DevAlarmPar;
import com.whyc.mapper.BattDevAlarmDataMapper;
import com.whyc.mapper.DevalarmDataMapper;
import com.whyc.pojo.DevalarmData;
import com.whyc.pojo.UserInf;
@@ -23,6 +24,9 @@
    @Resource
    private DevalarmDataMapper mapper;
    @Resource
    private BattDevAlarmDataMapper battDevAlarmDataMapper;
    //设备告警实时查询
    public Response serchByInfo(DevAlarmPar par) {
        PageHelper.startPage(par.getPage().getPageCurr(),par.getPage().getPageSize());
@@ -113,4 +117,8 @@
        }
        return new Response().setII(1, list.size() > 0, list, "分级告警数");
    }
    public int getAlarmNum(int userId) {
        return battDevAlarmDataMapper.searchNums(userId);
    }
}
src/main/java/com/whyc/service/Fbs9100StateService.java
@@ -2,20 +2,23 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.DeviceConstant;
import com.whyc.dto.Response;
import com.whyc.mapper.Fbs9100StateMapper;
import com.whyc.pojo.Fbs9100State;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service
public class Fbs9100StateService {
@@ -118,4 +121,69 @@
        }
        return list;
    }
    public Response<Map> getBTSEquipStatus(int userId) throws ParseException {
        Response<Map> response = new Response();
        Map<String, Integer> resultMap = new HashMap<>();
        resultMap.put("在线浮充数量",0);
        resultMap.put("预充电数量",0);
        resultMap.put("核容测试数量",0);
        resultMap.put("内阻测试数量",0);
        resultMap.put("通讯故障数量",0);
        /*try {
            List<FBS9100State> statusList = fbs9100StateMapper.getStatus(userId);
            for (int i = 0; i < statusList.size(); i++) {
                switch (statusList.get(i).getWorkState()){
                    case DeviceConstant.DEV_ONLINE_CHARGE:
                        resultMap.put("在线浮充",statusList.get(i).getNum());
                        break;
                    case DeviceConstant.DEV_PRE_CHARGE:
                        resultMap.put("预充电",statusList.get(i).getNum());
                        break;
                    case DeviceConstant.DEV_NUCLEAR_CAP:
                        resultMap.put("核容测试",statusList.get(i).getNum());
                        break;
                    case DeviceConstant.DEV_RES_TEST:
                        resultMap.put("内阻测试",statusList.get(i).getNum());
                        break;
                }
            }
            response.setCode(1);
            response.setData(resultMap);
        } catch (Exception e) {
            e.printStackTrace();
            response.setCode(0);
            return response;
        }*/
        QueryWrapper<Fbs9100State> wrapper = Wrappers.query();
        wrapper.select("record_datetime","dev_workstate");
        List<Fbs9100State> fbs9100StateList = mapper.selectList(wrapper);
        //首先查看是否通讯故障,时间大于1分钟为通讯故障
        for (int i = 0; i < fbs9100StateList.size(); i++) {
            Calendar instance = Calendar.getInstance();
            instance.add(Calendar.MINUTE,-1);
            Date time = instance.getTime();
            if(time.compareTo(DateUtil.YYYY_MM_DD_HH_MM_SS.parse(fbs9100StateList.get(i).getRecordDatetime()))>0){
                resultMap.put("通讯故障数量",resultMap.get("通讯故障数量")+1);
            }else{
                switch (fbs9100StateList.get(i).getDevWorkstate()){
                    case DeviceConstant.DEV_ONLINE_CHARGE:
                        resultMap.put("在线浮充数量",resultMap.get("在线浮充数量")+1);
                        break;
                    case DeviceConstant.DEV_PRE_CHARGE:
                        resultMap.put("预充电数量",resultMap.get("预充电数量")+1);
                        break;
                    case DeviceConstant.DEV_NUCLEAR_CAP:
                        resultMap.put("核容数量",resultMap.get("核容测试数量")+1);
                        break;
                    case DeviceConstant.DEV_RES_TEST:
                        resultMap.put("内阻测试数量",resultMap.get("内阻测试数量")+1);
                        break;
                }
            }
        }
        return new Response<Map>().set(1,resultMap);
    }
}
src/main/java/com/whyc/service/PwrdevAlarmService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.AlarmConstant;
import com.whyc.dto.AlarmDaoFactory;
import com.whyc.dto.Response;
import com.whyc.mapper.PwrdevAlarmMapper;
@@ -16,10 +17,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ListIterator;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@Service
@@ -214,4 +212,78 @@
        }
        return new Response().setII(1, list.size() > 0, list, "分级告警数");
    }
    /**
     * +告警机房数和占比
     * @return
     * @param userId
     */
    public Response<List> getAcABCAnalysis(int userId){
        //交流A/B/C-过压,
        //交流A/B/C-欠压,
        //交流A/B/C-缺相,
        //交流A/B/C-过流
        Map<String,Integer> resultMap = new HashMap<>();
        resultMap.put("过压",0);
        resultMap.put("欠压",0);
        resultMap.put("缺相",0);
        resultMap.put("过流",0);
        List<Integer> types = Arrays.asList(
                AlarmConstant.acIn1_over_volA,
                AlarmConstant.acIn1_over_volB,
                AlarmConstant.acIn1_over_volC,
                AlarmConstant.acIn1_under_volA,
                AlarmConstant.acIn1_under_volB,
                AlarmConstant.acIn1_under_volC,
                AlarmConstant.acIn1_less_A,
                AlarmConstant.acIn1_less_B,
                AlarmConstant.acIn1_less_C,
                AlarmConstant.acb1_over_currA,
                AlarmConstant.acb1_over_currB,
                AlarmConstant.acb1_over_currC);
        List<PwrdevAlarm> data = mapper.getAnalysis(userId,types);
        for (int i = 0; i < data.size(); i++) {
            switch (data.get(i).getAlmType()){
                case AlarmConstant.acIn1_over_volA:
                case AlarmConstant.acIn1_over_volB:
                case AlarmConstant.acIn1_over_volC:
                    resultMap.put("过压",resultMap.get("过压")+data.get(i).getNum().intValue());
                    break;
                case AlarmConstant.acIn1_under_volA:
                case AlarmConstant.acIn1_under_volB:
                case AlarmConstant.acIn1_under_volC:
                    resultMap.put("欠压",resultMap.get("欠压")+data.get(i).getNum().intValue());
                    break;
                case AlarmConstant.acIn1_less_A:
                case AlarmConstant.acIn1_less_B:
                case AlarmConstant.acIn1_less_C:
                    resultMap.put("缺相",resultMap.get("缺相")+data.get(i).getNum().intValue());
                    break;
                case AlarmConstant.acb1_over_currA:
                case AlarmConstant.acb1_over_currB:
                case AlarmConstant.acb1_over_currC:
                    resultMap.put("过流",resultMap.get("过流")+data.get(i).getNum().intValue());
                    break;
                default:
                    throw new IllegalStateException("Unexpected value: " + data.get(i));
            }
        }
        //告警机房总数和比例
        HashMap<String, Integer> map2 = new HashMap<>();
        //int alarmStationCount = mapper.getAlarmStationCountSpec(userId,types);
        //int stationCount = infoMapper.getStationCount(userId);
        //map2.put("告警机房总数",alarmStationCount);
        //map2.put("告警机房数比例",(int)MathUtil.divide(alarmStationCount,stationCount,2));
        List<Map<String, Integer>> mapList = Arrays.asList(resultMap, map2);
        return new Response<List>().set(1,mapList);
    }
}
src/main/java/com/whyc/webSocket/ScreenSocket.java
New file
@@ -0,0 +1,103 @@
package com.whyc.webSocket;
import com.whyc.config.WebSocketConfig;
import com.whyc.dto.Response;
import com.whyc.pojo.UserInf;
import com.whyc.service.*;
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.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * 大屏展示 Socket
 */
@Component
@ServerEndpoint(value = "/screen",encoders = WebSocketEncoder.class,configurator = WebSocketConfig.class)
public class ScreenSocket {
    private Session session;
    private Thread thread;
    private static PwrdevAlarmService powerAlarmService;
    private static BattalarmDataService battAlarmDataService;
    private static Fbs9100StateService fbs9100StateService;
    private static DevalarmDataService devAlarmDataService;
    @Autowired
    public void setPowerAlarmService(PwrdevAlarmService powerAlarmService) {
        ScreenSocket.powerAlarmService = powerAlarmService;
    }
    @OnOpen
    public void onOpen(Session session, EndpointConfig config){
        this.session = session;
        HttpSession httpSession = (HttpSession) config.getUserProperties().get("httpSession");
        UserInf user = (UserInf) httpSession.getAttribute("user");
        final int userId = user.getUId().intValue();
        System.out.println(user);
        Thread thread = new Thread() {
            @Override
            public void run() {
                try {
                    Map<String, Response> res = new HashMap<>();
                    Response sessionRes = new Response().set(1, httpSession.getId());
                    while (!currentThread().isInterrupted()) {
                        //一体   告警:交流ABC
                        Response res_acABC = powerAlarmService.getAcABCAnalysis(userId);
                        //一体   告警:单体容量
                        Response res_monCapacityLowAnalysis = battAlarmDataService.getMonCapacityLowAnalysis(userId);
                        //一体   告警:单体温度内阻温度
                        Response<Map> res_monVRTAnalysis = battAlarmDataService.getMonVRTAnalysis(userId);
                        //一体   统计:三种设备类型 告警数统计
                        int battAlarmNum = battAlarmDataService.serchRealTime(userId).getCode();
                        int devAlarmNum = devAlarmDataService.getAlarmNum(userId);
                        int powerAlarmNum = (int) powerAlarmService.getAlarmNum().getData();
                        //一体   统计:电池品牌统计
                        //一体   统计:设备状态
                        Response<Map> res_devStates = fbs9100StateService.getBTSEquipStatus(userId);
                        //一体   统计:各种设备类型总数 电池 设备 电源 站点 TODO 需要添加电源验证下站点的变化逻辑
                        //续航检测??? TODO
                        res.put("acABC", res_acABC);
                        session.getBasicRemote().sendObject(new Response().set(1, res));
                        sleep(4000);
                    }
                } catch (Exception e) {
                    this.interrupt();
                }
            }
        };
        thread.start();
        this.thread = thread;
    }
    @OnClose
    public void onClose(CloseReason closeReason) throws IOException {
        //System.err.println("closeReason = " + closeReason);
        if(session.isOpen()){
            session.close();
        }
    }
    @OnError
    public void onError(Throwable error) throws IOException {
        //error.printStackTrace();
        thread.isInterrupted();
        if(session.isOpen()){
            session.close();
        }
    }
}