diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java index 040655e610383cc40a5976eb8ccdcc96c2d4123e..1721402d338038d6dc6540a731d5d3a289d654f9 100644 --- a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java @@ -1,7 +1,5 @@ package neatlogic.module.cmdb.process.dto; -import com.alibaba.fastjson.JSONArray; - import java.util.List; public class CiEntitySyncConfigVo { @@ -24,7 +22,7 @@ public class CiEntitySyncConfigVo { /** 同步策略,全局模式或局部模式 **/ private String editMode; /** 子模型配置 **/ - private JSONArray children; +// private JSONArray children; public Long getId() { return id; @@ -122,11 +120,11 @@ public class CiEntitySyncConfigVo { this.editMode = editMode; } - public JSONArray getChildren() { - return children; - } - - public void setChildren(JSONArray children) { - this.children = children; - } +// public JSONArray getChildren() { +// return children; +// } +// +// public void setChildren(JSONArray children) { +// this.children = children; +// } } diff --git a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java index 3113fd7c6d5bd46dc9c0537db48dcc86f302b30a..d5dbe7800dc0c3b3da71b38333effb6c7cb4c2a9 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -474,25 +474,25 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } // 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 - List ciEntitySyncConfigList = new ArrayList<>(); - ciEntitySyncConfigList.add(startConfigObj); - List ciEntityUuidList = new ArrayList<>(); - JSONArray children = startConfigObj.getChildren(); - if (CollectionUtils.isNotEmpty(children)) { - for (int i = 0; i < children.size(); i++) { - JSONObject child = children.getJSONObject(i); - String ciEntityUuid = child.getString("ciEntityUuid"); - if (StringUtils.isNotBlank(ciEntityUuid)) { - ciEntityUuidList.add(ciEntityUuid); - } - } - } - for (CiEntitySyncConfigVo ciEntitySyncConfig : originalConfigList) { - if (ciEntityUuidList.contains(ciEntitySyncConfig.getUuid())) { - ciEntitySyncConfigList.add(ciEntitySyncConfig); - } - } - handleBatchDataSource(originalConfigList, ciEntitySyncConfigList, formAttributeDataMap, newConfigList, formConfig); +// List ciEntitySyncConfigList = new ArrayList<>(); +// ciEntitySyncConfigList.add(startConfigObj); +// List ciEntityUuidList = new ArrayList<>(); +// JSONArray children = startConfigObj.getChildren(); +// if (CollectionUtils.isNotEmpty(children)) { +// for (int i = 0; i < children.size(); i++) { +// JSONObject child = children.getJSONObject(i); +// String ciEntityUuid = child.getString("ciEntityUuid"); +// if (StringUtils.isNotBlank(ciEntityUuid)) { +// ciEntityUuidList.add(ciEntityUuid); +// } +// } +// } +// for (CiEntitySyncConfigVo ciEntitySyncConfig : originalConfigList) { +// if (ciEntityUuidList.contains(ciEntitySyncConfig.getUuid())) { +// ciEntitySyncConfigList.add(ciEntitySyncConfig); +// } +// } + handleBatchDataSource(originalConfigList, startConfigObj, formAttributeDataMap, newConfigList, formConfig); } return newConfigList; } @@ -996,6 +996,94 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return resultList; } + /** + * 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 + * @param originalConfigList 原始配置信息列表 + * @param currentConfig 当前要处理的配置信息 + * @param formAttributeDataMap 表单数据信息 + * @param newConfigList 收集新产生的配置信息列表 + * @param formConfig 表单配置信息 + * @return + */ + private JSONArray handleBatchDataSource( + List originalConfigList, + CiEntitySyncConfigVo currentConfig, + Map formAttributeDataMap, + List newConfigList, + String formConfig + ) { + Long ciId = currentConfig.getCiId(); + CiVo ciVo = ciMapper.getCiById(ciId); + if (ciVo == null) { + String ciName = currentConfig.getCiName(); + throw new CiNotFoundException(ciName); + } + JSONArray resultList = new JSONArray(); + List batchDataColumnList = new ArrayList<>(); + JSONArray batchDataList = new JSONArray(); + if (Objects.equals(currentConfig.getCreatePolicy(), "batch")) { + // 批量操作配置信息 + CiEntitySyncBatchDataSourceVo batchDataSource = currentConfig.getBatchDataSource(); + String attributeUuid = batchDataSource.getAttributeUuid(); + Object dataObj = formAttributeDataMap.get(attributeUuid); + if (dataObj == null) { + return resultList; + } + if (dataObj instanceof JSONArray) { + JSONArray dataList = (JSONArray) dataObj; + List filterList = batchDataSource.getFilterList(); + batchDataList = filterData(dataList, filterList, formConfig); + if (CollectionUtils.isEmpty(batchDataList)) { + return resultList; + } + JSONObject rowDataObj = batchDataList.getJSONObject(0); + batchDataColumnList.addAll(rowDataObj.keySet()); + } else { + return resultList; + } + } + List mappingList = handleMappingFormComponent(currentConfig.getMappingList(), batchDataColumnList, formAttributeDataMap); + if (Objects.equals(currentConfig.getCreatePolicy(), "batch")) { + if (CollectionUtils.isNotEmpty(batchDataList)) { + // 遍历批量操作表格数据 + for (int j = 0; j < batchDataList.size(); j++) { + JSONObject rowDataObj = batchDataList.getJSONObject(j); + if (MapUtils.isEmpty(rowDataObj)) { + continue; + } + List newMappingList = new ArrayList<>(); + newMappingList.addAll(mappingList); + List list = handleMappingFormTableComponent(rowDataObj, batchDataColumnList, currentConfig.getMappingList()); + newMappingList.addAll(list); + CiEntitySyncConfigVo newConfigObj = createCiEntitySyncConfigVo(ciVo, currentConfig, newMappingList); + JSONObject resultObj = new JSONObject(); + resultObj.put("ciEntityUuid", newConfigObj.getUuid()); + resultObj.put("ciEntityName", newConfigObj.getCiName()); + resultObj.put("ciId", newConfigObj.getCiId()); + resultObj.put("type", "new"); + resultList.add(resultObj); + newConfigList.add(newConfigObj); + formAttributeDataMap.putAll(rowDataObj); + Map newFormAttributeDataMap = new HashMap<>(); + newFormAttributeDataMap.putAll(formAttributeDataMap); + newFormAttributeDataMap.putAll(rowDataObj); + handleMappingRelConfig(originalConfigList, newConfigObj, newFormAttributeDataMap, newConfigList, formConfig); + } + } + } else { + CiEntitySyncConfigVo newConfigObj = createCiEntitySyncConfigVo(ciVo, currentConfig, mappingList); + JSONObject resultObj = new JSONObject(); + resultObj.put("ciEntityUuid", newConfigObj.getUuid()); + resultObj.put("ciEntityName", newConfigObj.getCiName()); + resultObj.put("ciId", newConfigObj.getCiId()); + resultObj.put("type", "new"); + resultList.add(resultObj); + newConfigList.add(newConfigObj); + handleMappingRelConfig(originalConfigList, newConfigObj, formAttributeDataMap, newConfigList, formConfig); + } + return resultList; + } + /** * 处理关系的新的配置项数据 * @param originalConfigList 原始配置信息列表 @@ -1004,7 +1092,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param newConfigList 收集新产生的配置信息列表 * @param formConfig 表单配置信息 */ - private void handleMappingRelConfig( + private void oldHandleMappingRelConfig( List originalConfigList, CiEntitySyncConfigVo currentConfig, Map formAttributeDataMap, @@ -1061,6 +1149,66 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } + /** + * 处理关系的新的配置项数据 + * @param originalConfigList 原始配置信息列表 + * @param currentConfig 当前要处理的配置信息 + * @param formAttributeDataMap 表单数据信息 + * @param newConfigList 收集新产生的配置信息列表 + * @param formConfig 表单配置信息 + */ + private void handleMappingRelConfig( + List originalConfigList, + CiEntitySyncConfigVo currentConfig, + Map formAttributeDataMap, + List newConfigList, + String formConfig + ) { + List mappingList = currentConfig.getMappingList(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { + String mappingMode = mappingObj.getMappingMode(); + if (!Objects.equals(mappingMode, "new")) { + continue; + } + JSONArray valueList = mappingObj.getValueList(); + if (CollectionUtils.isEmpty(valueList)) { + continue; + } + JSONArray newValueList = new JSONArray(); + boolean isFrom = false; + List ciEntityUuidList = new ArrayList<>(); + for (int i = 0; i < valueList.size(); i++) { + JSONObject valueObj = valueList.getJSONObject(i); + if (MapUtils.isEmpty(valueObj)) { + continue; + } + String ciEntityUuid = valueObj.getString("ciEntityUuid"); + if (StringUtils.isBlank(ciEntityUuid)) { + continue; + } + ciEntityUuidList.add(ciEntityUuid); + String type = valueObj.getString("type"); + if (Objects.equals(type, "from")) { + JSONObject newValueObj = new JSONObject(); + newValueObj.putAll(valueObj); + newValueList.add(newValueObj); + isFrom = true; + break; + } + } + if (!isFrom) { + for (CiEntitySyncConfigVo originalConfig : originalConfigList) { + if (ciEntityUuidList.contains(originalConfig.getUuid())) { + replaceMappingRelFromCiEntityUuid(originalConfig, currentConfig.getUuid()); + JSONArray list = handleBatchDataSource(originalConfigList, originalConfig, formAttributeDataMap, newConfigList, formConfig); + newValueList.addAll(list); + } + } + } + mappingObj.setValueList(newValueList); + } + } + /** * 替换关系的配置信息中的来源配置项的ciEntityUuid * @param relConfigObj @@ -1283,6 +1431,62 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return newConfigObj; } + private CiEntitySyncConfigVo createCiEntitySyncConfigVo( + CiVo ciVo, + CiEntitySyncConfigVo currentConfig, + List newMappingList) { + CiEntitySyncConfigVo newConfigObj = new CiEntitySyncConfigVo(); + newConfigObj.setUuid(UuidUtil.randomUuid()); + if (Objects.equals(ciVo.getIsAbstract(), 1)) { + Optional targetCiIdMappingObj = newMappingList.stream().filter(e -> Objects.equals(e.getKey(), "targetCiId")).findFirst(); + if (!targetCiIdMappingObj.isPresent()) { + throw new AbstractCiTargetCiIdAttrNotFoundException(ciVo); + } + JSONArray valueList = targetCiIdMappingObj.get().getValueList(); + if (CollectionUtils.isEmpty(valueList)) { + throw new AbstractCiTargetCiIdAttrNotFoundException(ciVo); + } + String valueStr = valueList.getString(0); + CiVo targetCi = null; + List downwardCiList = ciMapper.getDownwardCiListByLR(ciVo.getLft(), ciVo.getRht()); + for (CiVo downwardCi : downwardCiList) { + if (Objects.equals(downwardCi.getId().toString(), valueStr)) { + targetCi = downwardCi; + } else if (Objects.equals(downwardCi.getName(), valueStr)) { + targetCi = downwardCi; + } else if (Objects.equals(downwardCi.getLabel(), valueStr)) { + targetCi = downwardCi; + } + } + if (targetCi == null) { + throw new DownwardCiNotFoundException(ciVo, valueStr); + } else if (Objects.equals(targetCi.getIsAbstract(), 1)) { + throw new CiIsAbstractedException(CiIsAbstractedException.Type.DATA, targetCi.getLabel() + "(" + targetCi.getName() + ")"); + } + newConfigObj.setCiId(targetCi.getId()); + newConfigObj.setCiName(targetCi.getName()); + newConfigObj.setCiLabel(targetCi.getLabel()); + newConfigObj.setIsStart(currentConfig.getIsStart()); + newConfigObj.setCiIcon(targetCi.getIcon()); + newConfigObj.setEditMode(currentConfig.getEditMode()); + } else { + newConfigObj.setCiId(currentConfig.getCiId()); + newConfigObj.setCiName(currentConfig.getCiName()); + newConfigObj.setCiLabel(currentConfig.getCiLabel()); + newConfigObj.setIsStart(currentConfig.getIsStart()); + newConfigObj.setCiIcon(currentConfig.getCiIcon()); + newConfigObj.setEditMode(currentConfig.getEditMode()); + } + List mappingList = currentConfig.getMappingList(); + for (CiEntitySyncMappingVo mapping : mappingList) { + if (Objects.equals(mapping.getMappingMode(), "new")) { + newMappingList.add(new CiEntitySyncMappingVo(mapping)); + } + } + newConfigObj.setMappingList(newMappingList); + return newConfigObj; + } + /** * 表单数据适配CMDB数据 * @param attributeUuid 表单属性uuid diff --git a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java index 22b3f92500a1e7dc8df02c4914b4aae5a92615bb..07a1f7b9643a4fac36fab7607fb1a98196745630 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java @@ -546,33 +546,33 @@ public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { } } - JSONArray children = configObj.getChildren(); - if (CollectionUtils.isEmpty(children)) { - continue; - } - for (int i = children.size() - 1; i >= 0; i--) { - JSONObject child = children.getJSONObject(i); - if (MapUtils.isEmpty(child)) { - logger.warn("ciEntityConfig.configList[" + name + "].children[i] is null"); - children.remove(i); - continue; - } - String ciEntityUuid = child.getString("ciEntityUuid"); - if (StringUtils.isBlank(ciEntityUuid)) { - logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid is null"); - throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid is null"); - } - String ciEntityName = child.getString("ciEntityName"); - if (StringUtils.isBlank(ciEntityName)) { - logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityName is null"); - throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityName is null"); - } - Long ciId = child.getLong("ciId"); - if (ciId == null) { - logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciId is null"); - throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciId is null"); - } - } +// JSONArray children = configObj.getChildren(); +// if (CollectionUtils.isEmpty(children)) { +// continue; +// } +// for (int i = children.size() - 1; i >= 0; i--) { +// JSONObject child = children.getJSONObject(i); +// if (MapUtils.isEmpty(child)) { +// logger.warn("ciEntityConfig.configList[" + name + "].children[i] is null"); +// children.remove(i); +// continue; +// } +// String ciEntityUuid = child.getString("ciEntityUuid"); +// if (StringUtils.isBlank(ciEntityUuid)) { +// logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid is null"); +// throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid is null"); +// } +// String ciEntityName = child.getString("ciEntityName"); +// if (StringUtils.isBlank(ciEntityName)) { +// logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityName is null"); +// throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityName is null"); +// } +// Long ciId = child.getLong("ciId"); +// if (ciId == null) { +// logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciId is null"); +// throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciId is null"); +// } +// } } Set usedUuidList = new HashSet<>(); @@ -582,18 +582,18 @@ public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { String name = ciName; String ciLabel = ciEntitySyncConfigVo.getCiLabel(); name += "(" + ciLabel + ")"; - JSONArray children = ciEntitySyncConfigVo.getChildren(); - if (CollectionUtils.isNotEmpty(children)) { - for (int i = 0; i < children.size(); i++) { - JSONObject child = children.getJSONObject(i); - String ciEntityUuid = child.getString("ciEntityUuid"); - if (!allUuidList.contains(ciEntityUuid)) { - logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid = '" + ciEntityUuid + "' is illegal"); - throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid = '" + ciEntityUuid + "' is illegal"); - } - usedUuidList.add(ciEntityUuid); - } - } +// JSONArray children = ciEntitySyncConfigVo.getChildren(); +// if (CollectionUtils.isNotEmpty(children)) { +// for (int i = 0; i < children.size(); i++) { +// JSONObject child = children.getJSONObject(i); +// String ciEntityUuid = child.getString("ciEntityUuid"); +// if (!allUuidList.contains(ciEntityUuid)) { +// logger.warn("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid = '" + ciEntityUuid + "' is illegal"); +// throw new CiEntityConfigIllegalException("ciEntityConfig.configList[" + name + "].children[i].ciEntityUuid = '" + ciEntityUuid + "' is illegal"); +// } +// usedUuidList.add(ciEntityUuid); +// } +// } List mappingList = ciEntitySyncConfigVo.getMappingList(); if (CollectionUtils.isNotEmpty(mappingList)) { for (CiEntitySyncMappingVo mapping : mappingList) {