diff --git a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/controller/api/OperateLogController.java b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/controller/api/OperateLogController.java index 71bfbc8..c317bc7 100644 --- a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/controller/api/OperateLogController.java +++ b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/controller/api/OperateLogController.java @@ -65,7 +65,30 @@ public class OperateLogController { return CommonResponse.fail("the time span is greater than 7"); } try { - CommonPageResponse resp = operateLogService.queryForPage(req); + CommonPageResponse resp = operateLogService.queryBasicInfoForPage(req); + return CommonResponse.success(resp); + } catch (Exception e) { + logger.error("query operate logs failed,", e); + return CommonResponse.fail(e.getMessage()); + } + } + + + @RequestMapping(value = "/operateLog/queryDetailForPage", method = RequestMethod.POST) + @ApiOperation(value = "操作日志分页查询(详情列表)") + public CommonResponse> operateLogsQueryDetail(@RequestBody @Valid OperateLogQueryReqDTO req, + BindingResult bindingResult) { + //参数缺失等返回 + if (bindingResult.hasErrors()) { + return CommonResponse.fail(bindingResult.getAllErrors().get(0).getDefaultMessage()); + } + //时间跨度校验。 + if (DateUtil.betweenDay(req.getStartTime(), req.getEndTime(), true) > 7) { + logger.error("start and end date interval greater than 7."); + return CommonResponse.fail("the time span is greater than 7"); + } + try { + CommonPageResponse resp = operateLogService.queryForPage(req); return CommonResponse.success(resp); } catch (Exception e) { logger.error("query operate logs failed,", e); @@ -75,7 +98,7 @@ public class OperateLogController { @RequestMapping(value = "/operateLog/queryDetail", method = RequestMethod.POST) - @ApiOperation(value = "操作日志详情查询") + @ApiOperation(value = "单条操作日志详情查询") public CommonResponse operateLogDetail(@RequestBody OperateLogQueryDetailReqDTO reqDTO) { try { OperateLogQueryDetailRespDTO detail = operateLogService.queryOperateLogDetail(reqDTO); diff --git a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/dto/OperateLogQueryDetailRespDTO.java b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/dto/OperateLogQueryDetailRespDTO.java index bf16531..6e0a6f3 100644 --- a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/dto/OperateLogQueryDetailRespDTO.java +++ b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/dto/OperateLogQueryDetailRespDTO.java @@ -14,6 +14,9 @@ import java.util.Date; @Data public class OperateLogQueryDetailRespDTO { + @ApiModelProperty(value = "记录ID", position = 1) + private String id; + /** * 操作人 */ diff --git a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/OperateLogService.java b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/OperateLogService.java index e6626af..06c1930 100644 --- a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/OperateLogService.java +++ b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/OperateLogService.java @@ -17,21 +17,21 @@ public interface OperateLogService { boolean insertOperaLog(OperateLogReqDTO operateLogReq) throws Exception; /** - * 分页查询 + * 分页查询 返回基本字段 * * @param req * @return */ - CommonPageResponse queryForPage(OperateLogQueryReqDTO req) throws Exception; + CommonPageResponse queryBasicInfoForPage(OperateLogQueryReqDTO req) throws Exception; + /** - * query from es + * 返回详情信息 * * @param req * @return - * @throws Exception */ - CommonPageResponse queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception; + CommonPageResponse queryForPage(OperateLogQueryReqDTO req) throws Exception; /** * 查询每个日志的详情 @@ -40,4 +40,5 @@ public interface OperateLogService { * @return */ OperateLogQueryDetailRespDTO queryOperateLogDetail(OperateLogQueryDetailReqDTO req) throws Exception; + } diff --git a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/impl/OperateLogServiceImpl.java b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/impl/OperateLogServiceImpl.java index 0828587..bde7d82 100644 --- a/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/impl/OperateLogServiceImpl.java +++ b/axzo-log-server/src/main/java/cn/axzo/log/platform/server/service/impl/OperateLogServiceImpl.java @@ -39,6 +39,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.*; +import java.util.function.BiConsumer; /*** * @author: pepsi @@ -96,6 +97,112 @@ public class OperateLogServiceImpl extends BaseEsService implements OperateLogSe return insert(json, indexNamePrex + indexSuffixDate); } + @Override + public CommonPageResponse queryForPage(OperateLogQueryReqDTO req) throws Exception { + //这里做个区分。时从ES查询获取还是从DB获取. + if (esStorageFlag) { + return queryForPageFromEs(req); + } + IPage page = operateLogRepository.pageLogRecord(req); + //为空则返回空 + List recordList = page.getRecords(); + if (recordList == null || recordList.isEmpty()) { + return CommonPageResponse.zero(req.getPage(), req.getPageSize()); + } + List respList = new ArrayList<>(); + recordList.forEach(item -> { + OperateLogQueryDetailRespDTO detail = operateLogConverter.toDetailDto(item); + detail.setId(item.getId().toString()); + respList.add(detail); + }); + return CommonPageResponse.list(req.getPage(), req.getPageSize(), page.getTotal(), respList); + } + + @Override + public CommonPageResponse queryBasicInfoForPage(OperateLogQueryReqDTO req) throws Exception { + CommonPageResponse detailResp = queryForPage(req); + if (detailResp.getList() == null || detailResp.getList().isEmpty()) { + return CommonPageResponse.zero(detailResp.getPage(), detailResp.getPageSize()); + } + List respList = assembleOperateLogResp(detailResp.getList()); + return CommonPageResponse.list(detailResp.getPage(), detailResp.getPageSize(), detailResp.getTotalCount(), respList); + } + + @Override + public OperateLogQueryDetailRespDTO queryOperateLogDetail(OperateLogQueryDetailReqDTO req) throws Exception { + if (esStorageFlag) { + return queryOperateLogDetailFromEs(req.getOperateTime(), req.getId()); + } + //从DB查询 + OperateLogRecordEntity entity = operateLogRepository.queryById(Long.valueOf(req.getId())); + if (entity == null) { + return null; + } + return operateLogConverter.toDetailDto(entity); + } + + /*** + * 从ES获取查询结果 + * @param req + * @return + */ + public CommonPageResponse queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception { + //根据查询的时间段获取所属的索引集合 + Set indices = betweenIndices(req.getStartTime(), req.getEndTime()); + if (indices.isEmpty()) { + logger.warn("can not find index,startDate={}.", DateUtil.format(req.getStartTime(), DatePattern.PURE_DATE_PATTERN)); + return CommonPageResponse.zero(req.getPage(), req.getPageSize()); + } + //组装查询条件. + SearchSourceBuilder builder = assembleQueryBuilder(req); + SearchRequest request = new SearchRequest(); + request.source(builder); + SearchResponse response = search(request, indices.toArray(new String[]{})); + //处理查询结果的数据 + SearchHits hits = response.getHits(); + SearchHit[] searchHits = hits.getHits(); + Map resMap = new HashMap<>(searchHits.length); + if (searchHits.length == 0) { + return CommonPageResponse.zero(req.getPage(), req.getPageSize()); + } + for (SearchHit hit : searchHits) { + String oprLogStr = hit.getSourceAsString(); + resMap.put(hit.getId(), JSONObject.parseObject(oprLogStr, OperateLogRecordEntity.class)); + } + List detailLists = new ArrayList<>(); + resMap.forEach(new BiConsumer() { + @Override + public void accept(String id, OperateLogRecordEntity entity) { + OperateLogQueryDetailRespDTO detail = operateLogConverter.toDetailDto(entity); + detail.setId(id); + detailLists.add(detail); + } + }); + return CommonPageResponse.list(req.getPage(), req.getPageSize(), hits.getTotalHits().value, detailLists); + } + + /** + * 对于 es 而言,需要索引信息. + * + * @param id + * @return + */ + public OperateLogQueryDetailRespDTO queryOperateLogDetailFromEs(Date oprDateTime, String id) throws Exception { + //根据日期找索引, + String indexName = indexNamePrex + findIndexSuffixDate(oprDateTime); + //需要判断下索引是否存在, + List indices = getIndices(indexNamePrex); + if (!indices.contains(indexName)) { + logger.warn("can not find index,oprDateTime={},id={}", oprDateTime, id); + return null; + } + GetRequest getRequest = new GetRequest(indexName, id); + GetResponse response = get(getRequest); + String oprLogStr = response.getSourceAsString(); + OperateLogRecordEntity entity = JSONObject.parseObject(oprLogStr, OperateLogRecordEntity.class); + return operateLogConverter.toDetailDto(entity); + } + /*** * 根据数据中的日期信息找到所属的索引 * 目前是按7天的规则。 @@ -126,90 +233,6 @@ public class OperateLogServiceImpl extends BaseEsService implements OperateLogSe return unifiedLogRecord; } - @Override - public CommonPageResponse queryForPage(OperateLogQueryReqDTO req) throws Exception { - //这里做个区分。时从ES查询获取还是从DB获取. - if (esStorageFlag) { - return queryForPageFromEs(req); - } - IPage page = operateLogRepository.pageLogRecord(req); - //为空则返回空 - List recordList = page.getRecords(); - if (recordList == null || recordList.isEmpty()) { - return CommonPageResponse.zero(req.getPage(), req.getPageSize()); - } - List respList = assembleOperateLogResp(recordList); - return CommonPageResponse.list(req.getPage(), req.getPageSize(), page.getTotal(), respList); - } - - - /*** - * 从ES获取查询结果 - * @param req - * @return - */ - public CommonPageResponse queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception { - //根据查询的时间段获取所属的索引集合 - Set indices = betweenIndices(req.getStartTime(), req.getEndTime()); - if (indices.isEmpty()) { - logger.warn("can not find index,startDate={}.", DateUtil.format(req.getStartTime(), DatePattern.PURE_DATE_PATTERN)); - return CommonPageResponse.zero(req.getPage(), req.getPageSize()); - } - //组装查询条件. - SearchSourceBuilder builder = assembleQueryBuilder(req); - SearchRequest request = new SearchRequest(); - request.source(builder); - SearchResponse response = search(request, indices.toArray(new String[]{})); - //处理查询结果的数据 - SearchHits hits = response.getHits(); - SearchHit[] searchHits = hits.getHits(); - Map resMap = new HashMap<>(searchHits.length); - if (searchHits.length == 0) { - return CommonPageResponse.zero(req.getPage(), req.getPageSize()); - } - for (SearchHit hit : searchHits) { - String oprLogStr = hit.getSourceAsString(); - resMap.put(hit.getId(), JSONObject.parseObject(oprLogStr, OperateLogRecordEntity.class)); - } - List respList = assembleOperateLogResp(resMap); - return CommonPageResponse.list(req.getPage(), req.getPageSize(), hits.getTotalHits().value, respList); - } - - @Override - public OperateLogQueryDetailRespDTO queryOperateLogDetail(OperateLogQueryDetailReqDTO req) throws Exception { - if (esStorageFlag) { - return queryOperateLogDetailFromEs(req.getOperateTime(), req.getId()); - } - //从DB查询 - OperateLogRecordEntity entity = operateLogRepository.queryById(Long.valueOf(req.getId())); - if (entity == null) { - return null; - } - return operateLogConverter.toDetailDto(entity); - } - - /** - * 对于 es 而言,需要索引信息. - * - * @param id - * @return - */ - public OperateLogQueryDetailRespDTO queryOperateLogDetailFromEs(Date oprDateTime, String id) throws Exception { - //根据日期找索引, - String indexName = indexNamePrex + findIndexSuffixDate(oprDateTime); - //需要判断下索引是否存在, - List indices = getIndices(indexNamePrex); - if (!indices.contains(indexName)) { - logger.warn("can not find index,oprDateTime={},id={}", oprDateTime, id); - return null; - } - GetRequest getRequest = new GetRequest(indexName, id); - GetResponse response = get(getRequest); - String oprLogStr = response.getSourceAsString(); - OperateLogRecordEntity entity = JSONObject.parseObject(oprLogStr, OperateLogRecordEntity.class); - return operateLogConverter.toDetailDto(entity); - } - /*** * 获取2个时间段之间的索引。startTime + 7 < endTime 即可。 * @param startDate @@ -288,25 +311,7 @@ public class OperateLogServiceImpl extends BaseEsService implements OperateLogSe return searchSourceBuilder; } - - private List assembleOperateLogResp(Map recordMap) { - List resList = new ArrayList<>(); - recordMap.forEach((id, item) -> { - OperateLogQueryRespDTO resp = new OperateLogQueryRespDTO(); - resp.setOperateUserName(item.getIdentityUserName()); - resp.setFeatureCode(item.getFeatureCode()); - resp.setFeatureName(item.getFeatureName()); - resp.setContentSummary(item.getContentSummary()); - resp.setOperateTime(item.getOperateTime()); - resp.setOperateUserPhone(item.getIdentityUserPhone()); - resp.setOuName(item.getOuName()); - resp.setId(id); - resList.add(resp); - }); - return resList; - } - - private List assembleOperateLogResp(List recordList) { + private List assembleOperateLogResp(List recordList) { List resList = new ArrayList<>(); recordList.forEach((ele) -> { OperateLogQueryRespDTO response = new OperateLogQueryRespDTO(); @@ -317,7 +322,7 @@ public class OperateLogServiceImpl extends BaseEsService implements OperateLogSe response.setOperateTime(ele.getOperateTime()); response.setOperateUserPhone(ele.getIdentityUserPhone()); response.setOuName(ele.getOuName()); - response.setId(ele.getId().toString()); + response.setId(ele.getId()); resList.add(response); }); return resList; diff --git a/axzo-log-server/src/test/java/cn/axzo/log/platform/server/service/OperateLogServiceTest.java b/axzo-log-server/src/test/java/cn/axzo/log/platform/server/service/OperateLogServiceTest.java index cf369ff..13ea206 100644 --- a/axzo-log-server/src/test/java/cn/axzo/log/platform/server/service/OperateLogServiceTest.java +++ b/axzo-log-server/src/test/java/cn/axzo/log/platform/server/service/OperateLogServiceTest.java @@ -77,7 +77,7 @@ public class OperateLogServiceTest extends LogPlatApplicationTestBase { OperateLogQueryReqDTO req = new OperateLogQueryReqDTO(); req.setPage(1L); req.setPageSize(3L); - CommonPageResponse response = operateLogService.queryForPage(req); + CommonPageResponse response = operateLogService.queryBasicInfoForPage(req); long totalCount = response.getTotalCount(); Assert.assertEquals(3L, totalCount); List respList = response.getList(); @@ -91,7 +91,7 @@ public class OperateLogServiceTest extends LogPlatApplicationTestBase { req.setPageSize(20L); req.setStartTime(DateUtil.parse("2022-09-01 00:00:00", "yyyy-MM-dd HH:mm:ss").toJdkDate()); req.setEndTime(DateUtil.parse("2023-09-01 00:00:00", "yyyy-MM-dd HH:mm:ss").toJdkDate()); - CommonPageResponse response = operateLogService.queryForPageFromEs(req); + CommonPageResponse response = operateLogService.queryBasicInfoForPage(req); long totalCount = response.getTotalCount(); Assert.assertEquals(103L, totalCount); List respList = response.getList();