|
@@ -4,12 +4,11 @@ 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.management.model.equip.GroupManagement;
|
|
|
-import com.persagy.apm.alarmservice.group.management.model.equip.dto.GroupManagementDTO;
|
|
|
-import com.persagy.apm.alarmservice.group.management.model.equip.vo.GroupManagementVo;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.equip.vo.EquipItem;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipDTO;
|
|
|
import com.persagy.apm.alarmservice.group.management.model.group.ConvertGroupTool;
|
|
|
-import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeDetailVO;
|
|
|
-import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeInfoVO;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupInfoVO;
|
|
|
+import com.persagy.apm.alarmservice.group.management.model.group.vo.EquipGroupInfoVO;
|
|
|
import com.persagy.apm.alarmservice.group.management.model.group.vo.GroupTreeVO;
|
|
|
import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
|
|
|
import com.persagy.apm.common.context.poems.PoemsContext;
|
|
@@ -69,8 +68,8 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
private int maxSearchCount;
|
|
|
|
|
|
@Override
|
|
|
- public PageList<GroupManagementVo> equipsQuery(GroupManagementDTO managementDTO) {
|
|
|
- List<GroupManagementVo> groupManagementVoList = new ArrayList<>();
|
|
|
+ public PageList<EquipItem> equipsQuery(QueryEquipDTO managementDTO) {
|
|
|
+ List<EquipItem> equipListItemList = new ArrayList<>();
|
|
|
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
|
|
|
queryBuilder.must(QueryBuilders.matchQuery("group_code", PoemsContext.getContext().getGroupCode()));
|
|
|
queryBuilder.must(QueryBuilders.matchQuery("class_code", managementDTO.getClassCode()));
|
|
@@ -89,7 +88,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
queryBuilder.must(QueryBuilders.termQuery("valid", INTEGER_ONE));
|
|
|
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
|
sourceBuilder.query(queryBuilder);
|
|
|
- sourceBuilder.from((Math.max(managementDTO.getCurrent(), INTEGER_ONE) - INTEGER_ONE)
|
|
|
+ sourceBuilder.from((Math.max(managementDTO.getPage(), INTEGER_ONE) - INTEGER_ONE)
|
|
|
* managementDTO.getSize());
|
|
|
sourceBuilder.size(managementDTO.getSize());
|
|
|
sourceBuilder.sort("create_time", SortOrder.DESC);
|
|
@@ -102,23 +101,23 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
SearchHits hits = searchResponse.getHits();
|
|
|
for (SearchHit hit : hits) {
|
|
|
// 将 JSON 转换成对象
|
|
|
- GroupManagementVo managementVo = JSON.parseObject(hit.getSourceAsString(), GroupManagementVo.class);
|
|
|
- groupManagementVoList.add(managementVo);
|
|
|
+ EquipItem managementVo = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
|
|
|
+ equipListItemList.add(managementVo);
|
|
|
}
|
|
|
}
|
|
|
- return new PageList<>(groupManagementVoList, searchResponse.getHits().getTotalHits().value);
|
|
|
+ return new PageList<>(equipListItemList, searchResponse.getHits().getTotalHits().value);
|
|
|
} catch (IOException e) {
|
|
|
throw new RuntimeException("es查询出错", e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public GroupManagementVo equipsGet(String id) {
|
|
|
+ public EquipItem equipGet(String id) {
|
|
|
String equipStr = findEquipById(id);
|
|
|
if (StringUtils.isEmpty(equipStr)) {
|
|
|
throw new RuntimeException("id为" + id + "的设备不存在");
|
|
|
}
|
|
|
- return JSONObject.parseObject(equipStr, GroupManagementVo.class);
|
|
|
+ return JSONObject.parseObject(equipStr, EquipItem.class);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -148,11 +147,11 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/9/20 1:15 下午
|
|
|
*/
|
|
|
- private List<GroupManagement> findEquipsByIds(List<String> ids) {
|
|
|
+ private List<EquipItem> findEquipsByIds(List<String> ids) {
|
|
|
if (CollectionUtils.isEmpty(ids) || ids.size() > 100) {
|
|
|
throw new RuntimeException("批量查询的数据过短或过长");
|
|
|
}
|
|
|
- List<GroupManagement> managementList = new ArrayList<>();
|
|
|
+ List<EquipItem> managementList = new ArrayList<>();
|
|
|
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
|
|
|
queryBuilder.must(QueryBuilders.termsQuery("id.keyword", ids));
|
|
|
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
@@ -169,7 +168,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
SearchHits hits = searchResponse.getHits();
|
|
|
for (SearchHit hit : hits) {
|
|
|
// 将 JSON 转换成对象
|
|
|
- GroupManagement management = JSON.parseObject(hit.getSourceAsString(), GroupManagement.class);
|
|
|
+ EquipItem management = JSON.parseObject(hit.getSourceAsString(), EquipItem.class);
|
|
|
managementList.add(management);
|
|
|
}
|
|
|
}
|
|
@@ -180,19 +179,19 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Map<String, GroupManagement> queryEquipsByIds(List<String> ids) {
|
|
|
+ public Map<String, EquipItem> queryEquipsByIds(List<String> ids) {
|
|
|
if (CollectionUtils.isEmpty(ids)) {
|
|
|
return new HashMap<>();
|
|
|
}
|
|
|
- Map<String, GroupManagement> resultMap = new HashMap<>(ids.size());
|
|
|
+ Map<String, EquipItem> resultMap = new HashMap<>(ids.size());
|
|
|
List<List<String>> partitions = Lists.partition(ids, 100);
|
|
|
for (List<String> partition : partitions) {
|
|
|
- List<GroupManagement> equipsByIds = findEquipsByIds(ids);
|
|
|
+ List<EquipItem> equipsByIds = findEquipsByIds(ids);
|
|
|
if (CollectionUtils.isEmpty(equipsByIds)) {
|
|
|
continue;
|
|
|
}
|
|
|
- Map<String, GroupManagement> partitionMap = equipsByIds.stream().collect(Collectors.toMap(
|
|
|
- GroupManagement::getId, equip -> equip, (k1, k2) -> k1
|
|
|
+ Map<String, EquipItem> partitionMap = equipsByIds.stream().collect(Collectors.toMap(
|
|
|
+ EquipItem::getId, equip -> equip, (k1, k2) -> k1
|
|
|
));
|
|
|
resultMap.putAll(partitionMap);
|
|
|
}
|
|
@@ -200,32 +199,32 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
}
|
|
|
|
|
|
@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())){
|
|
|
- return groupTreeInfoVOList;
|
|
|
+ public List<EquipGroupInfoVO> equipGroupQuery(List<String> ids) {
|
|
|
+ List<EquipGroupInfoVO> equipGroupInfoVOList = Lists.newArrayList();
|
|
|
+ List<EquipItem> equipItemList = findEquipsByIds(ids);
|
|
|
+ for(EquipItem equipItem: equipItemList) {
|
|
|
+ if(StringUtils.isEmpty(equipItem.getInfos())){
|
|
|
+ return equipGroupInfoVOList;
|
|
|
}
|
|
|
- String infos = management.getInfos().replace(DELIM_START, "")
|
|
|
- .replace(DELIM_END, "").replace("\"", "")
|
|
|
- .replace(BACKSLASH, "").replace(" ", "")
|
|
|
- .trim();
|
|
|
- if (StringUtils.isEmpty(infos)) {
|
|
|
- return groupTreeInfoVOList;
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(equipItem.getInfos());
|
|
|
+ Map<String, String> equipFuncMap = new HashMap<>();
|
|
|
+ if (jsonObject != null) {
|
|
|
+ for (String key : jsonObject.keySet()) {
|
|
|
+ String funcInfo = key + ":" + jsonObject.get(key).toString();
|
|
|
+ equipFuncMap.put(funcInfo, funcInfo);
|
|
|
+ }
|
|
|
}
|
|
|
- //将infos字段整个给转为map,后续匹配的时候时间复杂度为1。
|
|
|
- Map<String, String> infoMap = Arrays.stream(infos.split(COMMA))
|
|
|
- .collect(Collectors.toMap(key-> key, value->value, (e1, e2) -> e1));
|
|
|
//获取分组树
|
|
|
List<GroupTreeVO> groupTreeVOList = getGroupTree();
|
|
|
- GroupTreeInfoVO infoVO = new GroupTreeInfoVO();
|
|
|
+ EquipGroupInfoVO equipGroupInfoVO = new EquipGroupInfoVO();
|
|
|
+ equipGroupInfoVO.setEquipId(equipItem.getId());
|
|
|
+ equipGroupInfoVO.setClassCode(equipItem.getClassCode());
|
|
|
if(CollectionUtils.isEmpty(groupTreeVOList)){
|
|
|
- return groupTreeInfoVOList;
|
|
|
+ return equipGroupInfoVOList;
|
|
|
}
|
|
|
- groupTreeInfoVOList.add(queryGroupName(groupTreeVOList,infoVO,infoMap,management.getId()));
|
|
|
+ equipGroupInfoVOList.add(cascadeSearchGroupInfo(groupTreeVOList,equipGroupInfoVO,equipFuncMap));
|
|
|
}
|
|
|
- return groupTreeInfoVOList;
|
|
|
+ return equipGroupInfoVOList;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -238,13 +237,13 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
// 每次查询100条
|
|
|
List<List<String>> partitions = Lists.partition(objIds, 100);
|
|
|
for (List<String> partition : partitions) {
|
|
|
- List<GroupTreeInfoVO> groupTreeInfoList = equipsGroupQuery(partition);
|
|
|
+ List<EquipGroupInfoVO> groupTreeInfoList = equipGroupQuery(partition);
|
|
|
if (CollectionUtils.isEmpty(groupTreeInfoList)) {
|
|
|
continue;
|
|
|
}
|
|
|
Map<String, SimpleObjVO> partitionMap = groupTreeInfoList.stream().collect(Collectors.toMap(
|
|
|
- GroupTreeInfoVO::getEquipId,
|
|
|
- groupTreeInfoVO -> new SimpleObjVO(groupTreeInfoVO.getId(), groupTreeInfoVO.getName()),
|
|
|
+ EquipGroupInfoVO::getEquipId,
|
|
|
+ equipGroupInfoVO -> new SimpleObjVO(equipGroupInfoVO.getId(), equipGroupInfoVO.getName()),
|
|
|
(k1, k2) -> k1
|
|
|
));
|
|
|
resultMap.putAll(partitionMap);
|
|
@@ -254,34 +253,39 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 递归匹配condition
|
|
|
+ * 递归查询设备的分组信息
|
|
|
+ * 遍历分组树,如果设备的信息点中包含分组的分组条件,同时设备的设备类编码与分组设备类编码匹配时,代表设备属于这个分组
|
|
|
*
|
|
|
- * @param groupTreeVOList
|
|
|
- * @param infoVO
|
|
|
- * @param infoMap
|
|
|
- * @param equipId
|
|
|
- * @return com.persagy.apm.alarmservice.group.management.model.vo.GroupTreeInfoVO
|
|
|
+ * @param groupTreeVOList 分组树节点列表
|
|
|
+ * @param equipGroupInfoVO 设备和所在分组信息(初始化时包含设备id和设备类编码)
|
|
|
+ * @param equipFuncMap "设备信息点:信息点取值" -> "设备信息点:信息点取值",
|
|
|
+ * @return 设备和所在分组信息(补充完成分组信息)
|
|
|
* @author 易涛
|
|
|
* @date 2021/9/10 11:24
|
|
|
*/
|
|
|
- private GroupTreeInfoVO queryGroupName(
|
|
|
- List<GroupTreeVO> groupTreeVOList, GroupTreeInfoVO infoVO,
|
|
|
- Map<String, String> infoMap, String equipId) {
|
|
|
+ private EquipGroupInfoVO cascadeSearchGroupInfo(
|
|
|
+ List<GroupTreeVO> groupTreeVOList, EquipGroupInfoVO equipGroupInfoVO,
|
|
|
+ Map<String, String> equipFuncMap) {
|
|
|
+ if (StringUtils.isBlank(equipGroupInfoVO.getClassCode())) {
|
|
|
+ throw new IllegalArgumentException("要查询的设备没有设备类信息");
|
|
|
+ }
|
|
|
for (GroupTreeVO groupTreeVO : groupTreeVOList) {
|
|
|
- if (StringUtils.isNotEmpty(infoVO.getId())) {
|
|
|
- return infoVO;
|
|
|
+ if (!equipGroupInfoVO.getClassCode().equals(groupTreeVO.getClassCode())) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- //排除掉配置的时候存在不小心放入空格的情况
|
|
|
- if (infoMap.containsKey(groupTreeVO.getCondition().replace(" ", ""))) {
|
|
|
- BeanUtils.copyProperties(groupTreeVO, infoVO);
|
|
|
- infoVO.setEquipId(equipId);
|
|
|
- return infoVO;
|
|
|
+ // 分组条件 排除掉配置的时候存在不小心放入空格的情况
|
|
|
+ String groupCondition = groupTreeVO.getCondition().replace(" ", "");
|
|
|
+ // 分组条件为空或设备信息点中包含分组条件
|
|
|
+ if (StringUtils.isBlank(groupCondition) || equipFuncMap.containsKey(groupCondition)) {
|
|
|
+ BeanUtils.copyProperties(groupTreeVO, equipGroupInfoVO);
|
|
|
+ return equipGroupInfoVO;
|
|
|
}
|
|
|
+
|
|
|
if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
|
|
|
- queryGroupName(groupTreeVO.getChildren(), infoVO, infoMap, equipId);
|
|
|
+ cascadeSearchGroupInfo(groupTreeVO.getChildren(), equipGroupInfoVO, equipFuncMap);
|
|
|
}
|
|
|
}
|
|
|
- return infoVO;
|
|
|
+ return equipGroupInfoVO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -321,24 +325,24 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<GroupManagementVo> getEquipList(String condition, String classCode) {
|
|
|
- GroupManagementDTO managementDTO = new GroupManagementDTO();
|
|
|
+ public List<EquipItem> getEquipList(String condition, String classCode) {
|
|
|
+ QueryEquipDTO managementDTO = new QueryEquipDTO();
|
|
|
managementDTO.setClassCode(classCode);
|
|
|
managementDTO.setCondition(condition);
|
|
|
return getEquipList(managementDTO);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<GroupManagementVo> getEquipList(GroupManagementDTO groupManagementDTO) {
|
|
|
- groupManagementDTO.setCurrent(INTEGER_ONE);
|
|
|
- groupManagementDTO.setSize(maxSearchCount);
|
|
|
- PageList<GroupManagementVo> groupManagementVoPageList = this.equipsQuery(groupManagementDTO);
|
|
|
+ public List<EquipItem> getEquipList(QueryEquipDTO queryEquipDTO) {
|
|
|
+ queryEquipDTO.setPage(INTEGER_ONE);
|
|
|
+ queryEquipDTO.setSize(maxSearchCount);
|
|
|
+ PageList<EquipItem> groupManagementVoPageList = this.equipsQuery(queryEquipDTO);
|
|
|
return groupManagementVoPageList.getRecords();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public GroupTreeDetailVO getGroup(String id) {
|
|
|
- return queryById(getGroupTree(), new GroupTreeDetailVO(), id);
|
|
|
+ public GroupInfoVO getGroup(String id) {
|
|
|
+ return queryById(getGroupTree(), new GroupInfoVO(), id);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -350,31 +354,31 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
* @author 易涛
|
|
|
* @date 2021/9/8 14:50
|
|
|
*/
|
|
|
- private GroupTreeDetailVO queryById(List<GroupTreeVO> groupTreeVOList, GroupTreeDetailVO groupTreeDetailVO, String id) {
|
|
|
+ private GroupInfoVO queryById(List<GroupTreeVO> groupTreeVOList, GroupInfoVO groupInfoVO, String id) {
|
|
|
if (CollectionUtils.isEmpty(groupTreeVOList)) {
|
|
|
return null;
|
|
|
}
|
|
|
for (GroupTreeVO groupTreeVO : groupTreeVOList) {
|
|
|
- if (StringUtils.isNotEmpty(groupTreeDetailVO.getId())) {
|
|
|
- return groupTreeDetailVO;
|
|
|
+ if (StringUtils.isNotEmpty(groupInfoVO.getId())) {
|
|
|
+ return groupInfoVO;
|
|
|
}
|
|
|
if (Objects.equals(groupTreeVO.getId(), id)) {
|
|
|
- BeanUtils.copyProperties(groupTreeVO, groupTreeDetailVO);
|
|
|
- return groupTreeDetailVO;
|
|
|
+ BeanUtils.copyProperties(groupTreeVO, groupInfoVO);
|
|
|
+ return groupInfoVO;
|
|
|
}
|
|
|
if (CollectionUtils.isNotEmpty(groupTreeVO.getChildren())) {
|
|
|
- queryById(groupTreeVO.getChildren(), groupTreeDetailVO, id);
|
|
|
+ queryById(groupTreeVO.getChildren(), groupInfoVO, id);
|
|
|
}
|
|
|
}
|
|
|
- return groupTreeDetailVO;
|
|
|
+ return groupInfoVO;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<GroupTreeDetailVO> queryAllLeafGroups() {
|
|
|
+ public List<GroupInfoVO> queryAllLeafGroups() {
|
|
|
// 遍历分组树,获取最末级节点
|
|
|
List<GroupTreeVO> groupTree = getGroupTree();
|
|
|
|
|
|
- List<GroupTreeDetailVO> result = new ArrayList<>();
|
|
|
+ List<GroupInfoVO> result = new ArrayList<>();
|
|
|
cascadeGetLeafGroup(groupTree, result);
|
|
|
return result;
|
|
|
}
|
|
@@ -387,7 +391,7 @@ public class GroupManagementServiceImpl implements GroupManagementService {
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/9/19 1:37 下午
|
|
|
*/
|
|
|
- private void cascadeGetLeafGroup(List<GroupTreeVO> groupTree, List<GroupTreeDetailVO> result) {
|
|
|
+ private void cascadeGetLeafGroup(List<GroupTreeVO> groupTree, List<GroupInfoVO> result) {
|
|
|
if (CollectionUtils.isEmpty(groupTree)) {
|
|
|
return;
|
|
|
}
|