From 720b7044ad1708a242d3bdb51f77dc7d5e0572c8 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Tue, 25 Jun 2024 16:56:27 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E7=9F=A9=E9=98=B5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=E6=95=B0=E6=8D=AE=E6=BA=90-?= =?UTF-8?q?=E6=94=BE=E5=87=BA=E5=85=A8=E5=B1=80=E5=B1=9E=E6=80=A7=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #[1186783134449664]矩阵配置项数据源-放出全局属性环境字段 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1186783134449664 --- .../ListCiEntityDataForSelectApi.java | 19 ++++- .../matrix/handler/CiDataSourceHandler.java | 56 ++++++++++++- .../service/cientity/CiEntityService.java | 7 +- .../service/cientity/CiEntityServiceImpl.java | 84 ++++++++++++++++++- 4 files changed, 161 insertions(+), 5 deletions(-) diff --git a/src/main/java/neatlogic/module/cmdb/api/cientity/ListCiEntityDataForSelectApi.java b/src/main/java/neatlogic/module/cmdb/api/cientity/ListCiEntityDataForSelectApi.java index f7af7064..f0551ec1 100644 --- a/src/main/java/neatlogic/module/cmdb/api/cientity/ListCiEntityDataForSelectApi.java +++ b/src/main/java/neatlogic/module/cmdb/api/cientity/ListCiEntityDataForSelectApi.java @@ -26,6 +26,8 @@ import neatlogic.framework.cmdb.dto.ci.RelVo; import neatlogic.framework.cmdb.dto.cientity.AttrFilterVo; import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; import neatlogic.framework.cmdb.dto.cientity.RelFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.view.ViewConstVo; import neatlogic.framework.common.constvalue.ApiParamType; import neatlogic.framework.common.dto.ValueTextVo; @@ -104,11 +106,13 @@ public class ListCiEntityDataForSelectApi extends PrivateApiComponentBase { Map attrMap = new HashMap<>(); Map relMap = new HashMap<>(); Map ciViewMap = new HashMap<>(); - ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap); + Map globalAttrMap = new HashMap<>(); + ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap, globalAttrMap); CiViewVo ciView = ciViewMap.get(label); if (ciView != null) { List attrFilters = new ArrayList<>(); List relFilters = new ArrayList<>(); + List globalAttrFilters = new ArrayList<>(); List attrIdList = new ArrayList<>(); List relIdList = new ArrayList<>(); List valueList = new ArrayList<>(); @@ -181,6 +185,18 @@ public class ListCiEntityDataForSelectApi extends PrivateApiComponentBase { ciEntityVo.setFilterCiIdList(filterCiIdList); } break; + case "global": + Long globalId = Long.valueOf(label.substring(7)); + GlobalAttrVo globalAttrVo = globalAttrMap.get(globalId); + if (globalAttrVo != null) { + GlobalAttrFilterVo globalAttrFilterVo = ciEntityService.convertGlobalAttrFilter(globalAttrVo, expression, valueList); + if (globalAttrFilterVo != null) { + globalAttrFilters.add(globalAttrFilterVo); + } else { + flag = false; + } + } + break; default: break; } @@ -189,6 +205,7 @@ public class ListCiEntityDataForSelectApi extends PrivateApiComponentBase { } ciEntityVo.setAttrFilterList(attrFilters); ciEntityVo.setRelFilterList(relFilters); + ciEntityVo.setGlobalAttrFilterList(globalAttrFilters); ciEntityVo.setAttrIdList(attrIdList); ciEntityVo.setRelIdList(relIdList); List viewConstNameList = new ArrayList<>(); diff --git a/src/main/java/neatlogic/module/cmdb/matrix/handler/CiDataSourceHandler.java b/src/main/java/neatlogic/module/cmdb/matrix/handler/CiDataSourceHandler.java index eaa2eeb8..2eb11d47 100644 --- a/src/main/java/neatlogic/module/cmdb/matrix/handler/CiDataSourceHandler.java +++ b/src/main/java/neatlogic/module/cmdb/matrix/handler/CiDataSourceHandler.java @@ -25,6 +25,8 @@ import neatlogic.framework.cmdb.dto.cientity.AttrFilterVo; import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; import neatlogic.framework.cmdb.dto.cientity.RelEntityVo; import neatlogic.framework.cmdb.dto.cientity.RelFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.view.ViewConstVo; import neatlogic.framework.cmdb.exception.ci.CiNotFoundException; import neatlogic.framework.cmdb.utils.RelUtil; @@ -46,6 +48,7 @@ import neatlogic.module.cmdb.dao.mapper.ci.CiViewMapper; import neatlogic.module.cmdb.dao.mapper.ci.RelMapper; import neatlogic.module.cmdb.dao.mapper.cientity.CiEntityMapper; import neatlogic.module.cmdb.dao.mapper.cientity.RelEntityMapper; +import neatlogic.module.cmdb.dao.mapper.globalattr.GlobalAttrMapper; import neatlogic.module.cmdb.matrix.constvalue.MatrixType; import neatlogic.module.cmdb.service.cientity.CiEntityService; import neatlogic.module.framework.dependency.handler.CiAttr2MatrixAttrDependencyHandler; @@ -90,6 +93,9 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { @Resource private CiViewMapper ciViewMapper; + @Resource + private GlobalAttrMapper globalAttrMapper; + @Resource private CiEntityService ciEntityService; @@ -163,6 +169,9 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { //固化属性需要特殊处理 ciViewMap.put("const_" + ciview.getItemName().replace("_", ""), ciview); break; + case "global": + ciViewMap.put("global_" + ciview.getItemId(), ciview); + break; } } JSONArray showAttributeArray = new JSONArray(); @@ -419,6 +428,11 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { List relList = RelUtil.ClearRepeatRel(relMapper.getRelByCiId(ciId)); Map fromRelMap = relList.stream().filter(rel -> rel.getDirection().equals("from")).collect(Collectors.toMap(RelVo::getId, e -> e)); Map toRelMap = relList.stream().filter(rel -> rel.getDirection().equals("to")).collect(Collectors.toMap(RelVo::getId, e -> e)); + + GlobalAttrVo searchVo = new GlobalAttrVo(); + searchVo.setIsActive(1); + List globalAttrList = globalAttrMapper.searchGlobalAttr(searchVo); + Map globalAttrMap = globalAttrList.stream().collect(Collectors.toMap(GlobalAttrVo::getId, e -> e)); for (CiViewVo ciview : ciViewList) { MatrixAttributeVo matrixAttributeVo = new MatrixAttributeVo(); matrixAttributeVo.setMatrixUuid(matrixUuid); @@ -467,6 +481,14 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { matrixAttributeVo.setIsSearchable(0); } break; + case "global": + // 全局属性 + matrixAttributeVo.setLabel("global_" + ciview.getItemId()); + GlobalAttrVo globalAttrVo = globalAttrMap.get(ciview.getItemId()); + JSONObject globalConfig = new JSONObject(); + globalConfig.put("global", globalAttrVo); + matrixAttributeVo.setConfig(globalConfig); + break; default: break; } @@ -572,7 +594,8 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { Map attrMap = new HashMap<>(); Map relMap = new HashMap<>(); Map ciViewMap = new HashMap<>(); - ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap); + Map globalAttrMap = new HashMap<>(); + ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap, globalAttrMap); for (MatrixFilterVo matrixFilterVo : filterList) { if (matrixFilterVo == null) { continue; @@ -808,8 +831,9 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { ciEntityVo.setCiId(ciId); Map attrMap = new HashMap<>(); Map relMap = new HashMap<>(); + Map globalAttrMap = new HashMap<>(); Map ciViewMap = new HashMap<>(); - ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap); + ciEntityService.getCiViewMapAndAttrMapAndRelMap(ciId, attrMap, relMap, ciViewMap, globalAttrMap); JSONArray tbodyArray = new JSONArray(); JSONArray defaultValue = dataVo.getDefaultValue(); if (CollectionUtils.isNotEmpty(defaultValue)) { @@ -819,6 +843,7 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { for (MatrixDefaultValueFilterVo defaultValueFilterVo : dataVo.getDefaultValueFilterList()) { List attrFilters = new ArrayList<>(); List relFilters = new ArrayList<>(); + List globalAttrFilters = new ArrayList<>(); List filterList = new ArrayList<>(); MatrixKeywordFilterVo valueFieldFilter = defaultValueFilterVo.getValueFieldFilter(); if (valueFieldFilter != null) { @@ -911,17 +936,31 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { ciEntityVo.setFilterCiIdList(filterCiIdList); } break; + case "global": + Long globalId = Long.valueOf(label.substring(7)); + GlobalAttrVo globalAttrVo = globalAttrMap.get(globalId); + if (globalAttrVo != null) { + GlobalAttrFilterVo globalAttrFilterVo = ciEntityService.convertGlobalAttrFilter(globalAttrVo, matrixFilterVo.getExpression(), valueList); + if (globalAttrFilterVo != null) { + globalAttrFilters.add(globalAttrFilterVo); + } else { + flag = false; + } + } + break; } } if (flag) { ciEntityVo.setAttrFilterList(attrFilters); ciEntityVo.setRelFilterList(relFilters); + ciEntityVo.setGlobalAttrFilterList(globalAttrFilters); tbodyArray.addAll(accessSearchCiEntity(matrixUuid, ciEntityVo)); } } } else { List attrFilters = new ArrayList<>(); List relFilters = new ArrayList<>(); + List globalAttrFilters = new ArrayList<>(); List filterList = dataVo.getFilterList(); String keywordColumn = dataVo.getKeywordColumn(); if (StringUtils.isNotBlank(keywordColumn) && StringUtils.isNotBlank(dataVo.getKeyword())) { @@ -1012,6 +1051,18 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { ciEntityVo.setFilterCiIdList(filterCiIdList); } break; + case "global": + Long globalId = Long.valueOf(label.substring(7)); + GlobalAttrVo globalAttrVo = globalAttrMap.get(globalId); + if (globalAttrVo != null) { + GlobalAttrFilterVo globalAttrFilterVo = ciEntityService.convertGlobalAttrFilter(globalAttrVo, matrixFilterVo.getExpression(), valueList); + if (globalAttrFilterVo != null) { + globalAttrFilters.add(globalAttrFilterVo); + } else { + flag = false; + } + } + break; } } } @@ -1021,6 +1072,7 @@ public class CiDataSourceHandler extends MatrixDataSourceHandlerBase { } ciEntityVo.setAttrFilterList(attrFilters); ciEntityVo.setRelFilterList(relFilters); + ciEntityVo.setGlobalAttrFilterList(globalAttrFilters); //下面逻辑适用于下拉框滚动加载,也可以搜索,但是一页返回的数据量可能会小于pageSize,因为做了去重处理 ciEntityVo.setCurrentPage(dataVo.getCurrentPage()); ciEntityVo.setPageSize(dataVo.getPageSize()); diff --git a/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityService.java b/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityService.java index 430ac512..82380aad 100644 --- a/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityService.java +++ b/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityService.java @@ -23,6 +23,8 @@ import neatlogic.framework.cmdb.dto.ci.RelVo; import neatlogic.framework.cmdb.dto.cientity.AttrFilterVo; import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; import neatlogic.framework.cmdb.dto.cientity.RelFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; import neatlogic.framework.cmdb.dto.transaction.TransactionGroupVo; import neatlogic.framework.cmdb.dto.transaction.TransactionStatusVo; @@ -168,14 +170,17 @@ public interface CiEntityService { * @param attrMap 属性map * @param relMap 关系map * @param ciViewMap 显示map + * @param globalAttrMap 全局属性map */ - void getCiViewMapAndAttrMapAndRelMap(Long ciId, Map attrMap, Map relMap, Map ciViewMap); + void getCiViewMapAndAttrMapAndRelMap(Long ciId, Map attrMap, Map relMap, Map ciViewMap, Map globalAttrMap); RelFilterVo convertFromRelFilter(RelVo relVo, String expression, List valueList, String direction); AttrFilterVo convertAttrFilter(AttrVo attrVo, String expression, List valueList); + GlobalAttrFilterVo convertGlobalAttrFilter(GlobalAttrVo globalAttrVo, String expression, List valueList); + /** * 查询配置项,构造tbodyList的每一行 * diff --git a/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityServiceImpl.java b/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityServiceImpl.java index 93bdbcee..bed8d349 100644 --- a/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityServiceImpl.java +++ b/src/main/java/neatlogic/module/cmdb/service/cientity/CiEntityServiceImpl.java @@ -30,6 +30,8 @@ import neatlogic.framework.cmdb.dto.ci.CiViewVo; import neatlogic.framework.cmdb.dto.ci.CiVo; import neatlogic.framework.cmdb.dto.ci.RelVo; import neatlogic.framework.cmdb.dto.cientity.*; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrFilterVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrItemVo; import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.transaction.*; import neatlogic.framework.cmdb.enums.*; @@ -2357,13 +2359,18 @@ public class CiEntityServiceImpl implements CiEntityService, ICiEntityCrossoverS } @Override - public void getCiViewMapAndAttrMapAndRelMap(Long ciId, Map attrMap, Map relMap, Map ciViewMap) { + public void getCiViewMapAndAttrMapAndRelMap(Long ciId, Map attrMap, Map relMap, Map ciViewMap, Map globalAttrMap) { List attrList = attrMapper.getAttrByCiId(ciId); attrMap.putAll(attrList.stream().collect(Collectors.toMap(AttrVo::getId, e -> e))); List relList = relMapper.getRelByCiId(ciId); for (RelVo relVo : relList) { relMap.put(relVo.getId(), relVo); } + GlobalAttrVo searchVo = new GlobalAttrVo(); + searchVo.setIsActive(1); + List globalAttrList = globalAttrMapper.searchGlobalAttr(searchVo); + globalAttrMap.putAll(globalAttrList.stream().collect(Collectors.toMap(GlobalAttrVo::getId, e -> e))); + CiViewVo ciViewVo = new CiViewVo(); ciViewVo.setCiId(ciId); List ciViewList = RelUtil.ClearCiViewRepeatRel(ciViewMapper.getCiViewByCiId(ciViewVo)); @@ -2382,6 +2389,9 @@ public class CiEntityServiceImpl implements CiEntityService, ICiEntityCrossoverS //固化属性需要特殊处理 ciViewMap.put("const_" + ciview.getItemName().replace("_", ""), ciview); break; + case "global": + ciViewMap.put("global_" + ciview.getItemId(), ciview); + break; } } } @@ -2448,6 +2458,58 @@ public class CiEntityServiceImpl implements CiEntityService, ICiEntityCrossoverS return attrFilterVo; } + @Override + public GlobalAttrFilterVo convertGlobalAttrFilter(GlobalAttrVo globalAttrVo, String expression, List valueList) { + GlobalAttrFilterVo globalAttrFilterVo = new GlobalAttrFilterVo(); + globalAttrFilterVo.setAttrId(globalAttrVo.getId()); + if (StringUtils.isBlank(expression)) { + expression = neatlogic.framework.matrix.constvalue.SearchExpression.EQ.getExpression(); + } + if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NULL.getExpression()) + || Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NOTNULL.getExpression())) { + globalAttrFilterVo.setExpression(expression); + return globalAttrFilterVo; + } + List longValueList = new ArrayList<>(); + List itemList = globalAttrVo.getItemList(); + Map globalAttrItemMap = itemList.stream().collect(Collectors.toMap(GlobalAttrItemVo::getValue, e -> e)); + for (String value : valueList) { + GlobalAttrItemVo globalAttrItemVo = globalAttrItemMap.get(value); + for (Map.Entry entry : globalAttrItemMap.entrySet()) { + String key = entry.getKey(); + if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.EQ.getExpression()) + || Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NE.getExpression())) { + if (Objects.equals(key, value)) { + globalAttrItemVo = entry.getValue(); + } + } else if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.LI.getExpression()) + || Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NL.getExpression())) { + if (key.toLowerCase().contains(value.toLowerCase())) { + globalAttrItemVo = entry.getValue(); + } + } + } + if (globalAttrItemVo == null) { + return null; + } + longValueList.add(globalAttrItemVo.getId()); + } + if (CollectionUtils.isEmpty(longValueList)) { + return null; + } + globalAttrFilterVo.setValueList(longValueList); + + if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.EQ.getExpression())) { + expression = neatlogic.framework.matrix.constvalue.SearchExpression.LI.getExpression(); + } else if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NE.getExpression())) { + expression = neatlogic.framework.matrix.constvalue.SearchExpression.NL.getExpression(); + } + globalAttrFilterVo.setExpression(expression); + globalAttrFilterVo.setName(globalAttrVo.getName()); + globalAttrFilterVo.setLabel(globalAttrVo.getLabel()); + return globalAttrFilterVo; + } + @Override public RelFilterVo convertFromRelFilter(RelVo relVo, String expression, List valueList, String direction) { if (Objects.equals(expression, neatlogic.framework.matrix.constvalue.SearchExpression.NULL.getExpression()) @@ -2581,6 +2643,26 @@ public class CiEntityServiceImpl implements CiEntityService, ICiEntityCrossoverS } } } + JSONObject globalAttrEntityData = ciEntity.getGlobalAttrEntityData(); + if (MapUtils.isNotEmpty(globalAttrEntityData)) { + for (Map.Entry entry : globalAttrEntityData.entrySet()) { + JSONObject valueObj = (JSONObject) entry.getValue(); + String key = entry.getKey(); + if (StringUtils.isNotBlank(key)) { + JSONArray valueArray = valueObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + List valueList = valueArray.toJavaList(GlobalAttrItemVo.class); + if (CollectionUtils.isNotEmpty(valueList)) { + List list = new ArrayList<>(); + for (GlobalAttrItemVo globalAttrItemVo : valueList) { + list.add(globalAttrItemVo.getValue()); + } + tbody.put(key, String.join(",", list)); + } + } + } + } + } return tbody; } -- Gitee