多人审批功能简单实现
文章目录
- 前言
- 一、数据库设计
- 2.实现逻辑
前言
多人审批功能简单实现
一、数据库设计
流程表
CREATE TABLE `system_flow` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL,`active` int DEFAULT '1',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
节点表
CREATE TABLE `system_node` (`id` int NOT NULL AUTO_INCREMENT,`fid` int DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`active` int DEFAULT '1',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
连接节点表
CREATE TABLE `system_link` (`id` int NOT NULL AUTO_INCREMENT,`fid` int DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`preNode` int DEFAULT NULL,`nextNode` int DEFAULT NULL,`active` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
审批人表
CREATE TABLE `system_approver` (`id` int NOT NULL AUTO_INCREMENT,`fid` int DEFAULT NULL,`node` int DEFAULT NULL,`userId` int DEFAULT NULL,`active` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
业务测试表
CREATE TABLE `test_business` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`state` char(1) DEFAULT NULL,`active` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
业务流程关联表
CREATE TABLE `test_flow_business` (`id` int NOT NULL AUTO_INCREMENT,`fid` int DEFAULT NULL,`busId` int DEFAULT NULL,`node` int DEFAULT NULL,`userId` int DEFAULT NULL,`active` varchar(255) DEFAULT NULL,`state` char(1) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10006 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2.实现逻辑
新增接口,增加业务表数据,以及关联表数据,根据上图链路表获取初始节点及审批人更新到业务流程关联表
//TestBusinessEntity save = testBusinessService.save(testBusiness);Integer fid = getIntegerParam("fid");TestFlowBusinessEntity testFlowBusinessEntity = new TestFlowBusinessEntity();testFlowBusinessEntity.setFid(fid);//获取下一节点Integer preNode = 0;Integer nextNode = systemLinkService.getNextNode(fid,preNode);testFlowBusinessEntity.setNode(nextNode);//根据流程与节点获取审批人Integer Approval = systemApproverService.getApprover(fid,nextNode);testFlowBusinessEntity.setUserId(Approval);testFlowBusinessEntity.setBusId(save.getId());testFlowBusinessEntity.setState("0");testFlowBusinessService.save(testFlowBusinessEntity);
审批接口,判断审核状态,同意的话进入下一个节点,不同意,结束流程
Integer busId = testFlowBusinessEntity.getBusId();String state = testFlowBusinessEntity.getState();Example example = new Example(TestFlowBusinessEntity.class);example.createCriteria().andEqualTo("busId",busId).andEqualTo("userId",testFlowBusinessEntity.getUserId());List<TestFlowBusinessEntity> list = testFlowBusinessService.findList(example, null);TestFlowBusinessEntity testFlowBusinessEntity2 = list.get(0);Integer fid = testFlowBusinessEntity2.getFid();Integer node = testFlowBusinessEntity2.getNode();testFlowBusinessEntity2.setState(state);testFlowBusinessService.update(testFlowBusinessEntity2);//判断审核状态,同意的话进入下一个节点,不同意,结束流程if(state.equals("1")){//同意//判断是否是最后一个节点Integer nextNode = systemLinkService.getNextNode(fid,node);if(nextNode!=0){//不是最后一个节点//新增流程业务表关联数据TestFlowBusinessEntity testFlowBusinessEntity1 = new TestFlowBusinessEntity();testFlowBusinessEntity1.setFid(fid);testFlowBusinessEntity1.setNode(nextNode);//根据流程与节点获取审批人Integer Approval = systemApproverService.getApprover(fid,nextNode);testFlowBusinessEntity1.setUserId(Approval);testFlowBusinessEntity1.setBusId(busId);testFlowBusinessEntity1.setState("0");testFlowBusinessService.save(testFlowBusinessEntity1);} else {//最后一个节点,更新业务表状态,流程结束TestBusinessEntity byId = testBusinessService.findById(busId);byId.setState(state);testBusinessService.update(byId);}}if(state.equals("2")){//不同意TestBusinessEntity byId = testBusinessService.findById(busId);byId.setState(state);testBusinessService.update(byId);}
查询列表,根据userId,以及状态进行查询分页
SELECTt1.*FROMtest_business t1LEFT JOIN test_flow_business t2 ON t1.id = t2.busId
WHEREt1.active = 1AND t2.userId = #{userId}AND t1.state=#{state}
多人审批功能简单实现相关推荐
- udp实现简单的多人聊天功能
udp实现简单的多人聊天功能 多个客户端向服务器发送信息,服务端再将信息返回到各个客户端. 这是接收udp的实现类: public class Rec implements Runnable{priv ...
- 在Android应用中实现查看“附近的人”的功能
越来越多的Android应用都加入了"附近的人"的功能,比如微信.陌陌.淘宝等,今天分享一个demo,简单的来实现这一功能.主要原理为:手机端上传gps数据到服务器,服务器从数据库 ...
- JavaWeb实战项目-登录审批功能-付强-专题视频课程
JavaWeb实战项目-登录审批功能-134人已学习 课程介绍 在eclipse中进行web开发,熟练掌握HTML.Javaspript.CSS.JSP.Servlet.Oracle. ...
- html实现弹幕功能 简单的小功能
html实现弹幕功能 简单的小功能 前言 实现 实现思路 具体实现 成果 前言 最近在搞视频的时候突然想加一个弹幕功能,但对我这样一个不会前端的人来说实在是太难了. 于是打开了万能的b站,您猜怎么着, ...
- 用python做一个数据查询软件_Python实现功能简单的数据查询及可视化系统
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. image.png 前言 数据时代,数据的多源集成 ...
- python日历下拉框_Python版的农历日历Calendar,功能简单
1.[代码][Python]代码 Python语言: Python版的农历日历Calendar,功能简单 #coding=utf-8 #代码修改自wangfei(wangfei@hanwang.com ...
- Qt 2D绘图功能简单总结
文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...
- html 12306页面实现,jQuery模拟12306城市选择框功能简单实现方法示例
本文实例讲述了jQuery模拟12306城市选择框功能简单实现方法.分享给大家供大家参考,具体如下: www.jb51.net jQuery城市选择框 #parent{ width:500px; po ...
- python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例
本文实例讲述了Python实现账号密码输错三次即锁定功能.分享给大家供大家参考,具体如下: 初学Python-1 #实现账号输错三次即锁定 user = "hubery" pass ...
最新文章
- DELL服务器装2003系统
- linux线程超过1024报错,Linux定位c++程序运行异常的经历《实操》
- ExtJs 带分页的comboBox
- 基于VS的连连看小游戏
- JavaScript DOM编程艺术(第2版) 笔记
- sql 逐行更新_sql优化面试题
- Git显示漂亮日志的小技巧
- dual mysql 获取序列_如何获取 MySQL 插入数据的自增 ID
- java 正则表达式 unicode_java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍...
- 由_exit()引起的对于缓冲区的理解
- java ut_【JAVA UT】2、写UT的科学步骤
- 数字图像处理 冈萨雷斯(第四版)距离测度
- 机器学习常用算法优点及缺点总结
- python教程 马哥_python教程马哥
- 搭建VUE应用的时候,fsevents报错问题
- 2007中国优秀无线站点TOP50
- 使用D3渲染中国地图
- java架构师_如何成为一个资深Java架构师?
- 《王者荣耀》发布的绝悟 AI,到底有多强...
- android netd和kernelframeworks的通信逻辑
热门文章
- java生成算数表达式_惊!小学生要失业了,Java实现生成并计算四则运算表达式。...
- 高性能架构学习路线图-分布式架构演进,mybatis一对一一对多面试题
- 流程图的会签、或签、转审、加签、一票否决实现
- RTCP Interarrival jitter
- iOS 第三方分享、支付原生平台集成
- 卸载WPS后,原office出现各种问题,报错,图标混乱
- 一文读懂设计模式--适配器模式
- java ary是什么,填充N-ary树-Java
- 大数据 客户标签体系_基于大数据的用户标签体系建设思路和应用
- Oracle数据库账号被锁了怎么解锁