lxw
2023-09-08 0c68ddbef7aa46a1e62cca537acf12d2b8178f31
Merge branch 'master' of http://118.89.139.230:10101/r/fg_v2.0
6个文件已修改
179 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/BattalarmDataHistoryController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/DevalarmDataHistoryController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattalarmDataHistoryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/DevalarmDataHistoryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/DateUtil.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/SubTablePageInfoUtils.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BattalarmDataHistoryController.java
@@ -26,7 +26,7 @@
    @PostMapping("/serchByInfo")
    @ApiOperation(value = "电池告警历史记录查询")
    public Response serchByInfo(@RequestBody AlarmPar param) throws ParseException {
    public Response serchByInfo(@RequestBody AlarmPar param) throws ParseException, InterruptedException {
        //return service.serchByInfo(par);
        return service.getPageInfo(param);
    }
src/main/java/com/whyc/controller/DevalarmDataHistoryController.java
@@ -22,7 +22,7 @@
    //设备告警历史查询
    @ApiOperation(value = "设备告警历史查询")
    @PostMapping("serchByCondition")
    public Response serchByCondition(@RequestBody DevAlarmPar param) throws ParseException {
    public Response serchByCondition(@RequestBody DevAlarmPar param) throws ParseException, InterruptedException {
        //return  service.serchByCondition(par);
        return  service.getPageInfo(param);
    }
src/main/java/com/whyc/service/BattalarmDataHistoryService.java
@@ -58,7 +58,7 @@
    }
    //分页查询所有的历史告警
    public Response getPageInfo(AlarmPar param) throws ParseException {
    public Response getPageInfo(AlarmPar param) throws ParseException, InterruptedException {
        //分页信息
        Integer pageNum = param.getPage().getPageCurr();
        Integer pageSize = param.getPage().getPageSize();
src/main/java/com/whyc/service/DevalarmDataHistoryService.java
@@ -42,7 +42,7 @@
        return new Response().setII(1, pageInfo, levelList, "返回结果");
    }
    public Response getPageInfo(DevAlarmPar param) throws ParseException {
    public Response getPageInfo(DevAlarmPar param) throws ParseException, InterruptedException {
        Integer pageNum = param.getPage().getPageCurr();
        Integer pageSize = param.getPage().getPageSize();
        Date almStartTime = param.getAlmStartTime();
src/main/java/com/whyc/util/DateUtil.java
@@ -3,6 +3,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description : 时间工具类
@@ -596,14 +597,28 @@
    public static void main(String[] args) throws ParseException {
        Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2023-01-22 14:12:22");
        Date d2 = YYYY_MM_DD_HH_MM_SS.parse("2023-08-24 16:45:22");
        Map<String, List<Date>> monthListDesc = getQueryTimeForSubTablesByMonthDesc(d1, d2);
        //Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2023-01-22 14:12:22");
        //Date d2 = YYYY_MM_DD_HH_MM_SS.parse("2023-08-24 16:45:22");
        //Map<String, List<Date>> monthListDesc = getQueryTimeForSubTablesByMonthDesc(d1, d2);
        //
        //Set<Map.Entry<String, List<Date>>> entries = monthListDesc.entrySet();
        //for (Map.Entry<String, List<Date>> entry : entries) {
        //    System.out.println(entry);
        //}
        Map<String,String> map = new HashMap<>();
        map.put("2022_01","");
        map.put("2022_02","");
        map.put("2022_10","");
        map.put("2022_12","");
        map.put("2021_03","");
        map.put("2023_01","");
        map.put("2023_05","");
        map.put("2021_10","");
        Set<String> keySet = map.keySet();
        List<String> keySetDesc = keySet.stream().sorted(Comparator.comparing(String::hashCode).reversed()).collect(Collectors.toList());
        Set<Map.Entry<String, List<Date>>> entries = monthListDesc.entrySet();
        for (Map.Entry<String, List<Date>> entry : entries) {
            System.out.println(entry);
        }
    }
}
src/main/java/com/whyc/util/SubTablePageInfoUtils.java
@@ -1,18 +1,21 @@
package com.whyc.util;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.Com;
import com.whyc.dto.InterfaceParam;
import com.whyc.dto.paramter.AlarmPar;
import com.whyc.dto.paramter.DevAlarmPar;
import com.whyc.dto.result.AlarmRes;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.*;
import com.whyc.pojo.*;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -241,16 +244,16 @@
    public PageInfo<Object> getPageInfoByMonthTable(int pageNum,int pageSize,
                                        Date startTime,Date endTime,
                                        String dbName,String tablePrefix,
                                        Object pojo) throws ParseException {
                                        Object pojo) throws ParseException, InterruptedException {
        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesByMonthDesc(startTime, endTime);
        //查询分表是否存在,存在则查询结果
        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
        //优化1-查询所有的符合月份规则的表和主表
        List<String> tableNameListDB = getTableList(dbName, tablePrefix, tablePrefix + "(_[0-9]{4}_[0-9]{2})?");
        List<String> tableYearListInDB = new LinkedList<>(); //查询时间段内的年月分表集合且在数据库中存在
        //过滤掉时间段内数据库中不存在的年月分表
        for (String tableYear : tableYearKeySet) {
            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
            String tableName;
            if(!tableYear.equals("default")){
@@ -260,70 +263,101 @@
                if(!tableNameListDB.contains(tableName)){ //优化1-数据库中不存在,去除多次查表,一次查出
                    continue;
                }
            }
            tableYearListInDB.add(tableYear);
        }
        //查询年月分表的记录数
        //优化2:多线程读取
        ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
        CountDownLatch latch = new CountDownLatch(tableYearListInDB.size());
        for (String tableYear : tableYearListInDB) {
            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
            String tableName;
            if(!tableYear.equals("default")){
                //数值
                tableName = tablePrefix+"_"+tableYear;
            }else{
                tableName = tablePrefix;
            }
            //====== 根据不同类型类型对象对应调整 ======
            if(pojo instanceof UserLog) {
                UserLog userLog = (UserLog) pojo;
                userLog.setOperationTime(queryTime.get(0));
                userLog.setOperationTime2(queryTime.get(1));
                userLog.setRecordYear(tableName);
                int currentCount = userLogMapper.getCount(userLog);
                queryCountMap.put(tableYear,currentCount);
            }
            else if(pojo instanceof AlarmPar){ //电池告警历史
                AlarmPar param = (AlarmPar) pojo;
                param.setAlmStartTime(queryTime.get(0));
                param.setAlmStartTime1(queryTime.get(1));
                param.setRecordYear(tableName);
                int currentCount = battAlarmDataHistoryMapper.getCount(param);
                queryCountMap.put(tableYear,currentCount);
            }
            else if (pojo instanceof DevAlarmPar) {
                DevAlarmPar param = (DevAlarmPar) pojo;
                param.setAlmStartTime(queryTime.get(0));
                param.setAlmStartTime1(queryTime.get(1));
                param.setRecordYear(tableName);
                int currentCount = devAlarmDataHistoryMapper.getCount(param);
                queryCountMap.put(tableYear,currentCount);
            pool.execute(()-> {
            }
            else if (pojo instanceof PwrdevAlarmHistory) {
                PwrdevAlarmHistory param = (PwrdevAlarmHistory) pojo;
                if(param.getRecordId() == 1) {
                //====== 根据不同类型类型对象对应调整 ======
                if (pojo instanceof UserLog) {
                    //UserLog userLog = (UserLog) pojo;
                    UserLog userLog = new UserLog();
                    BeanUtils.copyProperties(pojo,userLog);
                    userLog.setOperationTime(queryTime.get(0));
                    userLog.setOperationTime2(queryTime.get(1));
                    userLog.setRecordYear(tableName);
                    int currentCount = userLogMapper.getCount(userLog);
                    queryCountMap.put(tableYear, currentCount);
                } else if (pojo instanceof AlarmPar) { //电池告警历史
                    //AlarmPar param = (AlarmPar) pojo;
                    AlarmPar param = new AlarmPar();
                    BeanUtils.copyProperties(pojo,param);
                    param.setAlmStartTime(queryTime.get(0));
                    param.setAlmStartTime1(queryTime.get(1));
                    param.setRecordYear(tableName);
                    int currentCount = powerAlarmHistoryMapper.getCount(param);
                    int currentCount = battAlarmDataHistoryMapper.getCount(param);
                    queryCountMap.put(tableYear, currentCount);
                }else{
                } else if (pojo instanceof DevAlarmPar) {
                    //DevAlarmPar param = (DevAlarmPar) pojo;
                    DevAlarmPar param = new DevAlarmPar();
                    BeanUtils.copyProperties(pojo,param);
                    param.setAlmStartTime(queryTime.get(0));
                    param.setAlmStartTime1(queryTime.get(1));
                    param.setRecordYear(tableName);
                    int currentCount = powerAlarmHistoryMapper.getCountForTX(param);
                    int currentCount = devAlarmDataHistoryMapper.getCount(param);
                    queryCountMap.put(tableYear, currentCount);
                }
            }
            else if (pojo instanceof InterfaceParam){
                InterfaceParam param = (InterfaceParam) pojo;
                if(tablePrefix.equals("tb_battalarm_data_history")){
                    param.setStartTime(queryTime.get(0));
                    param.setEndTime(queryTime.get(1));
                    param.setRecordYear(tableName);
                    int currentCount = battAlarmDataHistoryMapper.getCountForInterface(param);
                    queryCountMap.put(tableYear,currentCount);
                }else if(tablePrefix.equals("tb_devalarm_data_history")){
                    param.setStartTime(queryTime.get(0));
                    param.setEndTime(queryTime.get(1));
                    param.setRecordYear(tableName);
                    int currentCount = devAlarmDataHistoryMapper.getCountForInterface(param);
                    queryCountMap.put(tableYear,currentCount);
                } else if (pojo instanceof PwrdevAlarmHistory) {
                    //PwrdevAlarmHistory param = (PwrdevAlarmHistory) pojo;
                    PwrdevAlarmHistory param = new PwrdevAlarmHistory();
                    BeanUtils.copyProperties(pojo,param);
                    if (param.getRecordId() == 1) {
                        param.setAlmStartTime(queryTime.get(0));
                        param.setAlmStartTime1(queryTime.get(1));
                        param.setRecordYear(tableName);
                        int currentCount = powerAlarmHistoryMapper.getCount(param);
                        queryCountMap.put(tableYear, currentCount);
                    } else {
                        param.setAlmStartTime(queryTime.get(0));
                        param.setAlmStartTime1(queryTime.get(1));
                        param.setRecordYear(tableName);
                        int currentCount = powerAlarmHistoryMapper.getCountForTX(param);
                        queryCountMap.put(tableYear, currentCount);
                    }
                } else if (pojo instanceof InterfaceParam) {
                    //InterfaceParam param = (InterfaceParam) pojo;
                    InterfaceParam param = new InterfaceParam();
                    BeanUtils.copyProperties(pojo,param);
                    if (tablePrefix.equals("tb_battalarm_data_history")) {
                        param.setStartTime(queryTime.get(0));
                        param.setEndTime(queryTime.get(1));
                        param.setRecordYear(tableName);
                        int currentCount = battAlarmDataHistoryMapper.getCountForInterface(param);
                        queryCountMap.put(tableYear, currentCount);
                    } else if (tablePrefix.equals("tb_devalarm_data_history")) {
                        param.setStartTime(queryTime.get(0));
                        param.setEndTime(queryTime.get(1));
                        param.setRecordYear(tableName);
                        int currentCount = devAlarmDataHistoryMapper.getCountForInterface(param);
                        queryCountMap.put(tableYear, currentCount);
                    }
                }
            }
                latch.countDown();
            });
        }
        latch.await();
        //因为多线程后无序,需要重排序
        List<String> keySetDesc = queryCountMap.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        Map<String,Integer> queryCountMapDesc = new LinkedHashMap<>();
        for (String key : keySetDesc) {
            Integer count = queryCountMap.get(key);
            queryCountMapDesc.put(key,count);
        }
        //分页信息
        //确认总页数,总记录数
        PageInfo<Object> pageInfo = new PageInfo<>();
@@ -345,7 +379,7 @@
        //最后一个算法:上面不应该先查询所有记录,应该取count. 这后面定位到哪个表或哪几张表后,采取limit获取当前页记录数;
        //格式:{表名,[limit 2,20]}
        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMap);
        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMapDesc);
        Set<String> keySet = tableAndLimitMap.keySet();
        List<Object> dataList = new LinkedList<>();
        for (String key : keySet) {