1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java工作流 责任链模式 审核审批流程 方法二

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

时间:2023-04-02 15:13:58

相关推荐

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 /3/13* @Version 1.0*/@Data@Builderpublic class MyContext extends ContextBase {private Long roleId;//当前操作人的角色编号private Integer checkStatus;//当前动作审核状态 -1:审核不通过 0:待审核 1:审核通过private String opinion;//审核意见.........}

编写command

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

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

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

编写ChainBase

/*** @author xiong* @Date /3/13* @Version 1.0*/@Componentpublic class MyChain extends ChainBase {public void init(MyContext myContext) {init0();.........//给当前流添加command(命令已经在项目启动时缓存在了项目缓存中)//CACHE_COMMAND可以理解为上面3个命令的listCACHE_COMMAND.stream().forEach(e -> this.addCommand(e));}/*** 初始化工作流中的命令数量以及 命令的执行状态*/private void init0(){this.frozen = false;mands = new Command[0];}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。