前言
上文对工作流进行了一些基本的介绍,有了根底篇的内容,相信咱们能够很简略笼统了一些实体模型:流程模型、开端节点模型、完毕节点模型、使命节点模型、决议计划节点模型、分支节点模型、兼并节点模型、边模型。
根底模型
咱们把模型进行进一步笼统,能够得到根底模型,根底模型只包含两个特点,仅有编码和显现称号。
public class BaseModel {
private String name; // 仅有编码
private String displayName; // 显现称号
}
模型行为
如果依照面向方针来看,流程模型本身除了特点外,还应该具有办法和行为,即节点和边所能做的事,这儿用Action接口来界说。
public interface Action {
public void execute(Execution execution);
}
因每个流程模型履行的条件或许不一样,这儿一致运用Execution类来界说,下面先简略界说其必要特点,后续依据需求再追加。
public class Execution {
private String processInstanceId; // 流程实例ID
private String processTaskId; // 当时流程使命ID
// 履行方针扩展参数
private Dict args;
}
节点模型
流程模型由节点模型和边构成,节点的类型尽管许多,但是依然能够对其进行进一步笼统。节点都有自己通用性的行为,如前置阻拦、后置阻拦、日志处理等,除了通用性行为外,还能够依据子类不同的特性,完结exec笼统办法。
public abstract class NodeModel extends BaseModel implements Action {
private String layout;// 布局特点(x,y,w,h)
// 输入边调集
private List<TransitionModel> inputs = new ArrayList<TransitionModel>();
// 输出边调集
private List<TransitionModel> outputs = new ArrayList<TransitionModel>();
private String preInterceptors; // 节点前置阻拦器
private String postInterceptors; // 节点后置阻拦器
/**
* 由子类自界说履行办法
* @param execution
*/
@Override
abstract void exec(Execution execution);
@Override
public void execute(Execution execution) {
// 1. 调用前置阻拦器
// 2. 调用子类的exec办法
// 3. 调用后置阻拦器
exec(execution);
}
}
有了节点模型后,其他详细的节点模型就会显现相对简略。
开端节点模型
开端节点首要承继节点模型并完结其exec办法。
public class StartModel extends NodeModel {
@Override
public void exec(Execution execution) {
// 履行开端节点自界说履行逻辑
}
}
完毕节点模型
完毕节点也是承继节点模型并完结exec办法。
public class EndModel extends NodeModel {
@Override
public void exec(Execution execution) {
// 履行完毕节点自界说履行逻辑
}
}
使命节点模型
使命节点是流程中非常重要的节点,其具有更多自己的特点。当然,下面仅仅把常用的特点罗列出来,后续也依据详细完结的事务,增加和删去其特点。
public class TaskModel extends NodeModel {
private String form; // 表单标识
private String assignee; // 参加人
private String assignmentHandler; // 参加人处理类
private TaskTypeEnum taskType; // 使命类型(主办/协办)
private TaskPerformTypeEnum performType; // 参加类型(一般参加/会签参加)
private String reminderTime; // 提示时刻
private String reminderRepeat; // 重复提示距离
private String expireTime; // 等待使命完结时刻变量key
private String autoExecute; // 到期是否自动履行Y/N
private String callback; // 自动履行回调类
private Dict ext = Dict.create(); // 自界说扩展特点
@Override
public void exec(Execution execution) {
// 履行使命节点自界说履行逻辑
}
}
决议计划节点模型
决议计划节点也是一种特殊节点,其会有决议计划表达式,和决议计划处理类特点,首要用于动态计算下一个节点的走向。
public class DecisionModel extends NodeModel {
private String expr; // 决议计划表达式
private String handleClass; // 决议计划处理类
@Override
public void exec(Execution execution) {
// 履行决议计划节点自界说履行逻辑
}
}
分支节点模型
当用到并行流程的时候,该节点就派上用场了,这儿仅仅先简略界说,后续也会依据详细的事务需求,扩展新的特点。
public class ForkModel extends NodeModel {
@Override
public void exec(Execution execution) {
// 履行分支节点自界说履行逻辑
}
}
兼并节点模型
兼并节点和分支节点是一起出来的,这儿也是先依照最根底的界说。
public class JoinModel extends NodeModel {
@Override
public void exec(Execution execution) {
// 履行兼并节点自界说履行逻辑
}
}
边模型
两节点连线,就构成一条边,所以边的关系特点便是source和target,边也有自己的履行办法。
public class TransitionModel extends BaseModel implements Action {
private NodeModel source; // 边源节点引用
private NodeModel target; // 边方针节点引用
private String to; // 方针节点称号
private String expr; // 边表达式
private String g; // 边点坐标调集(x1,y1;x2,y2,x3,y3……)开端、拐角、完毕
private boolean enabled; // 是否可履行
@Override
public void execute(Execution execution) {
}
}
流程模型
有了上面的元素,那么流程模型就很简略得到如下界说:
public class ProcessModel extends BaseModel {
private String type; // 流程界说分类
private String instanceUrl; // 发动实例要填写的表单key
private String expireTime; // 等待完结时刻变量key
private String instanceNoClass; // 实例编号生成器完结类
// 流程界说的所有节点
private List<NodeModel> nodes = new ArrayList<NodeModel>();
// 流程界说的所有使命节点
private List<TaskModel> tasks = new ArrayList<TaskModel>();
}
来个简略的模型方针
public class BuildProcessTest {
@Test
public void buildProcessModel() {
ProcessModel processModel = new ProcessModel();
StartModel startModel = new StartModel();
startModel.setName("start");
startModel.setDisplayName("开端");
processModel.getNodes().add(startModel);
TransitionModel t1 = new TransitionModel();
t1.setName("t1");
t1.setTo("apply");
t1.setSource(startModel);
startModel.getOutputs().add(t1);
TaskModel applyTaskModel = new TaskModel();
t1.setTarget(applyTaskModel);
applyTaskModel.setName("apply");
applyTaskModel.setDisplayName("请假申请");
processModel.getNodes().add(applyTaskModel);
processModel.getTasks().add(applyTaskModel);
TransitionModel t2 = new TransitionModel();
t2.setName("t2");
t2.setTo("deptApprove");
t2.setSource(applyTaskModel);
applyTaskModel.getOutputs().add(t2);
TaskModel deptApproveTaskModel = new TaskModel();
t2.setTarget(deptApproveTaskModel);
deptApproveTaskModel.setName("deptApprove");
deptApproveTaskModel.setDisplayName("部门领导审批");
processModel.getNodes().add(deptApproveTaskModel);
processModel.getTasks().add(deptApproveTaskModel);
TransitionModel t3 = new TransitionModel();
t3.setName("t3");
t3.setTo("end");
t3.setSource(deptApproveTaskModel);
deptApproveTaskModel.getOutputs().add(t3);
EndModel endModel = new EndModel();
t3.setTarget(endModel);
endModel.setName("end");
endModel.setDisplayName("完毕");
processModel.getNodes().add(endModel);
}
}
加入组织
知识星球
相关源码
mldong-flow-demo-01