huangjn 3 gadi atpakaļ
vecāks
revīzija
36f59b9b9f

+ 0 - 26
blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClient.java

@@ -16,19 +16,14 @@
  */
 package org.springblade.flow.core.feign;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.launch.constant.AppConstant;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.vo.FlowProcessVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
-
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -48,27 +43,6 @@ public interface IFlowClient {
 	String COMPLETE_TASK = API_PREFIX + "/complete-task";
 	String TASK_VARIABLE = API_PREFIX + "/task-variable";
 	String TASK_VARIABLES = API_PREFIX + "/task-variables";
-	String START_FLOW = API_PREFIX + "/start-flow";
-	String TO_DO_LIST = API_PREFIX + "/to-do-list";
-	String COMPLETE_APPROVAL_TASK = API_PREFIX + "/complete-approval-task";
-
-	/**
-	 * 审批/完成流程
-	 */
-	@PostMapping(COMPLETE_APPROVAL_TASK)
-	R<Boolean> completeApprovalTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("comment") String comment);
-
-	/**
-	 * 流程待办列表
-	 */
-	@GetMapping(TO_DO_LIST)
-	R<IPage<BladeFlow>> selectTodoPage(@RequestParam Integer current, @RequestParam Integer size);
-
-	/**
-	 * 查询可运行的模型
-	 */
-	@PostMapping(START_FLOW)
-	List<FlowProcessVO> startFlowList(@RequestParam("category") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode);
 
 	/**
 	 * 开启流程

+ 0 - 15
blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/IFlowClientFallback.java

@@ -34,21 +34,6 @@ import java.util.Map;
 @Component
 public class IFlowClientFallback implements IFlowClient {
 
-	@Override
-	public R<Boolean> completeApprovalTask(String taskId, String processInstanceId, String comment) {
-		return null;
-	}
-
-	@Override
-	public R<IPage<BladeFlow>> selectTodoPage(Integer current, Integer size) {
-		return R.fail("远程调用失败");
-	}
-
-	@Override
-	public List<FlowProcessVO> startFlowList(String category, Query query, Integer mode) {
-		return null;
-	}
-
 	@Override
 	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables) {
 		return R.fail("远程调用失败");

+ 50 - 0
blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/feign/NewFlowClient.java

@@ -0,0 +1,50 @@
+package org.springblade.flow.core.feign;
+
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.flow.core.vo.FlowProcessVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(
+        value = AppConstant.APPLICATION_FLOW_NAME
+)
+public interface NewFlowClient {
+
+    String API_PREFIX = "/newFlowClient";
+
+    String START_FLOW = API_PREFIX + "/start-flow";
+    String TO_DO_LIST = API_PREFIX + "/to-do-list";
+    String COMPLETE_APPROVAL_TASK = API_PREFIX + "/complete-approval-task";
+    String QUERY_TASK_ID = API_PREFIX + "/query-task-id";
+
+    /**
+     * 根据业务ID获取流程ID
+     */
+    @PostMapping(QUERY_TASK_ID)
+    String queryTaskIdByProcessInstanceId(@RequestParam String processInstanceId);
+
+    /**
+     * 审批/完成流程
+     */
+    @PostMapping(COMPLETE_APPROVAL_TASK)
+    R<Boolean> completeApprovalTask(@RequestParam("taskId") String taskId, @RequestParam("processInstanceId") String processInstanceId, @RequestParam("comment") String comment);
+
+    /**
+     * 流程待办列表
+     */
+    @GetMapping(TO_DO_LIST)
+    R<Object> selectTodoPage(@RequestParam Integer current, @RequestParam Integer size);
+
+    /**
+     * 查询可运行的模型
+     */
+    @PostMapping(START_FLOW)
+    List<FlowProcessVO> startFlowList(@RequestParam("category") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode);
+
+}

+ 0 - 50
blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/FlowClient.java

