Merge branch 'develop/oprlog_modify/221014' into 'dev'
Develop/oprlog modify/221014 See merge request infra/xlog!20
This commit is contained in:
commit
2747e67934
@ -65,7 +65,30 @@ public class OperateLogController {
|
||||
return CommonResponse.fail("the time span is greater than 7");
|
||||
}
|
||||
try {
|
||||
CommonPageResponse<OperateLogQueryRespDTO> resp = operateLogService.queryForPage(req);
|
||||
CommonPageResponse<OperateLogQueryRespDTO> 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<CommonPageResponse<OperateLogQueryDetailRespDTO>> 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<OperateLogQueryDetailRespDTO> 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<OperateLogQueryDetailRespDTO> operateLogDetail(@RequestBody OperateLogQueryDetailReqDTO reqDTO) {
|
||||
try {
|
||||
OperateLogQueryDetailRespDTO detail = operateLogService.queryOperateLogDetail(reqDTO);
|
||||
|
||||
@ -14,6 +14,9 @@ import java.util.Date;
|
||||
@Data
|
||||
public class OperateLogQueryDetailRespDTO {
|
||||
|
||||
@ApiModelProperty(value = "记录ID", position = 1)
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 操作人
|
||||
*/
|
||||
|
||||
@ -17,21 +17,21 @@ public interface OperateLogService {
|
||||
boolean insertOperaLog(OperateLogReqDTO operateLogReq) throws Exception;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* 分页查询 返回基本字段
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
CommonPageResponse<OperateLogQueryRespDTO> queryForPage(OperateLogQueryReqDTO req) throws Exception;
|
||||
CommonPageResponse<OperateLogQueryRespDTO> queryBasicInfoForPage(OperateLogQueryReqDTO req) throws Exception;
|
||||
|
||||
|
||||
/**
|
||||
* query from es
|
||||
* 返回详情信息
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
CommonPageResponse<OperateLogQueryRespDTO> queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception;
|
||||
CommonPageResponse<OperateLogQueryDetailRespDTO> queryForPage(OperateLogQueryReqDTO req) throws Exception;
|
||||
|
||||
/**
|
||||
* 查询每个日志的详情
|
||||
@ -40,4 +40,5 @@ public interface OperateLogService {
|
||||
* @return
|
||||
*/
|
||||
OperateLogQueryDetailRespDTO queryOperateLogDetail(OperateLogQueryDetailReqDTO req) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -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<OperateLogQueryDetailRespDTO> queryForPage(OperateLogQueryReqDTO req) throws Exception {
|
||||
//这里做个区分。时从ES查询获取还是从DB获取.
|
||||
if (esStorageFlag) {
|
||||
return queryForPageFromEs(req);
|
||||
}
|
||||
IPage<OperateLogRecordEntity> page = operateLogRepository.pageLogRecord(req);
|
||||
//为空则返回空
|
||||
List<OperateLogRecordEntity> recordList = page.getRecords();
|
||||
if (recordList == null || recordList.isEmpty()) {
|
||||
return CommonPageResponse.zero(req.getPage(), req.getPageSize());
|
||||
}
|
||||
List<OperateLogQueryDetailRespDTO> 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<OperateLogQueryRespDTO> queryBasicInfoForPage(OperateLogQueryReqDTO req) throws Exception {
|
||||
CommonPageResponse<OperateLogQueryDetailRespDTO> detailResp = queryForPage(req);
|
||||
if (detailResp.getList() == null || detailResp.getList().isEmpty()) {
|
||||
return CommonPageResponse.zero(detailResp.getPage(), detailResp.getPageSize());
|
||||
}
|
||||
List<OperateLogQueryRespDTO> 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<OperateLogQueryDetailRespDTO> queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception {
|
||||
//根据查询的时间段获取所属的索引集合
|
||||
Set<String> 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<String, OperateLogRecordEntity> 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<OperateLogQueryDetailRespDTO> detailLists = new ArrayList<>();
|
||||
resMap.forEach(new BiConsumer<String, OperateLogRecordEntity>() {
|
||||
@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<String> 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<OperateLogQueryRespDTO> queryForPage(OperateLogQueryReqDTO req) throws Exception {
|
||||
//这里做个区分。时从ES查询获取还是从DB获取.
|
||||
if (esStorageFlag) {
|
||||
return queryForPageFromEs(req);
|
||||
}
|
||||
IPage<OperateLogRecordEntity> page = operateLogRepository.pageLogRecord(req);
|
||||
//为空则返回空
|
||||
List<OperateLogRecordEntity> recordList = page.getRecords();
|
||||
if (recordList == null || recordList.isEmpty()) {
|
||||
return CommonPageResponse.zero(req.getPage(), req.getPageSize());
|
||||
}
|
||||
List<OperateLogQueryRespDTO> respList = assembleOperateLogResp(recordList);
|
||||
return CommonPageResponse.list(req.getPage(), req.getPageSize(), page.getTotal(), respList);
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* 从ES获取查询结果
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
public CommonPageResponse<OperateLogQueryRespDTO> queryForPageFromEs(OperateLogQueryReqDTO req) throws Exception {
|
||||
//根据查询的时间段获取所属的索引集合
|
||||
Set<String> 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<String, OperateLogRecordEntity> 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<OperateLogQueryRespDTO> 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<String> 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<OperateLogQueryRespDTO> assembleOperateLogResp(Map<String, OperateLogRecordEntity> recordMap) {
|
||||
List<OperateLogQueryRespDTO> 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<OperateLogQueryRespDTO> assembleOperateLogResp(List<OperateLogRecordEntity> recordList) {
|
||||
private List<OperateLogQueryRespDTO> assembleOperateLogResp(List<OperateLogQueryDetailRespDTO> recordList) {
|
||||
List<OperateLogQueryRespDTO> 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;
|
||||
|
||||
@ -77,7 +77,7 @@ public class OperateLogServiceTest extends LogPlatApplicationTestBase {
|
||||
OperateLogQueryReqDTO req = new OperateLogQueryReqDTO();
|
||||
req.setPage(1L);
|
||||
req.setPageSize(3L);
|
||||
CommonPageResponse<OperateLogQueryRespDTO> response = operateLogService.queryForPage(req);
|
||||
CommonPageResponse<OperateLogQueryRespDTO> response = operateLogService.queryBasicInfoForPage(req);
|
||||
long totalCount = response.getTotalCount();
|
||||
Assert.assertEquals(3L, totalCount);
|
||||
List<OperateLogQueryRespDTO> 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<OperateLogQueryRespDTO> response = operateLogService.queryForPageFromEs(req);
|
||||
CommonPageResponse<OperateLogQueryRespDTO> response = operateLogService.queryBasicInfoForPage(req);
|
||||
long totalCount = response.getTotalCount();
|
||||
Assert.assertEquals(103L, totalCount);
|
||||
List<OperateLogQueryRespDTO> respList = response.getList();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user