whyclxw
13 小时以前 5752f03cf3236b9d7dc12dff1f88f188c80b727b
拦截放行退出登录,实时数据统计曲线-交流单元修改
4个文件已修改
69 ■■■■ 已修改文件
src/main/java/com/whyc/filter/AccessFilter.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/PwrdevHistorydataIdService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/SubTablePageInfoService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/ActionUtil.java 26 ●●●●● 补丁 | 查看 | 原始文档 | 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) {