src/main/java/com/whyc/controller/UserLogController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/service/UserLogService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/whyc/util/SubTablePageInfoUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/whyc/controller/UserLogController.java
@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.util.List; import java.util.Objects; /** * 用户操作日志 @@ -28,10 +29,10 @@ @ApiOperation(value = "分页") @PostMapping("page") public Response<PageInfo<UserLog>> getPage(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody UserLog userLog) throws ParseException { public Response<PageInfo<Object>> getPage(@RequestParam int pageNum, @RequestParam int pageSize, @RequestBody UserLog userLog) throws ParseException { //PageInfo<UserLog> pageInfo = service.getPage(pageNum,pageSize,userLog); PageInfo<UserLog> pageInfo = service.getPage2(pageNum,pageSize,userLog); return new Response<PageInfo<UserLog>>().set(1,pageInfo); PageInfo<Object> pageInfo = service.getPage2(pageNum,pageSize,userLog); return new Response<PageInfo<Object>>().set(1,pageInfo); } @PostMapping("exportExcel") src/main/java/com/whyc/service/UserLogService.java
@@ -8,10 +8,7 @@ import com.whyc.mapper.CommonMapper; import com.whyc.mapper.UserLogMapper; import com.whyc.pojo.UserLog; import com.whyc.util.ActionUtil; import com.whyc.util.DateUtil; import com.whyc.util.ExcelUtil; import com.whyc.util.MathUtil; import com.whyc.util.*; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.stereotype.Service; @@ -29,6 +26,9 @@ @Resource private CommonMapper commonMapper; @Resource private SubTablePageInfoUtils subTablePageInfoUtils; public PageInfo<UserLog>getPage(int pageNum, int pageSize, UserLog userLog) { PageHelper.startPage(pageNum, pageSize, true); @@ -129,12 +129,12 @@ } /**根据查询优化分页查询方式*/ public PageInfo<UserLog>getPage2(int pageNum, int pageSize, UserLog userLog) throws ParseException { public PageInfo<Object>getPage2(int pageNum, int pageSize, UserLog userLog) throws ParseException { //PageHelper.startPage(pageNum,pageSize,true); //根据传入的查询时间,获取分表及默认表的拆分查询 Date startTime = userLog.getOperationTime(); Date endTime = userLog.getOperationTime2(); Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesDesc(startTime, endTime); /*Map<String, List<Date>> queryTimeForSubTables = DateUtil.getQueryTimeForSubTablesDesc(startTime, endTime); //查询分表是否存在,存在则查询结果 Map<String,Integer> queryCountMap = new LinkedHashMap<>(); Set<String> tableYearKeySet = queryTimeForSubTables.keySet(); @@ -160,7 +160,7 @@ //分页信息 //确认总页数,总记录数 PageInfo<UserLog> pageInfo = new PageInfo<>(); PageInfo<Object> pageInfo = new PageInfo<>(); int total = 0; Set<String> queryKeySet = queryCountMap.keySet(); @@ -181,7 +181,7 @@ //格式:{表名,[limit 2,20]} Map<String,List<Integer>> tableAndLimitMap = MathUtil.getQueryTableAndLimit(startNum,endNum,pageSize,queryCountMap); Set<String> keySet = tableAndLimitMap.keySet(); List<UserLog> userLogList = new LinkedList<>(); List<Object> userLogList = new LinkedList<>(); for (String key : keySet) { List<Date> queryTime = queryTimeForSubTables.get(key); userLog.setOperationTime(queryTime.get(0)); @@ -193,10 +193,14 @@ userLog.setRecordYear(key.equals("default")?"tb_user_log":"tb_user_log_"+key); List<UserLog> list = mapper.getList2(userLog); userLogList.addAll(list); } }*/ PageInfo<Object> pageInfo = subTablePageInfoUtils.getPageInfo(pageNum, pageSize, startTime, endTime, "db_user", "tb_user_log", userLog); List<Object> userLogList = pageInfo.getList(); //这个接口要兼容新老审计日志记录的查询 //List<UserLog> userLogList = mapper.getList(userLog); userLogList.stream().forEach(userLog1 -> { userLogList.stream().forEach(userLogTemp -> { UserLog userLog1 = (UserLog)userLogTemp; switch (userLog1.getOperationType()){ case 1: userLog1.setOperationTypeStr(UserOperation.TYPE_LOGIN.getTypeName());break; case 2: userLog1.setOperationTypeStr(UserOperation.TYPE_LOGOUT.getTypeName());break; src/main/java/com/whyc/util/SubTablePageInfoUtils.java
New file @@ -0,0 +1,106 @@ package com.whyc.util; import com.github.pagehelper.PageInfo; import com.whyc.constant.Com; import com.whyc.mapper.BattalarmDataHistoryMapper; import com.whyc.mapper.CommonMapper; import com.whyc.mapper.UserLogMapper; import com.whyc.pojo.UserLog; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.text.ParseException; import java.util.*; /** * 数据量极大的表,按照年份分表,分页查询时获取数据 */ @Component public class SubTablePageInfoUtils { @Resource private CommonMapper commonMapper; @Resource private UserLogMapper userLogMapper; @Resource private BattalarmDataHistoryMapper battAlarmDataHistoryMapper; 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.getQueryTimeForSubTablesDesc(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; if(!tableYear.equals("default")){ //数值 tableName = tablePrefix+"_"+tableYear; String existTableName = commonMapper.existTable(dbName, tableName); if(existTableName == null){ continue; } }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); } } //分页信息 //确认总页数,总记录数 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); //====== 根据不同类型类型对象对应调整 ====== if(pojo instanceof UserLog) { UserLog userLog = (UserLog) pojo; userLog.setOperationTime(queryTime.get(0)); userLog.setOperationTime2(queryTime.get(1)); List<Integer> limitList = tableAndLimitMap.get(key); userLog.setLimitStart(limitList.get(0)); userLog.setLimitEnd(limitList.get(1)); userLog.setRecordYear(key.equals("default") ? tablePrefix : tablePrefix + "_" + key); List<UserLog> list = userLogMapper.getList2(userLog); dataList.addAll(list); } } pageInfo.setList(dataList); return pageInfo; } }