各位好,我是兔老三,最近用go语言写了一个“中国式”的工作流引擎,目前已经发布到github上,地址如下:   

        GitHub - Bunny3th/easy-workflow: GO语言开发的简单易用工作流。

何谓"中国式流程”

        咱们拿一个简简单单的请假流程来说说:

        申请人-->本部门主管-->人事主管-->老板

        有同学可能会说,这是一个最正常的流程啊,你别标题党。

        别急,咱们听听客户的需求:

        1、部门主管说了:假如申请人是我自己,为什么还要再有“本部门主管”这一步?我还审我自己?

        2、人事主管说了:我身体不好要经常请假,但是又不想休假的时候把账号给别人,希望能设置一个功能,在我休假的时候,把我的审批委托给助手小王。

        3、老板说了:我是老板我任性,驳回只能驳到人事,这不行,我希望能自由驳回到任何人。

        4、给老板加上了自由驳回的功能,人事又不爽了。老板直接驳回到部门主管,部门主管又要提交到人事,这不是增加人事的工作量?

        5、老板又说了:得加一个微信提醒的功能,谁收到审批任务1小时还没有动静的,得微信给我。咱要有效率。

        6、然后老板又又又说了,IT部门特殊,这帮人怎么可以请假?IT部的人请假要先看工作年数,没到3年的不准请假。007才是他们的福报,年轻人不要整天想着躺平...

        嗯...现在好像就不那么简单了吧?做过工作流项目的同学可能会沉重点头,很多是真事,甚至还有更脑洞大开,随心所欲的——谁让需求方是大爷呢。

       

为什么要自己写一个引擎

        有同学说了,工作流引擎这个轮子又不是没有,比如activiti,你上面说的这些功能,也不是不能做啊。是的,工作流引擎不是黑科技,目前国外开源的以activiti为代表,很多功能网上找找资料也确实能做。

        不过我当时遇到了几个困难:

        1、老三是一名Gopher,目前项目也都是go语言开发的,而activiti是java写的。老三当初也写过java,就是因为觉得java代码比较啰嗦(抱歉,对广大java程序员没有不敬之意),才放弃java投入到go的世界。老码农的别扭劲上来了,如果有办法,自然不想用“混合”的方式完成项目。

        2、找了一下目前go语言下的开源工作流引擎,发现确实有一些,但看了一些资料,似乎go语言中还没有一个工作流引擎如java世界中的activiti那样有丰富的文档和支持。各位也知道,使用一个开源库,如果没有文档支持,遇到坑是多么的痛苦。

       更何况,中国人更懂中国需求,有些一板一眼的国外引擎,还真挺难伺候咱中国客户。

       

引擎设计功能介绍

        无奈之下,挠挠头皮,突然想想,要不自己写一个呗!于是就写了一个叫做easy workflow的轻量级引擎。能力有限,不能和大佬比,不过所谓麻雀虽小,五脏俱全,这个引擎倒也是能跑一些复杂的流程,主要有那么一些设计点:

        1、首先支持客户最爱的各种飞线跳转审批。这里做了两个小设计:

             a、自由驳回。支持驳回上游任意节点;

             b、直接(跳转)提交。可以跳过中间节点,直接提交到驳回我的那个节点。

        2、支持复杂流程分支

             要实现复杂流程的本质是”控制节点走向和流转逻辑“。在activiti中。是通过各类网关和连接线中条件判单实现的。老三比较懒,所以在我的项目中只用了一个”混合网关“(可视为activiti中排他、并行、包含网关和连接线的简单混合体)。

        3、支持变量和条件表达式

             这个是工作流引擎的标配对吧,没有这两小伙伴,根本没法设计复杂点的流程。

        4、支持事件定义

             目前版本支持4种事件,分别是:a、节点开始 b、节点结束 c、任务结束 d、流程撤销。

        5、支持计划任务

             计划任务是事件的辅助,有了它的补充,可以发挥更大的脑洞,满足更多的客户需求。比如:通知、自动过审、统计....等等等等。”人事请假时候委托给助理“这个需求,我就是用计划任务完成的。

        6、支持直接以微服务方式运行

             可以作为一个库嵌入自己的代码,也可以直接开启内置的WEB API服务,通过网络调用接口。

       

结语

        虽然水平有限,但想想这个引擎也经过实际项目的折腾和考验了,不算是自娱自乐的产物。所以在此厚着脸皮开源出来,不敢指望大家能看得上,算是为中国的开源社区添一块小砖吧。

        

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。