文章目录

  • 前言
  • 一、数据库设计
    • 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. DELL服务器装2003系统
  2. linux线程超过1024报错,Linux定位c++程序运行异常的经历《实操》
  3. ExtJs 带分页的comboBox
  4. 基于VS的连连看小游戏
  5. JavaScript DOM编程艺术(第2版) 笔记
  6. sql 逐行更新_sql优化面试题
  7. Git显示漂亮日志的小技巧
  8. dual mysql 获取序列_如何获取 MySQL 插入数据的自增 ID
  9. java 正则表达式 unicode_java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍...
  10. 由_exit()引起的对于缓冲区的理解
  11. java ut_【JAVA UT】2、写UT的科学步骤
  12. 数字图像处理 冈萨雷斯(第四版)距离测度
  13. 机器学习常用算法优点及缺点总结
  14. python教程 马哥_python教程马哥
  15. 搭建VUE应用的时候,fsevents报错问题
  16. 2007中国优秀无线站点TOP50
  17. 使用D3渲染中国地图
  18. java架构师_如何成为一个资深Java架构师?
  19. 《王者荣耀》发布的绝悟 AI,到底有多强...
  20. android netd和kernelframeworks的通信逻辑

热门文章

  1. java生成算数表达式_惊!小学生要失业了,Java实现生成并计算四则运算表达式。...
  2. 高性能架构学习路线图-分布式架构演进,mybatis一对一一对多面试题
  3. 流程图的会签、或签、转审、加签、一票否决实现
  4. RTCP Interarrival jitter
  5. iOS 第三方分享、支付原生平台集成
  6. 卸载WPS后,原office出现各种问题,报错,图标混乱
  7. 一文读懂设计模式--适配器模式
  8. java ary是什么,填充N-ary树-Java
  9. 大数据 客户标签体系_基于大数据的用户标签体系建设思路和应用
  10. Oracle数据库账号被锁了怎么解锁