思考如何完成一个审批流

思考如何完成一个审批流

在这里插入图片描述

这篇文章,可能没有太多的干货,只是对于自己做过项目的一个反思与整理,同时,让这篇文章暴露在公共视野,虚心接受批评指导,向各位前辈同仁进行学习。

如果此文又不当之处,逻辑有问题的地方,设计不合理的地方,希望各位进行批评指正

初步设计

1.创建数据库

主表设计

字段名称
id主键id
applicant申请人
apply_time申请时间
step审批进度
status审批状态
comment审批意见
revoke_time撤回时间

副表设计

字段名称
pid审批主表主键id
user_id审批人
approve_time审批时间

2.接口设计

设计相应的接口来实现审批流程的功能。例如,可以设计以下接口:

  • 创建审批记录:用于申请人提交审批请求。
  • 获取审批记录:用于查询某个审批记录的详细信息。
  • 更新审批状态:用于更新审批记录的状态(如已通过、已拒绝等)。
  • 撤回审批:用于撤回已经提交的审批请求。

3.业务逻辑

实现相应的业务逻辑,如多人审批、撤回等功能。例如,可以采用以下策略实现多人审批功能:

  • 当一个审批请求提交后,系统自动分配一个初始审批人。
  • 如果初始审批人同意审批,则将审批状态设置为“已通过”,并通知申请人。
  • 如果初始审批人拒绝审批,则将审批状态设置为“已拒绝”,并通知申请人。
  • 如果初始审批人未在规定时间内做出决策,则自动将其从审批人列表中移除,并通知申请人重新选择审批人。
  • 申请人可以选择其他已有的审批人作为新的审批人,或者添加新的审批人。
  • 当所有指定的审批人都同意或拒绝时,审批流程结束。

4.数据权限

所有的审批只有申请人和审批人可见

当审批被驳回,客户可通过修改进行二次申请

审批人进行审批,更改主表数据状态,在副表插入数据

涉及到二级审批,依然审批人进行审批,更改主表数据状态,在副表插入数据

最后的数据展示获取副表审批记录和申请人,进行数据过滤

反思与优化

1. 审批流程的灵活性

在设计中,确保审批流程具有一定的灵活性,以适应不同业务场景。考虑是否允许在审批流程中动态添加或删除审批人,以便在流程进行中灵活应对变化。这可以通过设计支持动态审批人的接口和功能来实现。

2. 审批记录的完整性

除了主表和副表中的基本审批信息外,考虑是否需要更详细的审批日志记录。具体记录每位审批人的操作,包括操作类型(同意、拒绝、撤回等)、操作时间等信息。这样的详细记录有助于审批流程的追溯和审计,确保审批记录的完整性。

3. 通知机制

实现一个强大而灵活的通知机制,确保在审批流程的各个阶段都能及时通知相关人员。可以通过邮件、短信或系统内消息等多种方式进行通知。考虑设计通知模板,以便在通知内容需要调整时能够方便地进行修改。

4. 审批状态的扩展

审批状态目前包括“已通过”和“已拒绝”,但在一些场景下可能需要更多状态。考虑扩展审批状态,例如“待审批”、“审批中”等,以满足更多业务需求。确保系统设计能够轻松扩展和定制审批状态,以适应不同的业务流程。

5. 数据权限与二次申请的优化

在数据权限方面,确保只有申请人和相关审批人能够查看相应的审批记录。对于二次申请,设计一个灵活的机制,允许客户通过修改已有的申请进行二次申请,同时保留相关的审批历史记录。

6. 二级审批的数据展示优化

对于涉及二级审批的情况,优化数据展示方式。可以考虑在界面上清晰地展示主表和副表的关联关系,以及审批人的操作记录,以便用户能够直观地了解整个审批流程的进展和历史。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 免密密钥登陆sftp服务 —— 筑梦之路

为什么用sftp而不是ftp? sftp是使用ssh协议安全加密的文件传输协议,ftp在很多时候都是使用的明文传输,相对来说容易被抓包,存在安全隐患。 需求说明 1. 使用sftp代替ftp来做文件存储,锁定目录,不允许用户切…

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114)

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114) 距离上一次正儿八经的技术分享又过了整整一周了,距离上一期Exadata专题文章也过了11天了,今天一鼓作气把ESS写完,毕竟明天又要飞北京了。 1 Smart Scan 其…

uniapp大概是怎么个开发法(前端)

写在前面,博主是个在北京打拼的码农,从事前端工作5年了,做过十多个大大小小不同类型的项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何…

如何实时提取微信群收到的二维码图片?

10-4 在有些工作中,需要实时提取在微信中收到的二维码图片,比如微信里有一百个群,怎么才能知道这些群里发了二维码出来,要实现这样的功能,微信本身并不提供,但是可以通过一些其它技巧完成。 大概的原理是…

基于Spring、SpringMVC、MyBatis的漫画网站

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring、SpringMVC、MyBatis的漫画网…

鸿蒙原生应用开发-DevEco Studio中HarmonyOS与OpenHarmony项目的切换

一、找到该目录 二、修改操作系统类型 三、分别进行开发,一些常规的应用功能实现后,相互切换后都可以正常运行的。前期OpenHarmony项目如果连接开发板比较困难的化,开发完成后,切换成为HarmonyOS后就可以比较详细地看看效果了。

