This is an automated email from the ASF dual-hosted git repository.

leonbao pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new f3c647d45e [Improvement][Api] Interface and entity optimization to 
improve code scalability (#10466). (#10468)
f3c647d45e is described below

commit f3c647d45eebd5a7bae8c2083f80ce17824df892
Author: hstdream <[email protected]>
AuthorDate: Thu Jun 16 18:22:36 2022 +0800

    [Improvement][Api] Interface and entity optimization to improve code 
scalability (#10466). (#10468)
    
    * [Improvement][Api] Interface and entity optimization to improve code 
scalability (#10466).
    
    * [Improvement][Api] Interface and entity optimization to improve code 
scalability (#10466).
    
    * [Improvement][Api] Interface and entity optimization to improve code 
scalability (#10466).
    
    * [Improvement][Api] Interface and entity optimization to improve code 
scalability (#10466).
    
    * fix ut timezone.
    
    Co-authored-by: houshitao <[email protected]>
---
 .../controller/ProcessDefinitionController.java    |  78 +++++----
 .../api/controller/ProcessInstanceController.java  |  49 +++---
 .../api/dto/ProcessDefinitionDto.java              |  26 +++
 .../api/dto/ProcessInstanceDto.java                |  26 +++
 .../dolphinscheduler/api/python/PythonGateway.java |  35 ++--
 .../dolphinscheduler/api/service/BaseService.java  |   6 +-
 .../api/service/ProcessDefinitionService.java      |  46 +++++-
 .../api/service/ProcessInstanceService.java        |  10 +-
 .../api/service/impl/BaseServiceImpl.java          |  21 +--
 .../service/impl/ProcessDefinitionServiceImpl.java | 178 ++++++++++++++-------
 .../service/impl/ProcessInstanceServiceImpl.java   |  57 ++++---
 .../ProcessDefinitionControllerTest.java           |  31 ++--
 .../controller/ProcessInstanceControllerTest.java  |  20 ++-
 .../api/service/ProcessDefinitionServiceTest.java  |  60 +++----
 .../api/service/ProcessInstanceServiceTest.java    |  40 ++---
 .../common/utils/JSONUtilsTest.java                |  18 +--
 16 files changed, 439 insertions(+), 262 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index f6cb4d4394..e5ffc69732 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
@@ -17,6 +17,20 @@
 
 package org.apache.dolphinscheduler.api.controller;
 
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.aspect.AccessLogAnnotation;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.exceptions.ApiException;
@@ -28,17 +42,6 @@ import org.apache.dolphinscheduler.common.enums.ReleaseState;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.User;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -55,15 +58,24 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import springfox.documentation.annotations.ApiIgnore;
-
-import static org.apache.dolphinscheduler.api.enums.Status.*;
+import static 
org.apache.dolphinscheduler.api.enums.Status.BATCH_COPY_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.BATCH_DELETE_PROCESS_DEFINE_BY_CODES_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.BATCH_MOVE_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.CREATE_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.DELETE_PROCESS_DEFINITION_VERSION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.ENCAPSULATION_TREEVIEW_STRUCTURE_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.GET_TASKS_LIST_BY_PROCESS_DEFINITION_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.IMPORT_PROCESS_DEFINE_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_DETAIL_OF_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_DEFINITION_LIST;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_DEFINITION_LIST_PAGING_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_DEFINITION_VERSIONS_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.RELEASE_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.SWITCH_PROCESS_DEFINITION_VERSION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROCESS_DEFINITION_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.VERIFY_PROCESS_DEFINITION_NAME_UNIQUE_ERROR;
 
 /**
  * process definition controller
@@ -91,13 +103,15 @@ public class ProcessDefinitionController extends 
BaseController {
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return create result code
      */
     @ApiOperation(value = "createProcessDefinition", notes = 
"CREATE_PROCESS_DEFINITION_NOTES")
     @ApiImplicitParams({
         @ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", 
required = true, type = "String"),
         @ApiImplicitParam(name = "locations", value = 
"PROCESS_DEFINITION_LOCATIONS", required = true, type = "String"),
-        @ApiImplicitParam(name = "description", value = 
"PROCESS_DEFINITION_DESC", required = false, type = "String")
+        @ApiImplicitParam(name = "description", value = 
"PROCESS_DEFINITION_DESC", required = false, type = "String"),
+        @ApiImplicitParam(name = "otherParamsJson", value = 
"OTHER_PARAMS_JSON", required = false, type = "String")
     })
     @PostMapping()
     @ResponseStatus(HttpStatus.CREATED)
@@ -113,9 +127,10 @@ public class ProcessDefinitionController extends 
BaseController {
                                           @RequestParam(value = "tenantCode", 
required = true) String tenantCode,
                                           @RequestParam(value = 
"taskRelationJson", required = true) String taskRelationJson,
                                           @RequestParam(value = 
"taskDefinitionJson", required = true) String taskDefinitionJson,
+                                          @RequestParam(value = 
"otherParamsJson", required = false) String otherParamsJson,
                                           @RequestParam(value = 
"executionType", defaultValue = "PARALLEL") ProcessExecutionTypeEnum 
executionType) {
         Map<String, Object> result = 
processDefinitionService.createProcessDefinition(loginUser, projectCode, name, 
description, globalParams,
-            locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson,executionType);
+            locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson, otherParamsJson, executionType);
         return returnDataList(result);
     }
 
@@ -206,6 +221,7 @@ public class ProcessDefinitionController extends 
BaseController {
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return update result code
      */
     @ApiOperation(value = "update", notes = "UPDATE_PROCESS_DEFINITION_NOTES")
@@ -214,7 +230,8 @@ public class ProcessDefinitionController extends 
BaseController {
         @ApiImplicitParam(name = "code", value = "PROCESS_DEFINITION_CODE", 
required = true, dataType = "Long", example = "123456789"),
         @ApiImplicitParam(name = "locations", value = 
"PROCESS_DEFINITION_LOCATIONS", required = true, type = "String"),
         @ApiImplicitParam(name = "description", value = 
"PROCESS_DEFINITION_DESC", required = false, type = "String"),
-        @ApiImplicitParam(name = "releaseState", value = 
"RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = "ReleaseState")
+        @ApiImplicitParam(name = "releaseState", value = 
"RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = 
"ReleaseState"),
+        @ApiImplicitParam(name = "otherParamsJson", value = 
"OTHER_PARAMS_JSON", required = false, type = "String")
     })
     @PutMapping(value = "/{code}")
     @ResponseStatus(HttpStatus.OK)
@@ -231,11 +248,12 @@ public class ProcessDefinitionController extends 
BaseController {
                                           @RequestParam(value = "tenantCode", 
required = true) String tenantCode,
                                           @RequestParam(value = 
"taskRelationJson", required = true) String taskRelationJson,
                                           @RequestParam(value = 
"taskDefinitionJson", required = true) String taskDefinitionJson,
+                                          @RequestParam(value = 
"otherParamsJson", required = false) String otherParamsJson,
                                           @RequestParam(value = 
"executionType", defaultValue = "PARALLEL") ProcessExecutionTypeEnum 
executionType,
                                           @RequestParam(value = 
"releaseState", required = false, defaultValue = "OFFLINE") ReleaseState 
releaseState) {
 
         Map<String, Object> result = 
processDefinitionService.updateProcessDefinition(loginUser, projectCode, name, 
code, description, globalParams,
-            locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson,executionType);
+            locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson,otherParamsJson, executionType);
         //  If the update fails, the result will be returned directly
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return returnDataList(result);
@@ -450,6 +468,7 @@ public class ProcessDefinitionController extends 
BaseController {
      * @param loginUser login user
      * @param projectCode project code
      * @param searchVal search value
+     * @param otherParamsJson otherParamsJson handle other params
      * @param pageNo page number
      * @param pageSize page size
      * @param userId user id
@@ -460,7 +479,8 @@ public class ProcessDefinitionController extends 
BaseController {
         @ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", required = 
false, type = "String"),
         @ApiImplicitParam(name = "userId", value = "USER_ID", required = 
false, dataType = "Int", example = "100"),
         @ApiImplicitParam(name = "pageNo", value = "PAGE_NO", required = true, 
dataType = "Int", example = "1"),
-        @ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", required = 
true, dataType = "Int", example = "10")
+        @ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", required = 
true, dataType = "Int", example = "10"),
+        @ApiImplicitParam(name = "otherParamsJson", value = 
"OTHER_PARAMS_JSON", required = false, type = "String")
     })
     @GetMapping()
     @ResponseStatus(HttpStatus.OK)
@@ -469,6 +489,7 @@ public class ProcessDefinitionController extends 
BaseController {
     public Result queryProcessDefinitionListPaging(@ApiIgnore 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                                    @ApiParam(name = 
"projectCode", value = "PROJECT_CODE", required = true) @PathVariable long 
projectCode,
                                                    @RequestParam(value = 
"searchVal", required = false) String searchVal,
+                                                   @RequestParam(value = 
"otherParamsJson", required = false) String otherParamsJson,
                                                    @RequestParam(value = 
"userId", required = false, defaultValue = "0") Integer userId,
                                                    @RequestParam("pageNo") 
Integer pageNo,
                                                    @RequestParam("pageSize") 
Integer pageSize) {
@@ -478,7 +499,7 @@ public class ProcessDefinitionController extends 
BaseController {
         }
         searchVal = ParameterUtils.handleEscapes(searchVal);
 
-        return 
processDefinitionService.queryProcessDefinitionListPaging(loginUser, 
projectCode, searchVal, userId, pageNo, pageSize);
+        return 
processDefinitionService.queryProcessDefinitionListPaging(loginUser, 
projectCode, searchVal, otherParamsJson, userId, pageNo, pageSize);
     }
 
     /**
@@ -783,6 +804,7 @@ public class ProcessDefinitionController extends 
BaseController {
      * @param scheduleJson scheduleJson
      * @param executionType executionType
      * @param releaseState releaseState
+     * @param otherParamsJson otherParamsJson handle other params
      * @return update result code
      */
     @ApiOperation(value = "updateBasicInfo", notes = 
"UPDATE_PROCESS_DEFINITION_BASIC_INFO_NOTES")
@@ -790,7 +812,8 @@ public class ProcessDefinitionController extends 
BaseController {
         @ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", 
required = true, type = "String"),
         @ApiImplicitParam(name = "code", value = "PROCESS_DEFINITION_CODE", 
required = true, dataType = "Long", example = "123456789"),
         @ApiImplicitParam(name = "description", value = 
"PROCESS_DEFINITION_DESC", required = false, type = "String"),
-        @ApiImplicitParam(name = "releaseState", value = 
"RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = "ReleaseState")
+        @ApiImplicitParam(name = "releaseState", value = 
"RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = 
"ReleaseState"),
+        @ApiImplicitParam(name = "otherParamsJson", value = 
"OTHER_PARAMS_JSON", required = false, type = "String")
     })
     @PutMapping(value = "/{code}/basic-info")
     @ResponseStatus(HttpStatus.OK)
@@ -805,10 +828,11 @@ public class ProcessDefinitionController extends 
BaseController {
                                                    @RequestParam(value = 
"timeout", required = false, defaultValue = "0") int timeout,
                                                    @RequestParam(value = 
"tenantCode", required = true) String tenantCode,
                                                    @RequestParam(value = 
"scheduleJson", required = false) String scheduleJson,
+                                                   @RequestParam(value = 
"otherParamsJson", required = false) String otherParamsJson,
                                                    @RequestParam(value = 
"executionType", defaultValue = "PARALLEL") ProcessExecutionTypeEnum 
executionType,
                                                    @RequestParam(value = 
"releaseState", required = false, defaultValue = "OFFLINE") ReleaseState 
releaseState) {
         Map<String, Object> result = 
processDefinitionService.updateProcessDefinitionBasicInfo(loginUser, 
projectCode, name, code, description, globalParams,
-            timeout, tenantCode, scheduleJson, executionType);
+            timeout, tenantCode, scheduleJson, otherParamsJson, executionType);
         //  If the update fails, the result will be returned directly
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return returnDataList(result);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
index 8e898e443f..47a9f2183c 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java
@@ -17,17 +17,19 @@
 
 package org.apache.dolphinscheduler.api.controller;
 
-import static 
org.apache.dolphinscheduler.api.enums.Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.DELETE_PROCESS_INSTANCE_BY_ID_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.ENCAPSULATION_PROCESS_INSTANCE_GANTT_STRUCTURE_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PARENT_PROCESS_INSTANCE_DETAIL_INFO_BY_SUB_PROCESS_INSTANCE_ID_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_ALL_VARIABLES_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_BY_ID_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_LIST_PAGING_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_SUB_PROCESS_INSTANCE_DETAIL_INFO_BY_TASK_ID_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_ERROR;
-import static 
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROCESS_INSTANCE_ERROR;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.aspect.AccessLogAnnotation;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.exceptions.ApiException;
@@ -38,13 +40,6 @@ import 
org.apache.dolphinscheduler.common.utils.ParameterUtils;
 import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.plugin.task.api.enums.ExecutionStatus;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.*;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,13 +54,17 @@ import 
org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import springfox.documentation.annotations.ApiIgnore;
+import static 
org.apache.dolphinscheduler.api.enums.Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.DELETE_PROCESS_INSTANCE_BY_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.ENCAPSULATION_PROCESS_INSTANCE_GANTT_STRUCTURE_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PARENT_PROCESS_INSTANCE_DETAIL_INFO_BY_SUB_PROCESS_INSTANCE_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_ALL_VARIABLES_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_BY_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROCESS_INSTANCE_LIST_PAGING_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_SUB_PROCESS_INSTANCE_DETAIL_INFO_BY_TASK_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_LIST_BY_PROCESS_INSTANCE_ID_ERROR;
+import static 
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROCESS_INSTANCE_ERROR;
 
 /**
  * process instance controller
@@ -93,6 +92,7 @@ public class ProcessInstanceController extends BaseController 
{
      * @param host host
      * @param startTime start time
      * @param endTime end time
+     * @param otherParamsJson otherParamsJson handle other params
      * @return process instance list
      */
     @ApiOperation(value = "queryProcessInstanceListPaging", notes = 
"QUERY_PROCESS_INSTANCE_LIST_NOTES")
@@ -120,6 +120,7 @@ public class ProcessInstanceController extends 
BaseController {
                                            @RequestParam(value = "host", 
required = false) String host,
                                            @RequestParam(value = "startDate", 
required = false) String startTime,
                                            @RequestParam(value = "endDate", 
required = false) String endTime,
+                                           @RequestParam(value = 
"otherParamsJson", required = false) String otherParamsJson,
                                            @RequestParam("pageNo") Integer 
pageNo,
                                            @RequestParam("pageSize") Integer 
pageSize) {
 
@@ -129,7 +130,7 @@ public class ProcessInstanceController extends 
BaseController {
         }
         searchVal = ParameterUtils.handleEscapes(searchVal);
         result = processInstanceService.queryProcessInstanceList(loginUser, 
projectCode, processDefineCode, startTime, endTime,
-                searchVal, executorName, stateType, host, pageNo, pageSize);
+                searchVal, executorName, stateType, host, otherParamsJson, 
pageNo, pageSize);
         return result;
     }
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessDefinitionDto.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessDefinitionDto.java
new file mode 100644
index 0000000000..c3b426850e
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessDefinitionDto.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto;
+
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+
+/**
+ * ProcessDefinitionDto
+ */
+public class ProcessDefinitionDto extends ProcessDefinition {
+}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessInstanceDto.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessInstanceDto.java
new file mode 100644
index 0000000000..9178028974
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/ProcessInstanceDto.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto;
+
+import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+
+/**
+ * ProcessInstanceDto
+ */
+public class ProcessInstanceDto extends ProcessInstance {
+}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
index 9b89d9636b..e6400e79fa 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
@@ -17,6 +17,19 @@
 
 package org.apache.dolphinscheduler.api.python;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.collections.CollectionUtils;
+import 
org.apache.dolphinscheduler.api.configuration.PythonGatewayConfiguration;
 import org.apache.dolphinscheduler.api.dto.resources.ResourceComponent;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.service.ExecutorService;
@@ -56,27 +69,11 @@ import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
 import org.apache.dolphinscheduler.dao.mapper.ProjectUserMapper;
 import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
 import org.apache.dolphinscheduler.dao.mapper.TaskDefinitionMapper;
-import 
org.apache.dolphinscheduler.api.configuration.PythonGatewayConfiguration;
 import org.apache.dolphinscheduler.spi.enums.ResourceType;
-
-import org.apache.commons.collections.CollectionUtils;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import javax.annotation.PostConstruct;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-
 import py4j.GatewayServer;
 
 @Component
@@ -215,6 +212,7 @@ public class PythonGateway {
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return create result code
      */
     public Long createOrUpdateProcessDefinition(String userName,
@@ -232,6 +230,7 @@ public class PythonGateway {
                                                 int releaseState,
                                                 String taskRelationJson,
                                                 String taskDefinitionJson,
+                                                String otherParamsJson,
                                                 ProcessExecutionTypeEnum 
executionType) {
         User user = usersService.queryUser(userName);
         Project project = projectMapper.queryByName(projectName);
@@ -245,10 +244,10 @@ public class PythonGateway {
             // make sure process definition offline which could edit
             processDefinitionService.releaseProcessDefinition(user, 
projectCode, processDefinitionCode, ReleaseState.OFFLINE);
             Map<String, Object> result = 
processDefinitionService.updateProcessDefinition(user, projectCode, name, 
processDefinitionCode, description, globalParams,
-                    locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson, executionType);
+                    locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson, otherParamsJson, executionType);
         } else {
             Map<String, Object> result = 
processDefinitionService.createProcessDefinition(user, projectCode, name, 
description, globalParams,
-                    locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson, executionType);
+                    locations, timeout, tenantCode, taskRelationJson, 
taskDefinitionJson, otherParamsJson, executionType);
             processDefinition = (ProcessDefinition) 
result.get(Constants.DATA_LIST);
             processDefinitionCode = processDefinition.getCode();
         }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
index 41c484d0e7..558c079d45 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java
@@ -17,15 +17,15 @@
 
 package org.apache.dolphinscheduler.api.service;
 
+import java.util.List;
+import java.util.Map;
+
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.enums.AuthorizationType;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.slf4j.Logger;
 
-import java.util.List;
-import java.util.Map;
-
 /**
  * base service
  */
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index 8d407b8af9..49e3be075c 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -17,17 +17,18 @@
 
 package org.apache.dolphinscheduler.api.service;
 
-import org.apache.dolphinscheduler.api.utils.Result;
-import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum;
-import org.apache.dolphinscheduler.common.enums.ReleaseState;
-import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
-import org.apache.dolphinscheduler.dao.entity.User;
-
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum;
+import org.apache.dolphinscheduler.common.enums.ReleaseState;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
+import org.apache.dolphinscheduler.dao.entity.User;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -48,6 +49,7 @@ public interface ProcessDefinitionService {
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return create result code
      */
     Map<String, Object> createProcessDefinition(User loginUser,
@@ -60,6 +62,7 @@ public interface ProcessDefinitionService {
                                                 String tenantCode,
                                                 String taskRelationJson,
                                                 String taskDefinitionJson,
+                                                String otherParamsJson,
                                                 ProcessExecutionTypeEnum 
executionType);
 
     /**
@@ -88,6 +91,7 @@ public interface ProcessDefinitionService {
      * @param loginUser login user
      * @param projectCode project code
      * @param searchVal search value
+     * @param otherParamsJson otherParamsJson handle other params
      * @param pageNo page number
      * @param pageSize page size
      * @param userId user id
@@ -96,6 +100,7 @@ public interface ProcessDefinitionService {
     Result queryProcessDefinitionListPaging(User loginUser,
                                             long projectCode,
                                             String searchVal,
+                                            String otherParamsJson,
                                             Integer userId,
                                             Integer pageNo,
                                             Integer pageSize);
@@ -166,6 +171,7 @@ public interface ProcessDefinitionService {
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return update result code
      */
     Map<String, Object> updateProcessDefinition(User loginUser,
@@ -179,6 +185,7 @@ public interface ProcessDefinitionService {
                                                 String tenantCode,
                                                 String taskRelationJson,
                                                 String taskDefinitionJson,
+                                                String otherParamsJson,
                                                 ProcessExecutionTypeEnum 
executionType);
 
     /**
@@ -402,6 +409,7 @@ public interface ProcessDefinitionService {
      * @param timeout timeout
      * @param tenantCode tenantCode
      * @param scheduleJson scheduleJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @param executionType executionType
      * @return update result code
      */
@@ -414,6 +422,7 @@ public interface ProcessDefinitionService {
                                                          int timeout,
                                                          String tenantCode,
                                                          String scheduleJson,
+                                                         String 
otherParamsJson,
                                                          
ProcessExecutionTypeEnum executionType);
 
     /**
@@ -429,5 +438,30 @@ public interface ProcessDefinitionService {
                                                    long projectCode,
                                                    long code,
                                                    ReleaseState releaseState);
+
+    /**
+     * delete other relation
+     * @param project
+     * @param result
+     * @param processDefinition
+     */
+    void deleteOtherRelation(Project project, Map<String, Object> result, 
ProcessDefinition processDefinition);
+
+    /**
+     * save other relation
+     * @param loginUser
+     * @param processDefinition
+     * @param result
+     * @param otherParamsJson
+     */
+    void saveOtherRelation(User loginUser, ProcessDefinition 
processDefinition, Map<String, Object> result, String otherParamsJson);
+
+    /**
+     * get Json String
+     * @param loginUser
+     * @param processDefinition
+     * @return Json String
+     */
+    String doOtherOperateProcess(User loginUser, ProcessDefinition 
processDefinition);
 }
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index 4b2ad72a3c..73a5b35ff6 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -18,16 +18,16 @@
 
 package org.apache.dolphinscheduler.api.service;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
 import org.apache.dolphinscheduler.plugin.task.api.enums.ExecutionStatus;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
 /**
  * process instance service
  */
@@ -68,6 +68,7 @@ public interface ProcessInstanceService {
      * @param host host
      * @param startDate start time
      * @param endDate end time
+     * @param otherParamsJson otherParamsJson handle other params
      * @return process instance list
      */
     Result queryProcessInstanceList(User loginUser,
@@ -79,6 +80,7 @@ public interface ProcessInstanceService {
                                     String executorName,
                                     ExecutionStatus stateType,
                                     String host,
+                                    String otherParamsJson,
                                     Integer pageNo,
                                     Integer pageSize);
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
index ff9d9aab7c..bdefefe026 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
@@ -17,28 +17,30 @@
 
 package org.apache.dolphinscheduler.api.service.impl;
 
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.enums.Status;
+import 
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
 import org.apache.dolphinscheduler.api.service.BaseService;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.AuthorizationType;
 import org.apache.dolphinscheduler.common.enums.UserType;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+import org.apache.dolphinscheduler.dao.entity.Project;
 import org.apache.dolphinscheduler.dao.entity.User;
-import 
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
 /**
  * base service impl
  */
@@ -212,5 +214,4 @@ public class BaseServiceImpl implements BaseService {
         putMsg(result, Status.SUCCESS);
         return result;
     }
-
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index 48f16b498b..56893f422f 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -17,12 +17,40 @@
 
 package org.apache.dolphinscheduler.api.service.impl;
 
-import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
-import static 
org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_DEFINE_CODE;
-import static 
org.apache.dolphinscheduler.common.Constants.DEFAULT_WORKER_GROUP;
-import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.COMPLEX_TASK_TYPES;
-import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.TASK_TYPE_SQL;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.dto.DagDataSchedule;
 import org.apache.dolphinscheduler.api.dto.ScheduleParam;
 import org.apache.dolphinscheduler.api.dto.treeview.Instance;
@@ -38,9 +66,15 @@ import org.apache.dolphinscheduler.api.utils.FileUtils;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
-import org.apache.dolphinscheduler.common.enums.*;
-import org.apache.dolphinscheduler.dao.entity.DependentSimplifyDefinition;
-import org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy;
+import org.apache.dolphinscheduler.common.enums.ConditionType;
+import org.apache.dolphinscheduler.common.enums.FailureStrategy;
+import org.apache.dolphinscheduler.common.enums.Flag;
+import org.apache.dolphinscheduler.common.enums.Priority;
+import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum;
+import org.apache.dolphinscheduler.common.enums.ReleaseState;
+import org.apache.dolphinscheduler.common.enums.TimeoutFlag;
+import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.enums.WarningType;
 import org.apache.dolphinscheduler.common.graph.DAG;
 import org.apache.dolphinscheduler.common.model.TaskNode;
 import org.apache.dolphinscheduler.common.model.TaskNodeRelation;
@@ -51,6 +85,7 @@ import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.dao.entity.DagData;
 import org.apache.dolphinscheduler.dao.entity.DataSource;
+import org.apache.dolphinscheduler.dao.entity.DependentSimplifyDefinition;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
 import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
@@ -76,39 +111,11 @@ import 
org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
 import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
 import org.apache.dolphinscheduler.dao.mapper.UserMapper;
 import org.apache.dolphinscheduler.plugin.task.api.enums.SqlType;
+import org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy;
 import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode;
 import org.apache.dolphinscheduler.plugin.task.api.parameters.SqlParameters;
 import org.apache.dolphinscheduler.service.process.ProcessService;
 import org.apache.dolphinscheduler.service.task.TaskPluginManager;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -116,13 +123,25 @@ import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_MOVE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.VERSION_DELETE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.VERSION_LIST;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_BATCH_COPY;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_CREATE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION_DELETE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION_EXPORT;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_EXPORT;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_IMPORT;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_ONLINE_OFFLINE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_TREE_VIEW;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_UPDATE;
+import static 
org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_DEFINE_CODE;
+import static 
org.apache.dolphinscheduler.common.Constants.DEFAULT_WORKER_GROUP;
+import static org.apache.dolphinscheduler.common.Constants.EMPTY_STRING;
+import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.COMPLEX_TASK_TYPES;
+import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.TASK_TYPE_SQL;
 
 /**
  * process definition service impl
@@ -212,6 +231,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                                                        String tenantCode,
                                                        String taskRelationJson,
                                                        String 
taskDefinitionJson,
+                                                       String otherParamsJson,
                                                        
ProcessExecutionTypeEnum executionType) {
         Project project = projectMapper.queryByCode(projectCode);
         //check user access for project
@@ -256,13 +276,13 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
             globalParams, locations, timeout, loginUser.getId(), tenantId);
         processDefinition.setExecutionType(executionType);
 
-        return createDagDefine(loginUser, taskRelationList, processDefinition, 
taskDefinitionLogs);
+        return createDagDefine(loginUser, taskRelationList, processDefinition, 
taskDefinitionLogs, otherParamsJson);
     }
 
     private Map<String, Object> createDagDefine(User loginUser,
                                                 List<ProcessTaskRelationLog> 
taskRelationList,
                                                 ProcessDefinition 
processDefinition,
-                                                List<TaskDefinitionLog> 
taskDefinitionLogs) {
+                                                List<TaskDefinitionLog> 
taskDefinitionLogs, String otherParamsJson) {
         Map<String, Object> result = new HashMap<>();
         int saveTaskResult = processService.saveTaskDefine(loginUser, 
processDefinition.getProjectCode(), taskDefinitionLogs, Boolean.TRUE);
         if (saveTaskResult == Constants.EXIT_CODE_SUCCESS) {
@@ -286,6 +306,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
             putMsg(result, Status.CREATE_PROCESS_TASK_RELATION_ERROR);
             throw new 
ServiceException(Status.CREATE_PROCESS_TASK_RELATION_ERROR);
         }
+        saveOtherRelation(loginUser, processDefinition, result, 
otherParamsJson);
         return result;
     }
 
@@ -425,7 +446,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
      * @return process definition page
      */
     @Override
-    public Result queryProcessDefinitionListPaging(User loginUser, long 
projectCode, String searchVal, Integer userId, Integer pageNo, Integer 
pageSize) {
+    public Result queryProcessDefinitionListPaging(User loginUser, long 
projectCode, String searchVal, String otherParamsJson, Integer userId, Integer 
pageNo, Integer pageSize) {
         Result result = new Result();
         Project project = projectMapper.queryByCode(projectCode);
         //check user access for project
@@ -522,6 +543,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
      * @param tenantCode tenantCode
      * @param taskRelationJson relation json for nodes
      * @param taskDefinitionJson taskDefinitionJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @return update result code
      */
     @Override
@@ -537,6 +559,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                                                        String tenantCode,
                                                        String taskRelationJson,
                                                        String 
taskDefinitionJson,
+                                                       String otherParamsJson,
                                                        
ProcessExecutionTypeEnum executionType) {
         Project project = projectMapper.queryByCode(projectCode);
         //check user access for project
@@ -588,14 +611,15 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
         ProcessDefinition processDefinitionDeepCopy = 
JSONUtils.parseObject(JSONUtils.toJsonString(processDefinition), 
ProcessDefinition.class);
         processDefinition.set(projectCode, name, description, globalParams, 
locations, timeout, tenantId);
         processDefinition.setExecutionType(executionType);
-        return updateDagDefine(loginUser, taskRelationList, processDefinition, 
processDefinitionDeepCopy, taskDefinitionLogs);
+        return updateDagDefine(loginUser, taskRelationList, processDefinition, 
processDefinitionDeepCopy, taskDefinitionLogs, otherParamsJson);
     }
 
     private Map<String, Object> updateDagDefine(User loginUser,
                                                 List<ProcessTaskRelationLog> 
taskRelationList,
                                                 ProcessDefinition 
processDefinition,
                                                 ProcessDefinition 
processDefinitionDeepCopy,
-                                                List<TaskDefinitionLog> 
taskDefinitionLogs) {
+                                                List<TaskDefinitionLog> 
taskDefinitionLogs,
+                                                String otherParamsJson) {
         Map<String, Object> result = new HashMap<>();
         int saveTaskResult = processService.saveTaskDefine(loginUser, 
processDefinition.getProjectCode(), taskDefinitionLogs, Boolean.TRUE);
         if (saveTaskResult == Constants.EXIT_CODE_SUCCESS) {
@@ -641,6 +665,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                 putMsg(result, Status.UPDATE_PROCESS_DEFINITION_ERROR);
                 throw new 
ServiceException(Status.UPDATE_PROCESS_DEFINITION_ERROR);
             }
+            saveOtherRelation(loginUser, processDefinition, result, 
otherParamsJson);
         } else {
             putMsg(result, Status.SUCCESS);
             result.put(Constants.DATA_LIST, processDefinition);
@@ -729,7 +754,6 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                 return result;
             }
         }
-
         int delete = 
processDefinitionMapper.deleteById(processDefinition.getId());
         if (delete == 0) {
             putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR);
@@ -739,6 +763,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
         if (deleteRelation == 0) {
             logger.warn("The process definition has not relation, it will be 
delete successfully");
         }
+        deleteOtherRelation(project, result, processDefinition);
         putMsg(result, Status.SUCCESS);
         return result;
     }
@@ -909,7 +934,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
             return result;
         }
         for (DagDataSchedule dagDataSchedule : dagDataScheduleList) {
-            if (!checkAndImport(loginUser, projectCode, result, 
dagDataSchedule)) {
+            if (!checkAndImport(loginUser, projectCode, result, 
dagDataSchedule, EMPTY_STRING)) {
                 return result;
             }
         }
@@ -1061,7 +1086,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
             }
         }
 
-        return createDagDefine(loginUser, processTaskRelationList, 
processDefinition, taskDefinitionList);
+        return createDagDefine(loginUser, processTaskRelationList, 
processDefinition, taskDefinitionList, EMPTY_STRING);
     }
 
     private ProcessTaskRelationLog buildNormalTaskRelation(long preTaskCode, 
long postTaskCode) {
@@ -1118,7 +1143,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
     /**
      * check and import
      */
-    private boolean checkAndImport(User loginUser, long projectCode, 
Map<String, Object> result, DagDataSchedule dagDataSchedule) {
+    private boolean checkAndImport(User loginUser, long projectCode, 
Map<String, Object> result, DagDataSchedule dagDataSchedule, String 
otherParamsJson) {
         if (!checkImportanceParams(dagDataSchedule, result)) {
             return false;
         }
@@ -1209,7 +1234,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
         }
         processDefinition.setCreateTime(new Date());
         processDefinition.setUpdateTime(new Date());
-        Map<String, Object> createDagResult = createDagDefine(loginUser, 
taskRelationLogList, processDefinition, Lists.newArrayList());
+        Map<String, Object> createDagResult = createDagDefine(loginUser, 
taskRelationLogList, processDefinition, Lists.newArrayList(), otherParamsJson);
         if (Status.SUCCESS.equals(createDagResult.get(Constants.STATUS))) {
             putMsg(createDagResult, Status.SUCCESS);
         } else {
@@ -1725,6 +1750,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                 
processTaskRelationMapper.queryByProcessCode(processDefinition.getProjectCode(),
 processDefinition.getCode());
             List<ProcessTaskRelationLog> taskRelationList = 
processTaskRelations.stream().map(ProcessTaskRelationLog::new).collect(Collectors.toList());
             processDefinition.setProjectCode(targetProjectCode);
+            String otherParamsJson = doOtherOperateProcess(loginUser, 
processDefinition);
             if (isCopy) {
                 List<TaskDefinitionLog> taskDefinitionLogs = 
processService.genTaskDefineList(processTaskRelations);
                 Map<Long, Long> taskCodeMap = new HashMap<>();
@@ -1772,14 +1798,14 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                     
processDefinition.setLocations(JSONUtils.toJsonString(jsonNodes));
                 }
                 try {
-                    result.putAll(createDagDefine(loginUser, taskRelationList, 
processDefinition, taskDefinitionLogs));
+                    result.putAll(createDagDefine(loginUser, taskRelationList, 
processDefinition, taskDefinitionLogs, otherParamsJson));
                 } catch (Exception e) {
                     putMsg(result, Status.COPY_PROCESS_DEFINITION_ERROR);
                     throw new 
ServiceException(Status.COPY_PROCESS_DEFINITION_ERROR);
                 }
             } else {
                 try {
-                    result.putAll(updateDagDefine(loginUser, taskRelationList, 
processDefinition, null, Lists.newArrayList()));
+                    result.putAll(updateDagDefine(loginUser, taskRelationList, 
processDefinition, null, Lists.newArrayList(), otherParamsJson));
                 } catch (Exception e) {
                     putMsg(result, Status.MOVE_PROCESS_DEFINITION_ERROR);
                     throw new 
ServiceException(Status.MOVE_PROCESS_DEFINITION_ERROR);
@@ -1919,6 +1945,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                 putMsg(result, Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR);
                 throw new 
ServiceException(Status.DELETE_PROCESS_DEFINE_BY_CODE_ERROR);
             }
+            deleteOtherRelation(project, result, processDefinition);
             putMsg(result, Status.SUCCESS);
         }
         return result;
@@ -2060,6 +2087,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
      * @param timeout       timeout
      * @param tenantCode    tenantCode
      * @param scheduleJson  scheduleJson
+     * @param otherParamsJson otherParamsJson handle other params
      * @param executionType executionType
      * @return update result code
      */
@@ -2074,6 +2102,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
                                                                 int timeout,
                                                                 String 
tenantCode,
                                                                 String 
scheduleJson,
+                                                                String 
otherParamsJson,
                                                                 
ProcessExecutionTypeEnum executionType) {
         Project project = projectMapper.queryByCode(projectCode);
         //check user access for project
@@ -2115,7 +2144,7 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
         processDefinition.set(projectCode, name, description, globalParams, 
"", timeout, tenantId);
         processDefinition.setExecutionType(executionType);
         List<ProcessTaskRelationLog> taskRelationList = 
processTaskRelationLogMapper.queryByProcessCodeAndVersion(processDefinition.getCode(),
 processDefinition.getVersion());
-        result = updateDagDefine(loginUser, taskRelationList, 
processDefinition, processDefinitionDeepCopy, Lists.newArrayList());
+        result = updateDagDefine(loginUser, taskRelationList, 
processDefinition, processDefinitionDeepCopy, Lists.newArrayList(), 
otherParamsJson);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -2237,4 +2266,39 @@ public class ProcessDefinitionServiceImpl extends 
BaseServiceImpl implements Pro
         putMsg(result, Status.SUCCESS);
         return result;
     }
+
+    /**
+     * save other relation
+     * @param loginUser
+     * @param processDefinition
+     * @param result
+     * @param otherParamsJson
+     */
+    @Override
+    public void saveOtherRelation(User loginUser, ProcessDefinition 
processDefinition, Map<String, Object> result, String otherParamsJson) {
+
+    }
+
+    /**
+     * get Json String
+     * @param loginUser
+     * @param processDefinition
+     * @return Json String
+     */
+    @Override
+    public String doOtherOperateProcess(User loginUser, ProcessDefinition 
processDefinition) {
+        return null;
+    }
+
+    /**
+     * delete other relation
+     * @param project
+     * @param result
+     * @param processDefinition
+     */
+    @Override
+    public void deleteOtherRelation(Project project, Map<String, Object> 
result, ProcessDefinition processDefinition) {
+
+    }
+
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java
index 4215858a11..ca137aaf0d 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java
@@ -17,10 +17,26 @@
 
 package org.apache.dolphinscheduler.api.service.impl;
 
-import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
-import static org.apache.dolphinscheduler.common.Constants.*;
-import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.TASK_TYPE_DEPENDENT;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.dto.gantt.GanttDto;
 import org.apache.dolphinscheduler.api.dto.gantt.Task;
 import org.apache.dolphinscheduler.api.enums.Status;
@@ -66,31 +82,19 @@ import 
org.apache.dolphinscheduler.plugin.task.api.model.Property;
 import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode;
 import org.apache.dolphinscheduler.service.process.ProcessService;
 import org.apache.dolphinscheduler.service.task.TaskPluginManager;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.INSTANCE_DELETE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.INSTANCE_UPDATE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_INSTANCE;
+import static org.apache.dolphinscheduler.common.Constants.DATA_LIST;
+import static org.apache.dolphinscheduler.common.Constants.DEPENDENT_SPLIT;
+import static org.apache.dolphinscheduler.common.Constants.GLOBAL_PARAMS;
+import static org.apache.dolphinscheduler.common.Constants.LOCAL_PARAMS;
+import static 
org.apache.dolphinscheduler.common.Constants.PROCESS_INSTANCE_STATE;
+import static org.apache.dolphinscheduler.common.Constants.TASK_LIST;
+import static 
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.TASK_TYPE_DEPENDENT;
 
 /**
  * process instance service impl
@@ -236,11 +240,12 @@ public class ProcessInstanceServiceImpl extends 
BaseServiceImpl implements Proce
      * @param host host
      * @param startDate start time
      * @param endDate end time
+     * @param otherParamsJson otherParamsJson handle other params
      * @return process instance list
      */
     @Override
     public Result queryProcessInstanceList(User loginUser, long projectCode, 
long processDefineCode, String startDate, String endDate, String searchVal, 
String executorName,
-                                           ExecutionStatus stateType, String 
host, Integer pageNo, Integer pageSize) {
+                                           ExecutionStatus stateType, String 
host, String otherParamsJson, Integer pageNo, Integer pageSize) {
 
         Result result = new Result();
         Project project = projectMapper.queryByCode(projectCode);
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
index 8ef3cd9740..424ee163f8 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
@@ -17,6 +17,14 @@
 
 package org.apache.dolphinscheduler.api.controller;
 
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.dolphinscheduler.api.enums.Status;
 import 
org.apache.dolphinscheduler.api.service.impl.ProcessDefinitionServiceImpl;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -29,15 +37,6 @@ import 
org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinitionLog;
 import org.apache.dolphinscheduler.dao.entity.Resource;
 import org.apache.dolphinscheduler.dao.entity.User;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -48,8 +47,6 @@ import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.mock.web.MockHttpServletResponse;
 
-import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_TREE_VIEW;
-
 /**
  * process definition controller test
  */
@@ -97,10 +94,10 @@ public class ProcessDefinitionControllerTest {
         result.put(Constants.DATA_LIST, 1);
 
         Mockito.when(processDefinitionService.createProcessDefinition(user, 
projectCode, name, description, globalParams,
-                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson, ProcessExecutionTypeEnum.PARALLEL)).thenReturn(result);
+                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson,"", ProcessExecutionTypeEnum.PARALLEL)).thenReturn(result);
 
         Result response = 
processDefinitionController.createProcessDefinition(user, projectCode, name, 
description, globalParams,
-                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson,ProcessExecutionTypeEnum.PARALLEL);
+                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson,"", ProcessExecutionTypeEnum.PARALLEL);
         Assert.assertEquals(Status.SUCCESS.getCode(), 
response.getCode().intValue());
     }
 
@@ -160,10 +157,10 @@ public class ProcessDefinitionControllerTest {
         result.put("processDefinitionId", 1);
 
         Mockito.when(processDefinitionService.updateProcessDefinition(user, 
projectCode, name, code, description, globalParams,
-                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson,ProcessExecutionTypeEnum.PARALLEL)).thenReturn(result);
+                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson, "", ProcessExecutionTypeEnum.PARALLEL)).thenReturn(result);
 
         Result response = 
processDefinitionController.updateProcessDefinition(user, projectCode, name, 
code, description, globalParams,
-                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson, ProcessExecutionTypeEnum.PARALLEL, ReleaseState.OFFLINE);
+                locations, timeout, tenantCode, relationJson, 
taskDefinitionJson, "", ProcessExecutionTypeEnum.PARALLEL, 
ReleaseState.OFFLINE);
         Assert.assertEquals(Status.SUCCESS.getCode(), 
response.getCode().intValue());
     }
 
