![](https://img-blog.csdnimg.cn/20210117102135213.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
activiti7实现钉钉审批流
文章平均质量分 55
springboot+activiti7+react实现模仿钉钉功能的审批流
小小绿豆
一枚热爱code的小绿豆
展开
-
springboot+activiti7+react实现模仿钉钉功能的审批流(一、开篇)
前言写点文章记录下自己流程平台完成的过程,一是做点笔记,二是帮助看到的人借鉴一下,当然,其中可能不是最好的方案,也供交流和讨论。之前项目的流程都是通过钉钉提供的开发者api对接的,后来有需求要开发自己的流程平台,也没多少实践,所以就直接模仿钉钉的来了,这样还省了产品和设计。从4月份开始做技术选型,我也是从那时候开始接触activiti,所以直接就用了最新的版本7,然后一步一步的研究和摸索。因为是自己一个人苦逼的前后端全栈式开发,就选了自己最熟悉的技术栈了;鸣谢一下:刚接触的时候连bpmn规范都不清原创 2021-01-16 00:47:24 · 8042 阅读 · 21 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(二、springboot集成activiti7)
pom.xml<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> <!--这里解决activiti里面的mybatis和mybatis-plus包的冲突--> <exclusions>原创 2021-01-16 20:42:24 · 2983 阅读 · 4 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(三、搭建react前端框架)
前端使用react技术栈,项目搭建使用umihttps://umijs.org/zh-CN1.安装node、npm、yarn2.参照umi文档,即可完成前端项目搭建说明:umi是一套阿里出的企业级前端应用框架,开箱即用,集成了route、dva、antd、antd pro、less、access、request...等插件,相当nice!学java的,如果想学前端,建议选择react,学习成本稍微比vue高一点点,开始可能不习惯,熟练之后会发现真的香,很符合后端编码习惯。jscon原创 2021-01-16 20:43:09 · 3418 阅读 · 0 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(四、表单类型列表)
功能就是类型钉钉的oa审批列表,只是钉钉是小长方块展示。实现方式就是自己单独维护一个表单类型表,关联了最新的发布id,关联动态表单设计字段信息(详见表单设计章节)基本功能:1.分页列表2.增加、编辑基本信息3.高级设置:类似钉钉的自动通过审批等配置4.启用/停用:停用之后不能发起流程5.表单设计、流程设计、发起流程 路由入口表结构:...原创 2021-01-16 20:43:44 · 2340 阅读 · 7 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(五、实现类似钉钉的流程设计器)
这块是整个系统最复杂的部分,需要熟悉bpmn规范,算法,后端部署操作;实现的核心是前端操作和生成bpmn的xml字符串给后端直接使用,后端不用做什么,只需要1.存xml 2.查询返回xml给前端操作 3.部署xml;所以工作量基本都在前端;具体步骤:新建流程:1.前端直接从定义好的xml模板中初始化; 这里的模板其实就是提前在保存好的xml文件,钉钉也有类似的功能,进去之后左侧可以选择一些它设置好的流程。我这里预习放了一个模板: '发起人' -> '审批人' -> '抄...原创 2021-01-16 20:44:17 · 12841 阅读 · 17 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(六、实现类似钉钉的表单设计器)
主要就是维护一个和表单类型关联的字段列表,字段属性参考了antd的组件属性,表结构:内容实例,form_id关联act_business_form人员列表的数据:{"type":"Detail","disabled":true,"required":false,"placeholder":"","actionName":"添加","forms":[{"label":"部门","itemProps":{"type":"Input","disabled":true,"required...原创 2021-01-16 20:44:47 · 2514 阅读 · 4 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(七、发起流程)
与钉钉类似,1.前端根据表单id从后端查表单字段列表;2.动态渲染出antd表单;3.填完值之后提交form;注意!!!:发起流程时候需要把表单的表单字段项一起保存到流程参数里面,类似存一个表单项的快照,因为表单项是可以编辑的。这里的难点在于动态渲染表单、表格明细组件、可以套娃(a单关联b,b单关联c,c关联d....用到了点组件递归)的关联表单项发起:查看...原创 2021-01-16 20:45:12 · 2155 阅读 · 6 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(八、流程面板:待我审批、我已审批、我发起的、抄送我的、所有审批单)
就是查询sql,可以开启sql,查看sql输出来调试:主要sql:-- 我发起的流程 SELECT DISTINCT RES.*, DEF.KEY_ AS PROC_DEF_KEY_, DEF.NAME_ AS PROC_DEF_NAME_, DEF.VERSION_ AS PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ AS DEPLOYMENT_ID_, deployment.CATEGORY_ AS CATEGORY_ FROM ..原创 2021-01-16 20:45:39 · 3360 阅读 · 7 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(九、流程明细)
查询出流程表单form、流程表单form值、流程图、审批任务节点、审批意见主要是后端查询数据,前端展示待办转移:就是重新set一下任务的assign原创 2021-01-16 20:46:01 · 2082 阅读 · 0 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十、审批流程-同意、拒绝、撤单)
同意:任务通过,set一个标记值到任务参数里面,这里有个坑,任务参数会被覆盖,所有key要和每个任务id关联,这样就不会被覆盖了;set AGREE ,拒绝:任务拒绝,set REFUSE,然后直接结束流程,执行: runtimeService.deleteProcessInstance(<流程实例id>, <流程删除原因:这里可以填任务拒绝意见>);撤单:撤销流程,我的做法是直接结束流程,deleteProcessInstanceById(processInstanceId,原创 2021-01-16 20:46:24 · 2272 阅读 · 5 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十一、外部系统通过api发起流程)
参数及说明:接口调用:注意:流程发起成功之后,需要存一下返回的流程实例id,这里的作用请结合《十二、通知外部系统流程状态变化》查阅发起之后可以在流程里面看到:发起流程如果提供给外部使用,特别是互联网接口,请使用接口签名;方案:请求头携带参数appId+timestamp+nonce+sign,只有1.拥有合法的身份appId和正确的签名sign 2.timestamp10分钟内、nonce未被使用才能放行。这样就解决了身份验证和参数篡改问题,即使请求参数被劫持,由于获取不原创 2021-01-17 00:16:00 · 1032 阅读 · 0 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十二、通知外部系统流程状态变化)
类似钉钉的回调通知机制,主要通过两个监听实现:1.实现TaskEventListener接口,监听任务变化/** * 全局任务时间监听 * * @author LTX */@Slf4j@Servicepublic class MyTaskEventListener implements TaskEventListener { @Autowired private IActService actService; @Override public void原创 2021-01-17 00:16:31 · 1165 阅读 · 2 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十三、api sdk开发过程)
在上面的《十一、外部系统通过api发起流程》和《十二、通知外部系统流程状态变化》两个步骤中看出:外部系统对接流程平台,需要编写3个操作:1.向流程平台发起流程2.给流程平台回调的post接口3.用实例id从流程平台查询流程状态为了方便对接,开发了一个简易的sdk,方便外部系统对接,钉钉也是类似的有sdk。sdk核心方法:1.发起流程2.根核流程平台分配给外部系统的appId、appSecret生成接口签名sdk代码模块:签名工具类:/** * @Author: ltx原创 2021-01-17 00:17:11 · 1518 阅读 · 0 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十四、发起流程自动预判流程走向)
功能说明:类似钉钉发起流程,发起人填单子过程中,可自动预判该流程走向,方便发起人填单子时候就可以看到这个单子的审批人。本人并未实际具体实现此功能,只是写下自己考虑实现该功能的大致实现思路,具体细节还需要打磨,以供交流,欢迎提出更优方案;话不多的,直接举一个简单栗子:流程预判,钉钉是这样玩的:第1步 表单设计:第2步 流程设计:第3步 用户发起审批,并自动预判流程走向条件满足 “请假天数 < 3” 走B审批:条件不满足 “请假天数 < 3” 走C审批:...原创 2021-03-12 00:59:38 · 3355 阅读 · 8 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十五、流程表单操作权限设计)
功能说明:类似钉钉流程设计里面的审批节点表单字段权限,流程设计可对节点上的字段做权限控制,比如流程节点A->B->C-D,表单字段F1、F2,B节点的审批人可对F2节点进行编辑,C节点的审批人不可见F3字段,适用于审批过程中控制审批人拥有不同字段权限的情况。本人并未实际具体实现此功能,只是写下自己考虑实现该功能的大致实现思路,具体细节还需要打磨,以供交流,欢迎提出更优方案;流程设计-配置A节点的表单操作权限审批中,审批人可编辑表单:具体实现思路:1.基于系列..原创 2021-03-12 14:01:35 · 2230 阅读 · 3 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十六、发起人权限控制)
功能说明:类似钉钉流程设计里面的发起人权限控制,有发起表单流程权限的用户就可以"看到"这个流程,可以发起,没权限的就"看不到"这个流程,不能发起;本人并未实际具体实现此功能,只是写下自己考虑实现该功能的大致实现思路,具体细节还需要打磨,以供交流,欢迎提出更优方案;流程设计-配置流程发起人只允许A用户发起:工作面板里面B用户就没这个入口:具体实现思路:1.类似钉钉流程设计,流程图发布时候,保存下配置的权限集合和表单类型的关联关系; 2.流程表单列表,根据用户id关联查询出每个.原创 2021-03-12 15:31:58 · 998 阅读 · 0 评论 -
springboot+activiti7+react实现模仿钉钉功能的审批流(十七、流程设计器-流程助手)
功能说明:类似钉钉流程设计里面的流程助手功能,流程设计时候可以选择预先定义好的流程模板,方便C端用户从系统预置的流程模板开始设计流程;本人并未实际具体实现此功能,只是写下自己考虑实现该功能的大致实现思路,具体细节还需要打磨,以供交流,欢迎提出更优方案;钉钉流程助手功能截图:具体实现思路:1. 流程模板管理,实现流程模板的管理功能(我猜测钉钉是有这个功能的,只是C端用户用不到):模板列表,显示系统里面的模板列表,并支持CRUD,流程模板大致字段:标题、描述、图标、模板状态(有效/无.原创 2021-03-25 17:46:57 · 2496 阅读 · 3 评论