Qt调用python写好的函数,利用Python丰富的图像处理库来完成各种任务

一、前言 近年来,Python已经成为一种广泛应用于科学计算、数据分析和机器学习等领域的强大编程语言。其丰富的生态系统和大量的开源库使得Python成为处理图像、音频、视频和其他多媒体数据的理想选择。在图像处理领域,Python提供了许多方便的函数和库,如OpenCV、PIL(Pytho…

企业微信H5开发遇到的坑

企业微信官方推荐wx.agentConfig引用<script src"https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>是没有效果的 必须引用以下代码才有效果&#xff0c;这也是我看了社区的回答才有所收获&#xff0c;是一个坑 且VUE引用在线的…

react hook函数式组件useState使用/params父向子传参

引入 import { useState } from "react";定义 const [count, setCount] useState(0);使用 import { useState } from "react"; function Son(params) {const [count, setCount] useState(0);function handleClick() {setCount(count 1);}// 父 <S…

js--处理object的常用方法

处理object的常用方法 1、判断数据类型2、Object.getOwnPropertyNames() 1、判断数据类型 Object.prototype.toString.call(null);// ”[object Null]” Object.prototype.toString.call(undefined);// ”[object Undefined]” Object.prototype.toString.call(“abc”);// ”…

asp.net blazor集成ReactiveUI.Blazor

asp.net blazor项目添加Nuget包ReactiveUI和ReactiveUI.Blazor 创建视图模型BlogPostViewModel继承自ReactiveObject public class BlogPostViewModel : ReactiveObject{private readonly AnonymousBlogClient _http;public List<BlogCategory> Categories { get; set; …

基于架构软件设计方法及应用

随着国内外化工行业的繁荣与发展&#xff0c;从2018年开始&#xff0c;某能源集团下属的化工部&#xff0c;连续投资建设了MES&#xff08;生产制造&#xff09;系统、设备管理系统、安全管控系统、能源管理系统。这些系统建设得都非常好&#xff0c;无论是业务的切合度&#x…

狂神说笔记 快速入门Nginx

公司产品出现瓶颈&#xff1f; 我们公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个jar包启动应用就够了&#xff0c;然后内部tomcat返回内容给用户。 但是慢慢的&#xff0c;使用我们平台的用户越来…

【考研复习】二叉树的特殊存储|三叉链表存储二叉树、一维数组存储二叉树、线索二叉树

文章目录 三叉链表存储二叉树三叉链表的前序遍历&#xff08;不使用栈&#xff09;法一三叉链表的前序遍历&#xff08;不使用栈&#xff09;法二 一维数组存储二叉树一维数组存储二叉树的先序遍历 线索二叉树的建立真题演练 三叉链表存储二叉树 三叉链表结构体表示如下图所示…

HBase之Compaction

目录 Compaction触发条件相关参数 文件选取策略ExploringCompactionPolicy常见优化 Compaction 随着memstore的不断flush&#xff0c;storefile的数量将会不断增加。compaction将通过合并storefile来减少文件数量&#xff0c;并提高读性能。conpaction以store为单位 Compacti…

飞书开发学习笔记(六)-网页应用免登

飞书开发学习笔记(六)-网页应用免登 一.上一例的问题修正 在上一例中&#xff0c;飞书登录查看网页的界面显示是有误的&#xff0c;看了代码&#xff0c;理论上登录成功之后&#xff0c;应该显示用户名等信息。 最后的res.nickName是用户名&#xff0c;res.i18nName.en_us是英…

BASE理论

BASE理论 介绍 BASE理论是指基本可用&#xff08;Basically Available&#xff09;、软状态&#xff08;Soft State&#xff09;和最终一致性&#xff08;Eventually Consistent&#xff09;。与CAP理论不同&#xff0c;BASE理论重点强调分布式系统的可用性、灵活性和实时性。…

IntelliJ IDEA 安装 GitHub Copilot插件 (最新)

注意&#xff1a; GitHub Copilot 插件对IDEA最低版本要求是2021.2&#xff0c;建议直接用2023.3&#xff0c;一次到位反正后续要升级的。 各个版本的依赖关系&#xff0c;请参照&#xff1a; ##在线安装&#xff1a; 打开 IntelliJ IDEA扩展商店&#xff0c;输入 "Git…

Gitlab CI如何实现安全获取ssh-key拉取依赖项目,打包成品

文章目录 前言配置流程注册ssh-keygit runner映射文件方法1 .gitlab-ci.yml使用方法2 docker build 实现 总结 前言 之所以写这篇文章是由于存在以下场景&#xff1a; 当前的项目编译需要依赖别的项目协同编译&#xff0c;如何将别的项目也pull到该项目里&#xff0c;编译成品…

解决跨域的方法

针对不同情况和需求&#xff0c;可以采取以下几种方法来解决跨域问题&#xff1a; JSONP&#xff08;JSON with Padding&#xff09;&#xff1a;由于在 script 标签中不存在跨域限制&#xff0c;所以可以通过动态创建 script 标签&#xff0c;将需要获取的数据包装成一个函数&…