@@ -361,8 +358,8 @@ public class ProcessDefinitionControllerTest {
         putMsg(result, Status.SUCCESS);
         result.setData(new PageInfo<Resource>(1, 10));
 
-        
Mockito.when(processDefinitionService.queryProcessDefinitionListPaging(user, 
projectCode, searchVal, userId, pageNo, pageSize)).thenReturn(result);
-        Result response = 
processDefinitionController.queryProcessDefinitionListPaging(user, projectCode, 
searchVal, userId, pageNo, pageSize);
+        
Mockito.when(processDefinitionService.queryProcessDefinitionListPaging(user, 
projectCode, searchVal, "", userId, pageNo, pageSize)).thenReturn(result);
+        Result response = 
processDefinitionController.queryProcessDefinitionListPaging(user, projectCode, 
searchVal, "", userId, pageNo, pageSize);
 
         Assert.assertTrue(response != null && response.isSuccess());
     }
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceControllerTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceControllerTest.java
index b7c9c0af90..963eda2b69 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceControllerTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceControllerTest.java
@@ -17,12 +17,8 @@
 
 package org.apache.dolphinscheduler.api.controller;
 
-import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
-import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
-import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.service.ProcessInstanceService;
@@ -30,10 +26,6 @@ import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.plugin.task.api.enums.ExecutionStatus;
-
-import java.util.HashMap;
-import java.util.Map;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -43,6 +35,12 @@ import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MvcResult;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static 
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 /**
  * process instance controller test
@@ -58,7 +56,7 @@ public class ProcessInstanceControllerTest extends 
AbstractControllerTest {
         mockResult.setCode(Status.SUCCESS.getCode());
         PowerMockito.when(processInstanceService
                 .queryProcessInstanceList(Mockito.any(), Mockito.anyLong(), 
Mockito.anyLong(), Mockito.any(),
-                        Mockito.any(), Mockito.any(), Mockito.any(), 
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
+                        Mockito.any(), Mockito.any(), Mockito.any(), 
Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
                 .thenReturn(mockResult);
 
         MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 6e4657bd76..4eb7daaa6e 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -17,9 +17,27 @@
 
 package org.apache.dolphinscheduler.api.service;
 
-import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
-import static org.powermock.api.mockito.PowerMockito.mock;
+import java.io.ByteArrayOutputStream;
+import java.nio.charset.StandardCharsets;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.servlet.http.HttpServletResponse;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.enums.Status;
 import 
org.apache.dolphinscheduler.api.service.impl.ProcessDefinitionServiceImpl;
 import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl;
@@ -51,25 +69,6 @@ import 
org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
 import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
 import org.apache.dolphinscheduler.service.process.ProcessService;
 import org.apache.dolphinscheduler.spi.enums.DbType;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.charset.StandardCharsets;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.servlet.http.HttpServletResponse;
-
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -79,10 +78,15 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.mock.web.MockMultipartFile;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.Lists;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION_MOVE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_BATCH_COPY;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_CREATE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_DEFINITION_DELETE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_IMPORT;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_TREE_VIEW;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_UPDATE;
+import static org.powermock.api.mockito.PowerMockito.mock;
 
 /**
  * process definition service test
@@ -179,7 +183,7 @@ public class ProcessDefinitionServiceTest {
 
         //project not found
         Mockito.when(projectService.checkProjectAndAuth(loginUser, project, 
projectCode,WORKFLOW_DEFINITION)).thenReturn(result);
-        Result map = 
processDefinitionService.queryProcessDefinitionListPaging(loginUser, 
projectCode, "", 1, 5, 0);
+        Result map = 
processDefinitionService.queryProcessDefinitionListPaging(loginUser, 
projectCode, "", "", 1, 5, 0);
         Assert.assertEquals(Status.PROJECT_NOT_FOUND.getCode(), (int) 
map.getCode());
 
         putMsg(result, Status.SUCCESS, projectCode);
@@ -195,7 +199,7 @@ public class ProcessDefinitionServiceTest {
                 , Mockito.anyBoolean())).thenReturn(page);
 
         Result map1 = 
processDefinitionService.queryProcessDefinitionListPaging(
-                loginUser, 1L, "", 1, 10, loginUser.getId());
+                loginUser, 1L, "", "",1, 10, loginUser.getId());
 
         Assert.assertEquals(Status.SUCCESS.getMsg(), map1.getMsg());
     }
@@ -658,7 +662,7 @@ public class ProcessDefinitionServiceTest {
         Mockito.when(projectService.checkProjectAndAuth(loginUser, project, 
projectCode, WORKFLOW_UPDATE)).thenReturn(result);
 
         Map<String, Object> updateResult = 
processDefinitionService.updateProcessDefinition(loginUser, projectCode, 
"test", 1,
-                "", "", "", 0, "root", null, null, 
ProcessExecutionTypeEnum.PARALLEL);
+                "", "", "", 0, "root", null,"",null, 
ProcessExecutionTypeEnum.PARALLEL);
         Assert.assertEquals(Status.DATA_IS_NOT_VALID, 
updateResult.get(Constants.STATUS));
     }
 
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java
index 1f938d200f..fe64eab94d 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java
@@ -17,9 +17,15 @@
 
 package org.apache.dolphinscheduler.api.service;
 
-import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.when;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.service.impl.LoggerServiceImpl;
@@ -57,15 +63,6 @@ import 
org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
 import org.apache.dolphinscheduler.plugin.task.api.enums.ExecutionStatus;
 import org.apache.dolphinscheduler.service.process.ProcessService;
 import org.apache.dolphinscheduler.service.task.TaskPluginManager;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -73,8 +70,11 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.INSTANCE_DELETE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.INSTANCE_UPDATE;
+import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_INSTANCE;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
 
 /**
  * process instance service test
@@ -163,7 +163,7 @@ public class ProcessInstanceServiceTest {
         when(projectService.checkProjectAndAuth(loginUser, project, 
projectCode, WORKFLOW_INSTANCE)).thenReturn(result);
         Result proejctAuthFailRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 46, 
"2020-01-01 00:00:00",
             "2020-01-02 00:00:00", "", "test_user", 
ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
         Assert.assertEquals(Status.PROJECT_NOT_FOUND.getCode(), (int) 
proejctAuthFailRes.getCode());
 
         Date start = DateUtils.getScheduleDate("2020-01-01 00:00:00");
@@ -185,7 +185,7 @@ public class ProcessInstanceServiceTest {
 
         Result dataParameterRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 1, 
"20200101 00:00:00",
             "20200102 00:00:00", "", loginUser.getUserName(), 
ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
         Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getCode(), 
(int) dataParameterRes.getCode());
 
         //project auth success
@@ -201,7 +201,7 @@ public class ProcessInstanceServiceTest {
 
         Result successRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 1, 
"2020-01-01 00:00:00",
             "2020-01-02 00:00:00", "", loginUser.getUserName(), 
ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
         Assert.assertEquals(Status.SUCCESS.getCode(), 
(int)successRes.getCode());
 
         // data parameter empty
@@ -209,7 +209,7 @@ public class ProcessInstanceServiceTest {
             eq("192.168.xx.xx"), eq(null), eq(null))).thenReturn(pageReturn);
         successRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 1, "",
             "", "", loginUser.getUserName(), ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
         Assert.assertEquals(Status.SUCCESS.getCode(), 
(int)successRes.getCode());
 
         //executor null
@@ -217,7 +217,7 @@ public class ProcessInstanceServiceTest {
         
when(usersService.getUserIdByName(loginUser.getUserName())).thenReturn(-1);
         Result executorExistRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 1, 
"2020-01-01 00:00:00",
             "2020-01-02 00:00:00", "", "admin", 
ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
 
         Assert.assertEquals(Status.SUCCESS.getCode(), 
(int)executorExistRes.getCode());
 
@@ -226,7 +226,7 @@ public class ProcessInstanceServiceTest {
             eq("192.168.xx.xx"), eq(start), eq(end))).thenReturn(pageReturn);
         Result executorEmptyRes = 
processInstanceService.queryProcessInstanceList(loginUser, projectCode, 1, 
"2020-01-01 00:00:00",
             "2020-01-02 00:00:00", "", "", ExecutionStatus.SUBMITTED_SUCCESS,
-            "192.168.xx.xx", 1, 10);
+            "192.168.xx.xx", "",1, 10);
         Assert.assertEquals(Status.SUCCESS.getCode(), 
(int)executorEmptyRes.getCode());
 
     }
diff --git 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
index 3a684785e1..6ff3c7dba5 100644
--- 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
+++ 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/JSONUtilsTest.java
@@ -17,21 +17,12 @@
 
 package org.apache.dolphinscheduler.common.utils;
 
-import org.apache.dolphinscheduler.common.model.TaskNode;
-import org.apache.dolphinscheduler.plugin.task.api.enums.DataType;
-import org.apache.dolphinscheduler.plugin.task.api.enums.Direct;
-import org.apache.dolphinscheduler.plugin.task.api.model.Property;
-
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TimeZone;
-
-import org.junit.Assert;
-import org.junit.Test;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.SerializationFeature;
@@ -39,6 +30,13 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import org.apache.dolphinscheduler.common.model.TaskNode;
+import org.apache.dolphinscheduler.plugin.task.api.enums.DataType;
+import org.apache.dolphinscheduler.plugin.task.api.enums.Direct;
+import org.apache.dolphinscheduler.plugin.task.api.model.Property;
+import org.junit.Assert;
+import org.junit.Test;
+
 public class JSONUtilsTest {
 
     @Test
@@ -262,7 +260,6 @@ public class JSONUtilsTest {
 
     @Test
     public void dateToString() {
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
         String time = "2022-02-22 13:38:24";
         Date date = DateUtils.stringToDate(time);
         String json = JSONUtils.toJsonString(date);
@@ -274,7 +271,6 @@ public class JSONUtilsTest {
 
     @Test
     public void stringToDate() {
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
         String json = "\"2022-02-22 13:38:24\"";
         Date date = JSONUtils.parseObject(json, Date.class);
         Assert.assertEquals(date, DateUtils.stringToDate("2022-02-22 
13:38:24"));

Reply via email to