java工作流 责任链模式 审核审批流程 方法二

因为最近在搞一些工作流的事情,而传统的Activity等工作流又太重,不太适合我们的系统,所以在网上找到了Apache Commons Chain这个实现比较轻的Command模式与责任链模式结合的工作流实现。

这个架构主要有Command、ChainBase、ContextBase三个角色,command可以扩展你的单个流程(或者说审核步骤),chainBase用来添加这个工作流中应该包含哪些流程或步骤(addCommand),ContextBase用来自定义这个流中的参数。
在这里插入图片描述

首先引入依赖

<dependency>
         <groupId>commons-chain</groupId>
         <artifactId>commons-chain</artifactId>
         <version>1.2</version>
     </dependency>

编写contextBase

/**
 * @author xiong
 * @Date 2020/3/13
 * @Version 1.0
 */
@Data
@Builder
public class MyContext extends ContextBase {

    private Long roleId;//当前操作人的角色编号

    private Integer checkStatus;//当前动作审核状态 -1:审核不通过  0:待审核   1:审核通过

    private String opinion;//审核意见
    ...
    ...
    ...
}

编写command

/**
 * @author xiong
 * @Date 2020/3/13
 * @Version 1.0
 */
public class CommitCommand implements Command{

    @Override
    public void execute(Context context){
    	MyContext myContext = (MyContext) context;
        //如果满足某某条件  就执行以下操作   
	    if (myContext.getRoleId().equals(BUSINESS_ROLEID)){
	         ....
	         ....
	         ....
	     } 
    }
}
/**
 * @author xiong
 * @Date 2020/3/13
 * @Version 1.0
 */
public class StepOneCheckCommand implements Command {

    @Override
    public void execute(Context context){
        MyContext myContext = (MyContext) context;
        //如果满足是部门领导人的条件  就执行以下操作 
        if (myContext.getRoleId().equals(DEPARTMENT_LEADER_ROLEID)){
            ....
            ....
            ....
        }
    }
}
/**
 * @author xiong
 * @Date 2020/3/13
 * @Version 1.0
 */
public class StepTwoCheckCommand implements Approver {

    @Override
    public void execute(Context context){
    	MyContext myContext = (MyContext) context;
        //如果满足是CEO的条件  就执行以下操作 
        if (myContext.getRoleId().equals(CEO_ROLEID)){
            ....
            ....
            ....
        }
    }
}

编写ChainBase

/**
 * @author xiong
 * @Date 2020/3/13
 * @Version 1.0
 */
@Component
public class MyChain extends ChainBase {

    public void init(MyContext myContext) {
        init0();
        ...
        ...
        ...
        //给当前流添加command(命令已经在项目启动时缓存在了项目缓存中)
        //CACHE_COMMAND可以理解为上面3个命令的list
 		CACHE_COMMAND.stream().forEach(e -> this.addCommand(e));
 		
        }
    

    /**
     * 初始化工作流中的命令数量以及  命令的执行状态
     */
    private void init0(){
        this.frozen = false;
        this.commands = new Command[0];
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值