From 8ceacfcf4d295a2734d3e88d84c43917c0decd29 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Fri, 27 Oct 2023 18:47:24 +0800 Subject: [PATCH 01/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 128 +++++++++++++++++- 1 file changed, 126 insertions(+), 2 deletions(-) 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 701560f4..8c3bbd2c 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -16,27 +16,37 @@ package neatlogic.module.cmdb.process.stephandler; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPath; +import neatlogic.framework.asynchronization.threadlocal.UserContext; +import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; import neatlogic.framework.process.constvalue.ProcessStepMode; +import neatlogic.framework.process.constvalue.automatic.FailPolicy; +import neatlogic.framework.process.dao.mapper.ProcessTaskStepDataMapper; +import neatlogic.framework.process.dto.ProcessTaskStepDataVo; import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.ProcessTaskStepWorkerVo; import neatlogic.framework.process.exception.processtask.ProcessTaskException; import neatlogic.framework.process.stephandler.core.ProcessStepHandlerBase; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Set; +import javax.annotation.Resource; +import java.util.*; @Service public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { private final Logger logger = LoggerFactory.getLogger(CmdbSyncProcessComponent.class); + @Resource + private ProcessTaskStepDataMapper processTaskStepDataMapper; + @Override public String getHandler() { return CmdbProcessStepHandlerType.CMDBSYNC.getHandler(); @@ -103,7 +113,89 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isEmpty(ciEntityConfig)) { return 0; } + // rerunStepToCreateNewJob为1时表示重新激活自动化步骤时创建新作业,rerunStepToCreateNewJob为0时表示重新激活自动化步骤时不创建新作业,也不重跑旧作业,即什么都不做 + Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); + if (!Objects.equals(rerunStepToSync, 1)) { +// Long autoexecJobId = autoexecJobMapper.getJobIdByInvokeIdLimitOne(currentProcessTaskStepVo.getId()); +// if (autoexecJobId != null) { +// return 1; +// } + } + JSONArray configList = ciEntityConfig.getJSONArray("configList"); + if (CollectionUtils.isEmpty(configList)) { + return 1; + } + JSONObject mainConfigObj = configList.getJSONObject(0); + Long ciId = mainConfigObj.getLong("ciId"); + if (ciId == null) { + return 0; + } + Map dependencyConfigMap = new HashMap<>(); + for (int i = 1; i < configList.size(); i++) { + JSONObject configObject = configList.getJSONObject(i); + String uuid = configObject.getString("uuid"); + if (StringUtils.isBlank(uuid)) { + continue; + } + dependencyConfigMap.put(uuid, configObject); + } +// JSONArray mappingList = configObj.getJSONArray("mappingList"); +// if (CollectionUtils.isEmpty(mappingList)) { +// return 0; +// } + List ciEntityTransactionList = new ArrayList<>(); + String createPolicy = mainConfigObj.getString("createPolicy"); + if (Objects.equals(createPolicy, "single")) { + ciEntityTransactionList = createSingleCiEntityVo(mainConfigObj, dependencyConfigMap); + if (CollectionUtils.isEmpty(ciEntityTransactionList)) { + return 0; + } +// ciEntityList.add(ciEntityVo); + } else if (Objects.equals(createPolicy, "batch")) { + ciEntityTransactionList = createBatchCiEntityVo(mainConfigObj, dependencyConfigMap); + if (CollectionUtils.isEmpty(ciEntityTransactionList)) { + return 0; + } +// ciEntityList.addAll(ciEntityVoList); + } else { + return 0; + } + boolean flag = false; + JSONArray errorMessageList = new JSONArray(); + for (CiEntityTransactionVo ciEntityTransactionVo : ciEntityTransactionList) { + try { +// autoexecJobActionService.validateCreateJob(jobVo); +// autoexecJobMapper.insertAutoexecJobProcessTaskStep(jobVo.getId(), currentProcessTaskStepVo.getId()); +// jobIdList.add(jobVo.getId()); + } catch (Exception e) { + // 增加提醒 + logger.error(e.getMessage(), e); + JSONObject errorMessageObj = new JSONObject(); +// errorMessageObj.put("jobId", ciEntityVo.getId()); +// errorMessageObj.put("jobName", ciEntityVo.getName()); + errorMessageObj.put("error", e.getMessage()); + errorMessageList.add(errorMessageObj); + flag = true; + } + } + // 如果有一个作业创建有异常,则根据失败策略执行操作 + if (flag) { + ProcessTaskStepDataVo processTaskStepDataVo = new ProcessTaskStepDataVo(); + processTaskStepDataVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + processTaskStepDataVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + processTaskStepDataVo.setType("ciEntitySyncError"); + JSONObject dataObj = new JSONObject(); + dataObj.put("errorList", errorMessageList); + processTaskStepDataVo.setData(dataObj.toJSONString()); + processTaskStepDataVo.setFcu(UserContext.get().getUserUuid()); + processTaskStepDataMapper.replaceProcessTaskStepData(processTaskStepDataVo); + String failPolicy = ciEntityConfig.getString("failPolicy"); + if (FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { + // TODO + } + } // TODO 根据配置数据修改配置项数据逻辑 + } catch (Exception e) { logger.error(e.getMessage(), e); throw new ProcessTaskException(e.getMessage()); @@ -111,6 +203,38 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return 1; } + private List createSingleCiEntityVo(JSONObject mainConfigObj, Map dependencyConfigMap) { + List ciEntityTransactionList = new ArrayList<>(); +// cmdb/ci/get +// cmdb/ciview/get +// cmdb/ci/listattr +// cmdb/ci/479609502048256/listrel +// cmdb/globalattr/search +// cmdb/ci/unique/get + CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); +// ciEntityTransactionVo.setCiEntityId(id); +// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); +// ciEntityTransactionVo.setCiEntityUuid(uuid); +// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); +// ciEntityTransactionVo.setCiId(ciId); +// ciEntityTransactionVo.setDescription(description); + + + JSONObject attrEntityData = new JSONObject(); + ciEntityTransactionVo.setAttrEntityData(attrEntityData); + JSONObject relEntityData = new JSONObject(); + ciEntityTransactionVo.setRelEntityData(relEntityData); + JSONObject globalAttrEntityData = new JSONObject(); + ciEntityTransactionVo.setGlobalAttrEntityData(globalAttrEntityData); + + ciEntityTransactionList.add(ciEntityTransactionVo); + return ciEntityTransactionList; + } + + private List createBatchCiEntityVo(JSONObject mainConfigObj, Map dependencyConfigMap) { + return null; + } + @Override protected int myAssign(ProcessTaskStepVo currentProcessTaskStepVo, Set workerSet) throws ProcessTaskException { return defaultAssign(currentProcessTaskStepVo, workerSet); -- Gitee From 5998044509e9d8b831a9e209766a574b5bee5550 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Thu, 2 Nov 2023 17:29:05 +0800 Subject: [PATCH 02/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 814 +++++++++++++++++- 1 file changed, 781 insertions(+), 33 deletions(-) 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 8c3bbd2c..18fec134 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -20,15 +20,31 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPath; import neatlogic.framework.asynchronization.threadlocal.UserContext; +import neatlogic.framework.cmdb.dto.ci.AttrVo; +import neatlogic.framework.cmdb.dto.ci.RelVo; +import neatlogic.framework.cmdb.dto.cientity.CiEntityVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrItemVo; +import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; +import neatlogic.framework.cmdb.enums.TransactionActionType; +import neatlogic.framework.cmdb.exception.cientity.NewCiEntityNotFoundException; +import neatlogic.framework.cmdb.utils.RelUtil; +import neatlogic.framework.common.constvalue.Expression; +import neatlogic.framework.form.constvalue.FormHandler; +import neatlogic.framework.form.dto.FormAttributeVo; +import neatlogic.framework.form.dto.FormVersionVo; import neatlogic.framework.process.constvalue.ProcessStepMode; import neatlogic.framework.process.constvalue.automatic.FailPolicy; import neatlogic.framework.process.dao.mapper.ProcessTaskStepDataMapper; -import neatlogic.framework.process.dto.ProcessTaskStepDataVo; -import neatlogic.framework.process.dto.ProcessTaskStepVo; -import neatlogic.framework.process.dto.ProcessTaskStepWorkerVo; +import neatlogic.framework.process.dto.*; import neatlogic.framework.process.exception.processtask.ProcessTaskException; import neatlogic.framework.process.stephandler.core.ProcessStepHandlerBase; +import neatlogic.framework.util.UuidUtil; +import neatlogic.module.cmdb.dao.mapper.ci.AttrMapper; +import neatlogic.module.cmdb.dao.mapper.ci.RelMapper; +import neatlogic.module.cmdb.dao.mapper.cientity.CiEntityMapper; +import neatlogic.module.cmdb.dao.mapper.globalattr.GlobalAttrMapper; +import neatlogic.module.cmdb.service.cientity.CiEntityService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -38,6 +54,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; @Service public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { @@ -47,6 +64,21 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { @Resource private ProcessTaskStepDataMapper processTaskStepDataMapper; + @Resource + private GlobalAttrMapper globalAttrMapper; + + @Resource + private AttrMapper attrMapper; + + @Resource + private RelMapper relMapper; + + @Resource + private CiEntityMapper ciEntityMapper; + + @Resource + private CiEntityService ciEntityService; + @Override public String getHandler() { return CmdbProcessStepHandlerType.CMDBSYNC.getHandler(); @@ -125,48 +157,128 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (CollectionUtils.isEmpty(configList)) { return 1; } - JSONObject mainConfigObj = configList.getJSONObject(0); - Long ciId = mainConfigObj.getLong("ciId"); - if (ciId == null) { - return 0; + List needReplaceUuidList = new ArrayList<>(); + for (int i = 0; i < configList.size(); i++) { + JSONObject configObject = configList.getJSONObject(i); + Integer isStart = configObject.getInteger("isStart"); + if (Objects.equals(isStart, 1)) { + } + String uuid = configObject.getString("uuid"); + Long id = configObject.getLong("id"); + if (id != null) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); + if (ciEntityVo == null) { + configObject.remove("id"); + needReplaceUuidList.add(uuid); + } + } else if (StringUtils.isNotBlank(uuid)) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); + if (ciEntityVo != null) { + if (Objects.equals(isStart, 1)) { + needReplaceUuidList.add(uuid); + } else { + configObject.put("id", ciEntityVo.getId()); + } + } + } + } + if (CollectionUtils.isNotEmpty(needReplaceUuidList)) { + System.out.println("needReplaceUuidList = " + JSONObject.toJSONString(needReplaceUuidList)); + String ciEntityConfigStr = ciEntityConfig.toJSONString(); + for (String oldUuid : needReplaceUuidList) { + String newUuid = UuidUtil.randomUuid(); + ciEntityConfigStr = ciEntityConfigStr.replace(oldUuid, newUuid); + } + ciEntityConfig = JSONObject.parseObject(ciEntityConfigStr); + configList = ciEntityConfig.getJSONArray("configList"); } + JSONObject mainConfigObj = null; + Map ciEntityTransactionMap = new HashMap<>(); Map dependencyConfigMap = new HashMap<>(); - for (int i = 1; i < configList.size(); i++) { + for (int i = 0; i < configList.size(); i++) { JSONObject configObject = configList.getJSONObject(i); String uuid = configObject.getString("uuid"); + System.out.println("uuid = " + uuid); if (StringUtils.isBlank(uuid)) { continue; } - dependencyConfigMap.put(uuid, configObject); + CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); + Long id = configObject.getLong("id"); + if (id != null) { + System.out.println("id = " + id); + ciEntityTransactionVo.setCiEntityId(id); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + } else { + CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); + if (uuidCiEntityVo != null) { + ciEntityTransactionVo.setCiEntityId(uuidCiEntityVo.getId()); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + configObject.put("id", uuidCiEntityVo.getId()); + } else { + ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); + } + } + Integer isStart = configObject.getInteger("isStart"); + if (Objects.equals(isStart, 1)) { + mainConfigObj = configObject; + } else { + dependencyConfigMap.put(uuid, configObject); + } + ciEntityTransactionVo.setCiEntityUuid(uuid); + ciEntityTransactionMap.put(uuid, ciEntityTransactionVo); + } + if (MapUtils.isEmpty(mainConfigObj)) { + return 0; + } + Long ciId = mainConfigObj.getLong("ciId"); + if (ciId == null) { + return 0; + } + Map processTaskFormAttributeDataMap = new HashMap<>(); + Map formAttributeMap = new HashMap<>(); + Long processTaskId = currentProcessTaskStepVo.getProcessTaskId(); + // 如果工单有表单信息,则查询出表单配置及数据 + ProcessTaskFormVo processTaskFormVo = processTaskMapper.getProcessTaskFormByProcessTaskId(processTaskId); + if (processTaskFormVo != null) { + String formContent = selectContentByHashMapper.getProcessTaskFromContentByHash(processTaskFormVo.getFormContentHash()); + FormVersionVo formVersionVo = new FormVersionVo(); + formVersionVo.setFormUuid(processTaskFormVo.getFormUuid()); + formVersionVo.setFormName(processTaskFormVo.getFormName()); + formVersionVo.setFormConfig(JSONObject.parseObject(formContent)); + List formAttributeList = formVersionVo.getFormAttributeList(); + if (CollectionUtils.isNotEmpty(formAttributeList)) { + formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(e -> e.getUuid(), e -> e)); + } + List processTaskFormAttributeDataList = processTaskMapper.getProcessTaskStepFormAttributeDataByProcessTaskId(processTaskId); + if (CollectionUtils.isNotEmpty(processTaskFormAttributeDataList)) { + processTaskFormAttributeDataMap = processTaskFormAttributeDataList.stream().collect(Collectors.toMap(e -> e.getAttributeUuid(), e -> e)); + } } -// JSONArray mappingList = configObj.getJSONArray("mappingList"); -// if (CollectionUtils.isEmpty(mappingList)) { -// return 0; -// } List ciEntityTransactionList = new ArrayList<>(); String createPolicy = mainConfigObj.getString("createPolicy"); if (Objects.equals(createPolicy, "single")) { - ciEntityTransactionList = createSingleCiEntityVo(mainConfigObj, dependencyConfigMap); + ciEntityTransactionList = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); if (CollectionUtils.isEmpty(ciEntityTransactionList)) { return 0; } -// ciEntityList.add(ciEntityVo); } else if (Objects.equals(createPolicy, "batch")) { - ciEntityTransactionList = createBatchCiEntityVo(mainConfigObj, dependencyConfigMap); + ciEntityTransactionList = createBatchCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); if (CollectionUtils.isEmpty(ciEntityTransactionList)) { return 0; } -// ciEntityList.addAll(ciEntityVoList); } else { return 0; } boolean flag = false; JSONArray errorMessageList = new JSONArray(); - for (CiEntityTransactionVo ciEntityTransactionVo : ciEntityTransactionList) { + if (CollectionUtils.isNotEmpty(ciEntityTransactionList)) { + for (CiEntityTransactionVo t : ciEntityTransactionList) { + t.setAllowCommit(true); + } + System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); try { -// autoexecJobActionService.validateCreateJob(jobVo); -// autoexecJobMapper.insertAutoexecJobProcessTaskStep(jobVo.getId(), currentProcessTaskStepVo.getId()); -// jobIdList.add(jobVo.getId()); + Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); + System.out.println("transactionGroupId = " + transactionGroupId); } catch (Exception e) { // 增加提醒 logger.error(e.getMessage(), e); @@ -194,8 +306,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // TODO } } - // TODO 根据配置数据修改配置项数据逻辑 - } catch (Exception e) { logger.error(e.getMessage(), e); throw new ProcessTaskException(e.getMessage()); @@ -203,7 +313,12 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return 1; } - private List createSingleCiEntityVo(JSONObject mainConfigObj, Map dependencyConfigMap) { + private List createSingleCiEntityVo( + Map ciEntityTransactionMap, + JSONObject mainConfigObj, + Map dependencyConfigMap, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { List ciEntityTransactionList = new ArrayList<>(); // cmdb/ci/get // cmdb/ciview/get @@ -211,27 +326,660 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // cmdb/ci/479609502048256/listrel // cmdb/globalattr/search // cmdb/ci/unique/get - CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); -// ciEntityTransactionVo.setCiEntityId(id); -// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); -// ciEntityTransactionVo.setCiEntityUuid(uuid); -// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); -// ciEntityTransactionVo.setCiId(ciId); -// ciEntityTransactionVo.setDescription(description); - + Long ciId = mainConfigObj.getLong("ciId"); + Map mappingMap = new HashMap<>(); + JSONArray mappingList = mainConfigObj.getJSONArray("mappingList"); + for (int i = 0; i < mappingList.size(); i++) { + JSONObject mappingObj = mappingList.getJSONObject(i); + if (MapUtils.isEmpty(mappingObj)) { + continue; + } + String key = mappingObj.getString("key"); + if (StringUtils.isBlank(key)) { + continue; + } + mappingMap.put(key, mappingObj); + } + Long id = mainConfigObj.getLong("id"); + String uuid = mainConfigObj.getString("uuid"); + CiEntityTransactionVo ciEntityTransactionVo = ciEntityTransactionMap.get(uuid); + if (id != null) { + ciEntityTransactionVo.setCiEntityId(id); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + } else { + ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); + } + ciEntityTransactionVo.setCiId(ciId); + /** 变更说明 **/ + JSONObject descriptionMappingObj = mappingMap.get("description"); + if (MapUtils.isNotEmpty(descriptionMappingObj)) { + String description = parseDescription(descriptionMappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + if (StringUtils.isBlank(description)) { + System.out.println("description is null"); + } + ciEntityTransactionVo.setDescription(description); + } else { + System.out.println("description is null"); + } + /** 属性 **/ JSONObject attrEntityData = new JSONObject(); + List attrList = attrMapper.getAttrByCiId(ciId); + for (AttrVo attrVo : attrList) { + String key = "attr_" + attrVo.getId(); + JSONObject mappingObj = mappingMap.get(key); + if (MapUtils.isEmpty(mappingObj)) { + System.out.println(key + " is null"); + continue; + } + JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + attrEntityData.put(key, attrEntity); + } ciEntityTransactionVo.setAttrEntityData(attrEntityData); + /** 关系 **/ JSONObject relEntityData = new JSONObject(); + List relList = RelUtil.ClearRepeatRel(relMapper.getRelByCiId(ciId)); + for (RelVo relVo : relList) { + String key = "rel" + relVo.getDirection() + "_" + relVo.getId(); + JSONObject mappingObj = mappingMap.get(key); + if (MapUtils.isEmpty(mappingObj)) { + System.out.println(key + " is null"); + continue; + } + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "new")) { + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + for (int i = 0; i < valueArray.size(); i++) { + JSONObject valueObj = valueArray.getJSONObject(i); + if (MapUtils.isEmpty(valueObj)) { + continue; + } + String ciEntityUuid = valueObj.getString("ciEntityUuid"); + if (StringUtils.isBlank(ciEntityUuid)) { + continue; + } + Long ciEntityId = valueObj.getLong("ciEntityId"); + if (ciEntityId == null) { + CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(ciEntityUuid); + if (tmpVo != null) { + System.out.println("tmpVo.getCiEntityId() = " + tmpVo.getCiEntityId()); + valueObj.put("ciEntityId", tmpVo.getCiEntityId()); + } else { + CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(ciEntityUuid); + if (uuidCiEntityVo == null) { + throw new NewCiEntityNotFoundException(valueObj.getString("ciEntityUuid")); + } else { + valueObj.put("ciEntityId", uuidCiEntityVo.getId()); + } + } + } + String type = valueObj.getString("type"); + if (!Objects.equals(type, "new")) { + continue; + } + JSONObject dependencyConfig = dependencyConfigMap.get(ciEntityUuid); + if (MapUtils.isNotEmpty(dependencyConfig)) { + String createPolicy = dependencyConfig.getString("createPolicy"); + if (Objects.equals(createPolicy, "single")) { + List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + ciEntityTransactionList.addAll(list); + } else if (Objects.equals(createPolicy, "batch")) { + List list = createBatchCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + ciEntityTransactionList.addAll(list); + } + } + } + JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + relEntityData.put(key, relEntity); + } + } + } ciEntityTransactionVo.setRelEntityData(relEntityData); + /** 全局属性 **/ JSONObject globalAttrEntityData = new JSONObject(); + GlobalAttrVo searchVo = new GlobalAttrVo(); + searchVo.setIsActive(1); + List globalAttrList = globalAttrMapper.searchGlobalAttr(searchVo); + for (GlobalAttrVo globalAttrVo : globalAttrList) { + String key = "global_" + globalAttrVo.getId(); + JSONObject mappingObj = mappingMap.get(key); + if (MapUtils.isEmpty(mappingObj)) { + System.out.println(key + " is null"); + continue; + } + JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + globalAttrEntityData.put(key, globalAttrEntity); + } ciEntityTransactionVo.setGlobalAttrEntityData(globalAttrEntityData); ciEntityTransactionList.add(ciEntityTransactionVo); return ciEntityTransactionList; } - private List createBatchCiEntityVo(JSONObject mainConfigObj, Map dependencyConfigMap) { + private JSONArray getTbodyList(ProcessTaskFormAttributeDataVo formAttributeDataVo, JSONArray filterList) { + JSONArray tbodyList = new JSONArray(); + if (formAttributeDataVo == null) { + return tbodyList; + } + if (!Objects.equals(formAttributeDataVo.getType(), neatlogic.framework.form.constvalue.FormHandler.FORMTABLEINPUTER.getHandler()) + && !Objects.equals(formAttributeDataVo.getType(), neatlogic.framework.form.constvalue.FormHandler.FORMTABLESELECTOR.getHandler())) { + return tbodyList; + } + if (formAttributeDataVo.getDataObj() == null) { + return tbodyList; + } + JSONArray dataList = (JSONArray) formAttributeDataVo.getDataObj(); + // 数据过滤 + if (CollectionUtils.isNotEmpty(filterList)) { + for (int i = 0; i < dataList.size(); i++) { + JSONObject data = dataList.getJSONObject(i); + if (MapUtils.isEmpty(data)) { + continue; + } + boolean flag = true; + for (int j = 0; j < filterList.size(); j++) { + JSONObject filterObj = filterList.getJSONObject(j); + if (MapUtils.isEmpty(filterObj)) { + continue; + } + String column = filterObj.getString("column"); + if (StringUtils.isBlank(column)) { + continue; + } + String expression = filterObj.getString("expression"); + if (StringUtils.isBlank(expression)) { + continue; + } + String value = filterObj.getString("value"); + if (StringUtils.isBlank(value)) { + continue; + } + if (Objects.equals(expression, Expression.EQUAL.getExpression())) { + if (!Objects.equals(value, data.getString(column))) { + flag = false; + break; + } + } else if (Objects.equals(expression, Expression.UNEQUAL.getExpression())) { + if (Objects.equals(value, data.getString(column))) { + flag = false; + break; + } + } else if (Objects.equals(expression, Expression.LIKE.getExpression())) { + String columnValue = data.getString(column); + if (StringUtils.isBlank(columnValue)) { + flag = false; + break; + } + if (!columnValue.contains(value)) { + flag = false; + break; + } + } else if (Objects.equals(expression, Expression.NOTLIKE.getExpression())) { + String columnValue = data.getString(column); + if (StringUtils.isBlank(columnValue)) { + continue; + } + if (columnValue.contains(value)) { + flag = false; + break; + } + } + } + if (flag) { + tbodyList.add(data); + } + } + } else { + tbodyList = dataList; + } + return tbodyList; + } + + private List parseFormTableComponentMappingValue(FormAttributeVo formAttributeVo, JSONArray tbodyList, String column) { + List resultList = new ArrayList<>(); + if (CollectionUtils.isEmpty(tbodyList)) { + return resultList; + } + for (int i = 0; i < tbodyList.size(); i++) { + JSONObject tbodyObj = tbodyList.getJSONObject(i); + if (MapUtils.isEmpty(tbodyObj)) { + continue; + } + String columnValue = tbodyObj.getString(column); + if (StringUtils.isBlank(columnValue)) { + continue; + } + resultList.add(columnValue); + } + return resultList; + } + + private String mappingModeFormTableComponent( + JSONObject mappingObj, + JSONObject tbodyObj) { + String column = mappingObj.getString("column"); + return tbodyObj.getString(column); + } + + private List mappingModeFormTableComponent( + JSONObject mappingObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isEmpty(valueList)) { + return null; + } + String column = mappingObj.getString("column"); + FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); + ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); + JSONArray filterList = mappingObj.getJSONArray("filterList"); + JSONArray tbodyList = getTbodyList(attributeDataVo, filterList); + List list = parseFormTableComponentMappingValue(formAttributeVo, tbodyList, column); + return list; + } + + private Object mappingModeFormCommonComponent( + JSONObject mappingObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isEmpty(valueList)) { + return null; + } + FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); + if (formAttributeVo == null) { + return null; + } + ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); + if (attributeDataVo == null) { + return null; + } + Object dataObj = attributeDataVo.getDataObj(); + if (dataObj == null) { + return null; + } + if (Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMUPLOAD.getHandler())) { + List idList = new ArrayList<>(); + if (dataObj instanceof JSONArray) { + JSONArray dataArray = (JSONArray) dataObj; + for (int i = 0; i < dataArray.size(); i++) { + JSONObject data = dataArray.getJSONObject(i); + Long id = data.getLong("id"); + if (id != null) { + idList.add(id); + } + } + } + return idList; + } + return dataObj; + } + + private String parseDescription( + JSONObject mappingObj, + JSONObject tbodyObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "formTableComponent")) { + // 映射模式为表单表格组件 + List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (CollectionUtils.isNotEmpty(list)) { + return String.join(",", list); + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + // 映射模式为表单普通组件 + Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (value != null) { + return value.toString(); + } + } else if (Objects.equals(mappingMode, "constant")) { + // 映射模式为常量 + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + return valueList.getString(0); + } + } + return null; + } + + private JSONObject parseGlobalAttr( + GlobalAttrVo globalAttrVo, + JSONObject mappingObj, + JSONObject tbodyObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + List itemList = globalAttrVo.getItemList(); + Map id2ItemMap = itemList.stream().collect(Collectors.toMap(e -> e.getId(), e -> e)); + Map name2ItemMap = itemList.stream().collect(Collectors.toMap(e -> e.getValue(), e -> e)); + JSONArray valueList = new JSONArray(); + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "formTableComponent")) { + // 映射模式为表单表格组件 + if (tbodyObj != null) { + String column = mappingObj.getString("column"); + String value = tbodyObj.getString(column); + GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + } + } else { + List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + for (String value : list) { + GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { + break; + } + } + } + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + // 映射模式为表单普通组件 + Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (value != null) { + if (value instanceof JSONObject) { + + } else if (value instanceof JSONArray) { + JSONArray valueArray = (JSONArray) value; + for (int i = 0; i < valueArray.size(); i++) { + String valueStr = valueArray.getString(0); + GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(valueStr); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { + break; + } + } + } + } else if (value instanceof Long) { + GlobalAttrItemVo globalAttrItemVo = id2ItemMap.get((Long) value); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + } + } else if (value instanceof String) { + GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get((String) value); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + } + } else { + GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value.toString()); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + } + } + } + } else if (Objects.equals(mappingMode, "constant")) { + // 映射模式为常量 + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { +// valueList = valueArray; + for (int i = 0; i < valueArray.size(); i++) { + Object value = valueArray.get(i); + if (value instanceof JSONObject) { + valueList.add(value); + } else if (value instanceof Long) { + GlobalAttrItemVo globalAttrItemVo = id2ItemMap.get((Long) value); + if (globalAttrItemVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("attrId", globalAttrVo.getId()); + valueObj.put("id", globalAttrItemVo.getId()); + valueObj.put("sort", globalAttrItemVo.getSort()); + valueObj.put("value", globalAttrItemVo.getValue()); + valueList.add(valueObj); + if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { + break; + } + } + } + } + } + } + JSONObject resultObj = new JSONObject(); + resultObj.put("valueList", valueList); + return resultObj; + } + + private JSONObject parseAttr( + Map ciEntityTransactionMap, + AttrVo attrVo, + JSONObject mappingObj, + JSONObject tbodyObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + JSONArray valueList = new JSONArray(); + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "formTableComponent")) { + // 映射模式为表单表格组件 + if (tbodyObj != null) { + String column = mappingObj.getString("column"); + String value = tbodyObj.getString(column); + if (StringUtils.isNotBlank(value)) { + valueList.add(value); + } + } else { + List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (CollectionUtils.isNotEmpty(list)) { + valueList.addAll(list); + } + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + // 映射模式为表单普通组件 + Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (value != null) { + if (value instanceof JSONObject) { + + } else if (value instanceof JSONArray) { + valueList = (JSONArray) value; + } else { + valueList.add(value); + } + } + } else if (Objects.equals(mappingMode, "constant")) { + // 映射模式为常量 + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + valueList = valueArray; + for (int i = valueList.size() - 1; i >= 0; i--) { + if (valueList.get(i) instanceof JSONObject) { + JSONObject valueObj = valueList.getJSONObject(i); + String attrCiEntityUuid = valueObj.getString("uuid"); + Long attrCiEntityId = valueObj.getLong("id"); + if (attrCiEntityId == null && StringUtils.isNotBlank(attrCiEntityUuid)) { + CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(attrCiEntityUuid); + if (tmpVo != null) { + //替换掉原来的ciEntityUuid为新的ciEntityId + valueList.set(i, tmpVo.getCiEntityId()); + } else { + //使用uuid寻找配置项 + CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(attrCiEntityUuid); + if (uuidCiEntityVo == null) { + throw new NewCiEntityNotFoundException(attrCiEntityUuid); + } else { + valueList.set(i, uuidCiEntityVo.getId()); + } + } + } else if (attrCiEntityId != null) { + valueList.set(i, attrCiEntityId); + } else { + valueList.remove(i); + } + } + } + } + } + JSONObject resultObj = new JSONObject(); + resultObj.put("type", attrVo.getType()); + resultObj.put("config", attrVo.getConfig()); + resultObj.put("valueList", valueList); + return resultObj; + } + + private JSONObject parseRel( + RelVo relVo, + JSONObject mappingObj, + JSONObject tbodyObj, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + Long ciId = null; + if (Objects.equals(relVo.getDirection(), "from")) { + ciId = relVo.getToCiId(); + } else if (Objects.equals(relVo.getDirection(), "to")) { + ciId = relVo.getFromCiId(); + } + JSONArray valueList = new JSONArray(); + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "formTableComponent")) { + // 映射模式为表单表格组件 + if (tbodyObj != null) { + String column = mappingObj.getString("column"); + String value = tbodyObj.getString(column); + Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value); + if (ciEntityId != null) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); + if (ciEntityVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("ciId", ciEntityVo.getTypeId()); + valueObj.put("ciEntityId", ciEntityVo.getId()); + valueObj.put("ciEntityName", ciEntityVo.getName()); + valueList.add(valueObj); + } + } + } else { + List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + for (String value : list) { + Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value); + if (ciEntityId != null) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); + if (ciEntityVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("ciId", ciEntityVo.getTypeId()); + valueObj.put("ciEntityId", ciEntityVo.getId()); + valueObj.put("ciEntityName", ciEntityVo.getName()); + valueList.add(valueObj); + } + } + } + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + // 映射模式为表单普通组件 + Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); + if (value != null) { + if (value instanceof JSONObject) { + + } else if (value instanceof JSONArray) { + JSONArray valueArray = (JSONArray) value; + for (int i = 0; i < valueArray.size(); i++) { + Long ciEntityId = valueArray.getLong(i); + if (ciEntityId == null) { + continue; + } + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); + if (ciEntityVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("ciId", ciEntityVo.getTypeId()); + valueObj.put("ciEntityId", ciEntityVo.getId()); + valueObj.put("ciEntityName", ciEntityVo.getName()); + valueList.add(valueObj); + } + } + } else if (value instanceof Long) { + Long ciEntityId = (Long) value; + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); + if (ciEntityVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("ciId", ciEntityVo.getTypeId()); + valueObj.put("ciEntityId", ciEntityVo.getId()); + valueObj.put("ciEntityName", ciEntityVo.getName()); + valueList.add(valueObj); + } + } else { + Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value.toString()); + if (ciEntityId != null) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); + if (ciEntityVo != null) { + JSONObject valueObj = new JSONObject(); + valueObj.put("ciId", ciEntityVo.getTypeId()); + valueObj.put("ciEntityId", ciEntityVo.getId()); + valueObj.put("ciEntityName", ciEntityVo.getName()); + valueList.add(valueObj); + } + } + } + } + } else if (Objects.equals(mappingMode, "constant")) { + // 映射模式为常量 + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + valueList = valueArray; + } + } else if (Objects.equals(mappingMode, "new")) { + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + valueList = valueArray; +// for (int i = 0; i < valueArray.size(); i++) { +// JSONObject valueObj = valueArray.getJSONObject(i); +// if (MapUtils.isEmpty(valueObj)) { +// continue; +// } +// String ciEntityUuid = valueObj.getString("ciEntityUuid"); +// if (StringUtils.isBlank(ciEntityUuid)) { +// continue; +// } +// +// } + } + } + JSONObject resultObj = new JSONObject(); +// resultObj.put("type", attrVo.getType()); +// resultObj.put("config", attrVo.getConfig()); + resultObj.put("valueList", valueList); + return resultObj; + } + + private List createBatchCiEntityVo( + Map ciEntityTransactionMap, + JSONObject mainConfigObj, + Map dependencyConfigMap, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + // 批量遍历表格 + JSONObject batchDataSource = mainConfigObj.getJSONObject("batchDataSource"); + if (MapUtils.isEmpty(batchDataSource)) { + return null; + } return null; } -- Gitee From 7915d6b8129c451b41a62ce594528c0cc73607d6 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Fri, 3 Nov 2023 17:59:50 +0800 Subject: [PATCH 03/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 362 +++++++++++++----- 1 file changed, 275 insertions(+), 87 deletions(-) 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 18fec134..c99f6026 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -33,12 +33,19 @@ import neatlogic.framework.common.constvalue.Expression; import neatlogic.framework.form.constvalue.FormHandler; import neatlogic.framework.form.dto.FormAttributeVo; import neatlogic.framework.form.dto.FormVersionVo; +import neatlogic.framework.process.constvalue.ProcessFlowDirection; import neatlogic.framework.process.constvalue.ProcessStepMode; +import neatlogic.framework.process.constvalue.ProcessTaskOperationType; import neatlogic.framework.process.constvalue.automatic.FailPolicy; import neatlogic.framework.process.dao.mapper.ProcessTaskStepDataMapper; import neatlogic.framework.process.dto.*; import neatlogic.framework.process.exception.processtask.ProcessTaskException; +import neatlogic.framework.process.exception.processtask.ProcessTaskNoPermissionException; +import neatlogic.framework.process.stephandler.core.IProcessStepHandler; import neatlogic.framework.process.stephandler.core.ProcessStepHandlerBase; +import neatlogic.framework.process.stephandler.core.ProcessStepHandlerFactory; +import neatlogic.framework.process.stephandler.core.ProcessStepThread; +import neatlogic.framework.transaction.core.EscapeTransactionJob; import neatlogic.framework.util.UuidUtil; import neatlogic.module.cmdb.dao.mapper.ci.AttrMapper; import neatlogic.module.cmdb.dao.mapper.ci.RelMapper; @@ -103,7 +110,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { @Override public ProcessStepMode getMode() { - return ProcessStepMode.AT; + return ProcessStepMode.MT; } @Override @@ -153,46 +160,37 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // return 1; // } } - JSONArray configList = ciEntityConfig.getJSONArray("configList"); - if (CollectionUtils.isEmpty(configList)) { - return 1; - } - List needReplaceUuidList = new ArrayList<>(); - for (int i = 0; i < configList.size(); i++) { - JSONObject configObject = configList.getJSONObject(i); - Integer isStart = configObject.getInteger("isStart"); - if (Objects.equals(isStart, 1)) { + + Map processTaskFormAttributeDataMap = new HashMap<>(); + Map formAttributeMap = new HashMap<>(); + Long processTaskId = currentProcessTaskStepVo.getProcessTaskId(); + // 如果工单有表单信息,则查询出表单配置及数据 + ProcessTaskFormVo processTaskFormVo = processTaskMapper.getProcessTaskFormByProcessTaskId(processTaskId); + if (processTaskFormVo != null) { + String formContent = selectContentByHashMapper.getProcessTaskFromContentByHash(processTaskFormVo.getFormContentHash()); + FormVersionVo formVersionVo = new FormVersionVo(); + formVersionVo.setFormUuid(processTaskFormVo.getFormUuid()); + formVersionVo.setFormName(processTaskFormVo.getFormName()); + formVersionVo.setFormConfig(JSONObject.parseObject(formContent)); + List formAttributeList = formVersionVo.getFormAttributeList(); + if (CollectionUtils.isNotEmpty(formAttributeList)) { + formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(e -> e.getUuid(), e -> e)); } - String uuid = configObject.getString("uuid"); - Long id = configObject.getLong("id"); - if (id != null) { - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); - if (ciEntityVo == null) { - configObject.remove("id"); - needReplaceUuidList.add(uuid); - } - } else if (StringUtils.isNotBlank(uuid)) { - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); - if (ciEntityVo != null) { - if (Objects.equals(isStart, 1)) { - needReplaceUuidList.add(uuid); - } else { - configObject.put("id", ciEntityVo.getId()); - } - } + List processTaskFormAttributeDataList = processTaskMapper.getProcessTaskStepFormAttributeDataByProcessTaskId(processTaskId); + if (CollectionUtils.isNotEmpty(processTaskFormAttributeDataList)) { + processTaskFormAttributeDataMap = processTaskFormAttributeDataList.stream().collect(Collectors.toMap(e -> e.getAttributeUuid(), e -> e)); } } - if (CollectionUtils.isNotEmpty(needReplaceUuidList)) { - System.out.println("needReplaceUuidList = " + JSONObject.toJSONString(needReplaceUuidList)); - String ciEntityConfigStr = ciEntityConfig.toJSONString(); - for (String oldUuid : needReplaceUuidList) { - String newUuid = UuidUtil.randomUuid(); - ciEntityConfigStr = ciEntityConfigStr.replace(oldUuid, newUuid); - } - ciEntityConfig = JSONObject.parseObject(ciEntityConfigStr); - configList = ciEntityConfig.getJSONArray("configList"); + System.out.println("ciEntityConfig1 = " + ciEntityConfig); + ciEntityConfig = rebuildCiEntityConfig(ciEntityConfig, processTaskFormAttributeDataMap); + System.out.println("ciEntityConfig2 = " + ciEntityConfig); + JSONArray configList = ciEntityConfig.getJSONArray("configList"); + if (CollectionUtils.isEmpty(configList)) { + return 1; } - JSONObject mainConfigObj = null; + System.out.println("configList.size() = " + configList.size()); + + List startConfigList = new ArrayList<>(); Map ciEntityTransactionMap = new HashMap<>(); Map dependencyConfigMap = new HashMap<>(); for (int i = 0; i < configList.size(); i++) { @@ -220,55 +218,43 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } Integer isStart = configObject.getInteger("isStart"); if (Objects.equals(isStart, 1)) { - mainConfigObj = configObject; + startConfigList.add(configObject); } else { dependencyConfigMap.put(uuid, configObject); } ciEntityTransactionVo.setCiEntityUuid(uuid); ciEntityTransactionMap.put(uuid, ciEntityTransactionVo); } - if (MapUtils.isEmpty(mainConfigObj)) { + if (CollectionUtils.isEmpty(startConfigList)) { return 0; } - Long ciId = mainConfigObj.getLong("ciId"); - if (ciId == null) { - return 0; - } - Map processTaskFormAttributeDataMap = new HashMap<>(); - Map formAttributeMap = new HashMap<>(); - Long processTaskId = currentProcessTaskStepVo.getProcessTaskId(); - // 如果工单有表单信息,则查询出表单配置及数据 - ProcessTaskFormVo processTaskFormVo = processTaskMapper.getProcessTaskFormByProcessTaskId(processTaskId); - if (processTaskFormVo != null) { - String formContent = selectContentByHashMapper.getProcessTaskFromContentByHash(processTaskFormVo.getFormContentHash()); - FormVersionVo formVersionVo = new FormVersionVo(); - formVersionVo.setFormUuid(processTaskFormVo.getFormUuid()); - formVersionVo.setFormName(processTaskFormVo.getFormName()); - formVersionVo.setFormConfig(JSONObject.parseObject(formContent)); - List formAttributeList = formVersionVo.getFormAttributeList(); - if (CollectionUtils.isNotEmpty(formAttributeList)) { - formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(e -> e.getUuid(), e -> e)); - } - List processTaskFormAttributeDataList = processTaskMapper.getProcessTaskStepFormAttributeDataByProcessTaskId(processTaskId); - if (CollectionUtils.isNotEmpty(processTaskFormAttributeDataList)) { - processTaskFormAttributeDataMap = processTaskFormAttributeDataList.stream().collect(Collectors.toMap(e -> e.getAttributeUuid(), e -> e)); - } - } List ciEntityTransactionList = new ArrayList<>(); - String createPolicy = mainConfigObj.getString("createPolicy"); - if (Objects.equals(createPolicy, "single")) { - ciEntityTransactionList = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - if (CollectionUtils.isEmpty(ciEntityTransactionList)) { + for (JSONObject mainConfigObj : startConfigList) { + Long ciId = mainConfigObj.getLong("ciId"); + if (ciId == null) { return 0; } - } else if (Objects.equals(createPolicy, "batch")) { - ciEntityTransactionList = createBatchCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - if (CollectionUtils.isEmpty(ciEntityTransactionList)) { - return 0; + List list = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + for (CiEntityTransactionVo ciEntityTransactionVo : list) { + if (!ciEntityTransactionList.contains(ciEntityTransactionVo)) { + ciEntityTransactionList.add(ciEntityTransactionVo); + } } - } else { - return 0; } +// String createPolicy = mainConfigObj.getString("createPolicy"); +// if (Objects.equals(createPolicy, "single")) { +// ciEntityTransactionList = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); +// if (CollectionUtils.isEmpty(ciEntityTransactionList)) { +// return 0; +// } +// } else if (Objects.equals(createPolicy, "batch")) { +// ciEntityTransactionList = createBatchCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); +// if (CollectionUtils.isEmpty(ciEntityTransactionList)) { +// return 0; +// } +// } else { +// return 0; +// } boolean flag = false; JSONArray errorMessageList = new JSONArray(); if (CollectionUtils.isNotEmpty(ciEntityTransactionList)) { @@ -276,20 +262,36 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { t.setAllowCommit(true); } System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); - try { + System.out.println("ciEntityTransactionList.size() = " + ciEntityTransactionList.size()); + EscapeTransactionJob.State s = new EscapeTransactionJob(() -> { Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); System.out.println("transactionGroupId = " + transactionGroupId); - } catch (Exception e) { + }).execute(); + if (!s.isSucceed()) { // 增加提醒 - logger.error(e.getMessage(), e); + logger.error(s.getError(), s.getException()); JSONObject errorMessageObj = new JSONObject(); // errorMessageObj.put("jobId", ciEntityVo.getId()); // errorMessageObj.put("jobName", ciEntityVo.getName()); - errorMessageObj.put("error", e.getMessage()); + errorMessageObj.put("error", s.getError()); errorMessageList.add(errorMessageObj); flag = true; } +// try { +// Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); +// System.out.println("transactionGroupId = " + transactionGroupId); +// } catch (Exception e) { +// // 增加提醒 +// logger.error(e.getMessage(), e); +// JSONObject errorMessageObj = new JSONObject(); +//// errorMessageObj.put("jobId", ciEntityVo.getId()); +//// errorMessageObj.put("jobName", ciEntityVo.getName()); +// errorMessageObj.put("error", e.getMessage()); +// errorMessageList.add(errorMessageObj); +// flag = true; +// } } + boolean isAutoComplete = true; // 如果有一个作业创建有异常,则根据失败策略执行操作 if (flag) { ProcessTaskStepDataVo processTaskStepDataVo = new ProcessTaskStepDataVo(); @@ -302,17 +304,190 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskStepDataVo.setFcu(UserContext.get().getUserUuid()); processTaskStepDataMapper.replaceProcessTaskStepData(processTaskStepDataVo); String failPolicy = ciEntityConfig.getString("failPolicy"); - if (FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { - // TODO + if (!FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { + isAutoComplete = false; + } + } + if (isAutoComplete) { + List toProcessTaskStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(currentProcessTaskStepVo.getId(), ProcessFlowDirection.FORWARD.getValue()); + if (toProcessTaskStepIdList.size() == 1) { + Long nextStepId = toProcessTaskStepIdList.get(0); + IProcessStepHandler handler = ProcessStepHandlerFactory.getHandler(CmdbProcessStepHandlerType.CMDBSYNC.getHandler()); + try { + ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(currentProcessTaskStepVo.getId()); + JSONObject paramObj = processTaskStepVo.getParamObj(); + paramObj.put("nextStepId", nextStepId); + paramObj.put("action", ProcessTaskOperationType.STEP_COMPLETE.getValue()); + /* 自动处理 **/ + doNext(ProcessTaskOperationType.STEP_COMPLETE, new ProcessStepThread(processTaskStepVo) { + @Override + public void myExecute() { + handler.autoComplete(processTaskStepVo); + } + }); + } catch (ProcessTaskNoPermissionException e) { + logger.error(e.getMessage(), e); + } } } } catch (Exception e) { + System.out.println("异常2..."); logger.error(e.getMessage(), e); throw new ProcessTaskException(e.getMessage()); } return 1; } + private JSONObject rebuildCiEntityConfig(JSONObject ciEntityConfig, Map processTaskFormAttributeDataMap) { + JSONArray configList = ciEntityConfig.getJSONArray("configList"); + if (CollectionUtils.isEmpty(configList)) { + return ciEntityConfig; + } + Map> oldUuid2NewUuidListMap = new HashMap<>(); + JSONArray configArray = new JSONArray(); + for (int i = 0; i < configList.size(); i++) { + JSONObject configObject = configList.getJSONObject(i); + String oldUuid = configObject.getString("uuid"); + // 批量遍历表格 + JSONObject batchDataSource = configObject.getJSONObject("batchDataSource"); + if (MapUtils.isEmpty(batchDataSource)) { + configArray.add(configObject); + continue; + } + String attributeUuid = batchDataSource.getString("attributeUuid"); + ProcessTaskFormAttributeDataVo formAttributeDataVo = processTaskFormAttributeDataMap.get(attributeUuid); + JSONArray filterList = batchDataSource.getJSONArray("filterList"); + JSONArray tbodyList = getTbodyList(formAttributeDataVo, filterList); + if (CollectionUtils.isEmpty(tbodyList)) { + continue; + } + // 遍历表格数据 + for (int j = 0; j < tbodyList.size(); j++) { + JSONObject newConfigObj = new JSONObject(); + JSONObject tbodyObj = tbodyList.getJSONObject(j); + if (MapUtils.isEmpty(tbodyObj)) { + continue; + } + System.out.println("tbodyObj = " + tbodyObj); + boolean flag = false; + JSONArray mappingArray = new JSONArray(); + JSONArray mappingList = configObject.getJSONArray("mappingList"); + for (int k = 0; k < mappingList.size(); k++) { + JSONObject newMappingObj = new JSONObject(); + JSONObject mappingObj = mappingList.getJSONObject(k); + String key = mappingObj.getString("key"); + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "formTableComponent")) { + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + String value = valueList.getString(0); + if (Objects.equals(value, attributeUuid)) { + String column = mappingObj.getString("column"); + String columnValue = tbodyObj.getString(column); + if (StringUtils.isNotBlank(columnValue)) { + flag = true; + newMappingObj.put("key", key); + newMappingObj.put("mappingMode", "constant"); + JSONArray newValueList = new JSONArray(); + newValueList.add(columnValue); + newMappingObj.put("valueList", newValueList); + } else { + continue; + } + } else { + newMappingObj.putAll(mappingObj); + } + } else { + continue; + } + } else { + newMappingObj.putAll(mappingObj); + } + mappingArray.add(newMappingObj); + } + if (flag) { + String newUuid = UuidUtil.randomUuid(); + oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); + newConfigObj.put("uuid", newUuid); + newConfigObj.put("ciId", configObject.get("ciId")); + newConfigObj.put("ciName", configObject.get("ciName")); +// newConfigObj.put("createPolicy", "single"); + newConfigObj.put("ciLabel", configObject.get("ciLabel")); + newConfigObj.put("isStart", configObject.get("isStart")); + newConfigObj.put("ciIcon", configObject.get("ciIcon")); + newConfigObj.put("mappingList", mappingArray); + configArray.add(newConfigObj); + } + } + } + configList = configArray; + for (int i = 0; i < configList.size(); i++) { + JSONObject configObject = configList.getJSONObject(i); + JSONArray mappingList = configObject.getJSONArray("mappingList"); + for (int k = 0; k < mappingList.size(); k++) { + JSONObject mappingObj = mappingList.getJSONObject(k); + String key = mappingObj.getString("key"); + if (key.startsWith("rel")) { + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + JSONObject valueObj = valueList.getJSONObject(0); + String type = valueObj.getString("type"); + if (Objects.equals(type, "new")) { + String ciEntityUuid = valueObj.getString("ciEntityUuid"); + List newUuidList = oldUuid2NewUuidListMap.get(ciEntityUuid); + if (CollectionUtils.isNotEmpty(newUuidList)) { + JSONArray newValueList = new JSONArray(); + for (String newUuid : newUuidList) { + JSONObject newValueObj = new JSONObject(); + newValueObj.putAll(valueObj); + newValueObj.put("ciEntityUuid", newUuid); + newValueList.add(newValueObj); + } + mappingObj.put("valueList", newValueList); + } + } + } + } + } + } + List needReplaceUuidList = new ArrayList<>(); + for (int i = 0; i < configList.size(); i++) { + JSONObject configObject = configList.getJSONObject(i); + Integer isStart = configObject.getInteger("isStart"); + if (Objects.equals(isStart, 1)) { + } + String uuid = configObject.getString("uuid"); + Long id = configObject.getLong("id"); + if (id != null) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); + if (ciEntityVo == null) { + configObject.remove("id"); + needReplaceUuidList.add(uuid); + } + } else if (StringUtils.isNotBlank(uuid)) { + CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); + if (ciEntityVo != null) { + if (Objects.equals(isStart, 1)) { + needReplaceUuidList.add(uuid); + } else { + configObject.put("id", ciEntityVo.getId()); + } + } + } + } + ciEntityConfig.put("configList", configList); + if (CollectionUtils.isNotEmpty(needReplaceUuidList)) { + System.out.println("needReplaceUuidList = " + JSONObject.toJSONString(needReplaceUuidList)); + String ciEntityConfigStr = ciEntityConfig.toJSONString(); + for (String oldUuid : needReplaceUuidList) { + String newUuid = UuidUtil.randomUuid(); + ciEntityConfigStr = ciEntityConfigStr.replace(oldUuid, newUuid); + } + return JSONObject.parseObject(ciEntityConfigStr); +// configList = ciEntityConfig.getJSONArray("configList"); + } + return ciEntityConfig; + } private List createSingleCiEntityVo( Map ciEntityTransactionMap, JSONObject mainConfigObj, @@ -420,14 +595,16 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } JSONObject dependencyConfig = dependencyConfigMap.get(ciEntityUuid); if (MapUtils.isNotEmpty(dependencyConfig)) { - String createPolicy = dependencyConfig.getString("createPolicy"); - if (Objects.equals(createPolicy, "single")) { - List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - ciEntityTransactionList.addAll(list); - } else if (Objects.equals(createPolicy, "batch")) { - List list = createBatchCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - ciEntityTransactionList.addAll(list); - } + List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + ciEntityTransactionList.addAll(list); +// String createPolicy = dependencyConfig.getString("createPolicy"); +// if (Objects.equals(createPolicy, "single")) { +// List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); +// ciEntityTransactionList.addAll(list); +// } else if (Objects.equals(createPolicy, "batch")) { +// List list = createBatchCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); +// ciEntityTransactionList.addAll(list); +// } } } JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); @@ -979,6 +1156,17 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { JSONObject batchDataSource = mainConfigObj.getJSONObject("batchDataSource"); if (MapUtils.isEmpty(batchDataSource)) { return null; + } + String attributeUuid = batchDataSource.getString("attributeUuid"); + ProcessTaskFormAttributeDataVo formAttributeDataVo = processTaskFormAttributeDataMap.get(attributeUuid); + JSONArray filterList = batchDataSource.getJSONArray("filterList"); + JSONArray tbodyList = getTbodyList(formAttributeDataVo, filterList); + if (CollectionUtils.isEmpty(tbodyList)) { + return new ArrayList<>(); + } + // 遍历表格数据,创建AutoexecJobVo对象列表 + for (int index = 0; index < tbodyList.size(); index++) { + } return null; } -- Gitee From 02df8b14133b0827410d63ed60b19ced8f9fc862 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Fri, 3 Nov 2023 19:18:29 +0800 Subject: [PATCH 04/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 111 ++++++------------ 1 file changed, 38 insertions(+), 73 deletions(-) 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 c99f6026..061fe3d8 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -19,6 +19,7 @@ package neatlogic.module.cmdb.process.stephandler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPath; +import neatlogic.framework.asynchronization.threadlocal.InputFromContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.cmdb.dto.ci.AttrVo; import neatlogic.framework.cmdb.dto.ci.RelVo; @@ -30,6 +31,7 @@ import neatlogic.framework.cmdb.enums.TransactionActionType; import neatlogic.framework.cmdb.exception.cientity.NewCiEntityNotFoundException; import neatlogic.framework.cmdb.utils.RelUtil; import neatlogic.framework.common.constvalue.Expression; +import neatlogic.framework.common.constvalue.InputFrom; import neatlogic.framework.form.constvalue.FormHandler; import neatlogic.framework.form.dto.FormAttributeVo; import neatlogic.framework.form.dto.FormVersionVo; @@ -155,11 +157,20 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // rerunStepToCreateNewJob为1时表示重新激活自动化步骤时创建新作业,rerunStepToCreateNewJob为0时表示重新激活自动化步骤时不创建新作业,也不重跑旧作业,即什么都不做 Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); if (!Objects.equals(rerunStepToSync, 1)) { -// Long autoexecJobId = autoexecJobMapper.getJobIdByInvokeIdLimitOne(currentProcessTaskStepVo.getId()); -// if (autoexecJobId != null) { -// return 1; -// } + ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); + search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + search.setType("ciEntitySyncResult"); + ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); + if (processTaskStepData != null) { + return 1; + } } + ProcessTaskStepDataVo processTaskStepData = new ProcessTaskStepDataVo(); + processTaskStepData.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + processTaskStepData.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + processTaskStepData.setType("ciEntitySyncError"); + processTaskStepDataMapper.deleteProcessTaskStepData(processTaskStepData); Map processTaskFormAttributeDataMap = new HashMap<>(); Map formAttributeMap = new HashMap<>(); @@ -241,20 +252,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } -// String createPolicy = mainConfigObj.getString("createPolicy"); -// if (Objects.equals(createPolicy, "single")) { -// ciEntityTransactionList = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); -// if (CollectionUtils.isEmpty(ciEntityTransactionList)) { -// return 0; -// } -// } else if (Objects.equals(createPolicy, "batch")) { -// ciEntityTransactionList = createBatchCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); -// if (CollectionUtils.isEmpty(ciEntityTransactionList)) { -// return 0; -// } -// } else { -// return 0; -// } boolean flag = false; JSONArray errorMessageList = new JSONArray(); if (CollectionUtils.isNotEmpty(ciEntityTransactionList)) { @@ -264,35 +261,41 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); System.out.println("ciEntityTransactionList.size() = " + ciEntityTransactionList.size()); EscapeTransactionJob.State s = new EscapeTransactionJob(() -> { + InputFromContext.init(InputFrom.ITSM); Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); System.out.println("transactionGroupId = " + transactionGroupId); + ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); + search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + search.setType("ciEntitySyncResult"); + ProcessTaskStepDataVo oldProcessTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); + if (oldProcessTaskStepData != null) { + JSONObject dataObj = oldProcessTaskStepData.getData(); + JSONArray transactionGroupIdList = dataObj.getJSONArray("transactionGroupIdList"); + transactionGroupIdList.add(transactionGroupId); + } else { + oldProcessTaskStepData = search; + oldProcessTaskStepData.setFcu(UserContext.get().getUserUuid()); + JSONObject dataObj = new JSONObject(); + List transactionGroupIdList = new ArrayList<>(); + transactionGroupIdList.add(transactionGroupId); + dataObj.put("transactionGroupIdList", transactionGroupIdList); + oldProcessTaskStepData.setData(dataObj.toJSONString()); + } + processTaskStepDataMapper.replaceProcessTaskStepData(oldProcessTaskStepData); }).execute(); if (!s.isSucceed()) { // 增加提醒 logger.error(s.getError(), s.getException()); JSONObject errorMessageObj = new JSONObject(); -// errorMessageObj.put("jobId", ciEntityVo.getId()); -// errorMessageObj.put("jobName", ciEntityVo.getName()); errorMessageObj.put("error", s.getError()); errorMessageList.add(errorMessageObj); flag = true; } -// try { -// Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); -// System.out.println("transactionGroupId = " + transactionGroupId); -// } catch (Exception e) { -// // 增加提醒 -// logger.error(e.getMessage(), e); -// JSONObject errorMessageObj = new JSONObject(); -//// errorMessageObj.put("jobId", ciEntityVo.getId()); -//// errorMessageObj.put("jobName", ciEntityVo.getName()); -// errorMessageObj.put("error", e.getMessage()); -// errorMessageList.add(errorMessageObj); -// flag = true; -// } + } boolean isAutoComplete = true; - // 如果有一个作业创建有异常,则根据失败策略执行操作 + // 如果有异常,则根据失败策略执行操作 if (flag) { ProcessTaskStepDataVo processTaskStepDataVo = new ProcessTaskStepDataVo(); processTaskStepDataVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); @@ -495,12 +498,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { Map formAttributeMap, Map processTaskFormAttributeDataMap) { List ciEntityTransactionList = new ArrayList<>(); -// cmdb/ci/get -// cmdb/ciview/get -// cmdb/ci/listattr -// cmdb/ci/479609502048256/listrel -// cmdb/globalattr/search -// cmdb/ci/unique/get + Long ciId = mainConfigObj.getLong("ciId"); Map mappingMap = new HashMap<>(); JSONArray mappingList = mainConfigObj.getJSONArray("mappingList"); @@ -597,14 +595,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isNotEmpty(dependencyConfig)) { List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); ciEntityTransactionList.addAll(list); -// String createPolicy = dependencyConfig.getString("createPolicy"); -// if (Objects.equals(createPolicy, "single")) { -// List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); -// ciEntityTransactionList.addAll(list); -// } else if (Objects.equals(createPolicy, "batch")) { -// List list = createBatchCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); -// ciEntityTransactionList.addAll(list); -// } } } JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); @@ -1146,31 +1136,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return resultObj; } - private List createBatchCiEntityVo( - Map ciEntityTransactionMap, - JSONObject mainConfigObj, - Map dependencyConfigMap, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - // 批量遍历表格 - JSONObject batchDataSource = mainConfigObj.getJSONObject("batchDataSource"); - if (MapUtils.isEmpty(batchDataSource)) { - return null; - } - String attributeUuid = batchDataSource.getString("attributeUuid"); - ProcessTaskFormAttributeDataVo formAttributeDataVo = processTaskFormAttributeDataMap.get(attributeUuid); - JSONArray filterList = batchDataSource.getJSONArray("filterList"); - JSONArray tbodyList = getTbodyList(formAttributeDataVo, filterList); - if (CollectionUtils.isEmpty(tbodyList)) { - return new ArrayList<>(); - } - // 遍历表格数据,创建AutoexecJobVo对象列表 - for (int index = 0; index < tbodyList.size(); index++) { - - } - return null; - } - @Override protected int myAssign(ProcessTaskStepVo currentProcessTaskStepVo, Set workerSet) throws ProcessTaskException { return defaultAssign(currentProcessTaskStepVo, workerSet); -- Gitee From 581f3fb8197c3e33740b8632b2a8044770fc62f9 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sun, 5 Nov 2023 09:30:11 +0800 Subject: [PATCH 05/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 816 +++++++----------- 1 file changed, 301 insertions(+), 515 deletions(-) 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 061fe3d8..54d90c57 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -22,12 +22,15 @@ import com.alibaba.fastjson.JSONPath; import neatlogic.framework.asynchronization.threadlocal.InputFromContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.cmdb.dto.ci.AttrVo; +import neatlogic.framework.cmdb.dto.ci.CiVo; 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.globalattr.GlobalAttrItemVo; import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; +import neatlogic.framework.cmdb.enums.SearchExpression; import neatlogic.framework.cmdb.enums.TransactionActionType; +import neatlogic.framework.cmdb.exception.ci.CiNotFoundException; import neatlogic.framework.cmdb.exception.cientity.NewCiEntityNotFoundException; import neatlogic.framework.cmdb.utils.RelUtil; import neatlogic.framework.common.constvalue.Expression; @@ -50,6 +53,7 @@ import neatlogic.framework.process.stephandler.core.ProcessStepThread; import neatlogic.framework.transaction.core.EscapeTransactionJob; import neatlogic.framework.util.UuidUtil; import neatlogic.module.cmdb.dao.mapper.ci.AttrMapper; +import neatlogic.module.cmdb.dao.mapper.ci.CiMapper; import neatlogic.module.cmdb.dao.mapper.ci.RelMapper; import neatlogic.module.cmdb.dao.mapper.cientity.CiEntityMapper; import neatlogic.module.cmdb.dao.mapper.globalattr.GlobalAttrMapper; @@ -73,6 +77,9 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { @Resource private ProcessTaskStepDataMapper processTaskStepDataMapper; + @Resource + private CiMapper ciMapper; + @Resource private GlobalAttrMapper globalAttrMapper; @@ -154,7 +161,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isEmpty(ciEntityConfig)) { return 0; } - // rerunStepToCreateNewJob为1时表示重新激活自动化步骤时创建新作业,rerunStepToCreateNewJob为0时表示重新激活自动化步骤时不创建新作业,也不重跑旧作业,即什么都不做 + // rerunStepToSync为1时表示重新激活CMDB步骤时同步配置项实例,rerunStepToSync为0时表示重新激活CMDB步骤时不同步配置项实例,即什么都不做,直接自动流转到下一阶段 Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); if (!Objects.equals(rerunStepToSync, 1)) { ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); @@ -163,6 +170,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { search.setType("ciEntitySyncResult"); ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); if (processTaskStepData != null) { + autoComplete2(currentProcessTaskStepVo); return 1; } } @@ -193,7 +201,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } System.out.println("ciEntityConfig1 = " + ciEntityConfig); - ciEntityConfig = rebuildCiEntityConfig(ciEntityConfig, processTaskFormAttributeDataMap); + ciEntityConfig = rebuildCiEntityConfig(ciEntityConfig, formAttributeMap, processTaskFormAttributeDataMap); System.out.println("ciEntityConfig2 = " + ciEntityConfig); JSONArray configList = ciEntityConfig.getJSONArray("configList"); if (CollectionUtils.isEmpty(configList)) { @@ -214,18 +222,20 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); Long id = configObject.getLong("id"); if (id != null) { - System.out.println("id = " + id); + System.out.println("update id = " + id); ciEntityTransactionVo.setCiEntityId(id); ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); } else { - CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); - if (uuidCiEntityVo != null) { - ciEntityTransactionVo.setCiEntityId(uuidCiEntityVo.getId()); - ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); - configObject.put("id", uuidCiEntityVo.getId()); - } else { - ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); - } +// CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); +// if (uuidCiEntityVo != null) { +// ciEntityTransactionVo.setCiEntityId(uuidCiEntityVo.getId()); +// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); +// configObject.put("id", uuidCiEntityVo.getId()); +// } else { +// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); +// } + System.out.println("insert uuid = " + uuid); + ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); } Integer isStart = configObject.getInteger("isStart"); if (Objects.equals(isStart, 1)) { @@ -245,7 +255,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (ciId == null) { return 0; } - List list = createSingleCiEntityVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + List list = createCiEntityTransactionVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); for (CiEntityTransactionVo ciEntityTransactionVo : list) { if (!ciEntityTransactionList.contains(ciEntityTransactionVo)) { ciEntityTransactionList.add(ciEntityTransactionVo); @@ -294,7 +304,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } - boolean isAutoComplete = true; // 如果有异常,则根据失败策略执行操作 if (flag) { ProcessTaskStepDataVo processTaskStepDataVo = new ProcessTaskStepDataVo(); @@ -307,54 +316,61 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskStepDataVo.setFcu(UserContext.get().getUserUuid()); processTaskStepDataMapper.replaceProcessTaskStepData(processTaskStepDataVo); String failPolicy = ciEntityConfig.getString("failPolicy"); - if (!FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { - isAutoComplete = false; - } - } - if (isAutoComplete) { - List toProcessTaskStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(currentProcessTaskStepVo.getId(), ProcessFlowDirection.FORWARD.getValue()); - if (toProcessTaskStepIdList.size() == 1) { - Long nextStepId = toProcessTaskStepIdList.get(0); - IProcessStepHandler handler = ProcessStepHandlerFactory.getHandler(CmdbProcessStepHandlerType.CMDBSYNC.getHandler()); - try { - ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(currentProcessTaskStepVo.getId()); - JSONObject paramObj = processTaskStepVo.getParamObj(); - paramObj.put("nextStepId", nextStepId); - paramObj.put("action", ProcessTaskOperationType.STEP_COMPLETE.getValue()); - /* 自动处理 **/ - doNext(ProcessTaskOperationType.STEP_COMPLETE, new ProcessStepThread(processTaskStepVo) { - @Override - public void myExecute() { - handler.autoComplete(processTaskStepVo); - } - }); - } catch (ProcessTaskNoPermissionException e) { - logger.error(e.getMessage(), e); - } + if (FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { + autoComplete2(currentProcessTaskStepVo); } + } else { + autoComplete2(currentProcessTaskStepVo); } } catch (Exception e) { - System.out.println("异常2..."); logger.error(e.getMessage(), e); throw new ProcessTaskException(e.getMessage()); } return 1; } - private JSONObject rebuildCiEntityConfig(JSONObject ciEntityConfig, Map processTaskFormAttributeDataMap) { + private void autoComplete2(ProcessTaskStepVo currentProcessTaskStepVo) { + List toProcessTaskStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(currentProcessTaskStepVo.getId(), ProcessFlowDirection.FORWARD.getValue()); + if (toProcessTaskStepIdList.size() == 1) { + Long nextStepId = toProcessTaskStepIdList.get(0); + IProcessStepHandler handler = ProcessStepHandlerFactory.getHandler(CmdbProcessStepHandlerType.CMDBSYNC.getHandler()); + try { + ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(currentProcessTaskStepVo.getId()); + JSONObject paramObj = processTaskStepVo.getParamObj(); + paramObj.put("nextStepId", nextStepId); + paramObj.put("action", ProcessTaskOperationType.STEP_COMPLETE.getValue()); + /* 自动处理 **/ + doNext(ProcessTaskOperationType.STEP_COMPLETE, new ProcessStepThread(processTaskStepVo) { + @Override + public void myExecute() { + handler.autoComplete(processTaskStepVo); + } + }); + } catch (ProcessTaskNoPermissionException e) { + logger.error(e.getMessage(), e); + } + } + } + + private JSONObject rebuildCiEntityConfig( + JSONObject ciEntityConfig, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { JSONArray configList = ciEntityConfig.getJSONArray("configList"); if (CollectionUtils.isEmpty(configList)) { return ciEntityConfig; } + // 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 Map> oldUuid2NewUuidListMap = new HashMap<>(); - JSONArray configArray = new JSONArray(); + JSONArray newConfigList = new JSONArray(); for (int i = 0; i < configList.size(); i++) { - JSONObject configObject = configList.getJSONObject(i); - String oldUuid = configObject.getString("uuid"); - // 批量遍历表格 - JSONObject batchDataSource = configObject.getJSONObject("batchDataSource"); + JSONObject configObj = configList.getJSONObject(i); + String oldUuid = configObj.getString("uuid"); + // 批量操作配置信息 + JSONObject batchDataSource = configObj.getJSONObject("batchDataSource"); if (MapUtils.isEmpty(batchDataSource)) { - configArray.add(configObject); + // 单个操作配置,不做修改 + newConfigList.add(configObj); continue; } String attributeUuid = batchDataSource.getString("attributeUuid"); @@ -364,23 +380,25 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (CollectionUtils.isEmpty(tbodyList)) { continue; } - // 遍历表格数据 + JSONArray mappingList = configObj.getJSONArray("mappingList"); + // 遍历批量操作表格数据 for (int j = 0; j < tbodyList.size(); j++) { JSONObject newConfigObj = new JSONObject(); JSONObject tbodyObj = tbodyList.getJSONObject(j); if (MapUtils.isEmpty(tbodyObj)) { + logger.warn("批量操作数据源表格的第" + j + "行数据为空"); continue; } System.out.println("tbodyObj = " + tbodyObj); - boolean flag = false; - JSONArray mappingArray = new JSONArray(); - JSONArray mappingList = configObject.getJSONArray("mappingList"); +// boolean flag = false; + JSONArray newMappingList = new JSONArray(); for (int k = 0; k < mappingList.size(); k++) { JSONObject newMappingObj = new JSONObject(); JSONObject mappingObj = mappingList.getJSONObject(k); String key = mappingObj.getString("key"); String mappingMode = mappingObj.getString("mappingMode"); if (Objects.equals(mappingMode, "formTableComponent")) { + // 映射模式是表单表格组件 JSONArray valueList = mappingObj.getJSONArray("valueList"); if (CollectionUtils.isNotEmpty(valueList)) { String value = valueList.getString(0); @@ -388,7 +406,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String column = mappingObj.getString("column"); String columnValue = tbodyObj.getString(column); if (StringUtils.isNotBlank(columnValue)) { - flag = true; +// flag = true; newMappingObj.put("key", key); newMappingObj.put("mappingMode", "constant"); JSONArray newValueList = new JSONArray(); @@ -406,27 +424,28 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } else { newMappingObj.putAll(mappingObj); } - mappingArray.add(newMappingObj); + newMappingList.add(newMappingObj); } - if (flag) { +// if (flag) { String newUuid = UuidUtil.randomUuid(); oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); newConfigObj.put("uuid", newUuid); - newConfigObj.put("ciId", configObject.get("ciId")); - newConfigObj.put("ciName", configObject.get("ciName")); + newConfigObj.put("ciId", configObj.get("ciId")); + newConfigObj.put("ciName", configObj.get("ciName")); // newConfigObj.put("createPolicy", "single"); - newConfigObj.put("ciLabel", configObject.get("ciLabel")); - newConfigObj.put("isStart", configObject.get("isStart")); - newConfigObj.put("ciIcon", configObject.get("ciIcon")); - newConfigObj.put("mappingList", mappingArray); - configArray.add(newConfigObj); - } + newConfigObj.put("ciLabel", configObj.get("ciLabel")); + newConfigObj.put("isStart", configObj.get("isStart")); + newConfigObj.put("ciIcon", configObj.get("ciIcon")); + newConfigObj.put("mappingList", newMappingList); + newConfigList.add(newConfigObj); +// } } } - configList = configArray; + configList = newConfigList; + // 遍历configList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 for (int i = 0; i < configList.size(); i++) { - JSONObject configObject = configList.getJSONObject(i); - JSONArray mappingList = configObject.getJSONArray("mappingList"); + JSONObject configObj = configList.getJSONObject(i); + JSONArray mappingList = configObj.getJSONArray("mappingList"); for (int k = 0; k < mappingList.size(); k++) { JSONObject mappingObj = mappingList.getJSONObject(k); String key = mappingObj.getString("key"); @@ -453,7 +472,144 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } - List needReplaceUuidList = new ArrayList<>(); + // 遍历configList,将mappingList中映射模式为“表单普通组件”和“表单表格组件”的数据替换称表单组件对应的真实值 + for (int i = 0; i < configList.size(); i++) { + JSONObject configObj = configList.getJSONObject(i); + JSONArray mappingList = configObj.getJSONArray("mappingList"); + for (int k = 0; k < mappingList.size(); k++) { + JSONObject mappingObj = mappingList.getJSONObject(k); + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isEmpty(valueList)) { + continue; + } + JSONArray newValueList = new JSONArray(); + String mappingMode = mappingObj.getString("mappingMode"); + mappingObj.put("mappingMode", "constant"); + mappingObj.put("valueList", newValueList); + if (Objects.equals(mappingMode, "formTableComponent")) { + ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); + if (attributeDataVo == null) { + continue; + } + JSONArray filterList = mappingObj.getJSONArray("filterList"); + JSONArray tbodyList = getTbodyList(attributeDataVo, filterList); + if (CollectionUtils.isEmpty(tbodyList)) { + continue; + } + String column = mappingObj.getString("column"); + for (int m = 0; m < tbodyList.size(); m++) { + JSONObject tbodyObj = tbodyList.getJSONObject(m); + if (MapUtils.isEmpty(tbodyObj)) { + continue; + } + String columnValue = tbodyObj.getString(column); + if (StringUtils.isBlank(columnValue)) { + continue; + } + newValueList.add(columnValue); + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); + if (attributeDataVo == null) { + continue; + } + Object dataObj = attributeDataVo.getDataObj(); + if (dataObj == null) { + continue; + } + FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); + if (Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMUPLOAD.getHandler())) { +// List idList = new ArrayList<>(); + if (dataObj instanceof JSONArray) { + JSONArray dataArray = (JSONArray) dataObj; + for (int m = 0; m < dataArray.size(); m++) { + JSONObject data = dataArray.getJSONObject(m); + Long id = data.getLong("id"); + if (id != null) { + newValueList.add(id); + } + } + } + } else { + if (dataObj instanceof JSONObject) { + + } else if (dataObj instanceof JSONArray) { + newValueList.addAll((JSONArray) dataObj); + } else { + newValueList.add(dataObj); + } + } + } else { + newValueList.addAll(valueList); + } + } + } + + List uniqueAttrValueListJoinStrList = new ArrayList<>(); + JSONArray newConfigList2 = new JSONArray(); + for (int i = 0; i < configList.size(); i++) { + JSONObject configObj = configList.getJSONObject(i); + Long ciId = configObj.getLong("ciId"); + CiVo ciVo = ciMapper.getCiById(ciId); + if (ciVo == null) { + String ciName = configObj.getString("ciName"); + throw new CiNotFoundException(ciName); + } + List uniqueAttrIdList = ciVo.getUniqueAttrIdList(); + if (CollectionUtils.isEmpty(uniqueAttrIdList)) { + newConfigList2.add(configObj); + } + Map key2ValueListMap = new HashMap<>(); + JSONArray mappingList = configObj.getJSONArray("mappingList"); + for (int j = 0; j < mappingList.size(); j++) { + JSONObject mappingObj = mappingList.getJSONObject(j); + String key = mappingObj.getString("key"); + JSONArray valueList = mappingObj.getJSONArray("valueList"); + key2ValueListMap.put(key, valueList); + } + List list = new ArrayList<>(); + list.add(ciId.toString()); + for (Long attrId : uniqueAttrIdList) { + JSONArray valueList = key2ValueListMap.get("attr_" + attrId); + list.add(valueList.toJSONString()); + } + String uniqueAttrValueListJoinStr = String.join(",", list); + if (uniqueAttrValueListJoinStrList.contains(uniqueAttrValueListJoinStr)) { + continue; + } + //校验唯一规则 + CiEntityVo ciEntityConditionVo = new CiEntityVo(); + ciEntityConditionVo.setCiId(ciId); + ciEntityConditionVo.setAttrIdList(new ArrayList() {{ + this.add(0L); + }}); + ciEntityConditionVo.setRelIdList(new ArrayList() {{ + this.add(0L); + }}); + for (Long attrId : ciVo.getUniqueAttrIdList()) { + AttrFilterVo filterVo = new AttrFilterVo(); + filterVo.setAttrId(attrId); + filterVo.setExpression(SearchExpression.EQ.getExpression()); + List valueList = new ArrayList<>(); + JSONArray valueArray = key2ValueListMap.get("attr_" + attrId); + if (CollectionUtils.isNotEmpty(valueArray)) { + valueList = valueArray.toJavaList(String.class); + } + filterVo.setValueList(valueList); + ciEntityConditionVo.addAttrFilter(filterVo); + } + if (CollectionUtils.isNotEmpty(ciEntityConditionVo.getAttrFilterList())) { + List checkList = ciEntityService.searchCiEntity(ciEntityConditionVo); + if (CollectionUtils.isNotEmpty(checkList)) { + configObj.put("id", checkList.get(0).getId()); + } + } + uniqueAttrValueListJoinStrList.add(uniqueAttrValueListJoinStr); + newConfigList2.add(configObj); + } + configList = newConfigList2; + Map oldUuid2NewUuidMap = new HashMap<>(); +// List needReplaceUuidList = new ArrayList<>(); for (int i = 0; i < configList.size(); i++) { JSONObject configObject = configList.getJSONObject(i); Integer isStart = configObject.getInteger("isStart"); @@ -465,13 +621,20 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); if (ciEntityVo == null) { configObject.remove("id"); - needReplaceUuidList.add(uuid); +// needReplaceUuidList.add(uuid); + oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); + } else { + if (!Objects.equals(uuid, ciEntityVo.getUuid())) { +// needReplaceUuidList.add(uuid); + oldUuid2NewUuidMap.put(uuid, ciEntityVo.getUuid()); + } } } else if (StringUtils.isNotBlank(uuid)) { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); if (ciEntityVo != null) { if (Objects.equals(isStart, 1)) { - needReplaceUuidList.add(uuid); +// needReplaceUuidList.add(uuid); + oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); } else { configObject.put("id", ciEntityVo.getId()); } @@ -479,19 +642,19 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } ciEntityConfig.put("configList", configList); - if (CollectionUtils.isNotEmpty(needReplaceUuidList)) { - System.out.println("needReplaceUuidList = " + JSONObject.toJSONString(needReplaceUuidList)); + if (MapUtils.isNotEmpty(oldUuid2NewUuidMap)) { + System.out.println("oldUuid2NewUuidMap = " + JSONObject.toJSONString(oldUuid2NewUuidMap)); String ciEntityConfigStr = ciEntityConfig.toJSONString(); - for (String oldUuid : needReplaceUuidList) { - String newUuid = UuidUtil.randomUuid(); - ciEntityConfigStr = ciEntityConfigStr.replace(oldUuid, newUuid); + for (Map.Entry entry : oldUuid2NewUuidMap.entrySet()) { + ciEntityConfigStr = ciEntityConfigStr.replace(entry.getKey(), entry.getValue()); } return JSONObject.parseObject(ciEntityConfigStr); // configList = ciEntityConfig.getJSONArray("configList"); } return ciEntityConfig; } - private List createSingleCiEntityVo( + + private List createCiEntityTransactionVo( Map ciEntityTransactionMap, JSONObject mainConfigObj, Map dependencyConfigMap, @@ -526,7 +689,12 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { /** 变更说明 **/ JSONObject descriptionMappingObj = mappingMap.get("description"); if (MapUtils.isNotEmpty(descriptionMappingObj)) { - String description = parseDescription(descriptionMappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + JSONArray valueList = descriptionMappingObj.getJSONArray("valueList"); + if (CollectionUtils.isEmpty(valueList)) { + System.out.println("description is null"); + } + String description = valueList.getString(0); +// String description = parseDescription(descriptionMappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); if (StringUtils.isBlank(description)) { System.out.println("description is null"); } @@ -539,13 +707,51 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { JSONObject attrEntityData = new JSONObject(); List attrList = attrMapper.getAttrByCiId(ciId); for (AttrVo attrVo : attrList) { + if (Objects.equals(attrVo.getExpression(), "")) { + continue; + } String key = "attr_" + attrVo.getId(); JSONObject mappingObj = mappingMap.get(key); if (MapUtils.isEmpty(mappingObj)) { System.out.println(key + " is null"); continue; } - JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); +// JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + // 映射模式为常量 + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { +// valueList = valueArray; + for (int i = valueList.size() - 1; i >= 0; i--) { + if (valueList.get(i) instanceof JSONObject) { + JSONObject valueObj = valueList.getJSONObject(i); + String attrCiEntityUuid = valueObj.getString("uuid"); + Long attrCiEntityId = valueObj.getLong("id"); + if (attrCiEntityId == null && StringUtils.isNotBlank(attrCiEntityUuid)) { + CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(attrCiEntityUuid); + if (tmpVo != null) { + //替换掉原来的ciEntityUuid为新的ciEntityId + valueList.set(i, tmpVo.getCiEntityId()); + } else { + //使用uuid寻找配置项 + CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(attrCiEntityUuid); + if (uuidCiEntityVo == null) { + throw new NewCiEntityNotFoundException(attrCiEntityUuid); + } else { + valueList.set(i, uuidCiEntityVo.getId()); + } + } + } else if (attrCiEntityId != null) { + valueList.set(i, attrCiEntityId); + } else { + valueList.remove(i); + } + } + } + } + JSONObject attrEntity = new JSONObject(); + attrEntity.put("type", attrVo.getType()); + attrEntity.put("config", attrVo.getConfig()); + attrEntity.put("valueList", valueList); attrEntityData.put(key, attrEntity); } ciEntityTransactionVo.setAttrEntityData(attrEntityData); @@ -561,10 +767,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } String mappingMode = mappingObj.getString("mappingMode"); if (Objects.equals(mappingMode, "new")) { - JSONArray valueArray = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueArray)) { - for (int i = 0; i < valueArray.size(); i++) { - JSONObject valueObj = valueArray.getJSONObject(i); + JSONArray valueList = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + for (int i = 0; i < valueList.size(); i++) { + JSONObject valueObj = valueList.getJSONObject(i); if (MapUtils.isEmpty(valueObj)) { continue; } @@ -593,11 +799,13 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } JSONObject dependencyConfig = dependencyConfigMap.get(ciEntityUuid); if (MapUtils.isNotEmpty(dependencyConfig)) { - List list = createSingleCiEntityVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); ciEntityTransactionList.addAll(list); } } - JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); +// JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + JSONObject relEntity = new JSONObject(); + relEntity.put("valueList", valueList); relEntityData.put(key, relEntity); } } @@ -615,7 +823,18 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { System.out.println(key + " is null"); continue; } - JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); +// JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + JSONArray valueList = new JSONArray(); + String mappingMode = mappingObj.getString("mappingMode"); + if (Objects.equals(mappingMode, "constant")) { + // 映射模式为常量 + JSONArray valueArray = mappingObj.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueArray)) { + valueList = valueArray; + } + } + JSONObject globalAttrEntity = new JSONObject(); + globalAttrEntity.put("valueList", valueList); globalAttrEntityData.put(key, globalAttrEntity); } ciEntityTransactionVo.setGlobalAttrEntityData(globalAttrEntityData); @@ -703,439 +922,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return tbodyList; } - private List parseFormTableComponentMappingValue(FormAttributeVo formAttributeVo, JSONArray tbodyList, String column) { - List resultList = new ArrayList<>(); - if (CollectionUtils.isEmpty(tbodyList)) { - return resultList; - } - for (int i = 0; i < tbodyList.size(); i++) { - JSONObject tbodyObj = tbodyList.getJSONObject(i); - if (MapUtils.isEmpty(tbodyObj)) { - continue; - } - String columnValue = tbodyObj.getString(column); - if (StringUtils.isBlank(columnValue)) { - continue; - } - resultList.add(columnValue); - } - return resultList; - } - - private String mappingModeFormTableComponent( - JSONObject mappingObj, - JSONObject tbodyObj) { - String column = mappingObj.getString("column"); - return tbodyObj.getString(column); - } - - private List mappingModeFormTableComponent( - JSONObject mappingObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - JSONArray valueList = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isEmpty(valueList)) { - return null; - } - String column = mappingObj.getString("column"); - FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); - ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); - JSONArray filterList = mappingObj.getJSONArray("filterList"); - JSONArray tbodyList = getTbodyList(attributeDataVo, filterList); - List list = parseFormTableComponentMappingValue(formAttributeVo, tbodyList, column); - return list; - } - - private Object mappingModeFormCommonComponent( - JSONObject mappingObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - JSONArray valueList = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isEmpty(valueList)) { - return null; - } - FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); - if (formAttributeVo == null) { - return null; - } - ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); - if (attributeDataVo == null) { - return null; - } - Object dataObj = attributeDataVo.getDataObj(); - if (dataObj == null) { - return null; - } - if (Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMUPLOAD.getHandler())) { - List idList = new ArrayList<>(); - if (dataObj instanceof JSONArray) { - JSONArray dataArray = (JSONArray) dataObj; - for (int i = 0; i < dataArray.size(); i++) { - JSONObject data = dataArray.getJSONObject(i); - Long id = data.getLong("id"); - if (id != null) { - idList.add(id); - } - } - } - return idList; - } - return dataObj; - } - - private String parseDescription( - JSONObject mappingObj, - JSONObject tbodyObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - String mappingMode = mappingObj.getString("mappingMode"); - if (Objects.equals(mappingMode, "formTableComponent")) { - // 映射模式为表单表格组件 - List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (CollectionUtils.isNotEmpty(list)) { - return String.join(",", list); - } - } else if (Objects.equals(mappingMode, "formCommonComponent")) { - // 映射模式为表单普通组件 - Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (value != null) { - return value.toString(); - } - } else if (Objects.equals(mappingMode, "constant")) { - // 映射模式为常量 - JSONArray valueList = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueList)) { - return valueList.getString(0); - } - } - return null; - } - - private JSONObject parseGlobalAttr( - GlobalAttrVo globalAttrVo, - JSONObject mappingObj, - JSONObject tbodyObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - List itemList = globalAttrVo.getItemList(); - Map id2ItemMap = itemList.stream().collect(Collectors.toMap(e -> e.getId(), e -> e)); - Map name2ItemMap = itemList.stream().collect(Collectors.toMap(e -> e.getValue(), e -> e)); - JSONArray valueList = new JSONArray(); - String mappingMode = mappingObj.getString("mappingMode"); - if (Objects.equals(mappingMode, "formTableComponent")) { - // 映射模式为表单表格组件 - if (tbodyObj != null) { - String column = mappingObj.getString("column"); - String value = tbodyObj.getString(column); - GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - } - } else { - List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - for (String value : list) { - GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { - break; - } - } - } - } - } else if (Objects.equals(mappingMode, "formCommonComponent")) { - // 映射模式为表单普通组件 - Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (value != null) { - if (value instanceof JSONObject) { - - } else if (value instanceof JSONArray) { - JSONArray valueArray = (JSONArray) value; - for (int i = 0; i < valueArray.size(); i++) { - String valueStr = valueArray.getString(0); - GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(valueStr); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { - break; - } - } - } - } else if (value instanceof Long) { - GlobalAttrItemVo globalAttrItemVo = id2ItemMap.get((Long) value); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - } - } else if (value instanceof String) { - GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get((String) value); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - } - } else { - GlobalAttrItemVo globalAttrItemVo = name2ItemMap.get(value.toString()); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - } - } - } - } else if (Objects.equals(mappingMode, "constant")) { - // 映射模式为常量 - JSONArray valueArray = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueArray)) { -// valueList = valueArray; - for (int i = 0; i < valueArray.size(); i++) { - Object value = valueArray.get(i); - if (value instanceof JSONObject) { - valueList.add(value); - } else if (value instanceof Long) { - GlobalAttrItemVo globalAttrItemVo = id2ItemMap.get((Long) value); - if (globalAttrItemVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("attrId", globalAttrVo.getId()); - valueObj.put("id", globalAttrItemVo.getId()); - valueObj.put("sort", globalAttrItemVo.getSort()); - valueObj.put("value", globalAttrItemVo.getValue()); - valueList.add(valueObj); - if (!Objects.equals(globalAttrVo.getIsMultiple(), 1)) { - break; - } - } - } - } - } - } - JSONObject resultObj = new JSONObject(); - resultObj.put("valueList", valueList); - return resultObj; - } - - private JSONObject parseAttr( - Map ciEntityTransactionMap, - AttrVo attrVo, - JSONObject mappingObj, - JSONObject tbodyObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - JSONArray valueList = new JSONArray(); - String mappingMode = mappingObj.getString("mappingMode"); - if (Objects.equals(mappingMode, "formTableComponent")) { - // 映射模式为表单表格组件 - if (tbodyObj != null) { - String column = mappingObj.getString("column"); - String value = tbodyObj.getString(column); - if (StringUtils.isNotBlank(value)) { - valueList.add(value); - } - } else { - List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (CollectionUtils.isNotEmpty(list)) { - valueList.addAll(list); - } - } - } else if (Objects.equals(mappingMode, "formCommonComponent")) { - // 映射模式为表单普通组件 - Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (value != null) { - if (value instanceof JSONObject) { - - } else if (value instanceof JSONArray) { - valueList = (JSONArray) value; - } else { - valueList.add(value); - } - } - } else if (Objects.equals(mappingMode, "constant")) { - // 映射模式为常量 - JSONArray valueArray = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueArray)) { - valueList = valueArray; - for (int i = valueList.size() - 1; i >= 0; i--) { - if (valueList.get(i) instanceof JSONObject) { - JSONObject valueObj = valueList.getJSONObject(i); - String attrCiEntityUuid = valueObj.getString("uuid"); - Long attrCiEntityId = valueObj.getLong("id"); - if (attrCiEntityId == null && StringUtils.isNotBlank(attrCiEntityUuid)) { - CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(attrCiEntityUuid); - if (tmpVo != null) { - //替换掉原来的ciEntityUuid为新的ciEntityId - valueList.set(i, tmpVo.getCiEntityId()); - } else { - //使用uuid寻找配置项 - CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(attrCiEntityUuid); - if (uuidCiEntityVo == null) { - throw new NewCiEntityNotFoundException(attrCiEntityUuid); - } else { - valueList.set(i, uuidCiEntityVo.getId()); - } - } - } else if (attrCiEntityId != null) { - valueList.set(i, attrCiEntityId); - } else { - valueList.remove(i); - } - } - } - } - } - JSONObject resultObj = new JSONObject(); - resultObj.put("type", attrVo.getType()); - resultObj.put("config", attrVo.getConfig()); - resultObj.put("valueList", valueList); - return resultObj; - } - - private JSONObject parseRel( - RelVo relVo, - JSONObject mappingObj, - JSONObject tbodyObj, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - Long ciId = null; - if (Objects.equals(relVo.getDirection(), "from")) { - ciId = relVo.getToCiId(); - } else if (Objects.equals(relVo.getDirection(), "to")) { - ciId = relVo.getFromCiId(); - } - JSONArray valueList = new JSONArray(); - String mappingMode = mappingObj.getString("mappingMode"); - if (Objects.equals(mappingMode, "formTableComponent")) { - // 映射模式为表单表格组件 - if (tbodyObj != null) { - String column = mappingObj.getString("column"); - String value = tbodyObj.getString(column); - Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value); - if (ciEntityId != null) { - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); - if (ciEntityVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("ciId", ciEntityVo.getTypeId()); - valueObj.put("ciEntityId", ciEntityVo.getId()); - valueObj.put("ciEntityName", ciEntityVo.getName()); - valueList.add(valueObj); - } - } - } else { - List list = mappingModeFormTableComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - for (String value : list) { - Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value); - if (ciEntityId != null) { - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); - if (ciEntityVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("ciId", ciEntityVo.getTypeId()); - valueObj.put("ciEntityId", ciEntityVo.getId()); - valueObj.put("ciEntityName", ciEntityVo.getName()); - valueList.add(valueObj); - } - } - } - } - } else if (Objects.equals(mappingMode, "formCommonComponent")) { - // 映射模式为表单普通组件 - Object value = mappingModeFormCommonComponent(mappingObj, formAttributeMap, processTaskFormAttributeDataMap); - if (value != null) { - if (value instanceof JSONObject) { - - } else if (value instanceof JSONArray) { - JSONArray valueArray = (JSONArray) value; - for (int i = 0; i < valueArray.size(); i++) { - Long ciEntityId = valueArray.getLong(i); - if (ciEntityId == null) { - continue; - } - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); - if (ciEntityVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("ciId", ciEntityVo.getTypeId()); - valueObj.put("ciEntityId", ciEntityVo.getId()); - valueObj.put("ciEntityName", ciEntityVo.getName()); - valueList.add(valueObj); - } - } - } else if (value instanceof Long) { - Long ciEntityId = (Long) value; - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); - if (ciEntityVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("ciId", ciEntityVo.getTypeId()); - valueObj.put("ciEntityId", ciEntityVo.getId()); - valueObj.put("ciEntityName", ciEntityVo.getName()); - valueList.add(valueObj); - } - } else { - Long ciEntityId = ciEntityMapper.getIdByCiIdAndName(ciId, value.toString()); - if (ciEntityId != null) { - CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(ciEntityId); - if (ciEntityVo != null) { - JSONObject valueObj = new JSONObject(); - valueObj.put("ciId", ciEntityVo.getTypeId()); - valueObj.put("ciEntityId", ciEntityVo.getId()); - valueObj.put("ciEntityName", ciEntityVo.getName()); - valueList.add(valueObj); - } - } - } - } - } else if (Objects.equals(mappingMode, "constant")) { - // 映射模式为常量 - JSONArray valueArray = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueArray)) { - valueList = valueArray; - } - } else if (Objects.equals(mappingMode, "new")) { - JSONArray valueArray = mappingObj.getJSONArray("valueList"); - if (CollectionUtils.isNotEmpty(valueArray)) { - valueList = valueArray; -// for (int i = 0; i < valueArray.size(); i++) { -// JSONObject valueObj = valueArray.getJSONObject(i); -// if (MapUtils.isEmpty(valueObj)) { -// continue; -// } -// String ciEntityUuid = valueObj.getString("ciEntityUuid"); -// if (StringUtils.isBlank(ciEntityUuid)) { -// continue; -// } -// -// } - } - } - JSONObject resultObj = new JSONObject(); -// resultObj.put("type", attrVo.getType()); -// resultObj.put("config", attrVo.getConfig()); - resultObj.put("valueList", valueList); - return resultObj; - } - @Override protected int myAssign(ProcessTaskStepVo currentProcessTaskStepVo, Set workerSet) throws ProcessTaskException { return defaultAssign(currentProcessTaskStepVo, workerSet); -- Gitee From 349c7f2cb149449c556a6f2f4caa778102f97f97 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sun, 5 Nov 2023 12:10:43 +0800 Subject: [PATCH 06/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 134 ++++++++++++------ 1 file changed, 89 insertions(+), 45 deletions(-) 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 54d90c57..0f1e911e 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -201,14 +201,18 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } System.out.println("ciEntityConfig1 = " + ciEntityConfig); - ciEntityConfig = rebuildCiEntityConfig(ciEntityConfig, formAttributeMap, processTaskFormAttributeDataMap); - System.out.println("ciEntityConfig2 = " + ciEntityConfig); JSONArray configList = ciEntityConfig.getJSONArray("configList"); + if (CollectionUtils.isEmpty(configList)) { + return 0; + } + /* 重新构建configList配置信息 */ + configList = rebuildConfigList(configList, formAttributeMap, processTaskFormAttributeDataMap); + System.out.println("ciEntityConfig2 = " + ciEntityConfig); if (CollectionUtils.isEmpty(configList)) { return 1; } System.out.println("configList.size() = " + configList.size()); - + /* 遍历configList, 找出起始模型配置列表,根据id和uuid的值判断是新增还是更新 */ List startConfigList = new ArrayList<>(); Map ciEntityTransactionMap = new HashMap<>(); Map dependencyConfigMap = new HashMap<>(); @@ -226,14 +230,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { ciEntityTransactionVo.setCiEntityId(id); ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); } else { -// CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); -// if (uuidCiEntityVo != null) { -// ciEntityTransactionVo.setCiEntityId(uuidCiEntityVo.getId()); -// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); -// configObject.put("id", uuidCiEntityVo.getId()); -// } else { -// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); -// } System.out.println("insert uuid = " + uuid); ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); } @@ -249,6 +245,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (CollectionUtils.isEmpty(startConfigList)) { return 0; } + /* 遍历起始模型配置信息列表,生成CiEntityTransactionVo列表 */ List ciEntityTransactionList = new ArrayList<>(); for (JSONObject mainConfigObj : startConfigList) { Long ciId = mainConfigObj.getLong("ciId"); @@ -352,15 +349,16 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } - private JSONObject rebuildCiEntityConfig( - JSONObject ciEntityConfig, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { - JSONArray configList = ciEntityConfig.getJSONArray("configList"); - if (CollectionUtils.isEmpty(configList)) { - return ciEntityConfig; - } - // 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 + /** + * 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 + * @param configList 配置信息列表 + * @param processTaskFormAttributeDataMap 表单数据信息 + * @return + */ + private JSONArray handleBatchDataSource( + JSONArray configList, + Map processTaskFormAttributeDataMap + ) { Map> oldUuid2NewUuidListMap = new HashMap<>(); JSONArray newConfigList = new JSONArray(); for (int i = 0; i < configList.size(); i++) { @@ -427,24 +425,23 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { newMappingList.add(newMappingObj); } // if (flag) { - String newUuid = UuidUtil.randomUuid(); - oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); - newConfigObj.put("uuid", newUuid); - newConfigObj.put("ciId", configObj.get("ciId")); - newConfigObj.put("ciName", configObj.get("ciName")); + String newUuid = UuidUtil.randomUuid(); + oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); + newConfigObj.put("uuid", newUuid); + newConfigObj.put("ciId", configObj.get("ciId")); + newConfigObj.put("ciName", configObj.get("ciName")); // newConfigObj.put("createPolicy", "single"); - newConfigObj.put("ciLabel", configObj.get("ciLabel")); - newConfigObj.put("isStart", configObj.get("isStart")); - newConfigObj.put("ciIcon", configObj.get("ciIcon")); - newConfigObj.put("mappingList", newMappingList); - newConfigList.add(newConfigObj); + newConfigObj.put("ciLabel", configObj.get("ciLabel")); + newConfigObj.put("isStart", configObj.get("isStart")); + newConfigObj.put("ciIcon", configObj.get("ciIcon")); + newConfigObj.put("mappingList", newMappingList); + newConfigList.add(newConfigObj); // } } } - configList = newConfigList; - // 遍历configList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 - for (int i = 0; i < configList.size(); i++) { - JSONObject configObj = configList.getJSONObject(i); + // 遍历newConfigList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 + for (int i = 0; i < newConfigList.size(); i++) { + JSONObject configObj = newConfigList.getJSONObject(i); JSONArray mappingList = configObj.getJSONArray("mappingList"); for (int k = 0; k < mappingList.size(); k++) { JSONObject mappingObj = mappingList.getJSONObject(k); @@ -472,7 +469,20 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } - // 遍历configList,将mappingList中映射模式为“表单普通组件”和“表单表格组件”的数据替换称表单组件对应的真实值 + return newConfigList; + } + + /** + * 遍历configList,将mappingList中映射模式为“表单普通组件”和“表单表格组件”的数据替换称表单组件对应的真实值 + * @param configList 配置信息列表 + * @param formAttributeMap 表单组件信息 + * @param processTaskFormAttributeDataMap 表单数据信息 + */ + private void handleMappingFormComponent( + JSONArray configList, + Map formAttributeMap, + Map processTaskFormAttributeDataMap + ) { for (int i = 0; i < configList.size(); i++) { JSONObject configObj = configList.getJSONObject(i); JSONArray mappingList = configObj.getJSONArray("mappingList"); @@ -544,9 +554,16 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } + } + /** + * 遍历configList,根据唯一规则属性值删除重复配置信息 + * @param configList 配置信息列表 + * @return + */ + private JSONArray removeDuplicatesByUniqueAttrValue(JSONArray configList) { List uniqueAttrValueListJoinStrList = new ArrayList<>(); - JSONArray newConfigList2 = new JSONArray(); + JSONArray newConfigList = new JSONArray(); for (int i = 0; i < configList.size(); i++) { JSONObject configObj = configList.getJSONObject(i); Long ciId = configObj.getLong("ciId"); @@ -557,7 +574,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } List uniqueAttrIdList = ciVo.getUniqueAttrIdList(); if (CollectionUtils.isEmpty(uniqueAttrIdList)) { - newConfigList2.add(configObj); + newConfigList.add(configObj); } Map key2ValueListMap = new HashMap<>(); JSONArray mappingList = configObj.getJSONArray("mappingList"); @@ -605,9 +622,17 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } uniqueAttrValueListJoinStrList.add(uniqueAttrValueListJoinStr); - newConfigList2.add(configObj); + newConfigList.add(configObj); } - configList = newConfigList2; + return newConfigList; + } + + /** + * 遍历configList,重新生成uuid的值 + * @param configList 配置信息列表 + * @return + */ + private JSONArray updateUuidValue(JSONArray configList) { Map oldUuid2NewUuidMap = new HashMap<>(); // List needReplaceUuidList = new ArrayList<>(); for (int i = 0; i < configList.size(); i++) { @@ -641,17 +666,36 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } - ciEntityConfig.put("configList", configList); if (MapUtils.isNotEmpty(oldUuid2NewUuidMap)) { System.out.println("oldUuid2NewUuidMap = " + JSONObject.toJSONString(oldUuid2NewUuidMap)); - String ciEntityConfigStr = ciEntityConfig.toJSONString(); + String configListStr = configList.toJSONString(); for (Map.Entry entry : oldUuid2NewUuidMap.entrySet()) { - ciEntityConfigStr = ciEntityConfigStr.replace(entry.getKey(), entry.getValue()); + configListStr = configListStr.replace(entry.getKey(), entry.getValue()); } - return JSONObject.parseObject(ciEntityConfigStr); -// configList = ciEntityConfig.getJSONArray("configList"); + return JSONObject.parseArray(configListStr); } - return ciEntityConfig; + return configList; + } + /** + * 重新构建configList配置信息 + * @param configList 配置信息列表 + * @param formAttributeMap 表单组件信息 + * @param processTaskFormAttributeDataMap 表单数据信息 + * @return + */ + private JSONArray rebuildConfigList( + JSONArray configList, + Map formAttributeMap, + Map processTaskFormAttributeDataMap) { + // 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 + configList = handleBatchDataSource(configList, processTaskFormAttributeDataMap); + // 遍历configList,将mappingList中映射模式为“表单普通组件”和“表单表格组件”的数据替换称表单组件对应的真实值 + handleMappingFormComponent(configList, formAttributeMap, processTaskFormAttributeDataMap); + // 遍历configList,根据唯一规则属性值删除重复配置信息 + configList = removeDuplicatesByUniqueAttrValue(configList); + // 遍历configList,重新生成uuid的值 + configList = updateUuidValue(configList); + return configList; } private List createCiEntityTransactionVo( -- Gitee From 9b9138210f3ba6e585dd92718eac6eb471cc67df Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sun, 5 Nov 2023 20:47:38 +0800 Subject: [PATCH 07/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 341 +++++++++++------- 1 file changed, 203 insertions(+), 138 deletions(-) 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 0f1e911e..1ffa63f1 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -57,6 +57,7 @@ import neatlogic.module.cmdb.dao.mapper.ci.CiMapper; import neatlogic.module.cmdb.dao.mapper.ci.RelMapper; import neatlogic.module.cmdb.dao.mapper.cientity.CiEntityMapper; import neatlogic.module.cmdb.dao.mapper.globalattr.GlobalAttrMapper; +import neatlogic.module.cmdb.process.dto.*; import neatlogic.module.cmdb.service.cientity.CiEntityService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -161,8 +162,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isEmpty(ciEntityConfig)) { return 0; } + CiEntitySyncVo ciEntitySyncVo = ciEntityConfig.toJavaObject(CiEntitySyncVo.class); // rerunStepToSync为1时表示重新激活CMDB步骤时同步配置项实例,rerunStepToSync为0时表示重新激活CMDB步骤时不同步配置项实例,即什么都不做,直接自动流转到下一阶段 - Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); +// Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); + Integer rerunStepToSync = ciEntitySyncVo.getRerunStepToSync(); if (!Objects.equals(rerunStepToSync, 1)) { ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); @@ -200,11 +203,12 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskFormAttributeDataMap = processTaskFormAttributeDataList.stream().collect(Collectors.toMap(e -> e.getAttributeUuid(), e -> e)); } } - System.out.println("ciEntityConfig1 = " + ciEntityConfig); - JSONArray configList = ciEntityConfig.getJSONArray("configList"); - if (CollectionUtils.isEmpty(configList)) { - return 0; - } + System.out.println("ciEntityConfig1 = " + JSONObject.toJSONString(ciEntitySyncVo)); +// JSONArray configList = ciEntityConfig.getJSONArray("configList"); +// if (CollectionUtils.isEmpty(configList)) { +// return 0; +// } + List configList = ciEntitySyncVo.getConfigList(); /* 重新构建configList配置信息 */ configList = rebuildConfigList(configList, formAttributeMap, processTaskFormAttributeDataMap); System.out.println("ciEntityConfig2 = " + ciEntityConfig); @@ -213,18 +217,18 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } System.out.println("configList.size() = " + configList.size()); /* 遍历configList, 找出起始模型配置列表,根据id和uuid的值判断是新增还是更新 */ - List startConfigList = new ArrayList<>(); + List startConfigList = new ArrayList<>(); Map ciEntityTransactionMap = new HashMap<>(); - Map dependencyConfigMap = new HashMap<>(); - for (int i = 0; i < configList.size(); i++) { - JSONObject configObject = configList.getJSONObject(i); - String uuid = configObject.getString("uuid"); + Map dependencyConfigMap = new HashMap<>(); + for (CiEntitySyncConfigVo configObject : configList) { +// JSONObject configObject = configList.getJSONObject(i); + String uuid = configObject.getUuid(); System.out.println("uuid = " + uuid); if (StringUtils.isBlank(uuid)) { continue; } CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); - Long id = configObject.getLong("id"); + Long id = configObject.getId(); if (id != null) { System.out.println("update id = " + id); ciEntityTransactionVo.setCiEntityId(id); @@ -233,7 +237,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { System.out.println("insert uuid = " + uuid); ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); } - Integer isStart = configObject.getInteger("isStart"); + Integer isStart = configObject.getIsStart(); if (Objects.equals(isStart, 1)) { startConfigList.add(configObject); } else { @@ -247,8 +251,8 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } /* 遍历起始模型配置信息列表,生成CiEntityTransactionVo列表 */ List ciEntityTransactionList = new ArrayList<>(); - for (JSONObject mainConfigObj : startConfigList) { - Long ciId = mainConfigObj.getLong("ciId"); + for (CiEntitySyncConfigVo mainConfigObj : startConfigList) { + Long ciId = mainConfigObj.getCiId(); if (ciId == null) { return 0; } @@ -355,33 +359,38 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param processTaskFormAttributeDataMap 表单数据信息 * @return */ - private JSONArray handleBatchDataSource( - JSONArray configList, + private List handleBatchDataSource( + List configList, Map processTaskFormAttributeDataMap ) { Map> oldUuid2NewUuidListMap = new HashMap<>(); - JSONArray newConfigList = new JSONArray(); - for (int i = 0; i < configList.size(); i++) { - JSONObject configObj = configList.getJSONObject(i); - String oldUuid = configObj.getString("uuid"); - // 批量操作配置信息 - JSONObject batchDataSource = configObj.getJSONObject("batchDataSource"); - if (MapUtils.isEmpty(batchDataSource)) { + List newConfigList = new ArrayList<>(); + for (CiEntitySyncConfigVo configObj : configList) { +// JSONObject configObj = configList.getJSONObject(i); + if (!Objects.equals(configObj.getCreatePolicy(), "batch")) { // 单个操作配置,不做修改 newConfigList.add(configObj); continue; } - String attributeUuid = batchDataSource.getString("attributeUuid"); + String oldUuid = configObj.getUuid(); + // 批量操作配置信息 + CiEntitySyncBatchDataSourceVo batchDataSource = configObj.getBatchDataSource(); +// if (batchDataSource == null) { +// // 单个操作配置,不做修改 +// newConfigList.add(configObj); +// continue; +// } + String attributeUuid = batchDataSource.getAttributeUuid(); ProcessTaskFormAttributeDataVo formAttributeDataVo = processTaskFormAttributeDataMap.get(attributeUuid); - JSONArray filterList = batchDataSource.getJSONArray("filterList"); + List filterList = batchDataSource.getFilterList(); JSONArray tbodyList = getTbodyList(formAttributeDataVo, filterList); if (CollectionUtils.isEmpty(tbodyList)) { continue; } - JSONArray mappingList = configObj.getJSONArray("mappingList"); + List mappingList = configObj.getMappingList(); // 遍历批量操作表格数据 for (int j = 0; j < tbodyList.size(); j++) { - JSONObject newConfigObj = new JSONObject(); + CiEntitySyncConfigVo newConfigObj = new CiEntitySyncConfigVo(); JSONObject tbodyObj = tbodyList.getJSONObject(j); if (MapUtils.isEmpty(tbodyObj)) { logger.warn("批量操作数据源表格的第" + j + "行数据为空"); @@ -389,65 +398,94 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } System.out.println("tbodyObj = " + tbodyObj); // boolean flag = false; - JSONArray newMappingList = new JSONArray(); - for (int k = 0; k < mappingList.size(); k++) { - JSONObject newMappingObj = new JSONObject(); - JSONObject mappingObj = mappingList.getJSONObject(k); - String key = mappingObj.getString("key"); - String mappingMode = mappingObj.getString("mappingMode"); + List newMappingList = new ArrayList<>(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { + CiEntitySyncMappingVo newMappingObj = new CiEntitySyncMappingVo(mappingObj); +// JSONObject mappingObj = mappingList.getJSONObject(k); + String key = mappingObj.getKey(); + String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "formTableComponent")) { // 映射模式是表单表格组件 - JSONArray valueList = mappingObj.getJSONArray("valueList"); + JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { String value = valueList.getString(0); if (Objects.equals(value, attributeUuid)) { - String column = mappingObj.getString("column"); - String columnValue = tbodyObj.getString(column); - if (StringUtils.isNotBlank(columnValue)) { + String column = mappingObj.getColumn(); +// String columnValue = tbodyObj.getString(column); + JSONArray newValueList = new JSONArray(); + Object valueObj = tbodyObj.get(column); + if (valueObj instanceof JSONObject) { + + } else if (valueObj instanceof JSONArray) { + JSONArray valueArray = (JSONArray) valueObj; + for (int k = 0; k < valueArray.size(); k++) { + String valueStr = valueArray.getString(k); + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } + } + } else if (valueObj instanceof String) { + String valueStr = (String) valueObj; + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } + } else { + String valueStr = valueObj.toString(); + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } + } + if (CollectionUtils.isNotEmpty(newValueList)) { // flag = true; - newMappingObj.put("key", key); - newMappingObj.put("mappingMode", "constant"); - JSONArray newValueList = new JSONArray(); - newValueList.add(columnValue); - newMappingObj.put("valueList", newValueList); + newMappingObj.setMappingMode("constant"); + newMappingObj.setValueList(newValueList); } else { continue; } } else { - newMappingObj.putAll(mappingObj); +// newMappingObj.putAll(mappingObj); } } else { continue; } } else { - newMappingObj.putAll(mappingObj); +// newMappingObj.putAll(mappingObj); } newMappingList.add(newMappingObj); } // if (flag) { String newUuid = UuidUtil.randomUuid(); oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); - newConfigObj.put("uuid", newUuid); - newConfigObj.put("ciId", configObj.get("ciId")); - newConfigObj.put("ciName", configObj.get("ciName")); + newConfigObj.setUuid(newUuid); + newConfigObj.setCiId(configObj.getCiId()); + newConfigObj.setCiName(configObj.getCiName()); // newConfigObj.put("createPolicy", "single"); - newConfigObj.put("ciLabel", configObj.get("ciLabel")); - newConfigObj.put("isStart", configObj.get("isStart")); - newConfigObj.put("ciIcon", configObj.get("ciIcon")); - newConfigObj.put("mappingList", newMappingList); + newConfigObj.setCiLabel(configObj.getCiLabel()); + newConfigObj.setIsStart(configObj.getIsStart()); + newConfigObj.setCiIcon(configObj.getCiIcon()); + newConfigObj.setMappingList(newMappingList); newConfigList.add(newConfigObj); // } } } // 遍历newConfigList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 - for (int i = 0; i < newConfigList.size(); i++) { - JSONObject configObj = newConfigList.getJSONObject(i); - JSONArray mappingList = configObj.getJSONArray("mappingList"); - for (int k = 0; k < mappingList.size(); k++) { - JSONObject mappingObj = mappingList.getJSONObject(k); - String key = mappingObj.getString("key"); + for (CiEntitySyncConfigVo configObj : newConfigList) { +// JSONObject configObj = newConfigList.getJSONObject(i); + List mappingList = configObj.getMappingList(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { +// JSONObject mappingObj = mappingList.getJSONObject(k); + String key = mappingObj.getKey(); if (key.startsWith("rel")) { - JSONArray valueList = mappingObj.getJSONArray("valueList"); + JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { JSONObject valueObj = valueList.getJSONObject(0); String type = valueObj.getString("type"); @@ -462,7 +500,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { newValueObj.put("ciEntityUuid", newUuid); newValueList.add(newValueObj); } - mappingObj.put("valueList", newValueList); + mappingObj.setValueList(newValueList); } } } @@ -479,46 +517,72 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param processTaskFormAttributeDataMap 表单数据信息 */ private void handleMappingFormComponent( - JSONArray configList, + List configList, Map formAttributeMap, Map processTaskFormAttributeDataMap ) { - for (int i = 0; i < configList.size(); i++) { - JSONObject configObj = configList.getJSONObject(i); - JSONArray mappingList = configObj.getJSONArray("mappingList"); - for (int k = 0; k < mappingList.size(); k++) { - JSONObject mappingObj = mappingList.getJSONObject(k); - JSONArray valueList = mappingObj.getJSONArray("valueList"); + for (CiEntitySyncConfigVo configObj : configList) { + List mappingList = configObj.getMappingList(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { + JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isEmpty(valueList)) { continue; } JSONArray newValueList = new JSONArray(); - String mappingMode = mappingObj.getString("mappingMode"); - mappingObj.put("mappingMode", "constant"); - mappingObj.put("valueList", newValueList); + String mappingMode = mappingObj.getMappingMode(); + mappingObj.setValueList(newValueList); if (Objects.equals(mappingMode, "formTableComponent")) { + mappingObj.setMappingMode("constant"); ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); if (attributeDataVo == null) { continue; } - JSONArray filterList = mappingObj.getJSONArray("filterList"); +// JSONArray filterList = mappingObj.getJSONArray("filterList"); + List filterList = mappingObj.getFilterList(); JSONArray tbodyList = getTbodyList(attributeDataVo, filterList); if (CollectionUtils.isEmpty(tbodyList)) { continue; } - String column = mappingObj.getString("column"); + String column = mappingObj.getColumn(); for (int m = 0; m < tbodyList.size(); m++) { JSONObject tbodyObj = tbodyList.getJSONObject(m); if (MapUtils.isEmpty(tbodyObj)) { continue; } - String columnValue = tbodyObj.getString(column); - if (StringUtils.isBlank(columnValue)) { - continue; + Object valueObj = tbodyObj.get(column); + if (valueObj instanceof JSONObject) { + + } else if (valueObj instanceof JSONArray) { + JSONArray valueArray = (JSONArray) valueObj; + for (int j = 0; j < valueArray.size(); j++) { + String valueStr = valueArray.getString(j); + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } + } + } else if (valueObj instanceof String) { + String valueStr = (String) valueObj; + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } + } else { + String valueStr = valueObj.toString(); + if (valueStr.contains("&=&")) { + String[] split = valueStr.split("&=&"); + newValueList.add(split[0]); + } else { + newValueList.add(valueStr); + } } - newValueList.add(columnValue); } } else if (Objects.equals(mappingMode, "formCommonComponent")) { + mappingObj.setMappingMode("constant"); ProcessTaskFormAttributeDataVo attributeDataVo = processTaskFormAttributeDataMap.get(valueList.getString(0)); if (attributeDataVo == null) { continue; @@ -561,15 +625,15 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param configList 配置信息列表 * @return */ - private JSONArray removeDuplicatesByUniqueAttrValue(JSONArray configList) { + private List removeDuplicatesByUniqueAttrValue(List configList) { List uniqueAttrValueListJoinStrList = new ArrayList<>(); - JSONArray newConfigList = new JSONArray(); - for (int i = 0; i < configList.size(); i++) { - JSONObject configObj = configList.getJSONObject(i); - Long ciId = configObj.getLong("ciId"); + List newConfigList = new ArrayList<>(); + for (CiEntitySyncConfigVo configObj : configList) { +// JSONObject configObj = configList.getJSONObject(i); + Long ciId = configObj.getCiId(); CiVo ciVo = ciMapper.getCiById(ciId); if (ciVo == null) { - String ciName = configObj.getString("ciName"); + String ciName = configObj.getCiName(); throw new CiNotFoundException(ciName); } List uniqueAttrIdList = ciVo.getUniqueAttrIdList(); @@ -577,11 +641,11 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { newConfigList.add(configObj); } Map key2ValueListMap = new HashMap<>(); - JSONArray mappingList = configObj.getJSONArray("mappingList"); - for (int j = 0; j < mappingList.size(); j++) { - JSONObject mappingObj = mappingList.getJSONObject(j); - String key = mappingObj.getString("key"); - JSONArray valueList = mappingObj.getJSONArray("valueList"); + List mappingList = configObj.getMappingList(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { +// JSONObject mappingObj = mappingList.getJSONObject(j); + String key = mappingObj.getKey(); + JSONArray valueList = mappingObj.getValueList(); key2ValueListMap.put(key, valueList); } List list = new ArrayList<>(); @@ -618,7 +682,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (CollectionUtils.isNotEmpty(ciEntityConditionVo.getAttrFilterList())) { List checkList = ciEntityService.searchCiEntity(ciEntityConditionVo); if (CollectionUtils.isNotEmpty(checkList)) { - configObj.put("id", checkList.get(0).getId()); + configObj.setId(checkList.get(0).getId()); } } uniqueAttrValueListJoinStrList.add(uniqueAttrValueListJoinStr); @@ -632,20 +696,21 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param configList 配置信息列表 * @return */ - private JSONArray updateUuidValue(JSONArray configList) { + private List updateUuidValue(List configList) { Map oldUuid2NewUuidMap = new HashMap<>(); // List needReplaceUuidList = new ArrayList<>(); - for (int i = 0; i < configList.size(); i++) { - JSONObject configObject = configList.getJSONObject(i); - Integer isStart = configObject.getInteger("isStart"); + for (CiEntitySyncConfigVo configObject : configList) { +// JSONObject configObject = configList.getJSONObject(i); + Integer isStart = configObject.getIsStart(); if (Objects.equals(isStart, 1)) { + // TODO } - String uuid = configObject.getString("uuid"); - Long id = configObject.getLong("id"); + String uuid = configObject.getUuid(); + Long id = configObject.getId(); if (id != null) { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); if (ciEntityVo == null) { - configObject.remove("id"); + configObject.setId(null); // needReplaceUuidList.add(uuid); oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); } else { @@ -661,18 +726,18 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // needReplaceUuidList.add(uuid); oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); } else { - configObject.put("id", ciEntityVo.getId()); + configObject.setId(ciEntityVo.getId()); } } } } if (MapUtils.isNotEmpty(oldUuid2NewUuidMap)) { System.out.println("oldUuid2NewUuidMap = " + JSONObject.toJSONString(oldUuid2NewUuidMap)); - String configListStr = configList.toJSONString(); + String configListStr = JSONObject.toJSONString(configList); for (Map.Entry entry : oldUuid2NewUuidMap.entrySet()) { configListStr = configListStr.replace(entry.getKey(), entry.getValue()); } - return JSONObject.parseArray(configListStr); + return JSONObject.parseArray(configListStr, CiEntitySyncConfigVo.class); } return configList; } @@ -683,8 +748,8 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { * @param processTaskFormAttributeDataMap 表单数据信息 * @return */ - private JSONArray rebuildConfigList( - JSONArray configList, + private List rebuildConfigList( + List configList, Map formAttributeMap, Map processTaskFormAttributeDataMap) { // 遍历configList,将“批量操作”的配置信息根据表单数据转换成多条“单个操作”配置信息 @@ -700,28 +765,28 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { private List createCiEntityTransactionVo( Map ciEntityTransactionMap, - JSONObject mainConfigObj, - Map dependencyConfigMap, + CiEntitySyncConfigVo mainConfigObj, + Map dependencyConfigMap, Map formAttributeMap, Map processTaskFormAttributeDataMap) { List ciEntityTransactionList = new ArrayList<>(); - Long ciId = mainConfigObj.getLong("ciId"); - Map mappingMap = new HashMap<>(); - JSONArray mappingList = mainConfigObj.getJSONArray("mappingList"); - for (int i = 0; i < mappingList.size(); i++) { - JSONObject mappingObj = mappingList.getJSONObject(i); - if (MapUtils.isEmpty(mappingObj)) { - continue; - } - String key = mappingObj.getString("key"); + Long ciId = mainConfigObj.getCiId(); + Map mappingMap = new HashMap<>(); + List mappingList = mainConfigObj.getMappingList(); + for (CiEntitySyncMappingVo mappingObj : mappingList) { +// JSONObject mappingObj = mappingList.getJSONObject(i); +// if (MapUtils.isEmpty(mappingObj)) { +// continue; +// } + String key = mappingObj.getKey(); if (StringUtils.isBlank(key)) { continue; } mappingMap.put(key, mappingObj); } - Long id = mainConfigObj.getLong("id"); - String uuid = mainConfigObj.getString("uuid"); + Long id = mainConfigObj.getId(); + String uuid = mainConfigObj.getUuid(); CiEntityTransactionVo ciEntityTransactionVo = ciEntityTransactionMap.get(uuid); if (id != null) { ciEntityTransactionVo.setCiEntityId(id); @@ -731,9 +796,9 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } ciEntityTransactionVo.setCiId(ciId); /** 变更说明 **/ - JSONObject descriptionMappingObj = mappingMap.get("description"); - if (MapUtils.isNotEmpty(descriptionMappingObj)) { - JSONArray valueList = descriptionMappingObj.getJSONArray("valueList"); + CiEntitySyncMappingVo descriptionMappingObj = mappingMap.get("description"); + if (descriptionMappingObj != null) { + JSONArray valueList = descriptionMappingObj.getValueList(); if (CollectionUtils.isEmpty(valueList)) { System.out.println("description is null"); } @@ -755,14 +820,14 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { continue; } String key = "attr_" + attrVo.getId(); - JSONObject mappingObj = mappingMap.get(key); - if (MapUtils.isEmpty(mappingObj)) { + CiEntitySyncMappingVo mappingObj = mappingMap.get(key); + if (mappingObj == null) { System.out.println(key + " is null"); continue; } // JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); // 映射模式为常量 - JSONArray valueList = mappingObj.getJSONArray("valueList"); + JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { // valueList = valueArray; for (int i = valueList.size() - 1; i >= 0; i--) { @@ -804,14 +869,14 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { List relList = RelUtil.ClearRepeatRel(relMapper.getRelByCiId(ciId)); for (RelVo relVo : relList) { String key = "rel" + relVo.getDirection() + "_" + relVo.getId(); - JSONObject mappingObj = mappingMap.get(key); - if (MapUtils.isEmpty(mappingObj)) { + CiEntitySyncMappingVo mappingObj = mappingMap.get(key); + if (mappingObj == null) { System.out.println(key + " is null"); continue; } - String mappingMode = mappingObj.getString("mappingMode"); + String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "new")) { - JSONArray valueList = mappingObj.getJSONArray("valueList"); + JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { for (int i = 0; i < valueList.size(); i++) { JSONObject valueObj = valueList.getJSONObject(i); @@ -841,8 +906,8 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (!Objects.equals(type, "new")) { continue; } - JSONObject dependencyConfig = dependencyConfigMap.get(ciEntityUuid); - if (MapUtils.isNotEmpty(dependencyConfig)) { + CiEntitySyncConfigVo dependencyConfig = dependencyConfigMap.get(ciEntityUuid); + if (dependencyConfig != null) { List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); ciEntityTransactionList.addAll(list); } @@ -862,17 +927,17 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { List globalAttrList = globalAttrMapper.searchGlobalAttr(searchVo); for (GlobalAttrVo globalAttrVo : globalAttrList) { String key = "global_" + globalAttrVo.getId(); - JSONObject mappingObj = mappingMap.get(key); - if (MapUtils.isEmpty(mappingObj)) { + CiEntitySyncMappingVo mappingObj = mappingMap.get(key); + if (mappingObj == null) { System.out.println(key + " is null"); continue; } // JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); JSONArray valueList = new JSONArray(); - String mappingMode = mappingObj.getString("mappingMode"); + String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "constant")) { // 映射模式为常量 - JSONArray valueArray = mappingObj.getJSONArray("valueList"); + JSONArray valueArray = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueArray)) { valueList = valueArray; } @@ -887,7 +952,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return ciEntityTransactionList; } - private JSONArray getTbodyList(ProcessTaskFormAttributeDataVo formAttributeDataVo, JSONArray filterList) { + private JSONArray getTbodyList(ProcessTaskFormAttributeDataVo formAttributeDataVo, List filterList) { JSONArray tbodyList = new JSONArray(); if (formAttributeDataVo == null) { return tbodyList; @@ -908,20 +973,20 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { continue; } boolean flag = true; - for (int j = 0; j < filterList.size(); j++) { - JSONObject filterObj = filterList.getJSONObject(j); - if (MapUtils.isEmpty(filterObj)) { - continue; - } - String column = filterObj.getString("column"); + for (CiEntitySyncFilterVo filterObj : filterList) { +// JSONObject filterObj = filterList.getJSONObject(j); +// if (MapUtils.isEmpty(filterObj)) { +// continue; +// } + String column = filterObj.getColumn(); if (StringUtils.isBlank(column)) { continue; } - String expression = filterObj.getString("expression"); + String expression = filterObj.getExpression(); if (StringUtils.isBlank(expression)) { continue; } - String value = filterObj.getString("value"); + String value = filterObj.getValue(); if (StringUtils.isBlank(value)) { continue; } -- Gitee From 3b0a6cf8511350b2ddc594731b2a2ab7c29b5cf4 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sun, 5 Nov 2023 20:48:15 +0800 Subject: [PATCH 08/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../dto/CiEntitySyncBatchDataSourceVo.java | 24 ++++ .../process/dto/CiEntitySyncConfigVo.java | 110 ++++++++++++++++++ .../process/dto/CiEntitySyncFilterVo.java | 31 +++++ .../process/dto/CiEntitySyncMappingVo.java | 63 ++++++++++ .../cmdb/process/dto/CiEntitySyncVo.java | 33 ++++++ 5 files changed, 261 insertions(+) create mode 100644 src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncBatchDataSourceVo.java create mode 100644 src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java create mode 100644 src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncFilterVo.java create mode 100644 src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java create mode 100644 src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncVo.java diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncBatchDataSourceVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncBatchDataSourceVo.java new file mode 100644 index 00000000..933002cb --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncBatchDataSourceVo.java @@ -0,0 +1,24 @@ +package neatlogic.module.cmdb.process.dto; + +import java.util.List; + +public class CiEntitySyncBatchDataSourceVo { + private String attributeUuid; + private List filterList; + + public String getAttributeUuid() { + return attributeUuid; + } + + public void setAttributeUuid(String attributeUuid) { + this.attributeUuid = attributeUuid; + } + + public List getFilterList() { + return filterList; + } + + public void setFilterList(List filterList) { + this.filterList = filterList; + } +} diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java new file mode 100644 index 00000000..1b994e84 --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncConfigVo.java @@ -0,0 +1,110 @@ +package neatlogic.module.cmdb.process.dto; + +import java.util.List; + +public class CiEntitySyncConfigVo { + private Long id; + private String uuid; + private Long ciId; + private String ciName; + private String ciLabel; + private String ciIcon; + /** 是否是起始模型 **/ + private Integer isStart; + /** 单个和批量 **/ + private String createPolicy; + /** 追加或替换 **/ + private String action; + /** 批量数据 **/ + private CiEntitySyncBatchDataSourceVo batchDataSource; + /** 全局属性、属性和关系映射列表 **/ + private List mappingList; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Long getCiId() { + return ciId; + } + + public void setCiId(Long ciId) { + this.ciId = ciId; + } + + public String getCiName() { + return ciName; + } + + public void setCiName(String ciName) { + this.ciName = ciName; + } + + public String getCiLabel() { + return ciLabel; + } + + public void setCiLabel(String ciLabel) { + this.ciLabel = ciLabel; + } + + public String getCiIcon() { + return ciIcon; + } + + public void setCiIcon(String ciIcon) { + this.ciIcon = ciIcon; + } + + public Integer getIsStart() { + return isStart; + } + + public void setIsStart(Integer isStart) { + this.isStart = isStart; + } + + public String getCreatePolicy() { + return createPolicy; + } + + public void setCreatePolicy(String createPolicy) { + this.createPolicy = createPolicy; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public CiEntitySyncBatchDataSourceVo getBatchDataSource() { + return batchDataSource; + } + + public void setBatchDataSource(CiEntitySyncBatchDataSourceVo batchDataSource) { + this.batchDataSource = batchDataSource; + } + + public List getMappingList() { + return mappingList; + } + + public void setMappingList(List mappingList) { + this.mappingList = mappingList; + } +} diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncFilterVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncFilterVo.java new file mode 100644 index 00000000..4f8f4651 --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncFilterVo.java @@ -0,0 +1,31 @@ +package neatlogic.module.cmdb.process.dto; + +public class CiEntitySyncFilterVo { + private String column; + private String expression; + private String value; + + public String getColumn() { + return column; + } + + public void setColumn(String column) { + this.column = column; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java new file mode 100644 index 00000000..873ad004 --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java @@ -0,0 +1,63 @@ +package neatlogic.module.cmdb.process.dto; + +import com.alibaba.fastjson.JSONArray; + +import java.util.List; + +public class CiEntitySyncMappingVo { + private String key; + private String mappingMode; + private String column; + private List filterList; + private JSONArray valueList; + + public CiEntitySyncMappingVo() {} + + public CiEntitySyncMappingVo(CiEntitySyncMappingVo ciEntitySyncMappingVo) { + this.key = ciEntitySyncMappingVo.getKey(); + this.mappingMode = ciEntitySyncMappingVo.getMappingMode(); + this.column = ciEntitySyncMappingVo.getColumn(); + this.filterList = ciEntitySyncMappingVo.getFilterList(); + this.valueList = ciEntitySyncMappingVo.getValueList(); + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getMappingMode() { + return mappingMode; + } + + public void setMappingMode(String mappingMode) { + this.mappingMode = mappingMode; + } + + public String getColumn() { + return column; + } + + public void setColumn(String column) { + this.column = column; + } + + public List getFilterList() { + return filterList; + } + + public void setFilterList(List filterList) { + this.filterList = filterList; + } + + public JSONArray getValueList() { + return valueList; + } + + public void setValueList(JSONArray valueList) { + this.valueList = valueList; + } +} diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncVo.java new file mode 100644 index 00000000..d1f1848e --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncVo.java @@ -0,0 +1,33 @@ +package neatlogic.module.cmdb.process.dto; + +import java.util.List; + +public class CiEntitySyncVo { + private String failPolicy; + private Integer rerunStepToSync; + private List configList; + + public String getFailPolicy() { + return failPolicy; + } + + public void setFailPolicy(String failPolicy) { + this.failPolicy = failPolicy; + } + + public Integer getRerunStepToSync() { + return rerunStepToSync; + } + + public void setRerunStepToSync(Integer rerunStepToSync) { + this.rerunStepToSync = rerunStepToSync; + } + + public List getConfigList() { + return configList; + } + + public void setConfigList(List configList) { + this.configList = configList; + } +} -- Gitee From 714bae87fd41838e4ac7a5270ab249ad305c0b0b Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Wed, 8 Nov 2023 15:31:18 +0800 Subject: [PATCH 09/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../process/dto/CiEntitySyncMappingVo.java | 30 +- .../stephandler/CmdbSyncProcessComponent.java | 378 +++++++++++------- .../CmdbSyncProcessUtilHandler.java | 298 +++++++++++++- 3 files changed, 552 insertions(+), 154 deletions(-) diff --git a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java index 873ad004..924b6dbf 100644 --- a/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java +++ b/src/main/java/neatlogic/module/cmdb/process/dto/CiEntitySyncMappingVo.java @@ -1,7 +1,10 @@ package neatlogic.module.cmdb.process.dto; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections4.CollectionUtils; +import java.util.ArrayList; import java.util.List; public class CiEntitySyncMappingVo { @@ -17,8 +20,31 @@ public class CiEntitySyncMappingVo { this.key = ciEntitySyncMappingVo.getKey(); this.mappingMode = ciEntitySyncMappingVo.getMappingMode(); this.column = ciEntitySyncMappingVo.getColumn(); - this.filterList = ciEntitySyncMappingVo.getFilterList(); - this.valueList = ciEntitySyncMappingVo.getValueList(); + List newFilterList = ciEntitySyncMappingVo.getFilterList(); + if (CollectionUtils.isNotEmpty(newFilterList)) { + this.filterList = new ArrayList<>(); + for (CiEntitySyncFilterVo filter : newFilterList) { + CiEntitySyncFilterVo filterVo = new CiEntitySyncFilterVo(); + filterVo.setColumn(filter.getColumn()); + filterVo.setExpression(filter.getExpression()); + filterVo.setValue(filter.getValue()); + this.filterList.add(filterVo); + } + } + JSONArray newValueList = ciEntitySyncMappingVo.getValueList(); + if (CollectionUtils.isNotEmpty(newValueList)) { + this.valueList = new JSONArray(); + for (int i = 0; i < newValueList.size(); i++) { + Object obj = newValueList.get(i); + if (obj instanceof JSONObject) { + JSONObject jsonObj = new JSONObject(); + jsonObj.putAll((JSONObject) obj); + this.valueList.add(jsonObj); + } else { + this.valueList.add(obj); + } + } + } } public String getKey() { 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 1ffa63f1..c7faedea 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -26,8 +26,10 @@ import neatlogic.framework.cmdb.dto.ci.CiVo; 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.RelEntityVo; import neatlogic.framework.cmdb.dto.globalattr.GlobalAttrVo; import neatlogic.framework.cmdb.dto.transaction.CiEntityTransactionVo; +import neatlogic.framework.cmdb.enums.RelDirectionType; import neatlogic.framework.cmdb.enums.SearchExpression; import neatlogic.framework.cmdb.enums.TransactionActionType; import neatlogic.framework.cmdb.exception.ci.CiNotFoundException; @@ -40,6 +42,7 @@ import neatlogic.framework.form.dto.FormAttributeVo; import neatlogic.framework.form.dto.FormVersionVo; import neatlogic.framework.process.constvalue.ProcessFlowDirection; import neatlogic.framework.process.constvalue.ProcessStepMode; +import neatlogic.framework.process.constvalue.ProcessTaskAuditType; import neatlogic.framework.process.constvalue.ProcessTaskOperationType; import neatlogic.framework.process.constvalue.automatic.FailPolicy; import neatlogic.framework.process.dao.mapper.ProcessTaskStepDataMapper; @@ -56,7 +59,9 @@ import neatlogic.module.cmdb.dao.mapper.ci.AttrMapper; import neatlogic.module.cmdb.dao.mapper.ci.CiMapper; 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.process.constvalue.CmdbAuditDetailType; import neatlogic.module.cmdb.process.dto.*; import neatlogic.module.cmdb.service.cientity.CiEntityService; import org.apache.commons.collections4.CollectionUtils; @@ -93,6 +98,9 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { @Resource private CiEntityMapper ciEntityMapper; + @Resource + private RelEntityMapper relEntityMapper; + @Resource private CiEntityService ciEntityService; @@ -162,26 +170,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isEmpty(ciEntityConfig)) { return 0; } - CiEntitySyncVo ciEntitySyncVo = ciEntityConfig.toJavaObject(CiEntitySyncVo.class); - // rerunStepToSync为1时表示重新激活CMDB步骤时同步配置项实例,rerunStepToSync为0时表示重新激活CMDB步骤时不同步配置项实例,即什么都不做,直接自动流转到下一阶段 -// Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); - Integer rerunStepToSync = ciEntitySyncVo.getRerunStepToSync(); - if (!Objects.equals(rerunStepToSync, 1)) { - ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); - search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); - search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); - search.setType("ciEntitySyncResult"); - ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); - if (processTaskStepData != null) { - autoComplete2(currentProcessTaskStepVo); - return 1; - } - } - ProcessTaskStepDataVo processTaskStepData = new ProcessTaskStepDataVo(); - processTaskStepData.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); - processTaskStepData.setProcessTaskStepId(currentProcessTaskStepVo.getId()); - processTaskStepData.setType("ciEntitySyncError"); - processTaskStepDataMapper.deleteProcessTaskStepData(processTaskStepData); Map processTaskFormAttributeDataMap = new HashMap<>(); Map formAttributeMap = new HashMap<>(); @@ -203,108 +191,159 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskFormAttributeDataMap = processTaskFormAttributeDataList.stream().collect(Collectors.toMap(e -> e.getAttributeUuid(), e -> e)); } } - System.out.println("ciEntityConfig1 = " + JSONObject.toJSONString(ciEntitySyncVo)); + boolean flag = false; + JSONArray errorMessageList = new JSONArray(); + try { + CiEntitySyncVo ciEntitySyncVo = ciEntityConfig.toJavaObject(CiEntitySyncVo.class); + // rerunStepToSync为1时表示重新激活CMDB步骤时同步配置项实例,rerunStepToSync为0时表示重新激活CMDB步骤时不同步配置项实例,即什么都不做,直接自动流转到下一阶段 +// Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); + Integer rerunStepToSync = ciEntitySyncVo.getRerunStepToSync(); + if (!Objects.equals(rerunStepToSync, 1)) { + ProcessTaskStepDataVo searchVo = new ProcessTaskStepDataVo(); + searchVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + searchVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + searchVo.setType("ciEntitySyncResult"); + ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(searchVo); + if (processTaskStepData != null) { + autoComplete2(currentProcessTaskStepVo); + return 1; + } + } + ProcessTaskStepDataVo searchVo = new ProcessTaskStepDataVo(); + searchVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + searchVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + searchVo.setType("ciEntitySyncError"); + ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(searchVo); + if (processTaskStepData != null) { + processTaskStepDataMapper.deleteProcessTaskStepDataById(processTaskStepData.getId()); + } // JSONArray configList = ciEntityConfig.getJSONArray("configList"); // if (CollectionUtils.isEmpty(configList)) { // return 0; // } - List configList = ciEntitySyncVo.getConfigList(); - /* 重新构建configList配置信息 */ - configList = rebuildConfigList(configList, formAttributeMap, processTaskFormAttributeDataMap); - System.out.println("ciEntityConfig2 = " + ciEntityConfig); - if (CollectionUtils.isEmpty(configList)) { - return 1; - } - System.out.println("configList.size() = " + configList.size()); - /* 遍历configList, 找出起始模型配置列表,根据id和uuid的值判断是新增还是更新 */ - List startConfigList = new ArrayList<>(); - Map ciEntityTransactionMap = new HashMap<>(); - Map dependencyConfigMap = new HashMap<>(); - for (CiEntitySyncConfigVo configObject : configList) { -// JSONObject configObject = configList.getJSONObject(i); - String uuid = configObject.getUuid(); - System.out.println("uuid = " + uuid); - if (StringUtils.isBlank(uuid)) { - continue; - } - CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); - Long id = configObject.getId(); - if (id != null) { - System.out.println("update id = " + id); - ciEntityTransactionVo.setCiEntityId(id); - ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); - } else { - System.out.println("insert uuid = " + uuid); - ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); + List configList = ciEntitySyncVo.getConfigList(); + System.out.println("configList1 = " + JSONObject.toJSONString(configList)); + /* 重新构建configList配置信息 */ + configList = rebuildConfigList(configList, formAttributeMap, processTaskFormAttributeDataMap); + System.out.println("configList2 = " + JSONObject.toJSONString(configList)); + if (CollectionUtils.isEmpty(configList)) { + return 1; } - Integer isStart = configObject.getIsStart(); - if (Objects.equals(isStart, 1)) { - startConfigList.add(configObject); - } else { - dependencyConfigMap.put(uuid, configObject); + System.out.println("configList.size() = " + configList.size()); + /* 遍历configList, 找出起始模型配置列表,根据id和uuid的值判断是新增还是更新 */ + List startConfigList = new ArrayList<>(); + Map ciEntityTransactionMap = new HashMap<>(); + Map dependencyConfigMap = new HashMap<>(); + for (CiEntitySyncConfigVo configObject : configList) { +// JSONObject configObject = configList.getJSONObject(i); + String uuid = configObject.getUuid(); + System.out.println("uuid = " + uuid); + if (StringUtils.isBlank(uuid)) { + continue; + } + Long ciId = configObject.getCiId(); + if (ciId == null) { + continue; + } + CiEntityTransactionVo ciEntityTransactionVo = new CiEntityTransactionVo(); + ciEntityTransactionVo.setCiEntityUuid(uuid); + ciEntityTransactionVo.setCiId(ciId); + Long id = configObject.getId(); + if (id != null) { + System.out.println("update id = " + id); + ciEntityTransactionVo.setCiEntityId(id); + ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); + } else { + System.out.println("insert uuid = " + uuid); + ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); + } + Integer isStart = configObject.getIsStart(); + if (Objects.equals(isStart, 1)) { + startConfigList.add(configObject); + } else { + dependencyConfigMap.put(uuid, configObject); + } + ciEntityTransactionMap.put(uuid, ciEntityTransactionVo); } - ciEntityTransactionVo.setCiEntityUuid(uuid); - ciEntityTransactionMap.put(uuid, ciEntityTransactionVo); - } - if (CollectionUtils.isEmpty(startConfigList)) { - return 0; - } - /* 遍历起始模型配置信息列表,生成CiEntityTransactionVo列表 */ - List ciEntityTransactionList = new ArrayList<>(); - for (CiEntitySyncConfigVo mainConfigObj : startConfigList) { - Long ciId = mainConfigObj.getCiId(); - if (ciId == null) { + if (CollectionUtils.isEmpty(startConfigList)) { return 0; } - List list = createCiEntityTransactionVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - for (CiEntityTransactionVo ciEntityTransactionVo : list) { - if (!ciEntityTransactionList.contains(ciEntityTransactionVo)) { - ciEntityTransactionList.add(ciEntityTransactionVo); + /* 遍历起始模型配置信息列表,生成CiEntityTransactionVo列表 */ + List ciEntityTransactionList = new ArrayList<>(); + for (CiEntitySyncConfigVo mainConfigObj : startConfigList) { + List list = createCiEntityTransactionVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + for (CiEntityTransactionVo ciEntityTransactionVo : list) { + if (!ciEntityTransactionList.contains(ciEntityTransactionVo)) { + ciEntityTransactionList.add(ciEntityTransactionVo); + } } } - } - boolean flag = false; - JSONArray errorMessageList = new JSONArray(); - if (CollectionUtils.isNotEmpty(ciEntityTransactionList)) { - for (CiEntityTransactionVo t : ciEntityTransactionList) { - t.setAllowCommit(true); - } - System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); - System.out.println("ciEntityTransactionList.size() = " + ciEntityTransactionList.size()); - EscapeTransactionJob.State s = new EscapeTransactionJob(() -> { - InputFromContext.init(InputFrom.ITSM); - Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); - System.out.println("transactionGroupId = " + transactionGroupId); - ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); - search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); - search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); - search.setType("ciEntitySyncResult"); - ProcessTaskStepDataVo oldProcessTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); - if (oldProcessTaskStepData != null) { - JSONObject dataObj = oldProcessTaskStepData.getData(); - JSONArray transactionGroupIdList = dataObj.getJSONArray("transactionGroupIdList"); - transactionGroupIdList.add(transactionGroupId); - } else { - oldProcessTaskStepData = search; - oldProcessTaskStepData.setFcu(UserContext.get().getUserUuid()); + if (CollectionUtils.isNotEmpty(ciEntityTransactionList)) { + for (CiEntityTransactionVo t : ciEntityTransactionList) { + t.setAllowCommit(true); + } + System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); + System.out.println("ciEntityTransactionList.size() = " + ciEntityTransactionList.size()); + EscapeTransactionJob.State s = new EscapeTransactionJob(() -> { + InputFromContext.init(InputFrom.ITSM); + Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); +// Long transactionGroupId = 0L; + currentProcessTaskStepVo.getParamObj().put(CmdbAuditDetailType.CMDBSYNCMESSAGE.getParamName(), transactionGroupId); + System.out.println("transactionGroupId = " + transactionGroupId); + ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); + search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + search.setType("ciEntitySyncResult"); + ProcessTaskStepDataVo oldProcessTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); + if (oldProcessTaskStepData != null) { + JSONObject dataObj = oldProcessTaskStepData.getData(); + JSONArray transactionGroupList = dataObj.getJSONArray("transactionGroupList"); + JSONObject jsonObj = new JSONObject(); + jsonObj.put("time", System.currentTimeMillis()); + jsonObj.put("transactionGroupId", transactionGroupId); + transactionGroupList.add(jsonObj); + } else { + oldProcessTaskStepData = search; + oldProcessTaskStepData.setFcu(UserContext.get().getUserUuid()); + JSONObject dataObj = new JSONObject(); + JSONArray transactionGroupList = new JSONArray(); + JSONObject jsonObj = new JSONObject(); + jsonObj.put("time", System.currentTimeMillis()); + jsonObj.put("transactionGroupId", transactionGroupId); + transactionGroupList.add(jsonObj); + dataObj.put("transactionGroupList", transactionGroupList); + oldProcessTaskStepData.setData(dataObj.toJSONString()); + } + processTaskStepDataMapper.replaceProcessTaskStepData(oldProcessTaskStepData); + }).execute(); + if (!s.isSucceed()) { + // 增加提醒 + logger.error(s.getError(), s.getException()); + JSONObject errorMessageObj = new JSONObject(); + errorMessageObj.put("error", s.getError()); + errorMessageList.add(errorMessageObj); JSONObject dataObj = new JSONObject(); - List transactionGroupIdList = new ArrayList<>(); - transactionGroupIdList.add(transactionGroupId); - dataObj.put("transactionGroupIdList", transactionGroupIdList); - oldProcessTaskStepData.setData(dataObj.toJSONString()); + dataObj.put("time", System.currentTimeMillis()); + dataObj.put("errorList", errorMessageList); + currentProcessTaskStepVo.getParamObj().put(CmdbAuditDetailType.CMDBSYNCMESSAGE.getParamName(), dataObj.toJSONString()); + flag = true; } - processTaskStepDataMapper.replaceProcessTaskStepData(oldProcessTaskStepData); - }).execute(); - if (!s.isSucceed()) { - // 增加提醒 - logger.error(s.getError(), s.getException()); - JSONObject errorMessageObj = new JSONObject(); - errorMessageObj.put("error", s.getError()); - errorMessageList.add(errorMessageObj); - flag = true; + /* 处理历史记录 **/ + IProcessStepHandlerUtil.audit(currentProcessTaskStepVo, ProcessTaskAuditType.ACTIVE); } - + } catch (Exception e) { + // 增加提醒 + logger.error(e.getMessage(), e); + JSONObject errorMessageObj = new JSONObject(); + errorMessageObj.put("error", e.getMessage()); + errorMessageList.add(errorMessageObj); + JSONObject dataObj = new JSONObject(); + dataObj.put("time", System.currentTimeMillis()); + dataObj.put("errorList", errorMessageList); + currentProcessTaskStepVo.getParamObj().put(CmdbAuditDetailType.CMDBSYNCMESSAGE.getParamName(), dataObj.toJSONString()); + flag = true; } + // 如果有异常,则根据失败策略执行操作 if (flag) { ProcessTaskStepDataVo processTaskStepDataVo = new ProcessTaskStepDataVo(); @@ -312,6 +351,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskStepDataVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); processTaskStepDataVo.setType("ciEntitySyncError"); JSONObject dataObj = new JSONObject(); + dataObj.put("time", System.currentTimeMillis()); dataObj.put("errorList", errorMessageList); processTaskStepDataVo.setData(dataObj.toJSONString()); processTaskStepDataVo.setFcu(UserContext.get().getUserUuid()); @@ -390,13 +430,13 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { List mappingList = configObj.getMappingList(); // 遍历批量操作表格数据 for (int j = 0; j < tbodyList.size(); j++) { - CiEntitySyncConfigVo newConfigObj = new CiEntitySyncConfigVo(); JSONObject tbodyObj = tbodyList.getJSONObject(j); if (MapUtils.isEmpty(tbodyObj)) { logger.warn("批量操作数据源表格的第" + j + "行数据为空"); continue; } System.out.println("tbodyObj = " + tbodyObj); + CiEntitySyncConfigVo newConfigObj = new CiEntitySyncConfigVo(); // boolean flag = false; List newMappingList = new ArrayList<>(); for (CiEntitySyncMappingVo mappingObj : mappingList) { @@ -477,6 +517,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { // } } } + System.out.println("oldUuid2NewUuidListMap = " + JSONObject.toJSONString(oldUuid2NewUuidListMap)); // 遍历newConfigList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 for (CiEntitySyncConfigVo configObj : newConfigList) { // JSONObject configObj = newConfigList.getJSONObject(i); @@ -487,21 +528,27 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (key.startsWith("rel")) { JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { - JSONObject valueObj = valueList.getJSONObject(0); - String type = valueObj.getString("type"); - if (Objects.equals(type, "new")) { - String ciEntityUuid = valueObj.getString("ciEntityUuid"); - List newUuidList = oldUuid2NewUuidListMap.get(ciEntityUuid); - if (CollectionUtils.isNotEmpty(newUuidList)) { - JSONArray newValueList = new JSONArray(); - for (String newUuid : newUuidList) { + JSONArray newValueList = new JSONArray(); + for (int i = 0; i < valueList.size(); i++) { + JSONObject valueObj = valueList.getJSONObject(i); +// String type = valueObj.getString("type"); +// if (Objects.equals(type, "new")) { + String ciEntityUuid = valueObj.getString("ciEntityUuid"); + List newUuidList = oldUuid2NewUuidListMap.get(ciEntityUuid); + if (CollectionUtils.isNotEmpty(newUuidList)) { + for (String newUuid : newUuidList) { + JSONObject newValueObj = new JSONObject(); + newValueObj.putAll(valueObj); + newValueObj.put("ciEntityUuid", newUuid); + newValueList.add(newValueObj); + } + mappingObj.setValueList(newValueList); + } else { JSONObject newValueObj = new JSONObject(); newValueObj.putAll(valueObj); - newValueObj.put("ciEntityUuid", newUuid); newValueList.add(newValueObj); } - mappingObj.setValueList(newValueList); - } +// } } } } @@ -698,9 +745,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { */ private List updateUuidValue(List configList) { Map oldUuid2NewUuidMap = new HashMap<>(); -// List needReplaceUuidList = new ArrayList<>(); for (CiEntitySyncConfigVo configObject : configList) { -// JSONObject configObject = configList.getJSONObject(i); Integer isStart = configObject.getIsStart(); if (Objects.equals(isStart, 1)) { // TODO @@ -711,23 +756,21 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoById(id); if (ciEntityVo == null) { configObject.setId(null); -// needReplaceUuidList.add(uuid); oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); } else { if (!Objects.equals(uuid, ciEntityVo.getUuid())) { -// needReplaceUuidList.add(uuid); oldUuid2NewUuidMap.put(uuid, ciEntityVo.getUuid()); } } } else if (StringUtils.isNotBlank(uuid)) { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); if (ciEntityVo != null) { - if (Objects.equals(isStart, 1)) { -// needReplaceUuidList.add(uuid); - oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); - } else { - configObject.setId(ciEntityVo.getId()); - } + oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); +// if (Objects.equals(isStart, 1)) { +// oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); +// } else { +// configObject.setId(ciEntityVo.getId()); +// } } } } @@ -785,16 +828,16 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } mappingMap.put(key, mappingObj); } - Long id = mainConfigObj.getId(); +// Long id = mainConfigObj.getId(); String uuid = mainConfigObj.getUuid(); CiEntityTransactionVo ciEntityTransactionVo = ciEntityTransactionMap.get(uuid); - if (id != null) { - ciEntityTransactionVo.setCiEntityId(id); - ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); - } else { - ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); - } - ciEntityTransactionVo.setCiId(ciId); +// if (id != null) { +// ciEntityTransactionVo.setCiEntityId(id); +// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); +// } else { +// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); +// } +// ciEntityTransactionVo.setCiId(ciId); /** 变更说明 **/ CiEntitySyncMappingVo descriptionMappingObj = mappingMap.get("description"); if (descriptionMappingObj != null) { @@ -822,7 +865,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String key = "attr_" + attrVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { - System.out.println(key + " is null"); +// System.out.println(key + " is null"); continue; } // JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); @@ -871,13 +914,15 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String key = "rel" + relVo.getDirection() + "_" + relVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { - System.out.println(key + " is null"); +// System.out.println(key + " is null"); continue; } String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "new")) { JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { + List ciEntityIdList = new ArrayList<>(); + List alreadyExistRelList = new ArrayList<>(); for (int i = 0; i < valueList.size(); i++) { JSONObject valueObj = valueList.getJSONObject(i); if (MapUtils.isEmpty(valueObj)) { @@ -891,28 +936,69 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (ciEntityId == null) { CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(ciEntityUuid); if (tmpVo != null) { + ciEntityId = tmpVo.getCiEntityId(); System.out.println("tmpVo.getCiEntityId() = " + tmpVo.getCiEntityId()); - valueObj.put("ciEntityId", tmpVo.getCiEntityId()); + valueObj.put("ciEntityId", ciEntityId); } else { CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(ciEntityUuid); if (uuidCiEntityVo == null) { throw new NewCiEntityNotFoundException(valueObj.getString("ciEntityUuid")); } else { - valueObj.put("ciEntityId", uuidCiEntityVo.getId()); + ciEntityId = uuidCiEntityVo.getId(); + valueObj.put("ciEntityId", ciEntityId); } } } + ciEntityIdList.add(ciEntityId); String type = valueObj.getString("type"); if (!Objects.equals(type, "new")) { continue; } CiEntitySyncConfigVo dependencyConfig = dependencyConfigMap.get(ciEntityUuid); - if (dependencyConfig != null) { - List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); - ciEntityTransactionList.addAll(list); + if (dependencyConfig == null) { + continue; } + // 关系选择追加模式时,需要将该配置项原来就关联的关系数据补充到valueList中 + if (Objects.equals(dependencyConfig.getAction(), "append") && ciEntityTransactionVo.getCiEntityId() != null) { +// Long relCiEntityId = dependencyConfig.getId(); + List relEntityList; + if (relVo.getDirection().equals(RelDirectionType.FROM.getValue())) { + relEntityList = relEntityMapper.getRelEntityByFromCiEntityIdAndRelId(ciEntityTransactionVo.getCiEntityId(), relVo.getId(), null); + for (RelEntityVo relEntityVo : relEntityList) { +// if (relCiEntityId != null && Objects.equals(relCiEntityId, relEntityVo.getToCiEntityId())) { +// continue; +// } + JSONObject jsonObj = new JSONObject(); + jsonObj.put("ciEntityId", relEntityVo.getToCiEntityId()); + jsonObj.put("ciEntityName", relEntityVo.getToCiEntityName()); + jsonObj.put("ciId", relEntityVo.getToCiId()); + alreadyExistRelList.add(jsonObj); + } + } else { + relEntityList = relEntityMapper.getRelEntityByToCiEntityIdAndRelId(ciEntityTransactionVo.getCiEntityId(), relVo.getId(), null); + for (RelEntityVo relEntityVo : relEntityList) { +// if (relCiEntityId != null && Objects.equals(relCiEntityId, relEntityVo.getFromCiEntityId())) { +// continue; +// } + JSONObject jsonObj = new JSONObject(); + jsonObj.put("ciEntityId", relEntityVo.getFromCiEntityId()); + jsonObj.put("ciEntityName", relEntityVo.getFromCiEntityName()); + jsonObj.put("ciId", relEntityVo.getFromCiId()); + alreadyExistRelList.add(jsonObj); + } + } + } + List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + ciEntityTransactionList.addAll(list); } // JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); + // 关系选择追加模式时,需要将该配置项原来就关联的关系数据补充到valueList中 + for (JSONObject jsonObj : alreadyExistRelList) { + if (ciEntityIdList.contains(jsonObj.getLong("ciEntityId"))) { + continue; + } + valueList.add(jsonObj); + } JSONObject relEntity = new JSONObject(); relEntity.put("valueList", valueList); relEntityData.put(key, relEntity); @@ -929,7 +1015,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String key = "global_" + globalAttrVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { - System.out.println(key + " is null"); +// System.out.println(key + " is null"); continue; } // JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); 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 2d39221d..0e82aae7 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessUtilHandler.java @@ -18,29 +18,49 @@ package neatlogic.module.cmdb.process.stephandler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.cmdb.dto.transaction.TransactionVo; import neatlogic.framework.crossover.CrossoverServiceFactory; import neatlogic.framework.notify.crossover.INotifyServiceCrossoverService; import neatlogic.framework.notify.dto.InvokeNotifyPolicyConfigVo; import neatlogic.framework.process.constvalue.ProcessTaskOperationType; +import neatlogic.framework.process.dao.mapper.ProcessTaskStepDataMapper; import neatlogic.framework.process.dto.ProcessStepVo; import neatlogic.framework.process.dto.ProcessStepWorkerPolicyVo; +import neatlogic.framework.process.dto.ProcessTaskStepDataVo; import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.processconfig.ActionConfigActionVo; import neatlogic.framework.process.dto.processconfig.ActionConfigVo; import neatlogic.framework.process.stephandler.core.ProcessStepInternalHandlerBase; import neatlogic.framework.process.util.ProcessConfigUtil; +import neatlogic.framework.util.TableResultUtil; +import neatlogic.module.cmdb.dao.mapper.transaction.TransactionMapper; +import neatlogic.module.cmdb.process.dto.*; +import neatlogic.module.cmdb.process.exception.CiEntityConfigIllegalException; import neatlogic.module.cmdb.process.notifyhandler.CiEntitySyncNotifyHandler; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Objects; @Service public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { + + private Logger logger = LoggerFactory.getLogger(CmdbSyncProcessUtilHandler.class); + + @Resource + private ProcessTaskStepDataMapper processTaskStepDataMapper; + + @Resource + private TransactionMapper transactionMapper; + @Override public String getHandler() { return CmdbProcessStepHandlerType.CMDBSYNC.getHandler(); @@ -48,12 +68,56 @@ public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { @Override public Object getHandlerStepInfo(ProcessTaskStepVo currentProcessTaskStepVo) { - return null; + return getHandlerStepInitInfo(currentProcessTaskStepVo); } @Override public Object getHandlerStepInitInfo(ProcessTaskStepVo currentProcessTaskStepVo) { - return null; + JSONObject resultObj = new JSONObject(); + /** 事务审计列表 **/ + ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); + search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + search.setType("ciEntitySyncResult"); + ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(search); + if (processTaskStepData != null) { + JSONObject dataObj = processTaskStepData.getData(); + JSONArray transactionGroupArray = dataObj.getJSONArray("transactionGroupList"); + if (CollectionUtils.isNotEmpty(transactionGroupArray)) { + List tableList = new ArrayList<>(); + for (int i = transactionGroupArray.size() - 1; i >= 0; i--) { + JSONObject transactionGroupObj = transactionGroupArray.getJSONObject(i); + Long time = transactionGroupObj.getLong("time"); + Long transactionGroupId = transactionGroupObj.getLong("transactionGroupId"); + TransactionVo transactionVo = new TransactionVo(); + transactionVo.setTransactionGroupId(transactionGroupId); + List tbodyList = transactionMapper.searchTransaction(transactionVo); + if (CollectionUtils.isNotEmpty(tbodyList)) { + JSONObject tableObj = TableResultUtil.getResult(tbodyList); + tableObj.put("time", time); + tableList.add(tableObj); + } + } + resultObj.put("tableList", tableList); + } + } + /** 错误信息列表 **/ + ProcessTaskStepDataVo searchVo = new ProcessTaskStepDataVo(); + searchVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + searchVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); + searchVo.setType("ciEntitySyncError"); + ProcessTaskStepDataVo processTaskStepDataVo = processTaskStepDataMapper.getProcessTaskStepData(searchVo); + if (processTaskStepDataVo != null) { + JSONObject dataObj = processTaskStepDataVo.getData(); + if (MapUtils.isNotEmpty(dataObj)) { + resultObj.putAll(dataObj); +// JSONArray errorList = dataObj.getJSONArray("errorList"); +// if (CollectionUtils.isNotEmpty(errorList)) { +// resultObj.put("errorList", errorList); +// } + } + } + return resultObj; } @Override @@ -217,8 +281,8 @@ public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { /** 自动化配置 **/ JSONObject ciEntityConfig = configObj.getJSONObject("ciEntityConfig"); - JSONObject ciEntityObj = regulateCiEntityConfig(ciEntityConfig); - resultObj.put("ciEntityConfig", ciEntityObj); + CiEntitySyncVo ciEntitySyncVo = regulateCiEntityConfig(ciEntityConfig); + resultObj.put("ciEntityConfig", ciEntitySyncVo); /** 分配处理人 **/ JSONObject workerPolicyConfig = configObj.getJSONObject("workerPolicyConfig"); @@ -235,7 +299,229 @@ public class CmdbSyncProcessUtilHandler extends ProcessStepInternalHandlerBase { return resultObj; } - private JSONObject regulateCiEntityConfig(JSONObject ciEntityConfig) { - return ciEntityConfig; + private CiEntitySyncVo regulateCiEntityConfig(JSONObject ciEntityConfig) { + CiEntitySyncVo ciEntitySyncVo = new CiEntitySyncVo(); + if (ciEntityConfig != null) { + ciEntitySyncVo = ciEntityConfig.toJavaObject(CiEntitySyncVo.class); + } + // 失败策略 + String failPolicy = ciEntitySyncVo.getFailPolicy(); + if (failPolicy == null) { + if (ciEntityConfig != null) { + logger.warn("ciEntityConfig.failPolicy is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.failPolicy is null"); + } + ciEntitySyncVo.setFailPolicy(StringUtils.EMPTY); + } + // 回退步骤重新同步 + Integer rerunStepToSync = ciEntitySyncVo.getRerunStepToSync(); + if (rerunStepToSync == null) { + if (ciEntityConfig != null) { + logger.warn("ciEntityConfig.rerunStepToSync is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.rerunStepToSync is null"); + } + ciEntitySyncVo.setRerunStepToSync(0); + } + List configList = ciEntitySyncVo.getConfigList(); + if (CollectionUtils.isEmpty(configList)) { + if (ciEntityConfig != null) { + logger.warn("ciEntityConfig.configList is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList is null"); + } + return ciEntitySyncVo; + } + Iterator iterator = configList.iterator(); + while (iterator.hasNext()) { + CiEntitySyncConfigVo configObj = iterator.next(); + if (configObj == null) { + iterator.remove(); + continue; + } + if (configObj.getId() != null) { + logger.warn("ciEntityConfig.configList[x].id is not null"); + configObj.setId(null); + } + if (StringUtils.isBlank(configObj.getUuid())) { + logger.warn("ciEntityConfig.configList[x].uuid is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].uuid is null"); + } + if (configObj.getCiId() == null) { + logger.warn("ciEntityConfig.configList[x].ciId is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].ciId is null"); + } + if (StringUtils.isBlank(configObj.getCiName())) { + logger.warn("ciEntityConfig.configList[x].ciName is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].ciName is null"); + } + if (StringUtils.isBlank(configObj.getCiLabel())) { + logger.warn("ciEntityConfig.configList[x].ciLabel is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].ciLabel is null"); + } + if (StringUtils.isBlank(configObj.getCiIcon())) { + logger.warn("ciEntityConfig.configList[x].ciIcon is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].ciIcon is null"); + } + String createPolicy = configObj.getCreatePolicy(); + if (StringUtils.isBlank(createPolicy)) { + logger.warn("ciEntityConfig.configList[x].createPolicy is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].createPolicy is null"); + } + CiEntitySyncBatchDataSourceVo batchDataSource = configObj.getBatchDataSource(); + if (Objects.equals(createPolicy, "single")) { + if (batchDataSource != null) { + if (StringUtils.isNotBlank(batchDataSource.getAttributeUuid())) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.attributeUuid is not null"); + } + List filterList = batchDataSource.getFilterList(); + if (CollectionUtils.isNotEmpty(filterList)) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.filterList is not null"); + } + } + } else if (Objects.equals(createPolicy, "batch")) { + if (batchDataSource == null) { + logger.warn("createPolicy = batch, ciEntityConfig.configList[x].batchDataSource is null"); + throw new CiEntityConfigIllegalException("createPolicy = batch, ciEntityConfig.configList[x].batchDataSource is null"); + } + if (StringUtils.isBlank(batchDataSource.getAttributeUuid())) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.attributeUuid is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].batchDataSource.attributeUuid is null"); + } + List filterList = batchDataSource.getFilterList(); + if (CollectionUtils.isNotEmpty(filterList)) { + Iterator filterIterator = filterList.iterator(); + while (filterIterator.hasNext()) { + CiEntitySyncFilterVo filterVo = filterIterator.next(); + if (filterVo == null) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.filterList[y] is null"); + filterIterator.remove(); + continue; + } + if (StringUtils.isBlank(filterVo.getColumn())) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.filterList[y].column is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].batchDataSource.filterList[y].column is null"); + } + if (StringUtils.isBlank(filterVo.getExpression())) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.filterList[y].expression is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].batchDataSource.filterList[y].expression is null"); + } + if (StringUtils.isBlank(filterVo.getValue())) { + logger.warn("ciEntityConfig.configList[x].batchDataSource.filterList[y].value is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].batchDataSource.filterList[y].value is null"); + } + } + } + } + + List mappingList = configObj.getMappingList(); + if (CollectionUtils.isEmpty(mappingList)) { + logger.warn("ciEntityConfig.configList[x].mappingList is null"); + continue; +// throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList is null"); + } + Iterator mappingIterator = mappingList.iterator(); + while (mappingIterator.hasNext()) { + CiEntitySyncMappingVo mappingVo = mappingIterator.next(); + if (mappingVo == null) { + logger.warn("ciEntityConfig.configList[x].mappingList[y] is null"); + mappingIterator.remove(); + continue; + } + if (StringUtils.isBlank(mappingVo.getKey())) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].key is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].key is null"); + } + String mappingMode = mappingVo.getMappingMode(); + if (StringUtils.isBlank(mappingMode)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].mappingMode is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].mappingMode is null"); + } + JSONArray valueList = mappingVo.getValueList(); + String column = mappingVo.getColumn(); + List filterList = mappingVo.getFilterList(); + if (Objects.equals(mappingMode, "formTableComponent")) { + if (CollectionUtils.isEmpty(valueList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].valueList is null"); + } + if (valueList.get(0) == null) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList[0] is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].valueList[0] is null"); + } + if (StringUtils.isBlank(column)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].column is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].column is null"); + } + if (CollectionUtils.isNotEmpty(filterList)) { + Iterator filterIterator = filterList.iterator(); + while (filterIterator.hasNext()) { + CiEntitySyncFilterVo filterVo = filterIterator.next(); + if (filterVo == null) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList[z] is null"); + filterIterator.remove(); + continue; + } + if (StringUtils.isBlank(filterVo.getColumn())) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList[z].column is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].filterList[z].column is null"); + } + if (StringUtils.isBlank(filterVo.getExpression())) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList[z].expression is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].filterList[z].expression is null"); + } + if (StringUtils.isBlank(filterVo.getValue())) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList[z].value is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].filterList[z].value is null"); + } + } + } + } else if (Objects.equals(mappingMode, "formCommonComponent")) { + if (CollectionUtils.isEmpty(valueList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].valueList is null"); + } + for (int i = 0; i < valueList.size(); i++) { + if (valueList.get(i) == null) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList[z] is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].valueList[0] is null"); + } + } + if (StringUtils.isNotBlank(column)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].column is not null"); + mappingVo.setColumn(null); + } + if (CollectionUtils.isNotEmpty(filterList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList is not null"); + mappingVo.setFilterList(null); + } + } else if (Objects.equals(mappingMode, "constant")) { + if (StringUtils.isNotBlank(column)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].column is not null"); + mappingVo.setColumn(null); + } + if (CollectionUtils.isNotEmpty(filterList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList is not null"); + mappingVo.setFilterList(null); + } + } else if (Objects.equals(mappingMode, "new")) { + if (CollectionUtils.isEmpty(valueList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList is null"); + } + + if (valueList.get(0) == null) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].valueList[0] is null"); + throw new CiEntityConfigIllegalException("ciEntityConfig.configList[x].mappingList[y].valueList[0] is null"); + } + if (StringUtils.isNotBlank(column)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].column is not null"); + mappingVo.setColumn(null); + } + if (CollectionUtils.isNotEmpty(filterList)) { + logger.warn("ciEntityConfig.configList[x].mappingList[y].filterList is not null"); + mappingVo.setFilterList(null); + } + } + } + } + return ciEntitySyncVo; } } -- Gitee From a555685b1d7d5c1d44e1841ebbe602678e1225dc Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Wed, 8 Nov 2023 15:47:50 +0800 Subject: [PATCH 10/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../CmdbSyncSuccessMessageAuditHandler.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/java/neatlogic/module/cmdb/process/audithandler/handler/CmdbSyncSuccessMessageAuditHandler.java diff --git a/src/main/java/neatlogic/module/cmdb/process/audithandler/handler/CmdbSyncSuccessMessageAuditHandler.java b/src/main/java/neatlogic/module/cmdb/process/audithandler/handler/CmdbSyncSuccessMessageAuditHandler.java new file mode 100644 index 00000000..7f860b1b --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/audithandler/handler/CmdbSyncSuccessMessageAuditHandler.java @@ -0,0 +1,52 @@ +package neatlogic.module.cmdb.process.audithandler.handler; + +import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.cmdb.dto.transaction.TransactionVo; +import neatlogic.framework.process.audithandler.core.IProcessTaskStepAuditDetailHandler; +import neatlogic.framework.process.dto.ProcessTaskStepAuditDetailVo; +import neatlogic.framework.util.TableResultUtil; +import neatlogic.module.cmdb.dao.mapper.transaction.TransactionMapper; +import neatlogic.module.cmdb.process.constvalue.CmdbAuditDetailType; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component +public class CmdbSyncSuccessMessageAuditHandler implements IProcessTaskStepAuditDetailHandler { + + @Resource + private TransactionMapper transactionMapper; + + @Override + public String getType() { + return CmdbAuditDetailType.CMDBSYNCMESSAGE.getValue(); + } + + @Override + public int handle(ProcessTaskStepAuditDetailVo processTaskStepAuditDetailVo) { + String newContent = processTaskStepAuditDetailVo.getNewContent(); + if (StringUtils.isBlank(newContent)) { + return 0; + } + Long transactionGroupId; + try { + transactionGroupId = Long.valueOf(newContent); + } catch (Exception e) { + return 1; + } + if (transactionGroupId == null) { + return 0; + } + TransactionVo transactionVo = new TransactionVo(); + transactionVo.setTransactionGroupId(transactionGroupId); + List transactionList = transactionMapper.searchTransaction(transactionVo); + if (CollectionUtils.isEmpty(transactionList)) { + return 0; + } + processTaskStepAuditDetailVo.setNewContent(JSONObject.toJSONString(TableResultUtil.getResult(transactionList))); + return 1; + } +} -- Gitee From f3b250ad3b88618d3e834b5359546b2531be6bf7 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Wed, 8 Nov 2023 18:41:52 +0800 Subject: [PATCH 11/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../stephandler/CmdbSyncProcessComponent.java | 121 +++--------------- 1 file changed, 17 insertions(+), 104 deletions(-) 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 c7faedea..95eb5dff 100644 --- a/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java +++ b/src/main/java/neatlogic/module/cmdb/process/stephandler/CmdbSyncProcessComponent.java @@ -162,7 +162,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } // 获取工单当前步骤配置信息 String config = selectContentByHashMapper.getProcessTaskStepConfigByHash(configHash); - if (StringUtils.isBlank(config)) { return 0; } @@ -170,7 +169,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (MapUtils.isEmpty(ciEntityConfig)) { return 0; } - Map processTaskFormAttributeDataMap = new HashMap<>(); Map formAttributeMap = new HashMap<>(); Long processTaskId = currentProcessTaskStepVo.getProcessTaskId(); @@ -196,7 +194,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { try { CiEntitySyncVo ciEntitySyncVo = ciEntityConfig.toJavaObject(CiEntitySyncVo.class); // rerunStepToSync为1时表示重新激活CMDB步骤时同步配置项实例,rerunStepToSync为0时表示重新激活CMDB步骤时不同步配置项实例,即什么都不做,直接自动流转到下一阶段 -// Integer rerunStepToSync = ciEntityConfig.getInteger("rerunStepToSync"); Integer rerunStepToSync = ciEntitySyncVo.getRerunStepToSync(); if (!Objects.equals(rerunStepToSync, 1)) { ProcessTaskStepDataVo searchVo = new ProcessTaskStepDataVo(); @@ -205,7 +202,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { searchVo.setType("ciEntitySyncResult"); ProcessTaskStepDataVo processTaskStepData = processTaskStepDataMapper.getProcessTaskStepData(searchVo); if (processTaskStepData != null) { - autoComplete2(currentProcessTaskStepVo); + myAutoComplete(currentProcessTaskStepVo); return 1; } } @@ -217,27 +214,18 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (processTaskStepData != null) { processTaskStepDataMapper.deleteProcessTaskStepDataById(processTaskStepData.getId()); } -// JSONArray configList = ciEntityConfig.getJSONArray("configList"); -// if (CollectionUtils.isEmpty(configList)) { -// return 0; -// } List configList = ciEntitySyncVo.getConfigList(); - System.out.println("configList1 = " + JSONObject.toJSONString(configList)); /* 重新构建configList配置信息 */ configList = rebuildConfigList(configList, formAttributeMap, processTaskFormAttributeDataMap); - System.out.println("configList2 = " + JSONObject.toJSONString(configList)); if (CollectionUtils.isEmpty(configList)) { return 1; } - System.out.println("configList.size() = " + configList.size()); /* 遍历configList, 找出起始模型配置列表,根据id和uuid的值判断是新增还是更新 */ List startConfigList = new ArrayList<>(); Map ciEntityTransactionMap = new HashMap<>(); Map dependencyConfigMap = new HashMap<>(); for (CiEntitySyncConfigVo configObject : configList) { -// JSONObject configObject = configList.getJSONObject(i); String uuid = configObject.getUuid(); - System.out.println("uuid = " + uuid); if (StringUtils.isBlank(uuid)) { continue; } @@ -250,11 +238,9 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { ciEntityTransactionVo.setCiId(ciId); Long id = configObject.getId(); if (id != null) { - System.out.println("update id = " + id); ciEntityTransactionVo.setCiEntityId(id); ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); } else { - System.out.println("insert uuid = " + uuid); ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); } Integer isStart = configObject.getIsStart(); @@ -271,7 +257,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { /* 遍历起始模型配置信息列表,生成CiEntityTransactionVo列表 */ List ciEntityTransactionList = new ArrayList<>(); for (CiEntitySyncConfigVo mainConfigObj : startConfigList) { - List list = createCiEntityTransactionVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + List list = createCiEntityTransactionVo(ciEntityTransactionMap, mainConfigObj, dependencyConfigMap); for (CiEntityTransactionVo ciEntityTransactionVo : list) { if (!ciEntityTransactionList.contains(ciEntityTransactionVo)) { ciEntityTransactionList.add(ciEntityTransactionVo); @@ -282,14 +268,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { for (CiEntityTransactionVo t : ciEntityTransactionList) { t.setAllowCommit(true); } - System.out.println("ciEntityTransactionList = " + JSONObject.toJSONString(ciEntityTransactionList)); - System.out.println("ciEntityTransactionList.size() = " + ciEntityTransactionList.size()); EscapeTransactionJob.State s = new EscapeTransactionJob(() -> { InputFromContext.init(InputFrom.ITSM); Long transactionGroupId = ciEntityService.saveCiEntity(ciEntityTransactionList); -// Long transactionGroupId = 0L; currentProcessTaskStepVo.getParamObj().put(CmdbAuditDetailType.CMDBSYNCMESSAGE.getParamName(), transactionGroupId); - System.out.println("transactionGroupId = " + transactionGroupId); ProcessTaskStepDataVo search = new ProcessTaskStepDataVo(); search.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); search.setProcessTaskStepId(currentProcessTaskStepVo.getId()); @@ -358,10 +340,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { processTaskStepDataMapper.replaceProcessTaskStepData(processTaskStepDataVo); String failPolicy = ciEntityConfig.getString("failPolicy"); if (FailPolicy.KEEP_ON.getValue().equals(failPolicy)) { - autoComplete2(currentProcessTaskStepVo); + myAutoComplete(currentProcessTaskStepVo); } } else { - autoComplete2(currentProcessTaskStepVo); + myAutoComplete(currentProcessTaskStepVo); } } catch (Exception e) { logger.error(e.getMessage(), e); @@ -370,7 +352,7 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { return 1; } - private void autoComplete2(ProcessTaskStepVo currentProcessTaskStepVo) { + private void myAutoComplete(ProcessTaskStepVo currentProcessTaskStepVo) { List toProcessTaskStepIdList = processTaskMapper.getToProcessTaskStepIdListByFromIdAndType(currentProcessTaskStepVo.getId(), ProcessFlowDirection.FORWARD.getValue()); if (toProcessTaskStepIdList.size() == 1) { Long nextStepId = toProcessTaskStepIdList.get(0); @@ -406,7 +388,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { Map> oldUuid2NewUuidListMap = new HashMap<>(); List newConfigList = new ArrayList<>(); for (CiEntitySyncConfigVo configObj : configList) { -// JSONObject configObj = configList.getJSONObject(i); if (!Objects.equals(configObj.getCreatePolicy(), "batch")) { // 单个操作配置,不做修改 newConfigList.add(configObj); @@ -415,11 +396,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String oldUuid = configObj.getUuid(); // 批量操作配置信息 CiEntitySyncBatchDataSourceVo batchDataSource = configObj.getBatchDataSource(); -// if (batchDataSource == null) { -// // 单个操作配置,不做修改 -// newConfigList.add(configObj); -// continue; -// } String attributeUuid = batchDataSource.getAttributeUuid(); ProcessTaskFormAttributeDataVo formAttributeDataVo = processTaskFormAttributeDataMap.get(attributeUuid); List filterList = batchDataSource.getFilterList(); @@ -432,17 +408,12 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { for (int j = 0; j < tbodyList.size(); j++) { JSONObject tbodyObj = tbodyList.getJSONObject(j); if (MapUtils.isEmpty(tbodyObj)) { - logger.warn("批量操作数据源表格的第" + j + "行数据为空"); continue; } - System.out.println("tbodyObj = " + tbodyObj); CiEntitySyncConfigVo newConfigObj = new CiEntitySyncConfigVo(); -// boolean flag = false; List newMappingList = new ArrayList<>(); for (CiEntitySyncMappingVo mappingObj : mappingList) { CiEntitySyncMappingVo newMappingObj = new CiEntitySyncMappingVo(mappingObj); -// JSONObject mappingObj = mappingList.getJSONObject(k); - String key = mappingObj.getKey(); String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "formTableComponent")) { // 映射模式是表单表格组件 @@ -451,7 +422,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String value = valueList.getString(0); if (Objects.equals(value, attributeUuid)) { String column = mappingObj.getColumn(); -// String columnValue = tbodyObj.getString(column); JSONArray newValueList = new JSONArray(); Object valueObj = tbodyObj.get(column); if (valueObj instanceof JSONObject) { @@ -485,45 +455,34 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } if (CollectionUtils.isNotEmpty(newValueList)) { -// flag = true; newMappingObj.setMappingMode("constant"); newMappingObj.setValueList(newValueList); } else { continue; } - } else { -// newMappingObj.putAll(mappingObj); } } else { continue; } - } else { -// newMappingObj.putAll(mappingObj); } newMappingList.add(newMappingObj); } -// if (flag) { String newUuid = UuidUtil.randomUuid(); oldUuid2NewUuidListMap.computeIfAbsent(oldUuid, key -> new ArrayList<>()).add(newUuid); newConfigObj.setUuid(newUuid); newConfigObj.setCiId(configObj.getCiId()); newConfigObj.setCiName(configObj.getCiName()); -// newConfigObj.put("createPolicy", "single"); newConfigObj.setCiLabel(configObj.getCiLabel()); newConfigObj.setIsStart(configObj.getIsStart()); newConfigObj.setCiIcon(configObj.getCiIcon()); newConfigObj.setMappingList(newMappingList); newConfigList.add(newConfigObj); -// } } } - System.out.println("oldUuid2NewUuidListMap = " + JSONObject.toJSONString(oldUuid2NewUuidListMap)); // 遍历newConfigList,根据oldUuid2NewUuidListMap,将关系映射配置信息中的valueList数据重新构建 for (CiEntitySyncConfigVo configObj : newConfigList) { -// JSONObject configObj = newConfigList.getJSONObject(i); List mappingList = configObj.getMappingList(); for (CiEntitySyncMappingVo mappingObj : mappingList) { -// JSONObject mappingObj = mappingList.getJSONObject(k); String key = mappingObj.getKey(); if (key.startsWith("rel")) { JSONArray valueList = mappingObj.getValueList(); @@ -531,8 +490,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { JSONArray newValueList = new JSONArray(); for (int i = 0; i < valueList.size(); i++) { JSONObject valueObj = valueList.getJSONObject(i); -// String type = valueObj.getString("type"); -// if (Objects.equals(type, "new")) { String ciEntityUuid = valueObj.getString("ciEntityUuid"); List newUuidList = oldUuid2NewUuidListMap.get(ciEntityUuid); if (CollectionUtils.isNotEmpty(newUuidList)) { @@ -548,7 +505,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { newValueObj.putAll(valueObj); newValueList.add(newValueObj); } -// } } } } @@ -584,7 +540,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { if (attributeDataVo == null) { continue; } -// JSONArray filterList = mappingObj.getJSONArray("filterList"); List filterList = mappingObj.getFilterList(); JSONArray tbodyList = getTbodyList(attributeDataVo, filterList); if (CollectionUtils.isEmpty(tbodyList)) { @@ -640,7 +595,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } FormAttributeVo formAttributeVo = formAttributeMap.get(valueList.getString(0)); if (Objects.equals(formAttributeVo.getHandler(), FormHandler.FORMUPLOAD.getHandler())) { -// List idList = new ArrayList<>(); if (dataObj instanceof JSONArray) { JSONArray dataArray = (JSONArray) dataObj; for (int m = 0; m < dataArray.size(); m++) { @@ -676,7 +630,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { List uniqueAttrValueListJoinStrList = new ArrayList<>(); List newConfigList = new ArrayList<>(); for (CiEntitySyncConfigVo configObj : configList) { -// JSONObject configObj = configList.getJSONObject(i); Long ciId = configObj.getCiId(); CiVo ciVo = ciMapper.getCiById(ciId); if (ciVo == null) { @@ -686,11 +639,11 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { List uniqueAttrIdList = ciVo.getUniqueAttrIdList(); if (CollectionUtils.isEmpty(uniqueAttrIdList)) { newConfigList.add(configObj); + continue; } Map key2ValueListMap = new HashMap<>(); List mappingList = configObj.getMappingList(); for (CiEntitySyncMappingVo mappingObj : mappingList) { -// JSONObject mappingObj = mappingList.getJSONObject(j); String key = mappingObj.getKey(); JSONArray valueList = mappingObj.getValueList(); key2ValueListMap.put(key, valueList); @@ -746,10 +699,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { private List updateUuidValue(List configList) { Map oldUuid2NewUuidMap = new HashMap<>(); for (CiEntitySyncConfigVo configObject : configList) { - Integer isStart = configObject.getIsStart(); - if (Objects.equals(isStart, 1)) { - // TODO - } String uuid = configObject.getUuid(); Long id = configObject.getId(); if (id != null) { @@ -766,16 +715,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { CiEntityVo ciEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(uuid); if (ciEntityVo != null) { oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); -// if (Objects.equals(isStart, 1)) { -// oldUuid2NewUuidMap.put(uuid, UuidUtil.randomUuid()); -// } else { -// configObject.setId(ciEntityVo.getId()); -// } } } } if (MapUtils.isNotEmpty(oldUuid2NewUuidMap)) { - System.out.println("oldUuid2NewUuidMap = " + JSONObject.toJSONString(oldUuid2NewUuidMap)); String configListStr = JSONObject.toJSONString(configList); for (Map.Entry entry : oldUuid2NewUuidMap.entrySet()) { configListStr = configListStr.replace(entry.getKey(), entry.getValue()); @@ -809,70 +752,53 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { private List createCiEntityTransactionVo( Map ciEntityTransactionMap, CiEntitySyncConfigVo mainConfigObj, - Map dependencyConfigMap, - Map formAttributeMap, - Map processTaskFormAttributeDataMap) { + Map dependencyConfigMap) { List ciEntityTransactionList = new ArrayList<>(); Long ciId = mainConfigObj.getCiId(); Map mappingMap = new HashMap<>(); List mappingList = mainConfigObj.getMappingList(); for (CiEntitySyncMappingVo mappingObj : mappingList) { -// JSONObject mappingObj = mappingList.getJSONObject(i); -// if (MapUtils.isEmpty(mappingObj)) { -// continue; -// } String key = mappingObj.getKey(); if (StringUtils.isBlank(key)) { continue; } mappingMap.put(key, mappingObj); } -// Long id = mainConfigObj.getId(); String uuid = mainConfigObj.getUuid(); CiEntityTransactionVo ciEntityTransactionVo = ciEntityTransactionMap.get(uuid); -// if (id != null) { -// ciEntityTransactionVo.setCiEntityId(id); -// ciEntityTransactionVo.setAction(TransactionActionType.UPDATE.getValue()); -// } else { -// ciEntityTransactionVo.setAction(TransactionActionType.INSERT.getValue()); -// } -// ciEntityTransactionVo.setCiId(ciId); /** 变更说明 **/ CiEntitySyncMappingVo descriptionMappingObj = mappingMap.get("description"); if (descriptionMappingObj != null) { JSONArray valueList = descriptionMappingObj.getValueList(); if (CollectionUtils.isEmpty(valueList)) { - System.out.println("description is null"); } String description = valueList.getString(0); -// String description = parseDescription(descriptionMappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); if (StringUtils.isBlank(description)) { - System.out.println("description is null"); } ciEntityTransactionVo.setDescription(description); - } else { - System.out.println("description is null"); } /** 属性 **/ JSONObject attrEntityData = new JSONObject(); List attrList = attrMapper.getAttrByCiId(ciId); for (AttrVo attrVo : attrList) { - if (Objects.equals(attrVo.getExpression(), "")) { + if (Objects.equals(attrVo.getType(), "expression")) { continue; } String key = "attr_" + attrVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { -// System.out.println(key + " is null"); + JSONObject attrEntity = new JSONObject(); + attrEntity.put("type", attrVo.getType()); + attrEntity.put("config", attrVo.getConfig()); + attrEntity.put("valueList", new JSONArray()); + attrEntityData.put(key, attrEntity); continue; } -// JSONObject attrEntity = parseAttr(ciEntityTransactionMap, attrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); // 映射模式为常量 JSONArray valueList = mappingObj.getValueList(); if (CollectionUtils.isNotEmpty(valueList)) { -// valueList = valueArray; for (int i = valueList.size() - 1; i >= 0; i--) { if (valueList.get(i) instanceof JSONObject) { JSONObject valueObj = valueList.getJSONObject(i); @@ -914,7 +840,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String key = "rel" + relVo.getDirection() + "_" + relVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { -// System.out.println(key + " is null"); continue; } String mappingMode = mappingObj.getMappingMode(); @@ -937,7 +862,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { CiEntityTransactionVo tmpVo = ciEntityTransactionMap.get(ciEntityUuid); if (tmpVo != null) { ciEntityId = tmpVo.getCiEntityId(); - System.out.println("tmpVo.getCiEntityId() = " + tmpVo.getCiEntityId()); valueObj.put("ciEntityId", ciEntityId); } else { CiEntityVo uuidCiEntityVo = ciEntityMapper.getCiEntityBaseInfoByUuid(ciEntityUuid); @@ -960,14 +884,10 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } // 关系选择追加模式时,需要将该配置项原来就关联的关系数据补充到valueList中 if (Objects.equals(dependencyConfig.getAction(), "append") && ciEntityTransactionVo.getCiEntityId() != null) { -// Long relCiEntityId = dependencyConfig.getId(); List relEntityList; if (relVo.getDirection().equals(RelDirectionType.FROM.getValue())) { relEntityList = relEntityMapper.getRelEntityByFromCiEntityIdAndRelId(ciEntityTransactionVo.getCiEntityId(), relVo.getId(), null); for (RelEntityVo relEntityVo : relEntityList) { -// if (relCiEntityId != null && Objects.equals(relCiEntityId, relEntityVo.getToCiEntityId())) { -// continue; -// } JSONObject jsonObj = new JSONObject(); jsonObj.put("ciEntityId", relEntityVo.getToCiEntityId()); jsonObj.put("ciEntityName", relEntityVo.getToCiEntityName()); @@ -977,9 +897,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } else { relEntityList = relEntityMapper.getRelEntityByToCiEntityIdAndRelId(ciEntityTransactionVo.getCiEntityId(), relVo.getId(), null); for (RelEntityVo relEntityVo : relEntityList) { -// if (relCiEntityId != null && Objects.equals(relCiEntityId, relEntityVo.getFromCiEntityId())) { -// continue; -// } JSONObject jsonObj = new JSONObject(); jsonObj.put("ciEntityId", relEntityVo.getFromCiEntityId()); jsonObj.put("ciEntityName", relEntityVo.getFromCiEntityName()); @@ -988,10 +905,9 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } } } - List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap, formAttributeMap, processTaskFormAttributeDataMap); + List list = createCiEntityTransactionVo(ciEntityTransactionMap, dependencyConfig, dependencyConfigMap); ciEntityTransactionList.addAll(list); } -// JSONObject relEntity = parseRel(relVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); // 关系选择追加模式时,需要将该配置项原来就关联的关系数据补充到valueList中 for (JSONObject jsonObj : alreadyExistRelList) { if (ciEntityIdList.contains(jsonObj.getLong("ciEntityId"))) { @@ -1015,10 +931,11 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { String key = "global_" + globalAttrVo.getId(); CiEntitySyncMappingVo mappingObj = mappingMap.get(key); if (mappingObj == null) { -// System.out.println(key + " is null"); + JSONObject globalAttrEntity = new JSONObject(); + globalAttrEntity.put("valueList", new JSONArray()); + globalAttrEntityData.put(key, globalAttrEntity); continue; } -// JSONObject globalAttrEntity = parseGlobalAttr(globalAttrVo, mappingObj, null, formAttributeMap, processTaskFormAttributeDataMap); JSONArray valueList = new JSONArray(); String mappingMode = mappingObj.getMappingMode(); if (Objects.equals(mappingMode, "constant")) { @@ -1060,10 +977,6 @@ public class CmdbSyncProcessComponent extends ProcessStepHandlerBase { } boolean flag = true; for (CiEntitySyncFilterVo filterObj : filterList) { -// JSONObject filterObj = filterList.getJSONObject(j); -// if (MapUtils.isEmpty(filterObj)) { -// continue; -// } String column = filterObj.getColumn(); if (StringUtils.isBlank(column)) { continue; -- Gitee From 238e4b405ff7e1477a5232f2a61de80ea6fbd489 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Wed, 8 Nov 2023 18:49:55 +0800 Subject: [PATCH 12/12] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF?= =?UTF-8?q?-cmdb=E8=8A=82=E7=82=B9=E6=B5=81=E8=BD=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1004854049210368]后端-cmdb节点流转逻辑 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1004854049210368 --- .../constvalue/CmdbAuditDetailType.java | 54 +++++++++++++++++++ .../CiEntityConfigIllegalException.java | 10 ++++ 2 files changed, 64 insertions(+) create mode 100644 src/main/java/neatlogic/module/cmdb/process/constvalue/CmdbAuditDetailType.java create mode 100644 src/main/java/neatlogic/module/cmdb/process/exception/CiEntityConfigIllegalException.java diff --git a/src/main/java/neatlogic/module/cmdb/process/constvalue/CmdbAuditDetailType.java b/src/main/java/neatlogic/module/cmdb/process/constvalue/CmdbAuditDetailType.java new file mode 100644 index 00000000..559ae3c7 --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/constvalue/CmdbAuditDetailType.java @@ -0,0 +1,54 @@ +package neatlogic.module.cmdb.process.constvalue; + +import neatlogic.framework.process.audithandler.core.IProcessTaskAuditDetailType; + +public enum CmdbAuditDetailType implements IProcessTaskAuditDetailType { + + CMDBSYNCMESSAGE("cmdbsyncmessage", "CMDB配置项同步信息", "cmdbSyncMessage", "oldCmdbSyncMessage", 20, false), + ; + private String value; + private String text; + private String paramName; + private String oldDataParamName; + private int sort; + private boolean needCompression; + + CmdbAuditDetailType(String value, String text, String paramName, String oldDataParamName, int sort, boolean needCompression) { + this.value = value; + this.text = text; + this.paramName = paramName; + this.oldDataParamName = oldDataParamName; + this.sort = sort; + this.needCompression = needCompression; + } + + @Override + public String getValue() { + return value; + } + + @Override + public String getText() { + return text; + } + + @Override + public String getParamName() { + return paramName; + } + + @Override + public String getOldDataParamName() { + return oldDataParamName; + } + + @Override + public int getSort() { + return sort; + } + + @Override + public boolean getNeedCompression() { + return needCompression; + } +} diff --git a/src/main/java/neatlogic/module/cmdb/process/exception/CiEntityConfigIllegalException.java b/src/main/java/neatlogic/module/cmdb/process/exception/CiEntityConfigIllegalException.java new file mode 100644 index 00000000..014b1644 --- /dev/null +++ b/src/main/java/neatlogic/module/cmdb/process/exception/CiEntityConfigIllegalException.java @@ -0,0 +1,10 @@ +package neatlogic.module.cmdb.process.exception; + +import neatlogic.framework.exception.core.ApiRuntimeException; + +public class CiEntityConfigIllegalException extends ApiRuntimeException { + + public CiEntityConfigIllegalException(String msg) { + super("nmcpe.cientityconfigillegalexception.cientityconfigillegalexception", msg); + } +} -- Gitee