@@ -1,49 +1,22 @@
-/*
- *      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.flow.business.feign;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
 import org.flowable.engine.IdentityService;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.runtime.ProcessInstance;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.flow.business.service.FlowBusinessService;
 import org.springblade.flow.core.entity.BladeFlow;
 import org.springblade.flow.core.feign.IFlowClient;
 import org.springblade.flow.core.utils.TaskUtil;
-import org.springblade.flow.core.vo.FlowProcessVO;
-import org.springblade.flow.engine.entity.FlowProcess;
-import org.springblade.flow.engine.service.FlowEngineService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -62,29 +35,6 @@ public class FlowClient implements IFlowClient {
 
 	private final TaskService taskService;
 
-	private final FlowEngineService flowEngineService;
-
-	private final FlowBusinessService flowBusinessService;
-
-	@Override
-	public R<Boolean> completeApprovalTask(String taskId, String processInstanceId, String comment) {
-		return null;
-	}
-
-	@Override
-	public R<IPage<BladeFlow>> selectTodoPage(Integer current, Integer size) {
-		Query query = new Query();
-		query.setCurrent(current);
-		query.setSize(size);
-		return R.data(this.flowBusinessService.selectTodoPage(Condition.getPage(query), new BladeFlow()));
-	}
-
-	@Override
-	public List<FlowProcessVO> startFlowList(String category, Query query, Integer mode) {
-		List<FlowProcess> processes = this.flowEngineService.selectProcessPage(Condition.getPage(query), category, mode).getRecords();
-		return JSONArray.parseArray(JSONObject.toJSONString(processes), FlowProcessVO.class);
-	}
-
 	@Override
 	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
 	public R<BladeFlow> startProcessInstanceById(String processDefinitionId, String businessKey, @RequestBody Map<String, Object> variables) {

+ 70 - 0
blade-ops/blade-flow/src/main/java/org/springblade/flow/business/feign/NewFlowClientImpl.java

@@ -0,0 +1,70 @@
+package org.springblade.flow.business.feign;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.engine.TaskService;
+import org.flowable.task.api.TaskQuery;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.flow.business.service.FlowBusinessService;
+import org.springblade.flow.core.entity.BladeFlow;
+import org.springblade.flow.core.feign.NewFlowClient;
+import org.springblade.flow.core.vo.FlowProcessVO;
+import org.springblade.flow.engine.entity.FlowProcess;
+import org.springblade.flow.engine.service.FlowEngineService;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@NonDS
+@RestController
+@AllArgsConstructor
+public class NewFlowClientImpl implements NewFlowClient {
+
+    private final FlowEngineService flowEngineService;
+
+    private final FlowBusinessService flowBusinessService;
+
+    private final TaskService taskService;
+
+    @Override
+    public String queryTaskIdByProcessInstanceId(String processInstanceId) {
+        TaskQuery taskQuery = this.taskService.createTaskQuery().processInstanceId(processInstanceId).includeProcessVariables();
+        if(taskQuery != null && taskQuery.list().size() > 0){
+            //返回流程ID
+            return taskQuery.list().get(0).getId();
+        }
+        return null;
+    }
+
+    @Override
+    public R<Boolean> completeApprovalTask(String taskId, String processInstanceId, String comment) {
+        //添加审批意见
+        if(StringUtils.isNoneBlank(processInstanceId, comment)){
+            this.taskService.addComment(taskId, processInstanceId, comment);
+        }
+        //完成任务
+        this.taskService.complete(taskId, Kv.create());
+
+        return R.data(true);
+    }
+
+    @Override
+    public R<Object> selectTodoPage(Integer current, Integer size) {
+        Query query = new Query();
+        query.setCurrent(current);
+        query.setSize(size);
+        return R.data(this.flowBusinessService.selectTodoPage(Condition.getPage(query), new BladeFlow()));
+    }
+
+    @Override
+    public List<FlowProcessVO> startFlowList(String category, Query query, Integer mode) {
+        List<FlowProcess> processes = this.flowEngineService.selectProcessPage(Condition.getPage(query), category, mode).getRecords();
+        return JSONArray.parseArray(JSONObject.toJSONString(processes), FlowProcessVO.class);
+    }
+}

+ 25 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.business.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -29,7 +31,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.flow.core.entity.BladeFlow;
-import org.springblade.flow.core.feign.IFlowClient;
+import org.springblade.flow.core.feign.NewFlowClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -58,7 +60,7 @@ public class TaskController extends BladeController {
 
 	private final ITaskParallelService taskParallelService;
 
-	private final IFlowClient flowClient;
+	private final NewFlowClient newFlowClient;
 
 	/**
 	 * 审批页详情
@@ -80,14 +82,23 @@ public class TaskController extends BladeController {
 	public R<IPage<TaskVO>> todoUserApprovalTask(@RequestParam Integer current, @RequestParam Integer size){
 		//最终集合
 		List<TaskVO> finalResult = new ArrayList<>();
+		Query query = new Query();
+		query.setCurrent(current);
+		query.setSize(size);
 
 		//获取待办(基于原生待办)
-		IPage<BladeFlow> flowIPage = this.flowClient.selectTodoPage(current, size).getData();
-		if(flowIPage != null){
-			List<BladeFlow> result = flowIPage.getRecords();
+		R<Object> rObject = this.newFlowClient.selectTodoPage(current, size);
+		if(rObject.isSuccess()){
+			//新建一个IPage的实例
+			IPage<BladeFlow> newData = Condition.getPage(query);
+			//使用实例获取具体的类型进行转换
+			IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
+			//本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
+			List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
+
 			//获取相关信息
 			result.forEach(flow -> {
-				TaskParallel taskParallel = this.taskParallelService.getOne(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getParallelProcessInstanceId, flow.getProcessDefinitionId()).eq(TaskParallel::getIsDeleted, 0));
+				TaskParallel taskParallel = this.taskParallelService.getOne(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getParallelProcessInstanceId, flow.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
 				if(taskParallel != null){
 					//查询主表信息
 					Task task = this.taskService.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getProcessInstanceId, taskParallel.getProcessInstanceId()).eq(Task::getIsDeleted, 0));
@@ -98,14 +109,18 @@ public class TaskController extends BladeController {
 					vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
 					vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
 					vo.setTaskId(flow.getTaskId());
-					vo.setWaitingUserList(taskParallel.getTaskUserName(), new Integer("999").equals(taskParallel.getEVisaStatus()) ? 999 : new Integer("2").equals(taskParallel.getStatus()) ? 2 : 1);
+					//获取主流程下所有相关的审批人
+					List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
+					if(linkList != null && linkList.size() > 0){
+						linkList.forEach(link -> {
+							vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(taskParallel.getStatus()) ? 2 : 1);
+						});
+					}
+
 					//设置最终集合
 					finalResult.add(vo);
 				}
 			});
-			Query query = new Query();
-			query.setCurrent(current);
-			query.setSize(size);
 
 			//最终分页数据
 			IPage<TaskVO> finalPage = Condition.getPage(query);

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskParallelMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.business.mapper;
 
+import io.lettuce.core.dynamic.annotation.Param;
 import org.springblade.business.entity.TaskParallel;
 import org.springblade.business.vo.TaskParallelVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -30,4 +31,6 @@ import java.util.List;
  */
 public interface TaskParallelMapper extends BaseMapper<TaskParallel> {
 
+    List<String> queryOtherLinkList(@Param("parallelProcessInstanceId") String parallelProcessInstanceId);
+
 }

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskParallelMapper.xml

