Browse Source

Merge remote-tracking branch 'origin/master' into master

yangyj 2 years ago
parent
commit
5ba8b236fc

+ 34 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/TaskBatchDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.dto;
+
+import org.springblade.business.entity.TaskBatch;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaskBatchDTO extends TaskBatch {
+	private static final long serialVersionUID = 1L;
+
+}

+ 60 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TaskBatch.java

@@ -0,0 +1,60 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.secure.utils.AuthUtil;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+@Data
+@TableName("u_task_batch")
+@EqualsAndHashCode(callSuper = true)
+public class TaskBatch extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流程ID,task_parallel表的parallel_process_instance_id
+     */
+    private String taskParallelId;
+
+    private String jsonData;
+
+    public TaskBatch(String taskParallelId, String jsonData){
+        this.setId(SnowFlakeUtil.getId());
+        this.taskParallelId = taskParallelId;
+        this.jsonData = jsonData;
+        this.setCreateUser(AuthUtil.getUserId());
+        this.setCreateTime(new Date());
+    }
+
+    public TaskBatch(){}
+
+}

+ 34 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskBatchVO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.vo;
+
+import org.springblade.business.entity.TaskBatch;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 视图实体类
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaskBatchVO extends TaskBatch {
+	private static final long serialVersionUID = 1L;
+
+}

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskVO.java

