文章目录

  • 前言
  • 一、数据库设计
    • 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}

多人审批功能简单实现相关推荐

  1. udp实现简单的多人聊天功能

    udp实现简单的多人聊天功能 多个客户端向服务器发送信息,服务端再将信息返回到各个客户端. 这是接收udp的实现类: public class Rec implements Runnable{priv ...

  2. 在Android应用中实现查看“附近的人”的功能

    越来越多的Android应用都加入了"附近的人"的功能,比如微信.陌陌.淘宝等,今天分享一个demo,简单的来实现这一功能.主要原理为:手机端上传gps数据到服务器,服务器从数据库 ...

  3. JavaWeb实战项目-登录审批功能-付强-专题视频课程

    JavaWeb实战项目-登录审批功能-134人已学习 课程介绍         在eclipse中进行web开发,熟练掌握HTML.Javaspript.CSS.JSP.Servlet.Oracle. ...

  4. html实现弹幕功能 简单的小功能

    html实现弹幕功能 简单的小功能 前言 实现 实现思路 具体实现 成果 前言 最近在搞视频的时候突然想加一个弹幕功能,但对我这样一个不会前端的人来说实在是太难了. 于是打开了万能的b站,您猜怎么着, ...

  5. 用python做一个数据查询软件_Python实现功能简单的数据查询及可视化系统

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. image.png 前言 数据时代,数据的多源集成 ...

  6. python日历下拉框_Python版的农历日历Calendar,功能简单

    1.[代码][Python]代码 Python语言: Python版的农历日历Calendar,功能简单 #coding=utf-8 #代码修改自wangfei(wangfei@hanwang.com ...

  7. Qt 2D绘图功能简单总结

    文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...

  8. html 12306页面实现,jQuery模拟12306城市选择框功能简单实现方法示例

    本文实例讲述了jQuery模拟12306城市选择框功能简单实现方法.分享给大家供大家参考,具体如下: www.jb51.net jQuery城市选择框 #parent{ width:500px; po ...

  9. python密码登录程序三次_Python实现账号密码输错三次即锁定功能简单示例

    本文实例讲述了Python实现账号密码输错三次即锁定功能.分享给大家供大家参考,具体如下: 初学Python-1 #实现账号输错三次即锁定 user = "hubery" pass ...

最新文章

  1. linux fedora35 kvm自定义存储路径
  2. RPC简介及框架选择
  3. php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换
  4. react学习(28)---react中componentWillReceiveProps
  5. Eclipse Pydev 技巧汇编
  6. Android Studio 3.4升级后的运行问题解决办法
  7. Linux Oracle服务启动停止脚本与开机自启动
  8. C/C++ 创建两个链表,实现两个链表低位到高位相加,并输出链表
  9. 杭州有哪些牛批的互联网公司
  10. Django修改app名称和数据表迁移方案
  11. pe修改服务器2003密码,PE修改Windows密码
  12. python fft ifft
  13. 代数结构:群、环、域、模、线性空间、格
  14. css 隐藏滚动条 竖向y滚动,横向x不滚动
  15. Nelder Mead算法推荐阅读博文
  16. 教学反思计算机专业,【计算机教学反思】_计算机教学反思参考资料-毕业论文范文网...
  17. hdu 2097 Java Sky数
  18. 常微分方程 $5 微分方程稳定性
  19. 最新千锋3G学院Android游戏开发教程之数独游戏
  20. java json utf8,将JSON转换为UTF-8字符串

热门文章

  1. python入门之字符串索引,切片
  2. linux系统安装hba驱动,Linux系统上iSCSI HBA的安装和配置
  3. html5 单个按钮控制音乐播放,HTML5音频控制停止按钮(而不是暂停)
  4. docker下安装typecho建立自己得博客系统(1)dockerfile篇
  5. 中式英语之鉴读书笔记(下)
  6. dream of/dress up/drink to等动词词组
  7. 【​观察】以双引擎动态技术破局,瑞数信息再定义传统WAF市场
  8. 下图无序列表的html标记,ul标签-无序列表
  9. 白色用rgba怎么设置html,转换RGB到RGBA的白色
  10. 一分钟,华北科技学院会发生什么?