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

flowable jump ?

parent 0a58ecc4
...@@ -9,9 +9,11 @@ import org.springframework.context.annotation.Bean; ...@@ -9,9 +9,11 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import com.ibeetl.starter.workflow.event.ProcessEndEvent; 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.ProcessStartEvent;
import com.ibeetl.starter.workflow.event.TaskEndEvent; import com.ibeetl.starter.workflow.event.TaskEndEvent;
import com.ibeetl.starter.workflow.event.TaskOwnerChangeEvent; 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.TaskStartEvent;
import com.ibeetl.starter.workflow.event.TaslClaimEvent; import com.ibeetl.starter.workflow.event.TaslClaimEvent;
import com.ibeetl.starter.workflow.service.WfNotifyService; import com.ibeetl.starter.workflow.service.WfNotifyService;
...@@ -69,16 +71,18 @@ public class WorkflowConfig { ...@@ -69,16 +71,18 @@ public class WorkflowConfig {
} }
@Override @Override
public void taskPause(String taskInsId) { public void taskPause(TaskPauseEvent pauseEvent) {
log.info("taskIns "+taskInsId+" pause"); log.info(pauseEvent);
} }
@Override @Override
public void processPause(String processInsId) { public void processPause(ProcessPauseEvent pauseEvent) {
log.info("processInsId "+processInsId+" pause"); 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 { ...@@ -9,7 +9,9 @@ public class ProcessStartEvent {
String processInsId; String processInsId;
String processKey; String processKey;
String processName; String processName;
String taskId;
String taskInsId; String taskInsId;
String taskName;
WfUser user; WfUser user;
Map processVars; Map processVars;
public String getProcessInsId() { public String getProcessInsId() {
...@@ -48,6 +50,24 @@ public class ProcessStartEvent { ...@@ -48,6 +50,24 @@ public class ProcessStartEvent {
public void setUser(WfUser user) { public void setUser(WfUser user) {
this.user = 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 { ...@@ -6,9 +6,9 @@ public class Constants {
public static final String VAR_TASK_ROLE = "_roleId"; public static final String VAR_TASK_ROLE = "_roleId";
public static final String VAR_TASK_TITLE = "_title"; public static final String VAR_TASK_TITLE = "_title";
public static final String VAR_LAST_TASK_ID = "_lastTaskId"; 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_TASK_WAIT = "_wait";
public static final String VAR_PROCESS_STATUS= "_processStatus"; 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_AGREE = "comment";
public static final String TYPE_COMMENT_DELEGATE = "delegate"; public static final String TYPE_COMMENT_DELEGATE = "delegate";
...@@ -25,6 +25,9 @@ public class Constants { ...@@ -25,6 +25,9 @@ public class Constants {
//环节对应的页面 //环节对应的页面
public static final String EXT_TASK_PAGE = "page"; public static final String EXT_TASK_PAGE = "page";
/* 工作流支持的操作 */
//普通按钮 //普通按钮
public static final String BUTTON_TYPE_GENERAL = "general"; public static final String BUTTON_TYPE_GENERAL = "general";
//任意跳转 //任意跳转
...@@ -34,8 +37,8 @@ public class Constants { ...@@ -34,8 +37,8 @@ public class Constants {
//回到上一个任务,有问题 //回到上一个任务,有问题
public static final String BUTTON_TYPE_BACK = "back"; 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"; public static final String BUTTON_TYPE_END_PROCESS = "complete";
//多实例 //多实例
...@@ -45,17 +48,13 @@ public class Constants { ...@@ -45,17 +48,13 @@ public class Constants {
//等待 //等待
public static final String BUTTON_TYPE_WAIT = "wait"; 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_task_history = "task_history";
//流程的创建者 //流程的创建者
public static final String USER_PROCESS_CREATOR = "processe_creator"; 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; package com.ibeetl.starter.workflow.service;
import com.ibeetl.starter.workflow.event.ProcessEndEvent; 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.ProcessStartEvent;
import com.ibeetl.starter.workflow.event.TaskEndEvent; import com.ibeetl.starter.workflow.event.TaskEndEvent;
import com.ibeetl.starter.workflow.event.TaskOwnerChangeEvent; 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.TaskStartEvent;
import com.ibeetl.starter.workflow.event.TaslClaimEvent; import com.ibeetl.starter.workflow.event.TaslClaimEvent;
...@@ -15,8 +17,8 @@ import com.ibeetl.starter.workflow.event.TaslClaimEvent; ...@@ -15,8 +17,8 @@ import com.ibeetl.starter.workflow.event.TaslClaimEvent;
public interface WfNotifyService { public interface WfNotifyService {
public void processStart(ProcessStartEvent startEvent); public void processStart(ProcessStartEvent startEvent);
public void taskStart(TaskStartEvent startEvent); public void taskStart(TaskStartEvent startEvent);
public void taskPause(String taskInsId); public void taskPause(TaskPauseEvent pauseEvent);
public void processPause(String processInsId); public void processPause(ProcessPauseEvent pauseEvent);
public void taskEnd(TaskEndEvent endEvent); public void taskEnd(TaskEndEvent endEvent);
public void processEnd(ProcessEndEvent endEvent); public void processEnd(ProcessEndEvent endEvent);
public void taskOwnerChanged(TaskOwnerChangeEvent changeEvent); 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