@@ -20,4 +20,8 @@
         <result column="task_user_name" property="taskUserName"/>
     </resultMap>
 
+    <select id="queryOtherLinkList" resultType="java.lang.String">
+
+    </select>
+
 </mapper>

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskParallelService.java

@@ -21,6 +21,8 @@ import org.springblade.business.vo.TaskParallelVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  *  服务类
  *
@@ -29,4 +31,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  */
 public interface ITaskParallelService extends BaseService<TaskParallel> {
 
+    List<String> queryOtherLinkList(String parallelProcessInstanceId);
+
 }

+ 6 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskParallelServiceImpl.java

@@ -24,6 +24,8 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  *  服务实现类
  *
@@ -33,4 +35,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 @Service
 public class TaskParallelServiceImpl extends BaseServiceImpl<TaskParallelMapper, TaskParallel> implements ITaskParallelService {
 
+    @Override
+    public List<String> queryOtherLinkList(String parallelProcessInstanceId) {
+        return this.baseMapper.queryOtherLinkList(parallelProcessInstanceId);
+    }
 }

+ 51 - 4
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.business.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -41,6 +42,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.flow.core.constant.ProcessConstant;
 import org.springblade.flow.core.entity.BladeFlow;
 import org.springblade.flow.core.feign.IFlowClient;
+import org.springblade.flow.core.feign.NewFlowClient;
 import org.springblade.flow.core.utils.FlowUtil;
 import org.springblade.flow.core.utils.TaskUtil;
 import org.springblade.flow.core.vo.FlowProcessVO;
