Commit 8b0c6535 authored by 李家智's avatar 李家智
Browse files

flowable jump ?

parent 0a58ecc4
......@@ -9,9 +9,11 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.ibeetl.starter.workflow.event.ProcessEndEvent;
import com.ibeetl.starter.workflow.event.ProcessPauseEvent;
import com.ibeetl.starter.workflow.event.ProcessStartEvent;
import com.ibeetl.starter.workflow.event.TaskEndEvent;
import com.ibeetl.starter.workflow.event.TaskOwnerChangeEvent;
import com.ibeetl.starter.workflow.event.TaskPauseEvent;
import com.ibeetl.starter.workflow.event.TaskStartEvent;
import com.ibeetl.starter.workflow.event.TaslClaimEvent;
import com.ibeetl.starter.workflow.service.WfNotifyService;
......@@ -69,16 +71,18 @@ public class WorkflowConfig {
}
@Override
public void taskPause(String taskInsId) {
log.info("taskIns "+taskInsId+" pause");
public void taskPause(TaskPauseEvent pauseEvent) {
log.info(pauseEvent);
}
@Override
public void processPause(String processInsId) {
log.info("processInsId "+processInsId+" pause");
public void processPause(ProcessPauseEvent pauseEvent) {
log.info(pauseEvent);
}
};
......
package com.ibeetl.starter.workflow.engine.cmd;
import java.io.Serializable;
import java.util.Map;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.common.impl.interceptor.Command;
import org.flowable.engine.common.impl.interceptor.CommandContext;
import org.flowable.engine.impl.history.HistoryManager;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityManager;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.task.api.TaskInfo;
import org.flowable.task.service.TaskService;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.flowable.task.service.impl.persistence.entity.TaskEntityManager;
import com.ibeetl.starter.workflow.kit.Constants;
import com.ibeetl.starter.workflow.model.WfUser;
import com.ibeetl.starter.workflow.service.WfTaskService;
public abstract class BaseManagmentCmd implements Command, Serializable{
protected ExecutionEntityManager executionManager;
protected TaskEntityManager taskEntityManager;
protected HistoryManager historyManager;
protected WfTaskService service;
protected TaskService taskService;
protected RuntimeService runtimeService;
public BaseManagmentCmd(WfTaskService service) {
this.service = service;
}
@Override
public Object execute(CommandContext commandContext) {
executionManager = CommandContextUtil.getExecutionEntityManager();
taskEntityManager = CommandContextUtil.getTaskServiceConfiguration().getTaskEntityManager();
historyManager = CommandContextUtil.getHistoryManager();
taskService = CommandContextUtil.getTaskService();
runtimeService = CommandContextUtil.getProcessEngineConfiguration().getRuntimeService();
return complete();
}
protected TaskInfo getRunningTask(String taskInsId) {
return taskService.createTaskQuery().taskId(taskInsId).includeTaskLocalVariables().singleResult();
}
protected ExecutionEntity getRunningExecutiton(String executionId) {
return executionManager.findById(executionId);
}
protected FlowElement getCurrentFlowElement(String processId,String taskKey) {
return ProcessDefinitionUtil.getBpmnModel(processId).getFlowElement(taskKey);
}
protected WfUser getHistoryUser(TaskInfo task) {
WfUser user = new WfUser();
user.setUserId(task.getAssignee());
Map<String,Object> map = task.getTaskLocalVariables();
if(map.containsKey(Constants.VAR_TASK_ORG)) {
user.setOrgId((String)map.get(Constants.VAR_TASK_ORG));
}
if(map.containsKey(Constants.VAR_TASK_ROLE)) {
user.setRoleId((String)map.get(Constants.VAR_TASK_ROLE));
}
return user;
}
protected TaskInfo createTask(ExecutionEntity taskExecution,FlowElement target) {
//创建执行人
TaskEntity task = taskEntityManager.create();
task.setExecutionId(taskExecution.getId());
task.setTaskDefinitionKey(target.getId());
task.setName(target.getName());
taskEntityManager.insert(task);
return task;
}
public abstract Object complete() ;
}
package com.ibeetl.starter.workflow.engine.cmd;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.Process;
import org.flowable.engine.FlowableEngineAgenda;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import com.ibeetl.starter.workflow.model.WfUser;
import com.ibeetl.starter.workflow.service.WfTaskService;
public class CommonTaskJumpCmd extends BaseManagmentCmd {
protected String taskInsId;
protected String target;
WfUser targetUser;
String title;
public CommonTaskJumpCmd(WfTaskService service,String taskInsId, String target, WfUser targetUser,String title) {
super(service);
this.taskInsId = taskInsId;
this.target = target;
this.targetUser = targetUser;
this.title = title;
}
@Override
public Object complete() {
TaskEntity taskEntity = taskEntityManager.findById(taskInsId);
ExecutionEntity ee = executionManager.findById(taskEntity.getExecutionId());
Process process = ProcessDefinitionUtil.getProcess(ee.getProcessDefinitionId());
FlowElement targetFlowElement = process.getFlowElement(target);
ee.setCurrentFlowElement(targetFlowElement);
FlowableEngineAgenda agenda = CommandContextUtil.getAgenda();
agenda.planContinueProcessInCompensation(ee);
taskEntityManager.delete(taskInsId);
return null;
}
}
package com.ibeetl.starter.workflow.event;
public class ProcessPauseEvent {
String processInsId;
String processKey;
String processName;
public String getProcessInsId() {
return processInsId;
}
public void setProcessInsId(String processInsId) {
this.processInsId = processInsId;
}
public String getProcessKey() {
return processKey;
}
public void setProcessKey(String processKey) {
this.processKey = processKey;
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
@Override
public String toString() {
return "ProcessPauseEvent [processInsId=" + processInsId + ", processKey=" + processKey + ", processName="
+ processName + "]";
}
}
......@@ -9,7 +9,9 @@ public class ProcessStartEvent {
String processInsId;
String processKey;
String processName;
String taskId;
String taskInsId;
String taskName;
WfUser user;
Map processVars;
public String getProcessInsId() {
......@@ -48,6 +50,24 @@ public class ProcessStartEvent {
public void setUser(WfUser user) {
this.user = user;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
@Override
public String toString() {
return "ProcessStartEvent [processInsId=" + processInsId + ", processKey=" + processKey + ", processName="
+ processName + ", taskId=" + taskId + ", taskInsId=" + taskInsId + ", taskName=" + taskName + ", user="
+ user + ", processVars=" + processVars + "]";
}
......
package com.ibeetl.starter.workflow.event;
public class TaskPauseEvent {
String taskId;
String taskName;
String taskInsId;
String processKey;
String processName;
String processInsId;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public String getTaskInsId() {
return taskInsId;
}
public void setTaskInsId(String taskInsId) {
this.taskInsId = taskInsId;
}
public String getProcessKey() {
return processKey;
}
public void setProcessKey(String processKey) {
this.processKey = processKey;
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
public String getProcessInsId() {
return processInsId;
}
public void setProcessInsId(String processInsId) {
this.processInsId = processInsId;
}
@Override
public String toString() {
return "TaskPauseEvent [taskId=" + taskId + ", taskName=" + taskName + ", taskInsId=" + taskInsId
+ ", processKey=" + processKey + ", processName=" + processName + ", processInsId=" + processInsId
+ "]";
}
}
......@@ -6,9 +6,9 @@ public class Constants {
public static final String VAR_TASK_ROLE = "_roleId";
public static final String VAR_TASK_TITLE = "_title";
public static final String VAR_LAST_TASK_ID = "_lastTaskId";
public static final String VAR_USER_FLAG = "_userFlag";
public static final String VAR_TASK_WAIT = "_wait";
public static final String VAR_PROCESS_STATUS= "_processStatus";
public static final String VAR_BUTTON_CODE= "_buttonCode";
public static final String TYPE_COMMENT_AGREE = "comment";
public static final String TYPE_COMMENT_DELEGATE = "delegate";
......@@ -25,6 +25,9 @@ public class Constants {
//环节对应的页面
public static final String EXT_TASK_PAGE = "page";
/* 工作流支持的操作 */
//普通按钮
public static final String BUTTON_TYPE_GENERAL = "general";
//任意跳转
......@@ -34,8 +37,8 @@ public class Constants {
//回到上一个任务,有问题
public static final String BUTTON_TYPE_BACK = "back";
//自动
public static final String BUTTON_TYPE_AUTO = "auto";
//自动汇聚,用于并行或者多实例
public static final String BUTTON_TYPE_AUTO = "autoJoin";
//直接结束流程的按钮
public static final String BUTTON_TYPE_END_PROCESS = "complete";
//多实例
......@@ -45,17 +48,13 @@ public class Constants {
//等待
public static final String BUTTON_TYPE_WAIT = "wait";
//按照角色选取
public static final String USER_ROLE = "role";
/*工作流能提供的选人策略,业务侧选人策略自定义,不包含在如下列表里*/
//流程的历史执行人
public static final String USER_task_history = "task_history";
//流程的创建者
public static final String USER_PROCESS_CREATOR = "processe_creator";
//来自于某个变量,因此不必选取,暂时没有这个需求,取消
// public static final String USER_DYNAMIC_VARS = "dynamic_vars";
//业务侧按钮的渲人策略
public static final String CHOOSE_ONE = "one";
public static final String CHOOSE_RANDOM_ONE = "random_one";
public static final String CHOOSE_MUTIPLE = "mutiple";
}
package com.ibeetl.starter.workflow.service;
import com.ibeetl.starter.workflow.event.ProcessEndEvent;
import com.ibeetl.starter.workflow.event.ProcessPauseEvent;
import com.ibeetl.starter.workflow.event.ProcessStartEvent;
import com.ibeetl.starter.workflow.event.TaskEndEvent;
import com.ibeetl.starter.workflow.event.TaskOwnerChangeEvent;
import com.ibeetl.starter.workflow.event.TaskPauseEvent;
import com.ibeetl.starter.workflow.event.TaskStartEvent;
import com.ibeetl.starter.workflow.event.TaslClaimEvent;
......@@ -15,8 +17,8 @@ import com.ibeetl.starter.workflow.event.TaslClaimEvent;
public interface WfNotifyService {
public void processStart(ProcessStartEvent startEvent);
public void taskStart(TaskStartEvent startEvent);
public void taskPause(String taskInsId);
public void processPause(String processInsId);
public void taskPause(TaskPauseEvent pauseEvent);
public void processPause(ProcessPauseEvent pauseEvent);
public void taskEnd(TaskEndEvent endEvent);
public void processEnd(ProcessEndEvent endEvent);
public void taskOwnerChanged(TaskOwnerChangeEvent changeEvent);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment