| | |
| | | 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; |
| | |
| | | @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 { |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |