IndexPatternService 通过应用,系统名索引名模糊查询索引 queryindicesBySystemAndApplication分析
好的,根据您提供的文档内容,我提取了 queryIndicesBySystemAndApplication
方法,并对其进行详细分析。以下是提取的方法及其相关部分:
提取的 queryIndicesBySystemAndApplication
方法
@Override
public QueryIndicesBySystemAndApplicationResponse queryIndicesBySystemAndApplication(QueryIndicesBySystemAndApplicationRequest request) {
QueryIndicesBySystemAndApplicationResponse response = new QueryIndicesBySystemAndApplicationResponse();
String userName = request.getUserName();
if (StringUtils.isEmpty(userName)) {
log.error("查询用户关联索引请求参数为空");
throw new TitanException("所传参数为空!");
}
UserConfig user = userService.queryByUserName(userName);
if (user == null) {
RespUtils.setError(ErrorCodeEnum.USER_NOT_EXIST, response);
return response;
}
QueryFinTechUserRequest userRequest = new QueryFinTechUserRequest();
List<String> userNameList = new ArrayList<>();
userNameList.add(userName);
userRequest.setUserNameList(userNameList);
UserInfoResponse userInfoResponse = finTechDataProviderService.queryFinTechUserInfo(userRequest);
String departmentId = userInfoResponse.getUserList().get(0).getOrgId();
Department department = departmentService.getDepartmentById(departmentId);
int isGlobal = 0;
if (user.getGlobalQuery() || (department != null && department.getGlobalQuery())) {
isGlobal = 1;
}
PageHelper.startPage(request.getPageIndex(), request.getPageLimit());
PageInfo<IndexPattern> pageInfo = new PageInfo<>(indexPatternMapper.selectIndexByApplicationAndSystemId(
request.getIndexName(),
request.getApplicationName(),
request.getSystemIdList(),
isGlobal,
userName,
departmentId
));
List<IndexPatternItem> indexPatternItemList = new ArrayList<>();
pageInfo.getList().forEach(userIndex -> {
IndexPatternItem item = new IndexPatternItem();
item.setSystemId(userIndex.getSystemId());
item.setApplicationName(userIndex.getApplicationName());
item.setIndexPatternName(userIndex.getIndexPatternName());
item.setId(userIndex.getId());
indexPatternItemList.add(item);
});
response.setIndicesList(indexPatternItemList);
response.setTotal(pageInfo.getTotal());
response.setSuccess();
return response;
}
方法分析
输入参数
QueryIndicesBySystemAndApplicationRequest request
:包含请求参数,主要包括userName
(用户名)、pageIndex
(当前页码)、pageLimit
(每页显示的记录数)、indexName
(索引名称)、applicationName
(应用名称)和systemIdList
(系统ID列表)。
输出参数
QueryIndicesBySystemAndApplicationResponse response
:包含查询结果的响应对象,包括分页信息和查询到的IndexPatternItem
列表。
方法步骤
-
创建响应对象:
QueryIndicesBySystemAndApplicationResponse response = new QueryIndicesBySystemAndApplicationResponse();
-
获取用户名:
String userName = request.getUserName();
-
参数校验:
if (StringUtils.isEmpty(userName)) { log.error("查询用户关联索引请求参数为空"); throw new TitanException("所传参数为空!"); }
- 检查
userName
是否为空,如果为空则抛出异常并记录日志。
- 检查
-
查询用户配置:
UserConfig user = userService.queryByUserName(userName); if (user == null) { RespUtils.setError(ErrorCodeEnum.USER_NOT_EXIST, response); return response; }
- 调用
userService.queryByUserName
方法查询用户配置。 - 如果用户不存在,设置响应对象的错误信息并返回。
- 调用
-
查询用户信息:
QueryFinTechUserRequest userRequest = new QueryFinTechUserRequest(); List<String> userNameList = new ArrayList<>(); userNameList.add(userName); userRequest.setUserNameList(userNameList); UserInfoResponse userInfoResponse = finTechDataProviderService.queryFinTechUserInfo(userRequest); String departmentId = userInfoResponse.getUserList().get(0).getOrgId(); Department department = departmentService.getDepartmentById(departmentId);
- 创建
QueryFinTechUserRequest
对象并设置用户名列表。 - 调用
finTechDataProviderService.queryFinTechUserInfo
方法查询用户信息。 - 获取用户的部门ID并查询部门信息。
- 创建
-
判断是否全局查询:
int isGlobal = 0; if (user.getGlobalQuery() || (department != null && department.getGlobalQuery())) { isGlobal = 1; }
- 根据用户配置和部门配置判断是否允许全局查询。
-
设置分页参数并执行查询:
PageHelper.startPage(request.getPageIndex(), request.getPageLimit()); PageInfo<IndexPattern> pageInfo = new PageInfo<>(indexPatternMapper.selectIndexByApplicationAndSystemId( request.getIndexName(), request.getApplicationName(), request.getSystemIdList(), isGlobal, userName, departmentId ));
- 使用
PageHelper
设置分页参数。 - 调用
indexPatternMapper.selectIndexByApplicationAndSystemId
方法执行查询,并获取分页结果。
- 使用
-
转换查询结果:
List<IndexPatternItem> indexPatternItemList = new ArrayList<>(); pageInfo.getList().forEach(userIndex -> { IndexPatternItem item = new IndexPatternItem(); item.setSystemId(userIndex.getSystemId()); item.setApplicationName(userIndex.getApplicationName()); item.setIndexPatternName(userIndex.getIndexPatternName()); item.setId(userIndex.getId()); indexPatternItemList.add(item); });
- 创建一个新的
List<IndexPatternItem>
对象。 - 遍历查询结果,将每个
IndexPattern
对象转换为IndexPatternItem
对象,并添加到indexPatternItemList
中。
- 创建一个新的
-
设置响应结果:
response.setIndicesList(indexPatternItemList); response.setTotal(pageInfo.getTotal()); response.setSuccess();
- 将查询结果列表和总记录数设置到响应对象中。
- 设置响应对象的成功状态。
-
返回响应对象:
return response;
总结
queryIndicesBySystemAndApplication
方法的主要功能是根据用户名和相关参数查询索引模式,并将结果以分页形式返回。具体步骤包括:
- 参数校验:确保传入的用户名不为空。
- 查询用户配置:根据用户名查询用户配置。
- 查询用户信息:查询用户的详细信息,包括所属部门。
- 判断是否全局查询:根据用户和部门配置判断是否允许全局查询。
- 设置分页参数并执行查询:使用
PageHelper
设置分页参数,并调用 Mapper 方法执行查询。 - 转换查询结果:将查询结果转换为
IndexPatternItem
列表。 - 设置响应结果:将查询结果和分页信息设置到响应对象中,并设置成功状态。
- 返回响应对象:返回包含查询结果的响应对象。