From 9a6052b227bce37962411ae9345ad82552e891ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=81=AA?= <389401879@qq.com> Date: Fri, 27 Sep 2019 10:23:53 +0800 Subject: [PATCH] [BUG][#896]Fixed duplicate name of import and export workflow and adapted Dependent component (#905) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (修复导入导出工作流重复名称和适配Dependent组件) --- .../api/service/ProcessDefinitionService.java | 78 +++++++++++++++++-- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java index 813e4b13fb..ed92ce5a02 100644 --- a/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java +++ b/escheduler-api/src/main/java/cn/escheduler/api/service/ProcessDefinitionService.java @@ -547,8 +547,27 @@ public class ProcessDefinitionService extends BaseDAGService { sqlParameters.put("datasourceName", dataSource.getName()); } taskNode.put("params", sqlParameters); + }else if(taskType.equals(TaskType.DEPENDENT.name())){ + JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence")); + if(dependentParameters != null){ + JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList"); + for (int j = 0; j < dependTaskList.size(); j++) { + JSONObject dependentTaskModel = dependTaskList.getJSONObject(j); + JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList"); + for (int k = 0; k < dependItemList.size(); k++) { + JSONObject dependentItem = dependItemList.getJSONObject(k); + int definitionId = dependentItem.getInteger("definitionId"); + ProcessDefinition definition = processDefineMapper.queryByDefineId(definitionId); + if(definition != null){ + dependentItem.put("projectName",definition.getProjectName()); + dependentItem.put("definitionName",definition.getName()); + } + } + } + taskNode.put("dependence", dependentParameters); } } + } } jsonObject.put("tasks", jsonArray); processDefinition.setProcessDefinitionJson(jsonObject.toString()); @@ -643,16 +662,19 @@ public class ProcessDefinitionService extends BaseDAGService { projectName = json.get("projectName").toString(); } else { putMsg(result, Status.DATA_IS_NULL, "processDefinitionName"); + return result; } if (ObjectUtils.allNotNull(json.get("processDefinitionName"))) { processDefinitionName = json.get("processDefinitionName").toString(); } else { putMsg(result, Status.DATA_IS_NULL, "processDefinitionName"); + return result; } if (ObjectUtils.allNotNull(json.get("processDefinitionJson"))) { processDefinitionJson = json.get("processDefinitionJson").toString(); } else { putMsg(result, Status.DATA_IS_NULL, "processDefinitionJson"); + return result; } if (ObjectUtils.allNotNull(json.get("processDefinitionDesc"))) { processDefinitionDesc = json.get("processDefinitionDesc").toString(); @@ -664,17 +686,46 @@ public class ProcessDefinitionService extends BaseDAGService { processDefinitionConnects = json.get("processDefinitionConnects").toString(); } + Project project = projectMapper.queryByName(projectName); + if(project != null){ + processDefinitionName = recursionProcessDefinitionName(project.getId(), processDefinitionName,1); + } + JSONObject jsonObject = JSONUtils.parseObject(processDefinitionJson); JSONArray jsonArray = (JSONArray) jsonObject.get("tasks"); for (int j = 0; j < jsonArray.size(); j++) { JSONObject taskNode = jsonArray.getJSONObject(j); - JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params")); - List dataSources = dataSourceMapper.queryDataSourceByName(sqlParameters.getString("datasourceName")); - if (dataSources.size() > 0) { - DataSource dataSource = dataSources.get(0); - sqlParameters.put("datasource", dataSource.getId()); + String taskType = taskNode.getString("type"); + if(taskType.equals(TaskType.SQL.name()) || taskType.equals(TaskType.PROCEDURE.name())) { + JSONObject sqlParameters = JSONUtils.parseObject(taskNode.getString("params")); + List dataSources = dataSourceMapper.queryDataSourceByName(sqlParameters.getString("datasourceName")); + if (dataSources.size() > 0) { + DataSource dataSource = dataSources.get(0); + sqlParameters.put("datasource", dataSource.getId()); + } + taskNode.put("params", sqlParameters); + }else if(taskType.equals(TaskType.DEPENDENT.name())){ + JSONObject dependentParameters = JSONUtils.parseObject(taskNode.getString("dependence")); + if(dependentParameters != null){ + JSONArray dependTaskList = (JSONArray) dependentParameters.get("dependTaskList"); + for (int h = 0; h < dependTaskList.size(); h++) { + JSONObject dependentTaskModel = dependTaskList.getJSONObject(h); + JSONArray dependItemList = (JSONArray) dependentTaskModel.get("dependItemList"); + for (int k = 0; k < dependItemList.size(); k++) { + JSONObject dependentItem = dependItemList.getJSONObject(k); + Project dependentItemProject = projectMapper.queryByName(dependentItem.getString("projectName")); + if(dependentItemProject != null){ + ProcessDefinition definition = processDefineMapper.queryByDefineName(dependentItemProject.getId(),dependentItem.getString("definitionName")); + if(definition != null){ + dependentItem.put("projectId",dependentItemProject.getId()); + dependentItem.put("definitionId",definition.getId()); + } + } + } + } + taskNode.put("dependence", dependentParameters); + } } - taskNode.put("params", sqlParameters); } jsonObject.put("tasks", jsonArray); @@ -1112,5 +1163,20 @@ public class ProcessDefinitionService extends BaseDAGService { return graph.hasCycle(); } + private String recursionProcessDefinitionName(Integer projectId,String processDefinitionName,int num){ + ProcessDefinition processDefinition = processDefineMapper.queryByDefineName(projectId, processDefinitionName); + if (processDefinition != null) { + if(num>1){ + String str = processDefinitionName.substring(0,processDefinitionName.length() - 3); + processDefinitionName = str + "("+num+")"; + }else{ + processDefinitionName = processDefinition.getName() + "("+num+")"; + } + }else{ + return processDefinitionName; + } + return recursionProcessDefinitionName(projectId,processDefinitionName,num + 1); + } + }