From 3470b33466cfd9ce423a46220ff81f734fae9fb7 Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期五, 20 六月 2025 11:32:34 +0800 Subject: [PATCH] 预警分析管理-主属性和配置属性 --- src/main/java/com/whyc/service/AlmAnalysisParamService.java | 181 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 181 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/whyc/service/AlmAnalysisParamService.java b/src/main/java/com/whyc/service/AlmAnalysisParamService.java index afa5076..8c952cd 100644 --- a/src/main/java/com/whyc/service/AlmAnalysisParamService.java +++ b/src/main/java/com/whyc/service/AlmAnalysisParamService.java @@ -1,15 +1,41 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.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; + //鑾峰彇鍛婅almId瀵瑰簲鐨勫垎鏋愰厤缃睘鎬у�� public AlmAnalysisParam getAnalysisParam(Integer almId) { QueryWrapper wrapper=new QueryWrapper(); @@ -18,4 +44,159 @@ AlmAnalysisParam param= mapper.selectOne(wrapper); return param; } + + //棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴�� + public Response getHisRealInAlm(Integer battgroupId,Integer powerId, String startTime, Integer almId,Integer intervalTime) throws ParseException, InterruptedException { + Map<String,Object> map=new HashMap<>(); + map.put("batt",null); + map.put("pwr",null); + Integer cycleTime=0; + //鑾峰彇棰勮鍒嗘瀽鍛ㄦ湡闃堝�� + if(intervalTime==null){ + AppParam appParam = appParamService.getAlarmAnalysisCycle(); + cycleTime=appParam.getParamValue().intValue(); + }else{ + cycleTime=intervalTime; + } + Date cyscleDate=ActionUtil.getDateAdd(ThreadLocalUtil.parse(startTime,1),cycleTime*(-1)); + //鑾峰彇cyscleDate鍒扮幇鍦ㄦ墍鏈夌殑鍘嗗彶瀹炴椂鏁版嵁 + List<List<Date>> monthTimeList = DateUtil.getMonthTime(cyscleDate,new Date()); + //鑾峰彇鍛婅almId瀵瑰簲鐨勫垎鏋愰厤缃睘鎬у�� + AlmAnalysisParam almAnalysisParam=getAnalysisParam(almId); + if(almAnalysisParam==null||almAnalysisParam.getMainFieldType()==null){ + return new Response().set(1,false,"鏃犲搴斿垎鏋愬睘鎬�"); + }else{ + //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁 + Map<String,List<String>> groupmap=groupPwrAndBatt(almAnalysisParam); + List<String> battList=groupmap.get("batt"); + List<String> pwrList=groupmap.get("pwr"); + if(battgroupId!=null){ + if(battList!=null&&battList.size()>0){ + List battHislist=getBattRealData(battgroupId,monthTimeList,battList); + map.put("batt",battHislist); + } + } + if(powerId!=null){ + if(pwrList!=null&&pwrList.size()>0){ + List pwrHislist=getPwrRealData(powerId,monthTimeList,pwrList); + map.put("pwr",pwrHislist); + } + } + return new Response().setIII(1,true, map,almAnalysisParam,"棰勮鍒嗘瀽绠$悊-鐢垫簮涓诲睘鎬у拰鍒嗘瀽灞炴��"); + } + } + //鍒嗙粍鏌ョ湅闇�瑕佹煡璇㈢數婧�/鐢垫睜瀹炴椂琛ㄧ殑鍝簺鏁版嵁 + private Map<String, List<String>> groupPwrAndBatt(AlmAnalysisParam almAnalysisParam) { + Map<String, List<String>> map = new HashMap<>(); + List<String> battList=new ArrayList<>(); + List<String> pwrList=new ArrayList<>(); + if(almAnalysisParam.getMainFieldType()==1||almAnalysisParam.getMainFieldType()==2||almAnalysisParam.getMainFieldType()==3){ + if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){ + pwrList.add(almAnalysisParam.getMainField()); + } + }else{ + if(almAnalysisParam.getMainField()!=null||almAnalysisParam.getMainField().length()>0){ + battList.add(almAnalysisParam.getMainField()); + } + } + if(almAnalysisParam.getMinorField1Type()==1||almAnalysisParam.getMinorField1Type()==2||almAnalysisParam.getMinorField1Type()==3){ + if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){ + pwrList.add(almAnalysisParam.getMinorField1()); + } + }else{ + if(almAnalysisParam.getMinorField1()!=null&&almAnalysisParam.getMinorField1().length()>0){ + battList.add(almAnalysisParam.getMinorField1()); + } + } + if(almAnalysisParam.getMinorField2Type()==1||almAnalysisParam.getMinorField2Type()==2||almAnalysisParam.getMinorField2Type()==3){ + if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){ + pwrList.add(almAnalysisParam.getMinorField2()); + } + }else{ + if(almAnalysisParam.getMinorField2()!=null&&almAnalysisParam.getMinorField2().length()>0){ + battList.add(almAnalysisParam.getMinorField2()); + } + } + if(almAnalysisParam.getMinorField3Type()==1||almAnalysisParam.getMinorField3Type()==2||almAnalysisParam.getMinorField3Type()==3){ + if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){ + pwrList.add(almAnalysisParam.getMinorField3()); + } + }else{ + if(almAnalysisParam.getMinorField3()!=null&&almAnalysisParam.getMinorField3().length()>0){ + battList.add(almAnalysisParam.getMinorField3()); + } + } + if(almAnalysisParam.getMinorField4Type()==1||almAnalysisParam.getMinorField4Type()==2||almAnalysisParam.getMinorField4Type()==3){ + if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){ + pwrList.add(almAnalysisParam.getMinorField4()); + } + }else{ + if(almAnalysisParam.getMinorField4()!=null&&almAnalysisParam.getMinorField4().length()>0){ + battList.add(almAnalysisParam.getMinorField4()); + } + } + map.put("pwr",pwrList); + map.put("batt",battList); + return map; + } + //杩炴帴姹犺幏鍙栫數婧愬巻鍙插疄鏃舵暟鎹� + public List getPwrRealData(Integer powerId,List<List<Date>> monthTimeList,List<String> pwrList) 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,pwrList); + } + 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,List<String> battList) 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,battList); + } + 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; + } + } \ No newline at end of file -- Gitblit v1.9.1