whyclxw
5 天以前 8c635598000e40edfb3edf5934124ad48d60f62d
src/main/java/com/whyc/service/AlmAnalysisParamService.java
@@ -1,15 +1,46 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.whyc.dto.AnalysisAlm.AnalysisChangeRes;
import com.whyc.dto.AnalysisAlm.ResAnalysis;
import com.whyc.dto.Real.RealDateDTO;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.AlmAnalysisParamMapper;
import com.whyc.pojo.db_data_history.BattRealdataId;
import com.whyc.pojo.db_data_history.PwrdevHistorydataId;
import com.whyc.pojo.db_param.AlmAnalysisParam;
import com.whyc.pojo.db_param.AlmSummaryParam;
import com.whyc.pojo.db_param.AppParam;
import com.whyc.util.ActionUtil;
import com.whyc.util.DateUtil;
import com.whyc.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static java.lang.Thread.sleep;
@Service
public class AlmAnalysisParamService {
    @Autowired(required = false)
    private AlmAnalysisParamMapper mapper;
    @Autowired
    private AppParamService appParamService;
    @Autowired
    private SubTablePageInfoService subTablePageInfoService;
    @Autowired
    private AlmSummaryParamService summaryParamService;
    //获取告警almId对应的分析配置属性值
    public AlmAnalysisParam getAnalysisParam(Integer almId) {
        QueryWrapper wrapper=new QueryWrapper();
@@ -18,4 +49,209 @@
        AlmAnalysisParam param= mapper.selectOne(wrapper);
        return param;
    }
    //预警分析管理-电源主属性和分析属性
    public Response getHisRealInAlm(Integer battgroupId,Integer powerId, String startTime, Integer almId) throws ParseException, InterruptedException {
        Map<String,Object> map=new HashMap<>();
        map.put("batt",null);
        map.put("pwr",null);
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        Integer cycleTime=appParam.getParamValue().intValue();
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1));
        Date endTime=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),60);
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,endTime);
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam=getAnalysisParam(almId);
        if(almAnalysisParam==null||almAnalysisParam.getMainFieldType()==null){
            return new Response().set(1,false,"无对应分析属性");
        }else{
            //分组查看需要查询电源/电池实时表的哪些数据
            Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
            Map<String,Integer> battMap=groupmap.get("batt");
            Map<String,Integer> pwrMap=groupmap.get("pwr");
            if(battgroupId!=null){
                if(battMap!=null&&battMap.size()>0){
                    List battHislist=getBattRealData(battgroupId,monthTimeList,battMap);
                    map.put("batt",battHislist);
                }
            }
            if(powerId!=null){
                if(pwrMap!=null&&pwrMap.size()>0){
                    List pwrHislist=getPwrRealData(powerId,monthTimeList,pwrMap);
                    map.put("pwr",pwrHislist);
                }
            }
            return new Response().setII(1,true, map,"预警分析管理-电源主属性和分析属性");
        }
    }
    //分组查看需要查询电源/电池实时表的哪些数据
    private  Map<String,  Map<String,Integer>> groupPwrAndBatt(AlmAnalysisParam almAnalysisParam) {
        Map<String,  Map<String,Integer>> map = new HashMap<>();
        Map<String,Integer> battMap=new HashMap<>();
        Map<String,Integer> pwrMap=new HashMap<>();
        if(almAnalysisParam.getMainFieldType()==1||almAnalysisParam.getMainFieldType()==2||almAnalysisParam.getMainFieldType()==3){
            if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                pwrMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
            }
        }else{
            if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){
                battMap.put(almAnalysisParam.getMainField(),almAnalysisParam.getMainFieldType());
            }
        }
        if(almAnalysisParam.getMinorField1Type()==1||almAnalysisParam.getMinorField1Type()==2||almAnalysisParam.getMinorField1Type()==3){
            if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField1(),almAnalysisParam.getMinorField1Type());
            }
        }else{
             if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){
                 battMap.put(almAnalysisParam.getMinorField1(),almAnalysisParam.getMinorField1Type());
             }
        }
        if(almAnalysisParam.getMinorField2Type()==1||almAnalysisParam.getMinorField2Type()==2||almAnalysisParam.getMinorField2Type()==3){
            if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField2(),almAnalysisParam.getMinorField2Type());
            }
        }else{
            if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){
                battMap.put(almAnalysisParam.getMinorField2(),almAnalysisParam.getMinorField2Type());
            }
        }
        if(almAnalysisParam.getMinorField3Type()==1||almAnalysisParam.getMinorField3Type()==2||almAnalysisParam.getMinorField3Type()==3){
            if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField3(),almAnalysisParam.getMinorField3Type());
            }
        }else{
            if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){
                battMap.put(almAnalysisParam.getMinorField3(),almAnalysisParam.getMinorField3Type());
            }
        }
        if(almAnalysisParam.getMinorField4Type()==1||almAnalysisParam.getMinorField4Type()==2||almAnalysisParam.getMinorField4Type()==3){
            if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){
                pwrMap.put(almAnalysisParam.getMinorField4(),almAnalysisParam.getMinorField4Type());
            }
        }else{
            if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){
                battMap.put(almAnalysisParam.getMinorField4(),almAnalysisParam.getMinorField4Type());
            }
        }
        map.put("pwr",pwrMap);
        map.put("batt",battMap);
        return map;
    }
    //连接池获取电源历史实时数据
    public List getPwrRealData(Integer powerId,List<List<Date>> monthTimeList,Map<String,Integer> pwrMap) throws InterruptedException {
        List<ResAnalysis> dataList = new LinkedList<>();
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                PwrdevHistorydataId pwrHis = new PwrdevHistorydataId();
                pwrHis.setRecordDatetime(monthTimeList.get(finalII).get(0));
                pwrHis.setRecordDatetime1(monthTimeList.get(finalII).get(1));
                String table = powerId + "_" + ThreadLocalUtil.format(pwrHis.getRecordDatetime(),2);
                pwrHis.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_pwrhis(table);
                List<ResAnalysis> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getPwrHisRealInAlm(pwrHis,pwrMap);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(ResAnalysis::getRecordTime)).collect(Collectors.toList());
        return  dataListSorted;
    }
    //电池告警点击具体告警信息查看从告警开始时间到现在的历史实时数据
    public List getBattRealData(Integer battgroupId, List<List<Date>> monthTimeList,Map<String,Integer> battMap) throws ParseException, InterruptedException {
        List<ResAnalysis> dataList = new LinkedList<>();
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(monthTimeList.size());
        for (int i = 0; i < monthTimeList.size(); i++) {
            int finalI = i;
            pool.execute(() -> {
                int finalII = finalI;
                BattRealdataId realdata = new BattRealdataId();
                realdata.setRecordTime(monthTimeList.get(finalII).get(0));
                realdata.setRecordTime1(monthTimeList.get(finalII).get(1));
                String table = battgroupId + "_" + ThreadLocalUtil.format(realdata.getRecordTime(),2);
                realdata.setTableName(table);//表名时间格式部分
                //判断表是否存在
                int tableNum = subTablePageInfoService.judgeTable_realdata(table);
                List<ResAnalysis> list = new ArrayList();
                if (tableNum > 0) {
                    list = subTablePageInfoService.getBattHisRealInAlm(realdata,battMap);
                }
                dataList.addAll(list);
                latch.countDown();
            });
            sleep(200);
        }
        latch.await(10, TimeUnit.MINUTES);
        List dataListSorted = dataList.stream().sorted(Comparator.comparing(ResAnalysis::getRecordTime)).collect(Collectors.toList());
        return dataListSorted;
    }
    //预警分析管理-切换时间间隔和副属性
    public Response getHisRealWithChage(AnalysisChangeRes res) throws ParseException, InterruptedException {
        Map<String,Object> map=new HashMap<>();
        map.put("batt",null);
        map.put("pwr",null);
        Integer cycleTime=0;
        //获取预警分析周期阈值
        AppParam appParam = appParamService.getAlarmAnalysisCycle();
        cycleTime=appParam.getParamValue().intValue();
        Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(res.getStartTime(),1),cycleTime*(-1));
        Date endTime=ActionUtil.getDateAdd(ThreadLocalUtil.parse(res.getStartTime(),1),60);
        //获取cyscleDate到现在所有的历史实时数据
        List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,endTime);
        //获取告警almId对应的分析配置属性值
        AlmAnalysisParam almAnalysisParam=new AlmAnalysisParam();
        //将属性拷贝至almAnalysisParam中
        copyProperties(almAnalysisParam,res);
        //分组查看需要查询电源/电池实时表的哪些数据
        Map<String,  Map<String,Integer>> groupmap=groupPwrAndBatt(almAnalysisParam);
        Map<String,Integer> battMap=groupmap.get("batt");
        Map<String,Integer> pwrMap=groupmap.get("pwr");
        if(res.getBattgroupId()!=null){
            if(battMap!=null&&battMap.size()>0){
                List battHislist=getBattRealData(res.getBattgroupId(),monthTimeList,battMap);
                map.put("batt",battHislist);
            }
        }
        if(res.getPowerId()!=null){
            if(pwrMap!=null&&pwrMap.size()>0){
                List pwrHislist=getPwrRealData(res.getPowerId(),monthTimeList,pwrMap);
                map.put("pwr",pwrHislist);
            }
        }
        return new Response().setII(1,true, map,"预警分析管理-切换时间间隔和副属性");
    }
    //将属性拷贝至almAnalysisParam中
    private void copyProperties(AlmAnalysisParam almAnalysisParam, AnalysisChangeRes res) {
        almAnalysisParam.setMainField(res.getDataName1());
        almAnalysisParam.setMainFieldType(res.getDataType1());
        almAnalysisParam.setMinorField1(res.getDataName2());
        almAnalysisParam.setMinorField1Type(res.getDataType2());
        almAnalysisParam.setMinorField2(res.getDataName3());
        almAnalysisParam.setMinorField2Type(res.getDataType3());
        almAnalysisParam.setMinorField3(res.getDataName4());
        almAnalysisParam.setMinorField3Type(res.getDataType4());
        almAnalysisParam.setMinorField4(res.getDataName5());
        almAnalysisParam.setMinorField4Type(res.getDataType5());
    }
    //预警分析管理-查询所有的属性对应关系
    public Response getAlmSummaryParam() {
        //总的属性配置
        List<AlmSummaryParam> summaryList=summaryParamService.getInfo();
        return new Response().setII(1,true,summaryList,"预警分析管理-查询所有的属性对应关系");
    }
}