有兴趣的可以看看 https://blog.csdn.net/qq_41158114/article/details/104931738
用一个简单的框架实现了工作流机制
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
@Data // lombok 插件 自动升成get、set方法
public abstract class Approver {
protected Approver successor;//审核通过后的下一个审核者对象
//抽象方法 可以传一些审核过程中的参数
public abstract void processRequest(RequestBaseContext requestBaseContext);
}
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
@Data
@Builder
public class RequestBaseContext {
private Long roleId;//当前操作人的角色编号
private Integer checkStatus;//当前动作审核状态 -1:审核不通过 0:待审核 1:审核通过
private String opinion;//审核意见
}
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
public class Business extends Approver {
@Override
public void processRequest(RequestBaseContext requestBaseContext){
//如果满足是商务的条件 就执行以下操作 否则向下执行
if (requestBaseContext,getRoleId().equals(BUSINESS_ROLEID)){
....
....
....
} else {
this.setSuccessor(new DepartmentLeader());
this.successor.processRequest(requestBaseContext);
}
}
}
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
public class DepartmentLeader extends Approver {
@Override
public void processRequest(RequestBaseContext requestBaseContext){
//如果满足是部门领导人的条件 就执行以下操作 否则向下执行
if (requestBaseContext,getRoleId().equals(DEPARTMENT_LEADER_ROLEID)){
....
....
....
} else {
this.setSuccessor(new CEO());
this.successor.processRequest(requestBaseContext);
}
}
}
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
public class CEO extends Approver {
@Override
public void processRequest(RequestBaseContext requestBaseContext){
//如果满足是部门领导人的条件 就执行以下操作 否则向下执行
if (requestBaseContext,getRoleId().equals(CEO_ROLEID)){
....
....
....
}
}
}
/**
* @author xiong
* @Date 2020/3/13
* @Version 1.0
*/
public class Test {
public Test() {
//可以一次性把所有步骤中的下一个执行者填充完,也可以像我这样,只填充一个第一步的对象,剩下的在需要的时候填充。
Approver business = new Business();
//正常情况下,这个参数应该是前端请求的时候传递的参数
RequestBaseContext requestBaseContext = RequestBaseContext.builder().roleId(...).build();
business.processRequest(requestBaseContext);
}
public static void main(String[] args) {
new Test();
}
}