简单流程的设计

之前的项目里面大约有十个左右的审核流程,是非常简单的审核流程,两级-三级的审批,通过到下一节点,拒绝结束审批。

当时设计的流程是第一版本的流程,五个表:流程、流程节点、流程实例、流程节点实例、流程操作日志。

流程表主要字段包括流程code、名字以及配置流程节点走向的json串;

流程节点主要字段包括节点code、名字、关联流程、初始化、通过、拒绝、终止操作对应的api(方法)、此节点跳转的页面(待办页面)、处理完之后跳转的页面(已办页面);

流程实例主要字段包括名字、对应的流程、关联的业务Id、实例状态;

流程节点实例主要字段包括名字、关联的流程实例、对应的节点、节点实例状态;

流程操作日志主要负责记录操作相关,暂略不表。

在这个版本设计基础上的实现步骤如下:

1. 初始化流程:根据流程的code获得节点的json,得到第一个节点,并创建流程实例和第一个节点实例;

2. 完成节点操作:根据节点实例的Id获得当前处理的节点,同时得到关联的其他信息:流程、节点、流程实例;根据操作(通过、拒绝、回退)找到对应的api,反射调用api的方法;修改操作状态(通过、拒绝、终止);同时得到下一个节点的信息,如果有创建实例,如果没有结束流程。

这个版本设计的主要问题:

1 流程比较重,关联的信息太多,比如实现的api,页面跳转的配置等,不够灵活。像在这个项目中,前端和后端都有过一次比较大的变动,很多配置就失效了,但是不能修改,最后只能增加新的字段来拓展;

2 通过json配置的节点流程只能用在单线处理的流程上,遇到复杂的会非常麻烦,而且配置过程中非常容易出错。

鉴于上面的问题,在新的项目中流程的设计做了轻量级的删减,设计如图:

171630_tMfa_3660594.png

主要的变动如下:

1. 删除了流程节点中反射和页面的配置,通过业务去处理;

2. 流程节点的走向通过流程节点来实现:

    IS_FIRST字段表示是否是这个流程的第一个节点;

    ADOPT_NODE是通过后走向的节点;

    BACK_NODE是回退(非拒绝)后走向的节点;

    同时增加了一个IS_WAIT字段,考虑的是处理比较简单的并行的流程,比如下面的例子:

172248_tzf2_3660594.png

A执行完之后同时启动B和C节点,B执行完之后到D节点,C和D节点都执行完之后才能到E节点,E节点执行完之后结束。

给C和D节点的配置上IS_WAIT都是指成true,这样在执行C和D节点的时候判断下当前流程是否还有未执行的节点,如果有就等待;否则到下一个节点。

其余的设计跟第一个版本的流程基本相同。

这个轻量级的版本设计问题如下:

1)只能处理比较简单的流程,如果流程过于复杂,还是需要基于成熟的流程插件来实现(比如workflow, JBPM, activity5等)

2)另外一个是代码实现上的问题,对于并行的流程处理还有一些缺陷,但目前项目并没有用到,所以没有进行优化。

转载于:https://my.oschina.net/u/3660594/blog/1556189

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值