feat: 开始节点获取
This commit is contained in:
@@ -155,7 +155,7 @@ public class FlowDefinitionController {
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "根据流程定义id启动流程实例")
|
||||
@ApiOperation(value = "发起流程")
|
||||
@PostMapping("/start/{procDefId}")
|
||||
public AjaxResult start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
|
||||
@ApiParam(value = "变量集合,json对象") @RequestBody Map<String, Object> variables) {
|
||||
|
||||
@@ -153,6 +153,12 @@ public class FlowTaskController {
|
||||
return flowTaskService.getNextFlowNode(flowTaskVo);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "流程发起时获取下一节点")
|
||||
@PostMapping(value = "/nextFlowNodeByStart")
|
||||
public AjaxResult getNextFlowNodeByStart(@RequestBody FlowTaskVo flowTaskVo) {
|
||||
return flowTaskService.getNextFlowNodeByStart(flowTaskVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成流程图
|
||||
*
|
||||
|
||||
@@ -32,6 +32,8 @@ public class FlowTaskVo {
|
||||
@ApiModelProperty("节点")
|
||||
private String targetKey;
|
||||
|
||||
private String deploymentId;
|
||||
|
||||
@ApiModelProperty("流程变量信息")
|
||||
private Map<String, Object> values;
|
||||
|
||||
|
||||
@@ -5,16 +5,15 @@ import com.googlecode.aviator.Expression;
|
||||
//import com.greenpineyu.fel.FelEngine;
|
||||
//import com.greenpineyu.fel.FelEngineImpl;
|
||||
//import com.greenpineyu.fel.context.FelContext;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.flowable.bpmn.model.Process;
|
||||
import org.flowable.bpmn.model.*;
|
||||
import org.flowable.engine.RepositoryService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.repository.Model;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Xuan xuan
|
||||
@@ -41,6 +40,41 @@ public class FindNextNodeUtil {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动流程时获取下一步骤的用户任务
|
||||
*
|
||||
* @param repositoryService
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
public static List<UserTask> getNextUserTasksByStart(RepositoryService repositoryService, ProcessDefinition processDefinition, Map<String, Object> map) {
|
||||
List<UserTask> data = new ArrayList<>();
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
|
||||
Process mainProcess = bpmnModel.getMainProcess();
|
||||
Collection<FlowElement> flowElements = mainProcess.getFlowElements();
|
||||
String key = null;
|
||||
// 找到开始节点 并获取唯一key
|
||||
for (FlowElement flowElement : flowElements) {
|
||||
if (flowElement instanceof StartEvent) {
|
||||
key = flowElement.getId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
FlowElement flowElement = bpmnModel.getFlowElement(key);
|
||||
next(flowElements, flowElement, map, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查找下一节点
|
||||
*
|
||||
* @param flowElements
|
||||
* @param flowElement
|
||||
* @param map
|
||||
* @param nextUser
|
||||
*/
|
||||
public static void next(Collection<FlowElement> flowElements, FlowElement flowElement, Map<String, Object> map, List<UserTask> nextUser) {
|
||||
//如果是结束节点
|
||||
if (flowElement instanceof EndEvent) {
|
||||
|
||||
@@ -165,6 +165,8 @@ public interface IFlowTaskService {
|
||||
*/
|
||||
AjaxResult getNextFlowNode(FlowTaskVo flowTaskVo);
|
||||
|
||||
AjaxResult getNextFlowNodeByStart(FlowTaskVo flowTaskVo);
|
||||
|
||||
/**
|
||||
* 流程初始化表单
|
||||
* @param deployId
|
||||
|
||||
@@ -200,13 +200,13 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
|
||||
identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
|
||||
variables.put(ProcessConstants.PROCESS_INITIATOR, "");
|
||||
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
|
||||
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
||||
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
|
||||
if (Objects.nonNull(task)) {
|
||||
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "发起流程申请");
|
||||
// taskService.setAssignee(task.getId(), sysUser.getUserId().toString());
|
||||
taskService.complete(task.getId(), variables);
|
||||
}
|
||||
// // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
||||
// Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
|
||||
// if (Objects.nonNull(task)) {
|
||||
// taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "发起流程申请");
|
||||
//// taskService.setAssignee(task.getId(), sysUser.getUserId().toString());
|
||||
// taskService.complete(task.getId(), variables);
|
||||
// }
|
||||
return AjaxResult.success("流程启动成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -970,6 +970,45 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
|
||||
return AjaxResult.success(flowNextDto);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一节点
|
||||
*
|
||||
* @param flowTaskVo 任务
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult getNextFlowNodeByStart(FlowTaskVo flowTaskVo) {
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(flowTaskVo.getDeploymentId()).singleResult();
|
||||
// Step 1. 获取当前节点并找到下一步节点
|
||||
FlowNextDto flowNextDto = new FlowNextDto();
|
||||
// Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式)
|
||||
List<UserTask> nextUserTask = FindNextNodeUtil.getNextUserTasksByStart(repositoryService, processDefinition, new HashMap<>());
|
||||
if (CollectionUtils.isNotEmpty(nextUserTask)) {
|
||||
for (UserTask userTask : nextUserTask) {
|
||||
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
|
||||
// 会签节点
|
||||
if (Objects.nonNull(multiInstance)) {
|
||||
List<SysUser> list = sysUserService.selectUserList(new SysUser());
|
||||
flowNextDto.setVars(ProcessConstants.PROCESS_MULTI_INSTANCE_USER);
|
||||
flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE);
|
||||
flowNextDto.setUserList(list);
|
||||
} else {
|
||||
// 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组
|
||||
String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE);
|
||||
String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE);
|
||||
flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL);
|
||||
flowNextDto.setType(userType);
|
||||
// 处理加载动态指定下一节点接收人员信息
|
||||
if (ProcessConstants.DYNAMIC.equals(dataType)) {
|
||||
flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL);
|
||||
flowNextDto.setType(userType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return AjaxResult.success(flowNextDto);
|
||||
}
|
||||
|
||||
/**
|
||||
* 流程初始化表单
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user