src/main/java/com/whyc/controller/RealDataStaticController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataHr.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/dto/RealDataStatic/ResRealDataMon.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/BattRealdataIdService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/SubTablePageInfoService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/whyc/controller/RealDataStaticController.java
@@ -30,7 +30,7 @@ @ApiOperation(value = "核容设备") @PostMapping("getSticRealHrData") public Response getSticRealHrData(@RequestBody SticRealDataAc stic) throws ParseException, InterruptedException { public Response getSticRealHrData(@RequestBody SticRealDataBatt stic) throws ParseException, InterruptedException { return battRealdataIdService.getSticRealHrData(stic); } src/main/java/com/whyc/dto/RealDataStatic/ResRealDataHr.java
New file @@ -0,0 +1,20 @@ package com.whyc.dto.RealDataStatic; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @Data public class ResRealDataHr { private Integer recordNum; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date recordTime; private Float onlineVol; private Float groupVol; private Float groupCurr; private Float groupTmp; private Float hjqTmp; private Float devConresist; private Float devCondvoldp; } src/main/java/com/whyc/dto/RealDataStatic/ResRealDataMon.java
@@ -8,7 +8,6 @@ @Data public class ResRealDataMon { private Integer battgroupId; private Integer recordNum; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date recordTime; src/main/java/com/whyc/service/BattRealdataIdService.java
@@ -1,10 +1,7 @@ package com.whyc.service; import com.whyc.dto.Real.*; import com.whyc.dto.RealDataStatic.ResRealDataAc; import com.whyc.dto.RealDataStatic.ResRealDataMon; import com.whyc.dto.RealDataStatic.SticRealDataAc; import com.whyc.dto.RealDataStatic.SticRealDataBatt; import com.whyc.dto.RealDataStatic.*; import com.whyc.dto.Response; import com.whyc.factory.ThreadPoolExecutorFactory; import com.whyc.mapper.CommonMapper; @@ -280,19 +277,19 @@ return new Response().setIII(1, dataListSorted!=null,dataListSorted,map,"历史实时查询"); } //实时数据统计曲线--核容设备 public Response getSticRealHrData(SticRealDataAc stic) throws ParseException, InterruptedException { Integer granularity=5;//默认值 public Response getSticRealHrData(SticRealDataBatt stic) throws ParseException, InterruptedException { Integer granularity=2;//默认值 Map<String,Date> startAndEndTime=DateUtil.getStartAndEndTime(stic.getSticTime()); //获取两个时间分割多少张表 List<List<Date>> monthTimeList = DateUtil.getMonthTime(startAndEndTime.get("startTime"),startAndEndTime.get("endTime")); List<ResRealDataAc> dataList = new LinkedList<>(); List<ResRealDataHr> dataList = new LinkedList<>(); Map<String, Map<String,List<String>>> allTimeMap=new HashMap<>(); ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor(); CountDownLatch latch = new CountDownLatch(monthTimeList.size()); for (int i = 0; i < monthTimeList.size(); i++) { int finalI = i; Integer finalGranularity = granularity; Map<String,List<String>> propertyInfo=stic.getPropertyInfo(); List<String> propertyList=stic.getPropertyList(); pool.execute(() -> { int finalII = finalI; Date recordDatetime=monthTimeList.get(finalII).get(0); @@ -302,7 +299,7 @@ String tableName="db_data_history.tb_batt_realdata_"+table; //判断表是否存在 int tableNum = subTablePageInfoService.judgeTable_realdata(table); List<ResRealDataAc> list = new ArrayList(); List<ResRealDataHr> list = new ArrayList(); Map<String,List<String>> timeMap=new HashMap<>(); if (tableNum > 0) { //获取指定时间段内最大最小recordNum确保数据的完整 @@ -313,23 +310,21 @@ maxRecordNum=(Integer)recordNums.get(0); minRecordNum=(Integer)recordNums.get(1); } list = subTablePageInfoService.getSticRealHrData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum,propertyInfo); list = subTablePageInfoService.getSticRealHrData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum); //所有属性的异动点 List<Integer> allChangeNums=new ArrayList<>(); if(propertyList!=null){ for (String value:propertyList) { //获取指定时间取出每个参数的异动次数和异动的recordNum for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) { String param = entry.getKey(); List<String> valueList = entry.getValue(); for (String value : valueList) { float upperLimit=550; float lowerLimit=50; float upperLimit=3.5f; float lowerLimit=2.0f; //查询电源字段的异动 List changes= subTablePageInfoService.getBattChangesRecordNum(tableName,recordDatetime,recordDatetime1,value,upperLimit,lowerLimit); List<Integer> numList= (List<Integer>) changes.get(0);//record_num的集合 List<String> timeList= (List<String>) changes.get(1);//record_datetime的集合 if(numList!=null&&numList.size()>0){ allChangeNums.addAll(numList); } List<String> timeList= (List<String>) changes.get(1);//record_datetime的集合 //存放每个参数的异动时间点 timeMap.put(value,timeList); } @@ -337,7 +332,7 @@ //只有存在异动点采取查询异动数据 if(allChangeNums.size()>0){ //查询大类参数下所有异动recordNum的记录之和 List<ResRealDataAc> paramList=subTablePageInfoService.getBattPropertyChangesByRecordNum(tableName,recordDatetime,recordDatetime1,allChangeNums,propertyInfo); List<ResRealDataHr> paramList=subTablePageInfoService.getHrPropertyChangesByRecordNum(tableName,recordDatetime,recordDatetime1,allChangeNums); list.addAll(paramList); } } @@ -348,10 +343,10 @@ sleep(200); } latch.await(10, TimeUnit.MINUTES); List<ResRealDataAc> uniqueList = dataList.stream() List<ResRealDataHr> uniqueList = dataList.stream() .distinct() .collect(Collectors.toList()); List dataListSorted = uniqueList.stream().sorted(Comparator.comparing(ResRealDataAc::getRecordNum)).collect(Collectors.toList()); List dataListSorted = uniqueList.stream().sorted(Comparator.comparing(ResRealDataHr::getRecordNum)).collect(Collectors.toList()); //所有异动点合并去重 Map<String, List<String>> mergedMap =ActionUtil.getMergeMap(allTimeMap); return new Response().setIII(1,dataList.size()>0,dataListSorted,mergedMap,"实时数据统计曲线--核容设备"); src/main/java/com/whyc/service/SubTablePageInfoService.java
@@ -7,6 +7,7 @@ import com.whyc.dto.Real.*; import com.whyc.dto.RealDataStatic.MonDataDto; import com.whyc.dto.RealDataStatic.ResRealDataAc; import com.whyc.dto.RealDataStatic.ResRealDataHr; import com.whyc.dto.RealDataStatic.ResRealDataMon; import com.whyc.dto.Statistic.ComPareChangeCurve; import com.whyc.dto.Statistic.ComPareChart; @@ -981,35 +982,28 @@ return list; } //实时数据统计曲线--核容设备 public List<ResRealDataAc> getSticRealHrData(String tableName, Integer granularity,Date recordDatetime,Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum, Map<String, List<String>> propertyInfo) { String propertyStr = propertyInfo.values().stream() .flatMap(List::stream) .collect(Collectors.joining(",")); String sql=" select distinct record_time,record_num, "+propertyStr+" "+ public List<ResRealDataHr> getSticRealHrData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum) { String sql=" select distinct record_time,record_num,online_vol,group_vol,group_curr,group_tmp,hjq_tmp,dev_conresist,dev_condvoldp "+ " from "+tableName+" " + " where record_time >= '"+ThreadLocalUtil.format(recordDatetime,1)+"' " + " and record_time <= '"+ThreadLocalUtil.format(recordDatetime1,1)+"' "+ " and (record_num-"+minRecordNum+")%"+granularity+"=0 or record_num="+maxRecordNum+" or record_num="+minRecordNum ; List<ResRealDataAc> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { sql+=" order by record_num asc"; List<ResRealDataHr> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { @Override public List getResults(ResultSet rs) throws SQLException { List<ResRealDataAc> list=new ArrayList<>(); List<ResRealDataHr> list=new ArrayList<>(); while (rs.next()){ ResRealDataAc data=new ResRealDataAc(); data.setRecordDatetime(rs.getTimestamp("record_time")); ResRealDataHr data=new ResRealDataHr(); data.setRecordTime(rs.getTimestamp("record_time")); data.setRecordNum(rs.getInt("record_num")); Map<String,Map<String,Float>>dataMap=new HashMap<>(); for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) { String key = entry.getKey(); List<String> valueList = entry.getValue(); Map<String,Float> propertyMap=new HashMap<>(); for (String value : valueList) { Float propertyValue = rs.getFloat(value); propertyMap.put(value,propertyValue); } dataMap.put(key,propertyMap); } data.setPropertyInfo(dataMap); data.setOnlineVol(rs.getFloat("online_vol")); data.setGroupVol(rs.getFloat("group_vol")); data.setGroupCurr(rs.getFloat("group_curr")); data.setGroupTmp(rs.getFloat("group_tmp")); data.setHjqTmp(rs.getFloat("hjq_tmp")); data.setDevConresist(rs.getFloat("dev_conresist")); data.setDevCondvoldp(rs.getFloat("dev_condvoldp")); list.add(data); } return list; @@ -1017,7 +1011,45 @@ }); return list; } //查询核容设备字段的异动 public List<ResRealDataHr> getHrPropertyChangesByRecordNum(String tableName, Date recordDatetime, Date recordDatetime1, List<Integer> allChangeNums) { String sql=" select distinct record_time,record_num,online_vol,group_vol,group_curr,group_tmp,hjq_tmp,dev_conresist,dev_condvoldp "+ " from "+tableName+" where record_time>='"+ActionUtil.sdf.format(recordDatetime)+"'" + " and record_time<='"+ActionUtil.sdf.format(recordDatetime1)+"'"; if (allChangeNums.size() > 0) { //去除重复项 List<Integer> uniqueList = allChangeNums.stream() .distinct() .collect(Collectors.toList()); //拼接生成sql String changeNumsStr = uniqueList.stream() .map(String::valueOf) .collect(Collectors.joining(",")); sql += " and record_num in (" + changeNumsStr + ")"; } sql += " order by record_num asc "; List<ResRealDataHr> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { @Override public List getResults(ResultSet rs) throws SQLException { List<ResRealDataHr> list=new ArrayList<>(); while (rs.next()){ ResRealDataHr data=new ResRealDataHr(); data.setRecordTime(rs.getTimestamp("record_time")); data.setRecordNum(rs.getInt("record_num")); data.setOnlineVol(rs.getFloat("online_vol")); data.setGroupVol(rs.getFloat("group_vol")); data.setGroupCurr(rs.getFloat("group_curr")); data.setGroupTmp(rs.getFloat("group_tmp")); data.setHjqTmp(rs.getFloat("hjq_tmp")); data.setDevConresist(rs.getFloat("dev_conresist")); data.setDevCondvoldp(rs.getFloat("dev_condvoldp")); list.add(data); } return list; } }); return list; } //实时数据统计曲线--蓄电池组 public List<ResRealDataMon> getSticRealMonData(String tableName, Integer granularity, Date recordDatetime, Date recordDatetime1, Integer maxRecordNum, Integer minRecordNum) { String sql=" select distinct battgroup_id,record_time,record_num,mon_num,mon_vol,mon_tmp,mon_res,mon_jh_curr "+ @@ -1040,7 +1072,6 @@ ResRealDataMon data = map.get(key); if (data == null) { data = new ResRealDataMon(); data.setBattgroupId(battgroupId); data.setRecordTime(recordTime); data.setRecordNum(recordNum); data.setMonList(new ArrayList<>()); @@ -1117,7 +1148,6 @@ ResRealDataMon data = map.get(key); if (data == null) { data = new ResRealDataMon(); data.setBattgroupId(battgroupId); data.setRecordTime(recordTime); data.setRecordNum(recordNum); data.setMonList(new ArrayList<>());