@@ -53,6 +53,9 @@ public class TaskVO extends Task {
 	@ApiModelProperty("自定义流程,所选的审批人ID和姓名集合")
 	private List<CustomUserTask> userTasks;
 
+	@ApiModelProperty("电签状态")
+	private String eVisaContent;
+
 	public void setUserTasks(String userId, String userName){
 		if(this.userTasks == null){
 			this.userTasks = new ArrayList<>();

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -78,7 +78,7 @@ public class EVisaTaskCheckController {
             //获取这些审批人在当前合同段的权限
             List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(customFlowUserList, json.getString("contractId"));
             if(userRoleList == null || userRoleList.size() <= 0){
-                return R.data(300, false, "所选审批人均未找到对应权限,请联系服务人员处理");
+                return R.data(300, false, "所选审批人均未找到当前表格所需要的签字岗位,请联系服务人员处理");
             }
 
             //获取电签配置
@@ -94,7 +94,7 @@ public class EVisaTaskCheckController {
             for(JSONObject userRole : userRoleList){
                 if(!eVisaRoleList.contains(userRole.getString("roleId"))){
                     User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
-                    return R.data(300, false, "所选中的用户【" + user.getRealName() + "】不具有相关审批权限,请联系维护人员处理或更换审批人员");
+                    return R.data(300, false, "所选中的用户【" + user.getRealName() + "】不具备当前表格所需要的签字岗位,请联系维护人员处理或更换审批人员");
                 }
             }
             //均满足

+ 36 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -13,8 +13,10 @@ import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springblade.business.entity.DefaultConfig;
+import org.springblade.business.entity.TaskBatch;
 import org.springblade.business.entity.TaskParallel;
 import org.springblade.business.service.IDefaultConfigService;
+import org.springblade.business.service.ITaskBatchService;
 import org.springblade.business.service.ITaskParallelService;
 import org.springblade.business.vo.BatchTaskVO;
 import org.springblade.business.vo.TaskApprovalVO;
@@ -68,6 +70,8 @@ public class TaskController extends BladeController {
 
 	private final IDefaultConfigService defaultConfigService;
 
+	private final ITaskBatchService taskBatchService;
+
 	/**
 	 * 校验电签短信验证码
 	 */
@@ -234,6 +238,9 @@ public class TaskController extends BladeController {
 			String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
 			String[] approvalType = batchTaskVO.getApprovalType().split(",");
 			String[] formDataId = batchTaskVO.getFormDataId().split(",");
+
+			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+
 			for(int i = 0, l = taskIdArray.length; i < l; i ++){
 				TaskApprovalVO approvalVO = new TaskApprovalVO();
 				approvalVO.setTaskId(taskIdArray[i]);
@@ -243,10 +250,10 @@ public class TaskController extends BladeController {
 				approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
 				approvalVO.setFormDataId(formDataId[i]);
 
-				//批量审批
-				this.taskService.completeApprovalTask(approvalVO);
+				taskApprovalVOS.add(approvalVO);
 			}
-			return R.data(true);
+
+			return R.data(this.taskService.batchCompleteApprovalTask(taskApprovalVOS));
 		}
 		return R.data(false);
 	}
@@ -414,6 +421,7 @@ public class TaskController extends BladeController {
 							vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
 							vo.setTaskId(flow.getTaskId());
 							vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
+							vo.setEVisaContent(taskParallel.getEVisaContent());
 							//获取主流程下所有相关的审批人
 							List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
 							if(linkList != null && linkList.size() > 0){
@@ -461,7 +469,31 @@ public class TaskController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "完成/审批任务")
 	public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO){
-		return R.data(this.taskService.completeApprovalTask(taskApprovalVO));
+
+		//检查当前用户是否存在等待批次
+		long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
+		if(batchCount > 0){
+			this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
+					.set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
+					.eq(TaskParallel::getParallelProcessInstanceId, taskApprovalVO.getParallelProcessInstanceId()));
+
+			//生成等待批次,任务完成后删除
+			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+			taskApprovalVOS.add(taskApprovalVO);
+
+			//存在批次,当前审批的追加进队列
+			this.taskBatchService.save(new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS)));
+
+			return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
+		} else {
+			//生成等待批次,任务完成后删除
+			List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
+			taskApprovalVOS.add(taskApprovalVO);
+
+			this.taskBatchService.save(new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS)));
+
+			return R.data(this.taskService.batchCompleteApprovalTask(taskApprovalVOS));
+		}
 	}
 
 	/**

+ 35 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.mapper;
+
+import io.lettuce.core.dynamic.annotation.Param;
+import org.springblade.business.entity.TaskBatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *  Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+public interface TaskBatchMapper extends BaseMapper<TaskBatch> {
+
+    void deletedById(@Param("id") String id);
+
+    void deletedTaskBatchByTaskParallelId(@Param("taskParallelId") String taskParallelId);
+
+}

+ 27 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskBatchMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.business.mapper.TaskBatchMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="taskBatchResultMap" type="org.springblade.business.entity.TaskBatch">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="task_parallel_id" property="taskParallelId"/>
+        <result column="json_data" property="jsonData"/>
+    </resultMap>
+
+    <delete id="deletedById">
+        DELETE FROM u_task_batch WHERE id = #{id}
+    </delete>
+
+    <delete id="deletedTaskBatchByTaskParallelId">
+        DELETE FROM u_task_batch WHERE task_parallel_id = #{taskParallelId}
+    </delete>
+
+</mapper>

+ 34 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskBatchService.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.service;
+
+import org.springblade.business.entity.TaskBatch;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ *  服务类
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+public interface ITaskBatchService extends BaseService<TaskBatch> {
+
+    void deletedById(String id);
+
+    void deletedTaskBatchByTaskParallelId(String taskParallelId);
+
+}

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -46,9 +46,9 @@ public interface ITaskService extends BaseService<Task> {
     List<Task> queryBatchList(String projectId, String contract);
 
     /**
-     * 提交审批
+     * 批量审批
      */
-    Boolean completeApprovalTask(TaskApprovalVO taskApprovalVO);
+    Boolean batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS);
 
     /**
      * 启动流程

+ 43 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskBatchServiceImpl.java

@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.business.service.impl;
+
+import org.springblade.business.entity.TaskBatch;
+import org.springblade.business.mapper.TaskBatchMapper;
+import org.springblade.business.service.ITaskBatchService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *  服务实现类
+ *
+ * @author BladeX
+ * @since 2022-10-12
+ */
+@Service
+public class TaskBatchServiceImpl extends BaseServiceImpl<TaskBatchMapper, TaskBatch> implements ITaskBatchService {
+
+    @Override
+    public void deletedById(String id) {
+        this.baseMapper.deletedById(id);
+    }
+
+    @Override
+    public void deletedTaskBatchByTaskParallelId(String taskParallelId) {
+        this.baseMapper.deletedTaskBatchByTaskParallelId(taskParallelId);
+    }
+}

+ 65 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -8,6 +8,8 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springblade.business.entity.*;
 import org.springblade.business.mapper.TaskMapper;
 import org.springblade.business.service.*;
