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

ruanwenjun 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 f5accbcdda [Improvement-18224][API] Migrate TaskDefinitionService 
Map<String,Object> returns to typed returns (#18229)
f5accbcdda is described below

commit f5accbcddae9fec64c5b43e3df0dcca42af352e7
Author: Wenjun Ruan <[email protected]>
AuthorDate: Sun May 10 18:59:26 2026 +0800

    [Improvement-18224][API] Migrate TaskDefinitionService Map<String,Object> 
returns to typed returns (#18229)
    
    Refactor 7 TaskDefinitionService methods from Map<String, Object> to typed
    return / void + ServiceException, with cascading updates to controller,
    PythonGateway and unit test:
    
    - queryTaskDefinitionByName(...): TaskDefinition
    - updateTaskWithUpstream(...): Long (the updated task code)
    - switchVersion(...): void
    - deleteByCodeAndVersion(...): void
    - queryTaskDefinitionDetail(...): TaskDefinitionVO
    - genTaskCodeList(Integer): List<Long>
    - releaseTaskDefinition(...): void
    
    The private updateTask helper now throws ServiceException for every error
    path; it still returns null for the "task body unchanged" case so the
    public method can short-circuit when both the body and upstream relations
    are unchanged. As a side effect this fixes a latent bug in
    updateTaskWithUpstream where any error from the helper was silently
    overridden with SUCCESS whenever the new and existing upstream code sets
    happened to match (e.g. TASK_DEFINE_NOT_EXIST returned 200 OK). No test
    covered that edge case.
    
    A small private helper requireProjectAndWritePerm replaces the inline
    hasProjectAndWritePerm(Map) call sites; ProjectService remains untouched
    and will be migrated last in the #18224 series.
    
    HTTP wire format is preserved: ApiExceptionHandler converts ServiceException
    to the same Result(code, msg) shape that BaseController.returnDataList(map)
    produced; success paths use Result.success(data) matching the prior JSON
    body byte-for-byte.
    
    Py4J boundary is preserved: PythonGateway.genTaskCodeList still returns
    Map<String, Object> with the same {STATUS, MSG, DATA_LIST} keys, now
    constructed in the wrapper from the service's typed return.
    
    Part of the migration series tracked by #18224.
---
 .../api/controller/TaskDefinitionController.java   |  74 +++---
 .../dolphinscheduler/api/python/PythonGateway.java |  12 +-
 .../api/service/TaskDefinitionService.java         |  58 ++---
 .../service/impl/TaskDefinitionServiceImpl.java    | 248 +++++++++------------
 .../api/service/TaskDefinitionServiceImplTest.java |  67 +++---
 5 files changed, 208 insertions(+), 251 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
index 563ff11722..5610412a6d 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
@@ -30,11 +30,12 @@ import 
org.apache.dolphinscheduler.api.audit.enums.AuditType;
 import org.apache.dolphinscheduler.api.exceptions.ApiException;
 import org.apache.dolphinscheduler.api.service.TaskDefinitionService;
 import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.api.vo.TaskDefinitionVO;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.enums.ReleaseState;
 import org.apache.dolphinscheduler.dao.entity.User;
 
-import java.util.Map;
+import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -84,14 +85,14 @@ public class TaskDefinitionController extends 
BaseController {
     @ResponseStatus(HttpStatus.OK)
     @ApiException(UPDATE_TASK_DEFINITION_ERROR)
     @OperatorLog(auditType = AuditType.TASK_UPDATE)
-    public Result updateTaskWithUpstream(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                         @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                         @PathVariable(value = "code") long 
code,
-                                         @RequestParam(value = 
"taskDefinitionJsonObj", required = true) String taskDefinitionJsonObj,
-                                         @RequestParam(value = 
"upstreamCodes", required = false) String upstreamCodes) {
-        Map<String, Object> result = 
taskDefinitionService.updateTaskWithUpstream(loginUser, projectCode, code,
+    public Result<Long> updateTaskWithUpstream(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                               @Parameter(name = 
"projectCode", description = "PROJECT_CODE", required = true) @PathVariable 
long projectCode,
+                                               @PathVariable(value = "code") 
long code,
+                                               @RequestParam(value = 
"taskDefinitionJsonObj", required = true) String taskDefinitionJsonObj,
+                                               @RequestParam(value = 
"upstreamCodes", required = false) String upstreamCodes) {
+        Long updatedTaskCode = 
taskDefinitionService.updateTaskWithUpstream(loginUser, projectCode, code,
                 taskDefinitionJsonObj, upstreamCodes);
-        return returnDataList(result);
+        return Result.success(updatedTaskCode);
     }
 
     /**
@@ -141,12 +142,12 @@ public class TaskDefinitionController extends 
BaseController {
     @ResponseStatus(HttpStatus.OK)
     @ApiException(SWITCH_TASK_DEFINITION_VERSION_ERROR)
     @OperatorLog(auditType = AuditType.TASK_SWITCH_VERSION)
-    public Result switchTaskDefinitionVersion(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                              @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                              @PathVariable(value = "code") 
long code,
-                                              @PathVariable(value = "version") 
int version) {
-        Map<String, Object> result = 
taskDefinitionService.switchVersion(loginUser, projectCode, code, version);
-        return returnDataList(result);
+    public Result<Void> switchTaskDefinitionVersion(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                                    @Parameter(name = 
"projectCode", description = "PROJECT_CODE", required = true) @PathVariable 
long projectCode,
+                                                    @PathVariable(value = 
"code") long code,
+                                                    @PathVariable(value = 
"version") int version) {
+        taskDefinitionService.switchVersion(loginUser, projectCode, code, 
version);
+        return Result.success();
     }
 
     /**
@@ -167,13 +168,12 @@ public class TaskDefinitionController extends 
BaseController {
     @ResponseStatus(HttpStatus.OK)
     @ApiException(DELETE_TASK_DEFINITION_VERSION_ERROR)
     @OperatorLog(auditType = AuditType.TASK_DELETE_VERSION)
-    public Result deleteTaskDefinitionVersion(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                              @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                              @PathVariable(value = "code") 
long code,
-                                              @PathVariable(value = "version") 
int version) {
-        Map<String, Object> result =
-                taskDefinitionService.deleteByCodeAndVersion(loginUser, 
projectCode, code, version);
-        return returnDataList(result);
+    public Result<Void> deleteTaskDefinitionVersion(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                                    @Parameter(name = 
"projectCode", description = "PROJECT_CODE", required = true) @PathVariable 
long projectCode,
+                                                    @PathVariable(value = 
"code") long code,
+                                                    @PathVariable(value = 
"version") int version) {
+        taskDefinitionService.deleteByCodeAndVersion(loginUser, projectCode, 
code, version);
+        return Result.success();
     }
 
     /**
@@ -191,11 +191,12 @@ public class TaskDefinitionController extends 
BaseController {
     @GetMapping(value = "/{code}")
     @ResponseStatus(HttpStatus.OK)
     @ApiException(QUERY_DETAIL_OF_TASK_DEFINITION_ERROR)
-    public Result queryTaskDefinitionDetail(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                            @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                            @PathVariable(value = "code") long 
code) {
-        Map<String, Object> result = 
taskDefinitionService.queryTaskDefinitionDetail(loginUser, projectCode, code);
-        return returnDataList(result);
+    public Result<TaskDefinitionVO> 
queryTaskDefinitionDetail(@Parameter(hidden = true) @RequestAttribute(value = 
Constants.SESSION_USER) User loginUser,
+                                                              @Parameter(name 
= "projectCode", description = "PROJECT_CODE", required = true) @PathVariable 
long projectCode,
+                                                              
@PathVariable(value = "code") long code) {
+        TaskDefinitionVO taskDefinitionVO =
+                taskDefinitionService.queryTaskDefinitionDetail(loginUser, 
projectCode, code);
+        return Result.success(taskDefinitionVO);
     }
 
     /**
@@ -212,10 +213,10 @@ public class TaskDefinitionController extends 
BaseController {
     @GetMapping(value = "/gen-task-codes")
     @ResponseStatus(HttpStatus.OK)
     @ApiException(LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR)
-    public Result genTaskCodeList(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                  @RequestParam("genNum") Integer genNum) {
-        Map<String, Object> result = 
taskDefinitionService.genTaskCodeList(genNum);
-        return returnDataList(result);
+    public Result<List<Long>> genTaskCodeList(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                              @RequestParam("genNum") Integer 
genNum) {
+        List<Long> taskCodes = taskDefinitionService.genTaskCodeList(genNum);
+        return Result.success(taskCodes);
     }
 
     /**
@@ -237,12 +238,11 @@ public class TaskDefinitionController extends 
BaseController {
     @ResponseStatus(HttpStatus.OK)
     @ApiException(RELEASE_TASK_DEFINITION_ERROR)
     @OperatorLog(auditType = AuditType.TASK_RELEASE)
-    public Result releaseTaskDefinition(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
-                                        @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                        @PathVariable(value = "code", required 
= true) long code,
-                                        @RequestParam(value = "releaseState", 
required = true, defaultValue = "OFFLINE") ReleaseState releaseState) {
-        Map<String, Object> result =
-                taskDefinitionService.releaseTaskDefinition(loginUser, 
projectCode, code, releaseState);
-        return returnDataList(result);
+    public Result<Void> releaseTaskDefinition(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                              @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
+                                              @PathVariable(value = "code", 
required = true) long code,
+                                              @RequestParam(value = 
"releaseState", required = true, defaultValue = "OFFLINE") ReleaseState 
releaseState) {
+        taskDefinitionService.releaseTaskDefinition(loginUser, projectCode, 
code, releaseState);
+        return Result.success();
     }
 }
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 b69f6862b7..a671a07a07 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
@@ -157,7 +157,17 @@ public class PythonGateway {
     // TODO Should we import package in python client side? utils package can 
but service can not, why
     // Core api
     public Map<String, Object> genTaskCodeList(Integer genNum) {
-        return taskDefinitionService.genTaskCodeList(genNum);
+        Map<String, Object> result = new HashMap<>();
+        try {
+            List<Long> taskCodes = 
taskDefinitionService.genTaskCodeList(genNum);
+            result.put(Constants.STATUS, Status.SUCCESS);
+            result.put(Constants.MSG, Status.SUCCESS.getMsg());
+            result.put(Constants.DATA_LIST, taskCodes);
+        } catch (ServiceException e) {
+            result.put(Constants.STATUS, Status.DATA_IS_NOT_VALID);
+            result.put(Constants.MSG, e.getMessage());
+        }
+        return result;
     }
 
     public Map<String, Long> getCodeAndVersion(String projectName, String 
workflowDefinitionName,
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
index f5a3e8aac1..f2750efdca 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
@@ -18,11 +18,12 @@
 package org.apache.dolphinscheduler.api.service;
 
 import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.api.vo.TaskDefinitionVO;
 import org.apache.dolphinscheduler.common.enums.ReleaseState;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
 import org.apache.dolphinscheduler.dao.entity.User;
 
-import java.util.Map;
+import java.util.List;
 
 public interface TaskDefinitionService {
 
@@ -33,11 +34,12 @@ public interface TaskDefinitionService {
      * @param projectCode project code
      * @param workflowDefinitionCode workflow definition code
      * @param taskName task name
+     * @return matching task definition
      */
-    Map<String, Object> queryTaskDefinitionByName(User loginUser,
-                                                  long projectCode,
-                                                  long workflowDefinitionCode,
-                                                  String taskName);
+    TaskDefinition queryTaskDefinitionByName(User loginUser,
+                                             long projectCode,
+                                             long workflowDefinitionCode,
+                                             String taskName);
 
     /**
      * Get resource task definition by code
@@ -57,13 +59,13 @@ public interface TaskDefinitionService {
      * @param taskCode              task definition code
      * @param taskDefinitionJsonObj task definition json object
      * @param upstreamCodes         upstream task codes, sep comma
-     * @return update result code
+     * @return updated task code
      */
-    Map<String, Object> updateTaskWithUpstream(User loginUser,
-                                               long projectCode,
-                                               long taskCode,
-                                               String taskDefinitionJsonObj,
-                                               String upstreamCodes);
+    Long updateTaskWithUpstream(User loginUser,
+                                long projectCode,
+                                long taskCode,
+                                String taskDefinitionJsonObj,
+                                String upstreamCodes);
 
     /**
      * update task definition
@@ -73,10 +75,10 @@ public interface TaskDefinitionService {
      * @param taskCode task code
      * @param version the version user want to switch
      */
-    Map<String, Object> switchVersion(User loginUser,
-                                      long projectCode,
-                                      long taskCode,
-                                      int version);
+    void switchVersion(User loginUser,
+                       long projectCode,
+                       long taskCode,
+                       int version);
 
     /**
      * query the pagination versions info by one certain task definition code
@@ -101,12 +103,11 @@ public interface TaskDefinitionService {
      * @param projectCode project code
      * @param taskCode the task definition code
      * @param version the task definition version user want to delete
-     * @return delete version result code
      */
-    Map<String, Object> deleteByCodeAndVersion(User loginUser,
-                                               long projectCode,
-                                               long taskCode,
-                                               int version);
+    void deleteByCodeAndVersion(User loginUser,
+                                long projectCode,
+                                long taskCode,
+                                int version);
 
     /**
      * query detail of task definition by code
@@ -116,9 +117,9 @@ public interface TaskDefinitionService {
      * @param taskCode the task definition code
      * @return task definition detail
      */
-    Map<String, Object> queryTaskDefinitionDetail(User loginUser,
-                                                  long projectCode,
-                                                  long taskCode);
+    TaskDefinitionVO queryTaskDefinitionDetail(User loginUser,
+                                               long projectCode,
+                                               long taskCode);
 
     /**
      * gen task code list
@@ -126,7 +127,7 @@ public interface TaskDefinitionService {
      * @param genNum gen num
      * @return task code list
      */
-    Map<String, Object> genTaskCodeList(Integer genNum);
+    List<Long> genTaskCodeList(Integer genNum);
 
     /**
      * release task definition
@@ -135,12 +136,11 @@ public interface TaskDefinitionService {
      * @param projectCode project code
      * @param code task definition code
      * @param releaseState releaseState
-     * @return update result code
      */
-    Map<String, Object> releaseTaskDefinition(User loginUser,
-                                              long projectCode,
-                                              long code,
-                                              ReleaseState releaseState);
+    void releaseTaskDefinition(User loginUser,
+                               long projectCode,
+                               long code,
+                               ReleaseState releaseState);
 
     void deleteTaskByWorkflowDefinitionCode(long workflowDefinitionCode, int 
workflowDefinitionVersion);
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
index 6512338c53..43fc5852b8 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
@@ -130,23 +130,33 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
      * @param taskName    task name
      */
     @Override
-    public Map<String, Object> queryTaskDefinitionByName(User loginUser, long 
projectCode, long workflowDefinitionCode,
-                                                         String taskName) {
+    public TaskDefinition queryTaskDefinitionByName(User loginUser, long 
projectCode, long workflowDefinitionCode,
+                                                    String taskName) {
         Project project = projectMapper.queryByCode(projectCode);
         // check user access for project
         projectService.checkProjectAndAuthThrowException(loginUser, project, 
TASK_DEFINITION);
 
-        Map<String, Object> result = new HashMap<>();
         TaskDefinition taskDefinition =
                 taskDefinitionMapper.queryByName(project.getCode(), 
workflowDefinitionCode, taskName);
         if (taskDefinition == null) {
             log.error("Task definition does not exist, taskName:{}.", 
taskName);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, taskName);
-        } else {
-            result.put(Constants.DATA_LIST, taskDefinition);
-            putMsg(result, Status.SUCCESS);
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, taskName);
+        }
+        return taskDefinition;
+    }
+
+    /**
+     * Resolve project + write permission; throws ServiceException with the
+     * status that {@link ProjectService#hasProjectAndWritePerm(User, Project, 
Map)}
+     * would otherwise have written into the legacy result map.
+     */
+    private void requireProjectAndWritePerm(User loginUser, Project project) {
+        Map<String, Object> permCheck = new HashMap<>();
+        if (!projectService.hasProjectAndWritePerm(loginUser, project, 
permCheck)) {
+            Status status = (Status) permCheck.get(Constants.STATUS);
+            String msg = (String) permCheck.get(Constants.MSG);
+            throw new ServiceException(status.getCode(), msg);
         }
-        return result;
     }
 
     public void updateDag(User loginUser, long workflowDefinitionCode,
@@ -202,29 +212,31 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
         return taskDefinition;
     }
 
-    private TaskDefinitionLog updateTask(User loginUser, long projectCode, 
long taskCode, String taskDefinitionJsonObj,
-                                         Map<String, Object> result) {
+    /**
+     * Update the task body and cascade through workflow task relations.
+     *
+     * @return the persisted {@link TaskDefinitionLog}, or {@code null} when 
the
+     *         task body is unchanged (callers may still need to apply upstream
+     *         changes). All other failure modes throw {@link 
ServiceException}.
+     */
+    private TaskDefinitionLog updateTask(User loginUser, long projectCode, 
long taskCode,
+                                         String taskDefinitionJsonObj) {
         Project project = projectMapper.queryByCode(projectCode);
 
         // check if user have write perm for project
-        boolean hasProjectAndWritePerm = 
projectService.hasProjectAndWritePerm(loginUser, project, result);
-        if (!hasProjectAndWritePerm) {
-            return null;
-        }
+        requireProjectAndWritePerm(loginUser, project);
 
         TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByCode(taskCode);
         if (taskDefinition == null) {
             log.error("Task definition does not exist, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
-            return null;
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
         }
         if (processService.isTaskOnline(taskCode) && taskDefinition.getFlag() 
== Flag.YES) {
             // if stream, can update task definition without online check
             if (taskDefinition.getTaskExecuteType() != TaskExecuteType.STREAM) 
{
                 log.warn("Only {} type task can be updated without online 
check, taskDefinitionCode:{}.",
                         TaskExecuteType.STREAM, taskCode);
-                putMsg(result, Status.NOT_SUPPORT_UPDATE_TASK_DEFINITION);
-                return null;
+                throw new 
ServiceException(Status.NOT_SUPPORT_UPDATE_TASK_DEFINITION);
             }
         }
         TaskDefinitionLog taskDefinitionToUpdate =
@@ -234,24 +246,20 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
         }
         if (taskDefinition.equals(taskDefinitionToUpdate)) {
             log.warn("Task definition does not need update because no change, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.TASK_DEFINITION_NOT_MODIFY_ERROR, 
String.valueOf(taskCode));
             return null;
         }
         if (taskDefinitionToUpdate == null) {
             log.warn("Parameter taskDefinitionJson is invalid.");
-            putMsg(result, Status.DATA_IS_NOT_VALID, taskDefinitionJsonObj);
-            return null;
+            throw new ServiceException(Status.DATA_IS_NOT_VALID, 
taskDefinitionJsonObj);
         }
         if (!checkTaskParameters(taskDefinitionToUpdate.getTaskType(), 
taskDefinitionToUpdate.getTaskParams())) {
-            putMsg(result, Status.WORKFLOW_NODE_S_PARAMETER_INVALID, 
taskDefinitionToUpdate.getName());
-            return null;
+            throw new 
ServiceException(Status.WORKFLOW_NODE_S_PARAMETER_INVALID, 
taskDefinitionToUpdate.getName());
         }
         Integer version = 
taskDefinitionLogMapper.queryMaxVersionForDefinition(taskCode);
         if (version == null || version == 0) {
             log.error("Max version task definitionLog can not be found in 
database, taskDefinitionCode:{}.",
                     taskCode);
-            putMsg(result, Status.DATA_IS_NOT_VALID, taskCode);
-            return null;
+            throw new ServiceException(Status.DATA_IS_NOT_VALID, taskCode);
         }
         Date now = new Date();
         taskDefinitionToUpdate.setCode(taskCode);
@@ -270,12 +278,11 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
         if ((update & insert) != 1) {
             log.error("Update task definition or definitionLog error, 
projectCode:{}, taskDefinitionCode:{}.",
                     projectCode, taskCode);
-            putMsg(result, Status.UPDATE_TASK_DEFINITION_ERROR);
             throw new ServiceException(Status.UPDATE_TASK_DEFINITION_ERROR);
-        } else
-            log.info(
-                    "Update task definition and definitionLog complete, 
projectCode:{}, taskDefinitionCode:{}, newTaskVersion:{}.",
-                    projectCode, taskCode, 
taskDefinitionToUpdate.getVersion());
+        }
+        log.info(
+                "Update task definition and definitionLog complete, 
projectCode:{}, taskDefinitionCode:{}, newTaskVersion:{}.",
+                projectCode, taskCode, taskDefinitionToUpdate.getVersion());
         // update workflow task relation
         List<WorkflowTaskRelation> workflowTaskRelations = 
workflowTaskRelationMapper
                 
.queryWorkflowTaskRelationByTaskCodeAndTaskVersion(taskDefinitionToUpdate.getCode(),
@@ -302,7 +309,6 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                     if (updateWorkflowDefinitionVersionCount != 1) {
                         log.error("batch update workflow task relation error, 
projectCode:{}, taskDefinitionCode:{}.",
                                 projectCode, taskCode);
-                        putMsg(result, 
Status.WORKFLOW_TASK_RELATION_BATCH_UPDATE_ERROR);
                         throw new 
ServiceException(Status.WORKFLOW_TASK_RELATION_BATCH_UPDATE_ERROR);
                     }
                     WorkflowTaskRelationLog workflowTaskRelationLog = new 
WorkflowTaskRelationLog(workflowTaskRelation);
@@ -313,7 +319,6 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                     if (insertWorkflowTaskRelationLogCount != 1) {
                         log.error("batch update workflow task relation error, 
projectCode:{}, taskDefinitionCode:{}.",
                                 projectCode, taskCode);
-                        putMsg(result, 
Status.CREATE_WORKFLOW_TASK_RELATION_LOG_ERROR);
                         throw new 
ServiceException(Status.CREATE_WORKFLOW_TASK_RELATION_LOG_ERROR);
                     }
                 }
@@ -329,7 +334,6 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                 workflowDefinitionLog.setOperator(loginUser.getId());
                 int insertWorkflowDefinitionLogCount = 
workflowDefinitionLogMapper.insert(workflowDefinitionLog);
                 if ((updateWorkflowDefinitionCount & 
insertWorkflowDefinitionLogCount) != 1) {
-                    putMsg(result, Status.UPDATE_WORKFLOW_DEFINITION_ERROR);
                     throw new 
ServiceException(Status.UPDATE_WORKFLOW_DEFINITION_ERROR);
                 }
             }
@@ -345,14 +349,13 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
      * @param taskCode              task definition code
      * @param taskDefinitionJsonObj task definition json object
      * @param upstreamCodes         upstream task codes, sep comma
-     * @return update result code
+     * @return updated task code
      */
     @Override
-    public Map<String, Object> updateTaskWithUpstream(User loginUser, long 
projectCode, long taskCode,
-                                                      String 
taskDefinitionJsonObj, String upstreamCodes) {
-        Map<String, Object> result = new HashMap<>();
+    public Long updateTaskWithUpstream(User loginUser, long projectCode, long 
taskCode,
+                                       String taskDefinitionJsonObj, String 
upstreamCodes) {
         TaskDefinitionLog taskDefinitionToUpdate =
-                updateTask(loginUser, projectCode, taskCode, 
taskDefinitionJsonObj, result);
+                updateTask(loginUser, projectCode, taskCode, 
taskDefinitionJsonObj);
         List<WorkflowTaskRelation> upstreamTaskRelations =
                 workflowTaskRelationMapper.queryUpstreamByCode(projectCode, 
taskCode);
         Set<Long> upstreamCodeSet =
@@ -363,8 +366,7 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                     .collect(Collectors.toSet());
         }
         if (CollectionUtils.isEqualCollection(upstreamCodeSet, 
upstreamTaskCodes) && taskDefinitionToUpdate == null) {
-            putMsg(result, Status.SUCCESS);
-            return result;
+            return taskCode;
         }
         Map<Long, TaskDefinition> queryUpStreamTaskCodeMap;
         if (CollectionUtils.isNotEmpty(upstreamTaskCodes)) {
@@ -377,8 +379,7 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                 String notExistTaskCodes = StringUtils.join(upstreamTaskCodes, 
Constants.COMMA);
                 log.error("Some task definitions in parameter 
upstreamTaskCodes do not exist, notExistTaskCodes:{}.",
                         notExistTaskCodes);
-                putMsg(result, Status.TASK_DEFINE_NOT_EXIST, 
notExistTaskCodes);
-                return result;
+                throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
notExistTaskCodes);
             }
         } else {
             queryUpStreamTaskCodeMap = new HashMap<>();
@@ -419,9 +420,7 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
         log.info(
                 "Update task with upstream tasks complete, projectCode:{}, 
taskDefinitionCode:{}, upstreamTaskCodes:{}.",
                 projectCode, taskCode, upstreamTaskCodes);
-        result.put(Constants.DATA_LIST, taskCode);
-        putMsg(result, Status.SUCCESS);
-        return result;
+        return taskCode;
     }
 
     private void updateUpstreamTask(Set<Long> allPreTaskCodeSet, long 
taskCode, long projectCode,
@@ -520,24 +519,21 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
      */
     @Transactional
     @Override
-    public Map<String, Object> switchVersion(User loginUser, long projectCode, 
long taskCode, int version) {
+    public void switchVersion(User loginUser, long projectCode, long taskCode, 
int version) {
         Project project = projectMapper.queryByCode(projectCode);
         // check user access for project
         projectService.checkProjectAndAuthThrowException(loginUser, project, 
WORKFLOW_SWITCH_TO_THIS_VERSION);
 
-        Map<String, Object> result = new HashMap<>();
         if (processService.isTaskOnline(taskCode)) {
             log.warn(
                     "Task definition version can not be switched due to 
workflow definition is {}, taskDefinitionCode:{}.",
                     ReleaseState.ONLINE.getDescp(), taskCode);
-            putMsg(result, Status.WORKFLOW_DEFINE_STATE_ONLINE);
-            return result;
+            throw new ServiceException(Status.WORKFLOW_DEFINE_STATE_ONLINE);
         }
         TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByCode(taskCode);
         if (taskDefinition == null || projectCode != 
taskDefinition.getProjectCode()) {
             log.error("Task definition does not exist, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
-            return result;
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
         }
         TaskDefinitionLog taskDefinitionUpdate =
                 
taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskCode, version);
@@ -545,29 +541,26 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
         taskDefinitionUpdate.setUpdateTime(new Date());
         taskDefinitionUpdate.setId(taskDefinition.getId());
         int switchVersion = 
taskDefinitionMapper.updateById(taskDefinitionUpdate);
-        if (switchVersion > 0) {
-            List<WorkflowTaskRelation> taskRelationList =
-                    
workflowTaskRelationMapper.queryUpstreamByCode(projectCode, taskCode);
-            if (CollectionUtils.isNotEmpty(taskRelationList)) {
-                log.info(
-                        "Task definition has upstream tasks, start handle them 
after switch task, taskDefinitionCode:{}.",
-                        taskCode);
-                long workflowDefinitionCode = 
taskRelationList.get(0).getWorkflowDefinitionCode();
-                List<WorkflowTaskRelation> workflowTaskRelations =
-                        
workflowTaskRelationMapper.queryByWorkflowDefinitionCode(workflowDefinitionCode);
-                updateDag(loginUser, workflowDefinitionCode, 
workflowTaskRelations,
-                        Lists.newArrayList(taskDefinitionUpdate));
-            } else {
-                log.info(
-                        "Task definition version switch complete, switch task 
version to {}, taskDefinitionCode:{}.",
-                        version, taskCode);
-                putMsg(result, Status.SUCCESS);
-            }
-        } else {
+        if (switchVersion <= 0) {
             log.error("Task definition version switch error, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.SWITCH_TASK_DEFINITION_VERSION_ERROR);
+            throw new 
ServiceException(Status.SWITCH_TASK_DEFINITION_VERSION_ERROR);
+        }
+        List<WorkflowTaskRelation> taskRelationList =
+                workflowTaskRelationMapper.queryUpstreamByCode(projectCode, 
taskCode);
+        if (CollectionUtils.isNotEmpty(taskRelationList)) {
+            log.info(
+                    "Task definition has upstream tasks, start handle them 
after switch task, taskDefinitionCode:{}.",
+                    taskCode);
+            long workflowDefinitionCode = 
taskRelationList.get(0).getWorkflowDefinitionCode();
+            List<WorkflowTaskRelation> workflowTaskRelations =
+                    
workflowTaskRelationMapper.queryByWorkflowDefinitionCode(workflowDefinitionCode);
+            updateDag(loginUser, workflowDefinitionCode, workflowTaskRelations,
+                    Lists.newArrayList(taskDefinitionUpdate));
+        } else {
+            log.info(
+                    "Task definition version switch complete, switch task 
version to {}, taskDefinitionCode:{}.",
+                    version, taskCode);
         }
-        return result;
     }
 
     @Override
@@ -595,86 +588,66 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
     }
 
     @Override
-    public Map<String, Object> deleteByCodeAndVersion(User loginUser, long 
projectCode, long taskCode, int version) {
+    public void deleteByCodeAndVersion(User loginUser, long projectCode, long 
taskCode, int version) {
         Project project = projectMapper.queryByCode(projectCode);
         // check if user have write perm for project
-        Map<String, Object> result = new HashMap<>();
-        boolean hasProjectAndWritePerm = 
projectService.hasProjectAndWritePerm(loginUser, project, result);
-        if (!hasProjectAndWritePerm) {
-            return result;
-        }
-        TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByCode(taskCode);
+        requireProjectAndWritePerm(loginUser, project);
 
+        TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByCode(taskCode);
         if (taskDefinition == null || projectCode != 
taskDefinition.getProjectCode()) {
             log.error("Task definition does not exist, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
-        } else {
-            if (taskDefinition.getVersion() == version) {
-                log.warn(
-                        "Task definition can not be deleted due to version is 
being used, projectCode:{}, taskDefinitionCode:{}, version:{}.",
-                        projectCode, taskCode, version);
-                putMsg(result, Status.MAIN_TABLE_USING_VERSION);
-                return result;
-            }
-            int delete = 
taskDefinitionLogMapper.deleteByCodeAndVersion(taskCode, version);
-            if (delete > 0) {
-                log.info(
-                        "Task definition version delete complete, 
projectCode:{}, taskDefinitionCode:{}, version:{}.",
-                        projectCode, taskCode, version);
-                putMsg(result, Status.SUCCESS);
-            } else {
-                log.error("Task definition version delete error, 
projectCode:{}, taskDefinitionCode:{}, version:{}.",
-                        projectCode, taskCode, version);
-                putMsg(result, Status.DELETE_TASK_DEFINITION_VERSION_ERROR);
-            }
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
         }
-        return result;
+        if (taskDefinition.getVersion() == version) {
+            log.warn(
+                    "Task definition can not be deleted due to version is 
being used, projectCode:{}, taskDefinitionCode:{}, version:{}.",
+                    projectCode, taskCode, version);
+            throw new ServiceException(Status.MAIN_TABLE_USING_VERSION);
+        }
+        int delete = taskDefinitionLogMapper.deleteByCodeAndVersion(taskCode, 
version);
+        if (delete <= 0) {
+            log.error("Task definition version delete error, projectCode:{}, 
taskDefinitionCode:{}, version:{}.",
+                    projectCode, taskCode, version);
+            throw new 
ServiceException(Status.DELETE_TASK_DEFINITION_VERSION_ERROR);
+        }
+        log.info(
+                "Task definition version delete complete, projectCode:{}, 
taskDefinitionCode:{}, version:{}.",
+                projectCode, taskCode, version);
     }
 
     @Override
-    public Map<String, Object> queryTaskDefinitionDetail(User loginUser, long 
projectCode, long taskCode) {
+    public TaskDefinitionVO queryTaskDefinitionDetail(User loginUser, long 
projectCode, long taskCode) {
         Project project = projectMapper.queryByCode(projectCode);
         // check user access for project
         projectService.checkProjectAndAuthThrowException(loginUser, project, 
TASK_DEFINITION);
 
-        Map<String, Object> result = new HashMap<>();
         TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByCode(taskCode);
         if (taskDefinition == null || projectCode != 
taskDefinition.getProjectCode()) {
             log.error("Task definition does not exist, 
taskDefinitionCode:{}.", taskCode);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
-        } else {
-            List<WorkflowTaskRelation> taskRelationList = 
workflowTaskRelationMapper
-                    .queryByCode(projectCode, 0, 0, taskCode);
-            if (CollectionUtils.isNotEmpty(taskRelationList)) {
-                taskRelationList = taskRelationList.stream()
-                        .filter(v -> v.getPreTaskCode() != 
0).collect(Collectors.toList());
-            }
-            TaskDefinitionVO taskDefinitionVo = 
TaskDefinitionVO.fromTaskDefinition(taskDefinition);
-            taskDefinitionVo.setWorkflowTaskRelationList(taskRelationList);
-            result.put(Constants.DATA_LIST, taskDefinitionVo);
-            putMsg(result, Status.SUCCESS);
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(taskCode));
         }
-        return result;
+        List<WorkflowTaskRelation> taskRelationList = 
workflowTaskRelationMapper
+                .queryByCode(projectCode, 0, 0, taskCode);
+        if (CollectionUtils.isNotEmpty(taskRelationList)) {
+            taskRelationList = taskRelationList.stream()
+                    .filter(v -> v.getPreTaskCode() != 
0).collect(Collectors.toList());
+        }
+        TaskDefinitionVO taskDefinitionVo = 
TaskDefinitionVO.fromTaskDefinition(taskDefinition);
+        taskDefinitionVo.setWorkflowTaskRelationList(taskRelationList);
+        return taskDefinitionVo;
     }
 
     @Override
-    public Map<String, Object> genTaskCodeList(Integer genNum) {
-        Map<String, Object> result = new HashMap<>();
+    public List<Long> genTaskCodeList(Integer genNum) {
         if (genNum == null || genNum < 1 || genNum > 100) {
             log.warn("Parameter genNum must be great than 1 and less than 
100.");
-            putMsg(result, Status.DATA_IS_NOT_VALID, genNum);
-            return result;
+            throw new ServiceException(Status.DATA_IS_NOT_VALID, genNum);
         }
         List<Long> taskCodes = new ArrayList<>();
-
         for (int i = 0; i < genNum; i++) {
             taskCodes.add(CodeGenerateUtils.genCode());
         }
-
-        putMsg(result, Status.SUCCESS);
-        // return workflowDefinitionCode
-        result.put(Constants.DATA_LIST, taskCodes);
-        return result;
+        return taskCodes;
     }
 
     /**
@@ -684,32 +657,26 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
      * @param projectCode  project code
      * @param code         task definition code
      * @param releaseState releaseState
-     * @return update result code
      */
     @Transactional
     @Override
-    public Map<String, Object> releaseTaskDefinition(User loginUser, long 
projectCode, long code,
-                                                     ReleaseState 
releaseState) {
+    public void releaseTaskDefinition(User loginUser, long projectCode, long 
code, ReleaseState releaseState) {
         Project project = projectMapper.queryByCode(projectCode);
         // check user access for project
         projectService.checkProjectAndAuthThrowException(loginUser, project, 
null);
 
-        Map<String, Object> result = new HashMap<>();
         if (null == releaseState) {
-            putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
Constants.RELEASE_STATE);
-            return result;
+            throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
Constants.RELEASE_STATE);
         }
         TaskDefinition taskDefinition = taskDefinitionMapper.queryByCode(code);
         if (taskDefinition == null || projectCode != 
taskDefinition.getProjectCode()) {
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, String.valueOf(code));
-            return result;
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(code));
         }
         TaskDefinitionLog taskDefinitionLog =
                 taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(code, 
taskDefinition.getVersion());
         if (taskDefinitionLog == null) {
             log.error("Task definition does not exist, 
taskDefinitionCode:{}.", code);
-            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, String.valueOf(code));
-            return result;
+            throw new ServiceException(Status.TASK_DEFINE_NOT_EXIST, 
String.valueOf(code));
         }
         switch (releaseState) {
             case OFFLINE:
@@ -727,8 +694,7 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                         permissionCheck.checkPermission();
                     } catch (Exception e) {
                         log.error("Resources permission check error, 
resourceIds:{}.", resourceIds, e);
-                        putMsg(result, 
Status.RESOURCE_NOT_EXIST_OR_NO_PERMISSION);
-                        return result;
+                        throw new 
ServiceException(Status.RESOURCE_NOT_EXIST_OR_NO_PERMISSION);
                     }
                 }
                 taskDefinition.setFlag(Flag.YES);
@@ -736,20 +702,16 @@ public class TaskDefinitionServiceImpl extends 
BaseServiceImpl implements TaskDe
                 break;
             default:
                 log.warn("Parameter releaseState is invalid.");
-                putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
Constants.RELEASE_STATE);
-                return result;
+                throw new 
ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
Constants.RELEASE_STATE);
         }
         int update = taskDefinitionMapper.updateById(taskDefinition);
         int updateLog = taskDefinitionLogMapper.updateById(taskDefinitionLog);
         if ((update == 0 && updateLog == 1) || (update == 1 && updateLog == 
0)) {
             log.error("Update taskDefinition state or taskDefinitionLog state 
error, taskDefinitionCode:{}.", code);
-            putMsg(result, Status.UPDATE_TASK_DEFINITION_ERROR);
             throw new ServiceException(Status.UPDATE_TASK_DEFINITION_ERROR);
         }
-        log.error("Update taskDefinition state or taskDefinitionLog state to 
complete, taskDefinitionCode:{}.",
+        log.info("Update taskDefinition state or taskDefinitionLog state to 
complete, taskDefinitionCode:{}.",
                 code);
-        putMsg(result, Status.SUCCESS);
-        return result;
     }
 
     @Override
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
index c38c221ff4..35ee263461 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
@@ -17,9 +17,11 @@
 
 package org.apache.dolphinscheduler.api.service;
 
+import static 
org.apache.dolphinscheduler.api.AssertionsHelper.assertThrowsServiceException;
 import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TASK_DEFINITION;
 import static 
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.WORKFLOW_SWITCH_TO_THIS_VERSION;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doNothing;
@@ -55,10 +57,8 @@ import 
org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
 import org.apache.dolphinscheduler.service.process.ProcessService;
 import org.apache.dolphinscheduler.service.process.ProcessServiceImpl;
 
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -146,10 +146,10 @@ public class TaskDefinitionServiceImplTest {
         when(taskDefinitionMapper.queryByName(project.getCode(), 
PROCESS_DEFINITION_CODE, taskName))
                 .thenReturn(new TaskDefinition());
 
-        Map<String, Object> relation = taskDefinitionService
+        TaskDefinition taskDefinition = taskDefinitionService
                 .queryTaskDefinitionByName(user, PROJECT_CODE, 
PROCESS_DEFINITION_CODE, taskName);
 
-        assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
+        Assertions.assertNotNull(taskDefinition);
     }
 
     @Test
@@ -165,18 +165,17 @@ public class TaskDefinitionServiceImplTest {
         taskDefinition.setProjectCode(PROJECT_CODE);
         when(taskDefinitionMapper.queryByCode(TASK_CODE))
                 .thenReturn(taskDefinition);
-        when(taskDefinitionMapper.updateById(new 
TaskDefinitionLog())).thenReturn(1);
-        Map<String, Object> relation = taskDefinitionService
-                .switchVersion(user, PROJECT_CODE, TASK_CODE, VERSION);
+        
when(taskDefinitionMapper.updateById(any(TaskDefinitionLog.class))).thenReturn(1);
 
-        assertEquals(Status.SUCCESS, relation.get(Constants.STATUS));
+        Assertions.assertDoesNotThrow(
+                () -> taskDefinitionService.switchVersion(user, PROJECT_CODE, 
TASK_CODE, VERSION));
     }
 
     @Test
     public void deleteByCodeAndVersion() {
         Project project = getProject();
         when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
-        when(projectService.hasProjectAndWritePerm(user, project, new 
HashMap<>())).thenReturn(true);
+        when(projectService.hasProjectAndWritePerm(eq(user), eq(project), 
any(Map.class))).thenReturn(true);
 
         // cross-project privilege escalation: taskCode belongs to another 
project - must be rejected
         TaskDefinition otherProjectTask = new TaskDefinition();
@@ -184,9 +183,8 @@ public class TaskDefinitionServiceImplTest {
         otherProjectTask.setCode(TASK_CODE);
         otherProjectTask.setVersion(VERSION + 1);
         
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(otherProjectTask);
-        Map<String, Object> crossProjectResult =
-                taskDefinitionService.deleteByCodeAndVersion(user, 
PROJECT_CODE, TASK_CODE, VERSION);
-        assertEquals(Status.TASK_DEFINE_NOT_EXIST, 
crossProjectResult.get(Constants.STATUS));
+        assertThrowsServiceException(Status.TASK_DEFINE_NOT_EXIST,
+                () -> taskDefinitionService.deleteByCodeAndVersion(user, 
PROJECT_CODE, TASK_CODE, VERSION));
         Mockito.verify(taskDefinitionLogMapper, 
Mockito.never()).deleteByCodeAndVersion(TASK_CODE, VERSION);
 
         // normal path: taskCode belongs to the project - should succeed
@@ -196,18 +194,8 @@ public class TaskDefinitionServiceImplTest {
         taskDefinition.setVersion(VERSION + 1);
         
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
         when(taskDefinitionLogMapper.deleteByCodeAndVersion(TASK_CODE, 
VERSION)).thenReturn(1);
-        Map<String, Object> successResult =
-                taskDefinitionService.deleteByCodeAndVersion(user, 
PROJECT_CODE, TASK_CODE, VERSION);
-        assertEquals(Status.SUCCESS, successResult.get(Constants.STATUS));
-    }
-
-    private void putMsg(Map<String, Object> result, Status status, Object... 
statusParams) {
-        result.put(Constants.STATUS, status);
-        if (statusParams != null && statusParams.length > 0) {
-            result.put(Constants.MSG, MessageFormat.format(status.getMsg(), 
statusParams));
-        } else {
-            result.put(Constants.MSG, status.getMsg());
-        }
+        Assertions.assertDoesNotThrow(
+                () -> taskDefinitionService.deleteByCodeAndVersion(user, 
PROJECT_CODE, TASK_CODE, VERSION));
     }
 
     @Test
@@ -246,8 +234,8 @@ public class TaskDefinitionServiceImplTest {
 
     @Test
     public void genTaskCodeList() {
-        Map<String, Object> genTaskCodeList = 
taskDefinitionService.genTaskCodeList(10);
-        assertEquals(Status.SUCCESS, genTaskCodeList.get(Constants.STATUS));
+        List<Long> taskCodes = taskDefinitionService.genTaskCodeList(10);
+        assertEquals(10, taskCodes.size());
     }
 
     @Test
@@ -257,9 +245,8 @@ public class TaskDefinitionServiceImplTest {
         
Mockito.doNothing().when(projectService).checkProjectAndAuthThrowException(user,
 project, null);
 
         // check task dose not exist
-        Map<String, Object> map =
-                taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
-        assertEquals(Status.TASK_DEFINE_NOT_EXIST, map.get(Constants.STATUS));
+        assertThrowsServiceException(Status.TASK_DEFINE_NOT_EXIST,
+                () -> taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE));
 
         // process definition offline
         TaskDefinition taskDefinition = new TaskDefinition();
@@ -274,19 +261,17 @@ public class TaskDefinitionServiceImplTest {
         TaskDefinitionLog taskDefinitionLog = new 
TaskDefinitionLog(taskDefinition);
         
when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(TASK_CODE, 
taskDefinition.getVersion()))
                 .thenReturn(taskDefinitionLog);
-        Map<String, Object> offlineTaskResult =
-                taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE, ReleaseState.OFFLINE);
-        assertEquals(Status.SUCCESS, offlineTaskResult.get(Constants.STATUS));
+        Assertions.assertDoesNotThrow(() -> 
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE,
+                ReleaseState.OFFLINE));
 
         // process definition online, resource exist
-        Map<String, Object> onlineTaskResult =
-                taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE, ReleaseState.ONLINE);
-        assertEquals(Status.SUCCESS, onlineTaskResult.get(Constants.STATUS));
+        Assertions.assertDoesNotThrow(() -> 
taskDefinitionService.releaseTaskDefinition(user, PROJECT_CODE, TASK_CODE,
+                ReleaseState.ONLINE));
 
         // release error code
-        Map<String, Object> failResult =
-                taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE, ReleaseState.getEnum(2));
-        assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
failResult.get(Constants.STATUS));
+        assertThrowsServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
+                () -> taskDefinitionService.releaseTaskDefinition(user, 
PROJECT_CODE, TASK_CODE,
+                        ReleaseState.getEnum(2)));
     }
 
     @Test
@@ -364,7 +349,7 @@ public class TaskDefinitionServiceImplTest {
 
             user.setUserType(UserType.ADMIN_USER);
             
when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
-            when(projectService.hasProjectAndWritePerm(user, getProject(), new 
HashMap<>())).thenReturn(true);
+            when(projectService.hasProjectAndWritePerm(eq(user), 
eq(getProject()), any(Map.class))).thenReturn(true);
             
when(taskDefinitionMapper.queryByCode(TASK_CODE)).thenReturn(taskDefinition);
             
when(taskDefinitionLogMapper.queryMaxVersionForDefinition(TASK_CODE)).thenReturn(1);
             when(taskDefinitionMapper.updateById(Mockito.any())).thenReturn(1);
@@ -381,9 +366,9 @@ public class TaskDefinitionServiceImplTest {
             
when(workflowTaskRelationMapper.updateById(Mockito.any())).thenReturn(1);
             
when(workflowTaskRelationLogDao.batchInsert(Mockito.anyList())).thenReturn(2);
             // success
-            Map<String, Object> successMap = 
taskDefinitionService.updateTaskWithUpstream(user, PROJECT_CODE, TASK_CODE,
+            Long updatedTaskCode = 
taskDefinitionService.updateTaskWithUpstream(user, PROJECT_CODE, TASK_CODE,
                     taskDefinitionJson, UPSTREAM_CODE);
-            assertEquals(Status.SUCCESS, successMap.get(Constants.STATUS));
+            assertEquals(TASK_CODE, updatedTaskCode);
             user.setUserType(UserType.GENERAL_USER);
         }
     }

Reply via email to