|
@@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.google.common.collect.Lists;
|
|
|
-import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.ConvertGroupTool;
|
|
|
import com.persagy.apm.alarmservice.group.management.model.GroupManagement;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeDetailVO;
|
|
|
import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO;
|
|
|
import com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO;
|
|
|
import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
|
|
|
+import com.persagy.apm.common.model.vo.SimpleObjVO;
|
|
|
import com.persagy.apm.common.response.PageList;
|
|
|
import com.persagy.apm.model.dto.GroupManagementDTO;
|
|
|
import com.persagy.apm.model.vo.GroupManagementVo;
|
|
@@ -40,10 +42,7 @@ import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static cn.hutool.core.util.StrUtil.*;
|
|
@@ -63,30 +62,26 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
@Autowired
|
|
|
private RestHighLevelClient client;
|
|
|
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private GroupManagementServiceImpl groupManagementService;
|
|
|
-
|
|
|
@Override
|
|
|
public PageList<GroupManagementVo> equipsQuery(GroupManagementDTO managementDTO) {
|
|
|
List<GroupManagementVo> groupManagementVoList = new ArrayList<>();
|
|
|
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
|
|
|
- queryBuilder.must(QueryBuilders.matchQuery("class_code",managementDTO.getClassCode()));
|
|
|
- queryBuilder.must(QueryBuilders.matchPhraseQuery("infos",managementDTO.getCondition()));
|
|
|
+ queryBuilder.must(QueryBuilders.matchQuery("class_code", managementDTO.getClassCode()));
|
|
|
+ queryBuilder.must(QueryBuilders.matchPhraseQuery("infos", managementDTO.getCondition()));
|
|
|
//新增根据项目id查询设备
|
|
|
- if(StringUtils.isNotEmpty(managementDTO.getProjectId())){
|
|
|
- queryBuilder.must(QueryBuilders.termsQuery("project_id",managementDTO.getProjectId()));
|
|
|
+ if (StringUtils.isNotEmpty(managementDTO.getProjectId())) {
|
|
|
+ queryBuilder.must(QueryBuilders.termsQuery("project_id", managementDTO.getProjectId()));
|
|
|
}
|
|
|
//模糊查询使用
|
|
|
- if(StringUtils.isNotEmpty(managementDTO.getLocalName())) {
|
|
|
+ if (StringUtils.isNotEmpty(managementDTO.getLocalName())) {
|
|
|
queryBuilder.must(QueryBuilders.matchQuery("local_name", managementDTO.getLocalName())
|
|
|
.analyzer("keyword"));
|
|
|
}
|
|
|
- queryBuilder.must(QueryBuilders.termQuery("valid",INTEGER_ONE));
|
|
|
+ queryBuilder.must(QueryBuilders.termQuery("valid", INTEGER_ONE));
|
|
|
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
|
sourceBuilder.query(queryBuilder);
|
|
|
- sourceBuilder.from((Math.max(managementDTO.getCurrent(), INTEGER_ONE)-INTEGER_ONE)
|
|
|
- *managementDTO.getSize());
|
|
|
+ sourceBuilder.from((Math.max(managementDTO.getCurrent(), INTEGER_ONE) - INTEGER_ONE)
|
|
|
+ * managementDTO.getSize());
|
|
|
sourceBuilder.size(managementDTO.getSize());
|
|
|
sourceBuilder.sort("create_time", SortOrder.DESC);
|
|
|
SearchRequest rq = new SearchRequest(INDEX_NAME);
|
|
@@ -94,7 +89,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
try {
|
|
|
SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
|
|
|
// 根据状态和数据条数验证是否返回了数据
|
|
|
- if (RestStatus.OK.equals(searchResponse.status())&&searchResponse.getHits().getTotalHits().value>0) {
|
|
|
+ if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
|
|
|
SearchHits hits = searchResponse.getHits();
|
|
|
for (SearchHit hit : hits) {
|
|
|
// 将 JSON 转换成对象
|
|
@@ -102,59 +97,68 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
groupManagementVoList.add(managementVo);
|
|
|
}
|
|
|
}
|
|
|
- return new PageList<>(groupManagementVoList,searchResponse.getHits().getTotalHits().value);
|
|
|
- }catch (IOException e){
|
|
|
- throw new RuntimeException("es查询出错",e);
|
|
|
+ return new PageList<>(groupManagementVoList, searchResponse.getHits().getTotalHits().value);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("es查询出错", e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public GroupManagementVo equipsGet(String id) {
|
|
|
String equipStr = findEquipById(id);
|
|
|
- if(StringUtils.isEmpty(equipStr)){
|
|
|
- throw new RuntimeException("id为"+id+"的设备不存在");
|
|
|
+ if (StringUtils.isEmpty(equipStr)) {
|
|
|
+ throw new RuntimeException("id为" + id + "的设备不存在");
|
|
|
}
|
|
|
- return JSONObject.parseObject(equipStr,GroupManagementVo.class);
|
|
|
+ return JSONObject.parseObject(equipStr, GroupManagementVo.class);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据id查询设备-常用方法
|
|
|
+ *
|
|
|
* @param id
|
|
|
+ * @return java.lang.String
|
|
|
* @author 易涛
|
|
|
* @date 2021/9/10 10:05
|
|
|
- * @return java.lang.String
|
|
|
*/
|
|
|
- private String findEquipById(String id){
|
|
|
- GetRequest getRequest = new GetRequest(INDEX_NAME,id);
|
|
|
+ private String findEquipById(String id) {
|
|
|
+ GetRequest getRequest = new GetRequest(INDEX_NAME, id);
|
|
|
try {
|
|
|
- GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);
|
|
|
- if(getResponse.isExists()){
|
|
|
+ GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
|
|
|
+ if (getResponse.isExists()) {
|
|
|
return getResponse.getSourceAsString();
|
|
|
}
|
|
|
- }catch (IOException e){
|
|
|
- throw new RuntimeException("es查询出错",e);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("es查询出错", e);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private List<GroupManagement> findEquipsByIds(List<String> ids){
|
|
|
- if(CollectionUtils.isEmpty(ids)||ids.size()>100){
|
|
|
+ /**
|
|
|
+ * 查询设备
|
|
|
+ *
|
|
|
+ * @param ids 设备id列表
|
|
|
+ * @return 设备列表
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/9/20 1:15 下午
|
|
|
+ */
|
|
|
+ private List<GroupManagement> findEquipsByIds(List<String> ids) {
|
|
|
+ if (CollectionUtils.isEmpty(ids) || ids.size() > 100) {
|
|
|
throw new RuntimeException("批量查询的数据过短或过长");
|
|
|
}
|
|
|
List<GroupManagement> managementList = new ArrayList<>();
|
|
|
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
|
|
|
- queryBuilder.must(QueryBuilders.termsQuery("id.keyword",ids));
|
|
|
+ queryBuilder.must(QueryBuilders.termsQuery("id.keyword", ids));
|
|
|
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
|
sourceBuilder.query(queryBuilder);
|
|
|
sourceBuilder.from(INTEGER_ZERO);
|
|
|
sourceBuilder.size(ids.size());
|
|
|
- sourceBuilder.sort("create_time",SortOrder.DESC);
|
|
|
+ sourceBuilder.sort("create_time", SortOrder.DESC);
|
|
|
SearchRequest rq = new SearchRequest(INDEX_NAME);
|
|
|
rq.source(sourceBuilder);
|
|
|
try {
|
|
|
SearchResponse searchResponse = client.search(rq, RequestOptions.DEFAULT);
|
|
|
// 根据状态和数据条数验证是否返回了数据
|
|
|
- if (RestStatus.OK.equals(searchResponse.status())&&searchResponse.getHits().getTotalHits().value>0) {
|
|
|
+ if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
|
|
|
SearchHits hits = searchResponse.getHits();
|
|
|
for (SearchHit hit : hits) {
|
|
|
// 将 JSON 转换成对象
|
|
@@ -162,59 +166,86 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
managementList.add(management);
|
|
|
}
|
|
|
}
|
|
|
- }catch (IOException e){
|
|
|
- throw new RuntimeException("es查询出错",e);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("es查询出错", e);
|
|
|
}
|
|
|
return managementList;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, GroupManagement> queryEquipsByIds(List<String> ids) {
|
|
|
+ List<GroupManagement> equipsByIds = findEquipsByIds(ids);
|
|
|
+ if (CollectionUtils.isEmpty(equipsByIds)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ return equipsByIds.stream().collect(Collectors.toMap(
|
|
|
+ GroupManagement::getId, equip -> equip, (k1,k2) -> k1
|
|
|
+ ));
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<GroupTreeInfoVO> equipsGroupQuery(List<String> ids) {
|
|
|
List<GroupTreeInfoVO> groupTreeInfoVOList = Lists.newArrayList();
|
|
|
List<GroupManagement> groupManagementList = findEquipsByIds(ids);
|
|
|
- for(GroupManagement management:groupManagementList) {
|
|
|
- if(StringUtils.isEmpty(management.getInfos())){
|
|
|
+ for (GroupManagement management : groupManagementList) {
|
|
|
+ if (StringUtils.isEmpty(management.getInfos())) {
|
|
|
return null;
|
|
|
}
|
|
|
- String infos = management.getInfos().replace(DELIM_START,"")
|
|
|
- .replace(DELIM_END,"").replace("\"","")
|
|
|
- .replace(BACKSLASH,"").replace(" ","")
|
|
|
+ String infos = management.getInfos().replace(DELIM_START, "")
|
|
|
+ .replace(DELIM_END, "").replace("\"", "")
|
|
|
+ .replace(BACKSLASH, "").replace(" ", "")
|
|
|
.trim();
|
|
|
if (StringUtils.isEmpty(infos)) {
|
|
|
return null;
|
|
|
}
|
|
|
Map<String, String> infoMap = Arrays.stream(infos.split(COMMA))
|
|
|
- .collect(Collectors.toMap(key-> key, value->value, (e1, e2) -> e1));
|
|
|
+ .collect(Collectors.toMap(key -> key, value -> value, (e1, e2) -> e1));
|
|
|
List<GroupTreeVO> groupTreeVOList = getGroupTree();
|
|
|
GroupTreeInfoVO infoVO = new GroupTreeInfoVO();
|
|
|
- groupTreeInfoVOList.add(queryGroupName(groupTreeVOList,infoVO,infoMap,management.getId()));
|
|
|
+ groupTreeInfoVOList.add(queryGroupName(groupTreeVOList, infoVO, infoMap, management.getId()));
|
|
|
}
|
|
|
return groupTreeInfoVOList;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<String, SimpleObjVO> queryObjGroup(List<String> objIds) {
|
|
|
+ List<GroupTreeInfoVO> groupTreeInfoVOS = equipsGroupQuery(objIds);
|
|
|
+ if (CollectionUtils.isEmpty(groupTreeInfoVOS)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ return groupTreeInfoVOS.stream().collect(Collectors.toMap(
|
|
|
+ GroupTreeInfoVO::getEquipId,
|
|
|
+ groupTreeInfoVO -> new SimpleObjVO(groupTreeInfoVO.getId(), groupTreeInfoVO.getName()),
|
|
|
+ (k1,k2) -> k1
|
|
|
+ ));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 递归匹配condition
|
|
|
+ *
|
|
|
* @param groupTreeVOList
|
|
|
* @param infoVO
|
|
|
* @param infoMap
|
|
|
* @param equipId
|
|
|
+ * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO
|
|
|
* @author 易涛
|
|
|
* @date 2021/9/10 11:24
|
|
|
- * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO
|
|
|
*/
|
|
|
- private GroupTreeInfoVO queryGroupName(List<GroupTreeVO> groupTreeVOList,GroupTreeInfoVO infoVO,
|
|
|
- Map<String, String> infoMap,String equipId){
|
|
|
- for(GroupTreeVO groupTreeVO:groupTreeVOList){
|
|
|
- if(StringUtils.isNotEmpty(infoVO.getId())){
|
|
|
+ private GroupTreeInfoVO queryGroupName(
|
|
|
+ List<GroupTreeVO> groupTreeVOList, GroupTreeInfoVO infoVO,
|
|
|
+ Map<String, String> infoMap, String equipId) {
|
|
|
+ for (GroupTreeVO groupTreeVO : groupTreeVOList) {
|
|
|
+ if (StringUtils.isNotEmpty(infoVO.getId())) {
|
|
|
return infoVO;
|
|
|
}
|
|
|
//排除掉配置的时候存在不小心放入空格的情况
|
|
|
- if(infoMap.containsKey(groupTreeVO.getCondition().replace(" ",""))){
|
|
|
- BeanUtils.copyProperties(groupTreeVO,infoVO);
|
|
|
+ if (infoMap.containsKey(groupTreeVO.getCondition().replace(" ", ""))) {
|
|
|
+ BeanUtils.copyProperties(groupTreeVO, infoVO);
|
|
|
infoVO.setEquipId(equipId);
|
|
|
return infoVO;
|
|
|
}
|
|
|
- if(CollectionUtils.isNotEmpty(groupTreeVO.getChildren())){
|
|
|
- queryGroupName(groupTreeVO.getChildren(),infoVO,infoMap,equipId);
|
|
|
+ if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
|
|
|
+ queryGroupName(groupTreeVO.getChildren(), infoVO, infoMap, equipId);
|
|
|
}
|
|
|
}
|
|
|
return infoVO;
|
|
@@ -222,21 +253,22 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
|
|
|
/**
|
|
|
* 获取分组树
|
|
|
+ *
|
|
|
+ * @return java.util.List<com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO>
|
|
|
* @author 易涛
|
|
|
* @date 2021/9/8 14:44
|
|
|
- * @return java.util.List<com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO>
|
|
|
*/
|
|
|
- public static List<GroupTreeVO> getGroupTree(){
|
|
|
+ public static List<GroupTreeVO> getGroupTree() {
|
|
|
InputStream inputStream = GroupManagementServiceImpl.class.getClassLoader()
|
|
|
- .getResourceAsStream(File.separator+"json"+File.separator+"GroupTree.json");
|
|
|
- if(inputStream==null){
|
|
|
+ .getResourceAsStream(File.separator + "json" + File.separator + "GroupTree.json");
|
|
|
+ if (inputStream == null) {
|
|
|
return null;
|
|
|
}
|
|
|
- try{
|
|
|
+ try {
|
|
|
String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
|
|
|
- return JSONArray.parseArray(str,GroupTreeVO.class);
|
|
|
- }catch (IOException ioe){
|
|
|
- throw new RuntimeException("json文件有误",ioe);
|
|
|
+ return JSONArray.parseArray(str, GroupTreeVO.class);
|
|
|
+ } catch (IOException ioe) {
|
|
|
+ throw new RuntimeException("json文件有误", ioe);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -249,25 +281,89 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
request.setMaxDocs(10000);
|
|
|
try {
|
|
|
BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);
|
|
|
- log.info("删除返回的数据为---{}",resp.toString());
|
|
|
- }catch (IOException e){
|
|
|
- throw new RuntimeException("删除elasticSearch失败",e);
|
|
|
+ log.info("删除返回的数据为---{}", resp.toString());
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("删除elasticSearch失败", e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 查询分组下的设备
|
|
|
- * @param condition
|
|
|
- * @param classCode
|
|
|
- * @return
|
|
|
- */
|
|
|
- public List<GroupManagementVo> getEquipList(String condition,String classCode){
|
|
|
+ @Override
|
|
|
+ public List<GroupManagementVo> getEquipList(String condition, String classCode) {
|
|
|
GroupManagementDTO managementDTO = new GroupManagementDTO();
|
|
|
managementDTO.setClassCode(classCode);
|
|
|
managementDTO.setCondition(condition);
|
|
|
- managementDTO.setCurrent(INTEGER_ONE);
|
|
|
- managementDTO.setSize(5000);
|
|
|
- PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(managementDTO);
|
|
|
+ return getEquipList(managementDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<GroupManagementVo> getEquipList(GroupManagementDTO groupManagementDTO) {
|
|
|
+ groupManagementDTO.setCurrent(INTEGER_ONE);
|
|
|
+ groupManagementDTO.setSize(5000);
|
|
|
+ PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(groupManagementDTO);
|
|
|
return groupManagementVoPageList.getRecords();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public GroupTreeDetailVO getGroup(String id) {
|
|
|
+ return queryById(getGroupTree(), new GroupTreeDetailVO(), id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 递归匹配符合条件的分组对象
|
|
|
+ *
|
|
|
+ * @param groupTreeVOList
|
|
|
+ * @param id
|
|
|
+ * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeVO
|
|
|
+ * @author 易涛
|
|
|
+ * @date 2021/9/8 14:50
|
|
|
+ */
|
|
|
+ private GroupTreeDetailVO queryById(List<GroupTreeVO> groupTreeVOList, GroupTreeDetailVO groupTreeDetailVO, String id) {
|
|
|
+ if (CollectionUtils.isEmpty(groupTreeVOList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ for (GroupTreeVO groupTreeVO : groupTreeVOList) {
|
|
|
+ if (StringUtils.isNotEmpty(groupTreeDetailVO.getId())) {
|
|
|
+ return groupTreeDetailVO;
|
|
|
+ }
|
|
|
+ if (Objects.equals(groupTreeVO.getId(), id)) {
|
|
|
+ BeanUtils.copyProperties(groupTreeVO, groupTreeDetailVO);
|
|
|
+ return groupTreeDetailVO;
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
|
|
|
+ queryById(groupTreeVO.getChildren(), groupTreeDetailVO, id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return groupTreeDetailVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<GroupTreeDetailVO> queryAllLeafGroups() {
|
|
|
+ // 遍历分组树,获取最末级节点
|
|
|
+ List<GroupTreeVO> groupTree = getGroupTree();
|
|
|
+
|
|
|
+ List<GroupTreeDetailVO> result = new ArrayList<>();
|
|
|
+ cascadeGetLeafGroup(groupTree, result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 递归查询分组树的叶子节点
|
|
|
+ *
|
|
|
+ * @param groupTree 分组树节点列表
|
|
|
+ * @param result 保存叶子节点的结果集
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/9/19 1:37 下午
|
|
|
+ */
|
|
|
+ private void cascadeGetLeafGroup(List<GroupTreeVO> groupTree, List<GroupTreeDetailVO> result) {
|
|
|
+ if (CollectionUtils.isEmpty(groupTree)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (GroupTreeVO groupTreeVO : groupTree) {
|
|
|
+ if (CollectionUtils.isEmpty(groupTreeVO.getChildren())) {
|
|
|
+ result.add(ConvertGroupTool.INSTANCE.convert2DetailDTO(groupTreeVO));
|
|
|
+ } else {
|
|
|
+ cascadeGetLeafGroup(groupTreeVO.getChildren(), result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|