!17 增加通过procDefKey的方式启动流程,优化启动流程代码
Merge pull request !17 from lyh2668/develop
This commit is contained in:
@@ -25,4 +25,11 @@ public interface IWfProcessService {
|
|||||||
* @param variables 扩展参数
|
* @param variables 扩展参数
|
||||||
*/
|
*/
|
||||||
void startProcess(String procDefId, Map<String, Object> variables);
|
void startProcess(String procDefId, Map<String, Object> variables);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过DefinitionKey启动流程
|
||||||
|
* @param procDefKey 流程定义Key
|
||||||
|
* @param variables 扩展参数
|
||||||
|
*/
|
||||||
|
void startProcessByDefKey(String procDefKey, Map<String, Object> variables);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.ruoyi.workflow.domain.vo.WfTaskVo;
|
|||||||
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
import com.ruoyi.workflow.domain.bo.WfTaskBo;
|
||||||
import com.ruoyi.workflow.domain.vo.WfViewerVo;
|
import com.ruoyi.workflow.domain.vo.WfViewerVo;
|
||||||
import org.flowable.bpmn.model.UserTask;
|
import org.flowable.bpmn.model.UserTask;
|
||||||
|
import org.flowable.engine.runtime.ProcessInstance;
|
||||||
import org.flowable.task.api.Task;
|
import org.flowable.task.api.Task;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -165,4 +166,11 @@ public interface IWfTaskService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
WfNextDto getNextFlowNode(WfTaskBo bo);
|
WfNextDto getNextFlowNode(WfTaskBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启动第一个任务
|
||||||
|
* @param processInstance 流程实例
|
||||||
|
* @param variables 流程参数
|
||||||
|
*/
|
||||||
|
void startFirstTask(ProcessInstance processInstance, Map<String, Object> variables);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ import com.ruoyi.common.core.domain.PageQuery;
|
|||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.helper.LoginHelper;
|
import com.ruoyi.common.helper.LoginHelper;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.flowable.common.constant.ProcessConstants;
|
import com.ruoyi.flowable.common.constant.ProcessConstants;
|
||||||
import com.ruoyi.flowable.common.enums.FlowComment;
|
import com.ruoyi.flowable.common.enums.FlowComment;
|
||||||
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
||||||
import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
|
import com.ruoyi.workflow.domain.vo.WfDefinitionVo;
|
||||||
import com.ruoyi.workflow.service.IWfProcessService;
|
import com.ruoyi.workflow.service.IWfProcessService;
|
||||||
|
import com.ruoyi.workflow.service.IWfTaskService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.flowable.engine.repository.Deployment;
|
import org.flowable.engine.repository.Deployment;
|
||||||
import org.flowable.engine.repository.ProcessDefinition;
|
import org.flowable.engine.repository.ProcessDefinition;
|
||||||
@@ -33,6 +35,8 @@ import java.util.Objects;
|
|||||||
@Service
|
@Service
|
||||||
public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProcessService {
|
public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProcessService {
|
||||||
|
|
||||||
|
private final IWfTaskService wfTaskService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程定义列表
|
* 流程定义列表
|
||||||
*
|
*
|
||||||
@@ -93,22 +97,35 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
|||||||
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
|
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
|
||||||
throw new ServiceException("流程已被挂起,请先激活流程");
|
throw new ServiceException("流程已被挂起,请先激活流程");
|
||||||
}
|
}
|
||||||
// variables.put("skip", true);
|
|
||||||
// variables.put(ProcessConstants.FLOWABLE_SKIP_EXPRESSION_ENABLED, true);
|
|
||||||
// 设置流程发起人Id到流程中
|
// 设置流程发起人Id到流程中
|
||||||
String userIdStr = LoginHelper.getUserId().toString();
|
this.buildProcessVariables(variables);
|
||||||
identityService.setAuthenticatedUserId(userIdStr);
|
|
||||||
variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr);
|
|
||||||
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
|
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
|
||||||
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
||||||
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
|
wfTaskService.startFirstTask(processInstance, variables);
|
||||||
if (Objects.nonNull(task)) {
|
} catch (Exception e) {
|
||||||
if (!StrUtil.equalsAny(task.getAssignee(), userIdStr)) {
|
e.printStackTrace();
|
||||||
throw new ServiceException("数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!");
|
throw new ServiceException("流程启动错误");
|
||||||
}
|
}
|
||||||
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), LoginHelper.getNickName() + "发起流程申请");
|
}
|
||||||
// taskService.setAssignee(task.getId(), userIdStr);
|
|
||||||
taskService.complete(task.getId(), variables);
|
/**
|
||||||
|
* 通过DefinitionKey启动流程
|
||||||
|
* @param procDefKey 流程定义Key
|
||||||
|
* @param variables 扩展参数
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void startProcessByDefKey(String procDefKey, Map<String, Object> variables) {
|
||||||
|
try {
|
||||||
|
if (StringUtils.isNoneBlank(procDefKey)) {
|
||||||
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
|
||||||
|
.processDefinitionKey(procDefKey).latestVersion().singleResult();
|
||||||
|
if (processDefinition != null && processDefinition.isSuspended()) {
|
||||||
|
throw new ServiceException("流程已被挂起,请先激活流程");
|
||||||
|
}
|
||||||
|
this.buildProcessVariables(variables);
|
||||||
|
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(procDefKey, variables);
|
||||||
|
wfTaskService.startFirstTask(processInstance, variables);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -116,4 +133,13 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展参数构建
|
||||||
|
* @param variables 扩展参数
|
||||||
|
*/
|
||||||
|
private void buildProcessVariables(Map<String, Object> variables) {
|
||||||
|
String userIdStr = LoginHelper.getUserId().toString();
|
||||||
|
identityService.setAuthenticatedUserId(userIdStr);
|
||||||
|
variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package com.ruoyi.workflow.service.impl;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
@@ -979,6 +980,25 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ
|
|||||||
return nextDto;
|
return nextDto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启动第一个任务
|
||||||
|
* @param processInstance 流程实例
|
||||||
|
* @param variables 流程参数
|
||||||
|
*/
|
||||||
|
public void startFirstTask(ProcessInstance processInstance, Map<String, Object> variables) {
|
||||||
|
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?
|
||||||
|
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
|
||||||
|
if (Objects.nonNull(task)) {
|
||||||
|
String userIdStr = (String) variables.get(ProcessConstants.PROCESS_INITIATOR);
|
||||||
|
if (!StrUtil.equalsAny(task.getAssignee(), userIdStr)) {
|
||||||
|
throw new ServiceException("数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!");
|
||||||
|
}
|
||||||
|
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), LoginHelper.getNickName() + "发起流程申请");
|
||||||
|
// taskService.setAssignee(task.getId(), userIdStr);
|
||||||
|
taskService.complete(task.getId(), variables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程完成时间处理
|
* 流程完成时间处理
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user