src/main/java/com/whyc/filter/AccessFilter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/PwrdevHistorydataIdService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/SubTablePageInfoService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/util/ActionUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/whyc/filter/AccessFilter.java
@@ -39,6 +39,7 @@ //登录页面接口 requestURI.contains("login/login") || requestURI.contains("loginByRSA") || requestURI.contains("logout") //WebSocket-账号其他主机登录 || requestURI.contains("loginCheck") //软件升级申请请求 src/main/java/com/whyc/service/PwrdevHistorydataIdService.java
@@ -313,6 +313,7 @@ //获取两个时间分割多少张表 List<List<Date>> monthTimeList = DateUtil.getMonthTime(startAndEndTime.get("startTime"),startAndEndTime.get("endTime")); List<ResRealDataAc> 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++) { @@ -323,11 +324,13 @@ int finalII = finalI; Date recordDatetime=monthTimeList.get(finalII).get(0); Date recordDatetime1=monthTimeList.get(finalII).get(1); String table = stic.getPowerId() + "_" + ThreadLocalUtil.format(recordDatetime,2); String timeTable=ThreadLocalUtil.format(recordDatetime,2); String table = stic.getPowerId() + "_" + timeTable; String tableName="db_data_history.tb_pwrdev_historydata_"+table; //判断表是否存在 int tableNum = subTablePageInfoService.judgeTable_pwrhis(table); List<ResRealDataAc> list = new ArrayList(); Map<String,List<String>> timeMap=new HashMap<>(); if (tableNum > 0) { //获取指定时间段内最大最小recordNum确保数据的完整 List recordNums= subTablePageInfoService.getPwrMaxAndMinRecordNum(tableName,recordDatetime,recordDatetime1); @@ -341,28 +344,32 @@ list=subTablePageInfoService.getSticRealAcData(tableName, finalGranularity,recordDatetime,recordDatetime1,maxRecordNum,minRecordNum,propertyInfo); //所有属性的异动点 List<Integer> allChangeNums=new ArrayList<>(); List< Map<String,List<Integer>>> allChangeNumMap=new ArrayList<>(); //获取指定时间取出每个参数的异动次数和异动的recordNum for (Map.Entry<String, List<String>> entry : propertyInfo.entrySet()) { String param = entry.getKey(); List<String> valueList = entry.getValue(); Map<String,List<Integer>> changeNumMap=new HashMap<>(); for (String value : valueList) { float upperLimit=250; float upperLimit=350; float lowerLimit=50; //查询电源字段的异动 List<Integer> changeNums= subTablePageInfoService.getChangesRecordNum(tableName,recordDatetime,recordDatetime1,value,upperLimit,lowerLimit); allChangeNums.addAll(changeNums); changeNumMap.put(value,changeNums); allChangeNumMap.add(changeNumMap); List changes= subTablePageInfoService.getChangesRecordNum(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); } //存放每个参数的异动时间点 timeMap.put(value,timeList); } } if(allChangeNums.size()>0){//只有存在异动点采取查询异动数据 //只有存在异动点采取查询异动数据 if(allChangeNums.size()>0){ //查询大类参数下所有异动recordNum的记录之和 List<ResRealDataAc> paramList=subTablePageInfoService.getPropertyChangesByRecordNum(tableName,recordDatetime,recordDatetime1,allChangeNums,propertyInfo); list.addAll(paramList); } } allTimeMap.put(timeTable,timeMap); dataList.addAll(list); latch.countDown(); }); @@ -373,6 +380,8 @@ .distinct() .collect(Collectors.toList()); List dataListSorted = uniqueList.stream().sorted(Comparator.comparing(ResRealDataAc::getRecordNum)).collect(Collectors.toList()); return new Response().setII(1,dataList.size()>0,dataListSorted,"实时数据数据曲线统计-交流单元"); //所有异动点合并去重 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
@@ -700,19 +700,24 @@ return list; } //查询电源字段的异动的记录 public List<Integer> getChangesRecordNum(String tableName, Date recordDatetime, Date recordDatetime1, String value, float upperLimit, float lowerLimit) { public List<Object> getChangesRecordNum(String tableName, Date recordDatetime, Date recordDatetime1, String value, float upperLimit, float lowerLimit) { String sql=" select distinct record_datetime,record_num "+ " from "+tableName+" where record_datetime>='"+ActionUtil.sdf.format(recordDatetime)+"'" + " and record_datetime<='"+ActionUtil.sdf.format(recordDatetime1)+"'" + " and "+value+">"+upperLimit+" or "+value+"<"+lowerLimit+" "; sql+=" order by record_num asc"; List<Integer> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { List<Object> list = sqlExecuteService.executeQuery_call(sql, new CallBack() { @Override public List getResults(ResultSet rs) throws SQLException { List<Integer> list=new ArrayList<>(); List list=new ArrayList<>(); List numList=new ArrayList<>(); List timeList=new ArrayList<>(); while (rs.next()){ list.add(rs.getInt("record_num")); numList.add(rs.getInt("record_num")); timeList.add(rs.getString("record_datetime")); } list.add(numList); list.add(timeList); return list; } }); src/main/java/com/whyc/util/ActionUtil.java
@@ -18,6 +18,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; @@ -674,7 +675,32 @@ return result.toString(); } //给Map<String, Map<String,List<String>>>去重合并 public static Map<String, List<String>> getMergeMap(Map<String, Map<String,List<String>>> allTimeMap) { Map<String, List<String>> mergedMap = new HashMap<>(); for (Map<String, List<String>> innerMap : allTimeMap.values()) { for (Map.Entry<String, List<String>> entry : innerMap.entrySet()) { String key = entry.getKey(); List<String> valueList = entry.getValue(); mergedMap.computeIfAbsent(key, k -> new ArrayList<>()) .addAll(valueList); } } DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 去重(保留顺序) mergedMap.forEach((key, list) -> { Set<String> seen = new LinkedHashSet<>(); list.removeIf(s -> !seen.add(s)); // 排序:将字符串解析为 LocalDateTime 后排序 list.sort((s1, s2) -> { LocalDateTime d1 = LocalDateTime.parse(s1, formatter); LocalDateTime d2 = LocalDateTime.parse(s2, formatter); return d1.compareTo(d2); }); }); return mergedMap; } public static void main(String[] args) throws ParseException { /*List<String> dateList =getDateListBetweenDates(ActionUtil.sdf.parse("2025-01-01 00:00:00"),new Date()); for (String date : dateList) {