whyclxw
2025-02-05 4b659a6ece105f30debf0def9225b9a89c43bcd4
src/main/java/com/whyc/util/SubTablePageInfoUtil.java
@@ -3,6 +3,7 @@
import com.github.pagehelper.PageInfo;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.CommonMapper;
import com.whyc.pojo.db_lock_alarm.LockAlarmHis;
import com.whyc.pojo.db_lock_his.LockHis;
import com.whyc.service.SubTableService;
import org.springframework.beans.BeanUtils;
@@ -27,9 +28,86 @@
    @Autowired
    private SubTableService service;
    //按年月分表
    /**按年份表分页查询*/
    public PageInfo<Object> getPageInfo(int pageNum,int pageSize,
                                                      Date startTime,Date endTime,
                                                      String dbName,String tablePrefix,
                                                      Object pojo) throws ParseException {
        Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesDesc2(startTime, endTime);
        //查询分表是否存在,存在则查询结果
        Map<String,Integer> queryCountMap = new LinkedHashMap<>();
        Set<String> tableYearKeySet = queryTimeForSubTables.keySet();
        for (String tableYear : tableYearKeySet) {
            List<Date> queryTime = queryTimeForSubTables.get(tableYear);
            //数值
            String tableName = tablePrefix+"_"+tableYear;
            String existTableName = commonMapper.existTable(dbName, tableName);
            if(existTableName == null){
                continue;
            }
            //====== 根据不同类型类型对象对应调整 ======
            if(pojo instanceof LockHis) {
                LockAlarmHis his = new LockAlarmHis();
                BeanUtils.copyProperties(pojo, his);
                his.setStartTime(queryTime.get(0));
                his.setEndTime(queryTime.get(1));
                his.setRecordYear(tableName);
                int currentCount = service.getLockAlmHisCount(his);
                queryCountMap.put(tableYear, currentCount);
            }
        }
        //分页信息
        //确认总页数,总记录数
        PageInfo<Object> pageInfo = new PageInfo<>();
        int total = 0;
        Set<String> queryKeySet = queryCountMap.keySet();
        for (String queryKey : queryKeySet) {
            int size = queryCountMap.get(queryKey);
            total+=size;
        }
        int pages = (int) Math.ceil(Float.parseFloat(String.valueOf(total))/pageSize);
        pageInfo.setTotal(total);
        pageInfo.setPages(pages);
        pageInfo.setPageNum(pageNum);
        pageInfo.setPageSize(pageSize);
        //根据当前页所需记录,查询当前页记录
        int startNum = (pageNum-1)*pageSize+1;
        int endNum = pageNum*pageSize;
        //最后一个算法:上面不应该先查询所有记录,应该取count. 这后面定位到哪个表或哪几张表后,采取limit获取当前页记录数;
        //格式:{表名,[limit 2,20]}
        Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMap);
        Set<String> keySet = tableAndLimitMap.keySet();
        List<Object> dataList = new LinkedList<>();
        for (String key : keySet) {
            List<Date> queryTime = queryTimeForSubTables.get(key);
            //====== 根据不同类型类型对象对应调整 ======
            String recordYear = tablePrefix + "_" + key;
            if(pojo instanceof LockHis) {
                LockAlarmHis his = new LockAlarmHis();
                BeanUtils.copyProperties(pojo, his);
                his.setStartTime(queryTime.get(0));
                his.setEndTime(queryTime.get(1));
                his.setRecordYear(recordYear);
                List<Integer> limitList = tableAndLimitMap.get(key);
                his.setLimitStart(limitList.get(0));
                his.setLimitEnd(limitList.get(1));
                List<LockHis> list =  service.getLockAlmHisList(his);
                dataList.addAll(list);
            }
        }
        pageInfo.setList(dataList);
        return pageInfo;
    }
    /**按年份表分页查询*/
    public PageInfo<Object> getPageInfoWithOutDefault(int pageNum,int pageSize,
                                        Date startTime,Date endTime,
                                        String dbName,String tablePrefix,
                                        Object pojo) throws ParseException {
@@ -95,7 +173,7 @@
                List<Integer> limitList = tableAndLimitMap.get(key);
                his.setLimitStart(limitList.get(0));
                his.setLimitEnd(limitList.get(1));
                List<LockHis> list =  service.getBattHisList(his);
                List<LockHis> list =  service.getLockHisList(his);
                dataList.addAll(list);
            }
@@ -201,7 +279,7 @@
                List<Integer> limitList = tableAndLimitMap.get(key);
                his.setLimitStart(limitList.get(0));
                his.setLimitEnd(limitList.get(1));
                List<LockHis> list =  service.getBattHisList(his);
                List<LockHis> list =  service.getLockHisList(his);
                dataList.addAll(list);
            }
        }