@@ -38,6 +40,7 @@ import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -45,6 +48,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 任务审核主表 服务实现类
@@ -57,6 +61,8 @@ import java.util.concurrent.TimeUnit;
 @AllArgsConstructor
 public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implements ITaskService {
 
+    private static final Logger logger = LoggerFactory.getLogger(TaskServiceImpl.class);
+
     private final NewFlowClient newFlowClient;
 
     private final IFlowClient flowClient;
@@ -79,6 +85,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     private final ContractClient contractClient;
 
+    private final ITaskBatchService taskBatchService;
+
     @Override
     public List<TaskParallel> queryApprovalUser(String formDataIds) {
         //返回结果
@@ -275,7 +283,61 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
     @Override
-    public Boolean completeApprovalTask(TaskApprovalVO taskApprovalVO) {
+    public Boolean batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) {
+        long batch = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
+        if(batch > 0){
+            List<String> taskIds = taskApprovalVOS.stream().map(TaskApprovalVO::getParallelProcessInstanceId).distinct().collect(Collectors.toList());
+
+            //修改电签状态
+            this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
+                    .set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
+                    .in(TaskParallel::getParallelProcessInstanceId, taskIds));
+            //保存批次
+            this.taskBatchService.save(new TaskBatch(null, JSONObject.toJSONString(taskApprovalVOS)));
+
+            return true;
+        } else {
+            //保存批次
+            TaskBatch taskBatch = new TaskBatch(null, JSONObject.toJSONString(taskApprovalVOS));
+            this.taskBatchService.save(taskBatch);
+
+            //执行电签,结束后检查在执行是否有新的等待批次
+            this.checkIsExsitTaskBatch(taskApprovalVOS, taskBatch.getId().toString());
+            return true;
+        }
+    }
+
+    @Async
+    public void checkIsExsitTaskBatch(List<TaskApprovalVO> taskApprovalVOS, String batchId){
+        boolean isContinue = true;
+        while (isContinue){
+            logger.info("【任务审核】当前批次开始电签。批次ID:" + batchId);
+            //执行电签
+            for(TaskApprovalVO taskApprovalVO : taskApprovalVOS){
+                this.completeApprovalTask(taskApprovalVO);
+            }
+            //删除掉对应批次
+            this.taskBatchService.deletedById(batchId);
+            try{
+                //查询是否还存在对应批次(时间升序)
+                List<TaskBatch> taskBatches = this.taskBatchService.list(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()).orderByAsc(TaskBatch::getCreateTime));
+                if(taskBatches != null && taskBatches.size() > 0){
+                    TaskBatch taskBatch = taskBatches.get(0);
+                    //获取业务参数集合
+                    taskApprovalVOS = JSONArray.parseArray(JSONObject.toJSONString(taskBatch.getJsonData()), TaskApprovalVO.class);
+                    batchId = taskBatch.getId().toString();
+                } else {
+                    logger.info("【任务审核】已无等待电签批次!当前线程结束即将释放。");
+                    isContinue = false;
+                }
+            }catch (Exception e){
+                isContinue = false;
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void completeApprovalTask(TaskApprovalVO taskApprovalVO) {
         //获取流程ID
         String taskId = taskApprovalVO.getTaskId();
         //获取业务实例ID
@@ -288,7 +350,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         //获取当前分支信息
         TaskParallel currentLink = this.taskParallelService.getOne(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId).eq(TaskParallel::getIsDeleted, 0));
         if(currentLink == null){
-            return false;
+            return;
         }
         //获取主流程
         Task masterTask = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
@@ -377,8 +439,6 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
                 //解锁
                 DistributedRedisLock.release(masterTask.getFormDataId());
-
-                return false;
             }
         } else {
             //废除,遵循只要某一个分支流程废除,则主流程废除、其它分支流程均自动结束
@@ -386,6 +446,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             this.newFlowClient.completeApprovalTask(taskId, parallelProcessInstanceId, comment).getData();
             //将分支状态更改为已废除
             this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 3).set(TaskParallel::getUpdateUser, AuthUtil.getUserId()).set(TaskParallel::getUpdateTime, new Date()).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
+
             //获取除当前分支外的所有分支
             List<TaskParallel> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
             //主流程实例ID
@@ -429,8 +490,6 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             this.abolishMessage(masterTask, currentLink, comment);
 
         }
-
-        return true;
     }
 
     /**