flowable似乎是一个知名的java开源工作流引擎,符合bpmn2的规范,可以支持用xml的方式来做,这里可以看一下已经有的别人的实现,作为参考. 主要在意的就是节点的事件,节点会触发特定事件,可以在事件里面添加一些业务逻辑.
关于工作流类型的理解:
比如说有一个叫 盖房子的流程,这时候有一个地方要盖一个房子,那就创建一个盖房子流程的实例, 开始后,到烧砖工, 烧砖工在前面做工作,做完了,砖烧失败了, 那他就完成他自己的任务失败了,然后这个房子盖不了了,他就告诉监工网关节点,没有砖了,监工就说直接结束;相反, 他砖烧好了,他就完成他自己的任务,把自己做完这个结果传给下一个监工,监工看结果,一看可以了,就告诉下一个盖房子的人,盖房子的开始干活, 然后盖房子,盖完到决策监工结束节点,房子就盖好了。
这里面似乎主要是bpmn的规范要实现xml反序列化转化为系统中的对象,然后进行bpmn流程的判断.
taskService.claim(task.getId(), "fozzie"); //分配一个任务给某个人
//可以通过assignee获取某个人所有的任务;
TaskService service = processEngine.getTaskService();
List task = service.createTaskQuery()
.processDefinitionKey("holidayRequest")
.taskAssignee("zhangsan")
.list();
//完成某个任务,传递参数到网关
HashMap<String, Object> map = new HashMap<>();
map.put("approved", false);
taskService.complete(t.getId(), map);
这里说一下工作流的设计, 看了这个,想看下自己设计个, 对工作流来讲,主要就是任务类型的设计,还有关系类型的指向, 所以一个关系流里面所有关联的entity的数量应该是分类的任务类型所有个数,还有关系类型所有个数,关系类型要有起始entity,还有结束entity,外加条件计算,满足什么条件会取到哪个任务entity作为结束, 这样就很简单了,一个task在结束之时会产生对应的参数,将参数传递给与这个task关联的关系entity, 这样可以计算到下一个task,依此类推,就可以所有的任务节点为都走一个遍.
同样在前端,画图的方法我也研究过,所以就是设计几种形状的节点,关系类型的的画线要用js的svg或者canvas都可以,每个entity对应一个范围,还有个层,就像ps一样,点击后看是哪个entity被点击到了. 然后根据鼠标的位置重新绘制所有的entity, 而且要保存一张xml,符合bpmn,
这样算,工作流这种类型实在是很辛苦麻烦的东西,而且用的不多,没有必要太过细去实现它, 不过这里理解一下原理,有需要了,可以再去想实现了, 可以实现一次,毕竟,读百遍不如做一遍吧.