@@ -62,6 +64,8 @@ import java.util.List;
 @AllArgsConstructor
 public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implements ITaskService {
 
+    private final NewFlowClient newFlowClient;
+
     private final IFlowClient flowClient;
 
     private final IFixedFlowLinkService fixedFlowLinkService;
@@ -79,10 +83,53 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         if(StringUtils.isEmpty(comment) && "OK".equals(taskApprovalVO.getFlag())){
             comment = "同意";
         }
+        //获取当前分支信息
+        TaskParallel currentLink = this.taskParallelService.getOne(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId).eq(TaskParallel::getIsDeleted, 0));
+
+        if("OK".equals(taskApprovalVO.getFlag())){
+            //同意,执行签章
+            //todo ============================ 执行电签区域 ============================
+            //电签状态
+            String eVisaStatus = "1";
+            //todo ============================ 执行电签区域 ============================
 
+            //电签状态为999(错误状态)的就需要重新提交请求
+            if(!"999".equals(eVisaStatus)){
+                //完成/审批当前分支流程
+                this.newFlowClient.completeApprovalTask(taskId, parallelProcessInstanceId, comment).getData();
+                //修改分支状态,改为已完成
+                this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 2).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
 
+                //最后判断当前分支流程的主流程的其它分支是否都已经完成,如果都已完成则更改主流程状态并执行完成任务
+
+                //获取状态为1(待审批)的分支流程
+                List<TaskParallel> otherLink = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, currentLink.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0).eq(TaskParallel::getStatus, 1));
+                if(otherLink == null || otherLink.size() == 0){
+                    //说明都审批完成,将主表状态更改为已完成
+                    Task task = this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProcessInstanceId, currentLink.getProcessInstanceId()));
+                    //根据主表的业务ID(processInstanceId)获取主流程的taskId
+                    String masterTaskId = this.newFlowClient.queryTaskIdByProcessInstanceId(task.getProcessInstanceId());
+                    if(StringUtils.isNotEmpty(masterTaskId)){
+                        //完成流程
+                        this.newFlowClient.completeApprovalTask(taskId, task.getProcessInstanceId(), "完成任务");
+                        //修改主流程状态为已完成
+                        this.update(Wrappers.<Task>lambdaUpdate().set(Task::getStatus, 2).eq(Task::getId, task.getId()));
+                    }
+                }
+            } else {
+                System.out.println("循环调用电签");
+            }
+        } else {
+            //废除,遵循只要某一个分支流程废除,则主流程及其所有分支流程均废除
+            //完成/审批当前分支流程
+            this.newFlowClient.completeApprovalTask(taskId, parallelProcessInstanceId, comment).getData();
+            //将分支状态更改为已废除
+            this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate().set(TaskParallel::getStatus, 3).eq(TaskParallel::getParallelProcessInstanceId, parallelProcessInstanceId));
+            //获取除当前分支外的所有分支
+            List<String> otherLink = this.taskParallelService.queryOtherLinkList(parallelProcessInstanceId);
+        }
 
-        return null;
+        return true;
     }
 
     @Override
@@ -100,7 +147,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             query.setCurrent(1);
             query.setSize(999);
             //获取流程
-            List<FlowProcessVO> modeProcessVOS = this.flowClient.startFlowList("", query, 1);
+            List<FlowProcessVO> modeProcessVOS = this.newFlowClient.startFlowList("", query, 1);
             if(modeProcessVOS == null || modeProcessVOS.size() == 0){
                 return false;
             }
@@ -129,7 +176,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 //拼接并行的实例ID
                 vo.setProcessInstanceId(result.getData().getProcessInstanceId());
             } else {
-//                throw new ServiceException("开启主流程失败");
+                throw new ServiceException("开启主流程失败");
             }
 
             //根据所选择的固定流程所含有的环节发起审批任务
@@ -144,7 +191,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     log.debug("并行流程已启动,流程ID:" + linkResult.getData().getProcessInstanceId());
                     taskParallelArray.add(new TaskParallel(vo.getProcessInstanceId(), linkResult.getData().getProcessInstanceId(), link.getFixedFlowLinkUser().toString(), link.getFixedFlowLinkUserName()));
                 } else {
-//                    throw new ServiceException("开启并行流程失败");
+                    throw new ServiceException("开启并行流程失败");
                 }
             }
             //设置流程信息