Commit 75346abc authored by suhuiguang's avatar suhuiguang

feat(jg): 操作日志

1.增加查询接口初稿
parent ec80145d
......@@ -40,6 +40,8 @@ public class TZSCommonConstant {
public static final String ES_INDEX_NAME_EQUIPMENT_INFO = "idx_biz_equipment_info";
public static final String ES_INDEX_NAME_JG_ALL = "idx_biz_view_jg_all";
public static final String ES_INDEX_NAME_USER_OPERATE_LOG = "user_operate_log";
/**
* 固定式压力容器
*/
......
package com.yeejoin.amos.boot.module.common.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.biz.service.impl.UserOperateLogServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.Map;
@RestController
@RequestMapping(value = "/user-operate-log")
@RequiredArgsConstructor
@Api(tags = "用户业务操作日志")
public class UserOperateLogController {
private final UserOperateLogServiceImpl userOperateLogService;
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET", value = "操作日志查询")
public ResponseModel<Page<JSONObject>> page(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(required = false) Map<String, Object> params) {
return ResponseHelper.buildResponse(userOperateLogService.page(current, size, new JSONObject(params)));
}
}
package com.yeejoin.amos.boot.module.common.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import lombok.RequiredArgsConstructor;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class UserOperateLogServiceImpl {
private final RestHighLevelClient restHighLevelClient;
public Page<JSONObject> page(int current, int size, JSONObject params) {
Page<JSONObject> result = new Page<>(current, size);
SearchRequest request = new SearchRequest();
request.indices(TZSCommonConstant.ES_INDEX_NAME_USER_OPERATE_LOG);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 业务方法定义精确查询
if (!ObjectUtils.isEmpty(params.getString("methodName"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("methodName.keyword", params.getString("methodName")));
boolMust.must(pBuilder);
}
// 业务方法名称精确查询
if (!ObjectUtils.isEmpty(params.getString("methodLabel"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("methodLabel.keyword", params.getString("methodLabel")));
boolMust.must(pBuilder);
}
// 入参关键字模糊查询
if (!ObjectUtils.isEmpty(params.getString("params"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("params.keyword", params.getString("params")));
boolMust.must(pBuilder);
}
// 出参关键字查询
if (!ObjectUtils.isEmpty(params.getString("result"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("result.keyword", params.getString("result")));
boolMust.must(pBuilder);
}
// 操作人账号关键字查询
if (!ObjectUtils.isEmpty(params.getString("loginId"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("loginId", params.getString("loginId")));
boolMust.must(pBuilder);
}
// 操作人userId关键字查询
if (!ObjectUtils.isEmpty(params.getString("userId"))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
pBuilder.must(QueryBuilders.termQuery("userId", params.getString("userId")));
boolMust.must(pBuilder);
}
builder.query(boolMust);
builder.sort("createDate", SortOrder.DESC);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
Set<String> userIds = new HashSet<>();
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
System.out.println(hit);
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto2 = jsonObject.getJSONObject("sourceAsMap");
userIds.add(dto2.getString("userId"));
list.add(dto2);
}
// 填充操作人名称、填充操作人单位
this.fillingUserInfo(list, userIds);
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
result.setRecords(list);
result.setTotal(totle);
} catch (IOException e) {
throw new RuntimeException(e);
}
return result;
}
private void fillingUserInfo(List<JSONObject> list, Set<String> userIds) {
List<AgencyUserModel> userModels = FeignUtil.remoteCall(() -> Privilege.agencyUserClient.queryByIds(String.join(",", userIds), true));
Map<String, AgencyUserModel> userIdUserMap = userModels.stream().collect(Collectors.toMap(AgencyUserModel::getUserId, Function.identity()));
list.forEach(item -> {
item.put("realName", Optional.ofNullable(userIdUserMap.get(item.getString("userId"))).map(AgencyUserModel::getRealName).orElse(""));
item.put("companyName", Optional.ofNullable(userIdUserMap.get(item.getString("userId"))).map(AgencyUserModel::getOrgNamesWithoutRole).orElse(""));
item.remove("token");
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment