快速开发申请加班工资审批流程系统(1)

二次开发:快速开发申请加班工资审批流程系统(1)

很多时候在公司内部,都要手动填写一些表格,久了之后,也没能去数字化流程化,将一些流程简化和自动化。网上有很多自动化OA的开源流程快速搭建和实现方案,例如springboot开源项目中集成了activity和Flowable 工作流,能够快速开始从页面建立一个流程,建立独立的公司级别租户,完成对应节点的任务,流程全程自动化和可视化,体验较好。项目的开发可以参考该文档https://doc.iocoder.cn/,二开github地址

系统需求

基于上述开源项目,快速开发一个常见的工作中的具体流程,程序员申请加班工资流程,该流程需要经过项目经理pm审批(审批加班合理性)、hr审批(审批加班加班是否符合公司规定)以及财务审批(审批加班工资),然后美滋滋的加班工资久到手了,这里为了简化流程,设计了如下流程图,基于flowable的bpmn2.0的规则设计。这里简化加班申报,需要满足审批完全部流程才能申请到加班工资,如果不满足加班的项目或者加班小于1天,则默认不会走完全流程,拿不到加班工资,这里设计的是走排他网关,只有满足条件表达式中的项目或者加班时长才能走完整个审批流程,否则,整个申请走向结束流程,走不到财务审批流程。下面看看如何实现这个加班工资审批系统。

在这里插入图片描述

定于流程业务表和流程页面

加班申请表字段定义

DROP TABLE IF EXISTS `bpm_oa_wop`;
CREATE TABLE `bpm_oa_wop` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '加班工资申请表单主键',`user_id` bigint NOT NULL COMMENT '申请人的用户编号',`type` tinyint NOT NULL COMMENT '加班项目',`reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加班原因',`start_time` datetime NOT NULL COMMENT '加班开始时间',`end_time` datetime NOT NULL COMMENT '加班结束时间',`day` tinyint NOT NULL COMMENT '加班天数',`result` tinyint NOT NULL COMMENT '申请结果',`process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程实例的编号',`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='申请加班工资业务表单';

有了业务表后,利用项目中代码生成器,快速生成页面和controller、service、sql以及测试用例代码,可以帮助我们节省50%左右的代码开发时间。生成代码和页面见如图所示。主要搞定对该表的简单增删查改,以及页面的表格化展示和搜索。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tC65btbP-1653325847175)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220518224055366.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YnO6U5b2-1653325847176)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220518224202226.png)]

初始化流程角色和账号

很明显需求中需要不同的部门、角色、岗位等,该开源项目支持租户,可以通过初始化一个公司类型的租户,定义一个租户套餐(套餐页面可以自定义),制定租户的角色可以有多少菜单的权限。在租户基础上新增四种职位,研发人员、Pm、hr和财务,归属于研发、hr和财务部门。角色权限上也做不同的限制。这些开源项目也帮你做好了,开箱即用,下面我们快速创建公司租户、部门、角色以及岗位。这些创建的数据只有该租户可以看到和修改。对租户方案想要更了解的可以移步这里看看 该开源项目租户方案如何设计,短短几分钟就能创建部门下不同岗位的用户和角色,不得不说这个角色权限和数据权限的设计很不错,对应模型也简单易懂。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Po94xXb8-1653325847177)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220518234034606.png)]

前面将了流程图的设计,有了上述角色就可以将流程的关键审批人规则制定,下面从申请到不同的审批正好对应上述四个用户,因为框架现在只支持单人审批,所以只设置了一个用户就可以演练,后续会针对这个进行改进,完成多人审批。

开始发起加班申请

流程的发起可以发起和查看,这就需要三个页面和两个接口,页面分别是填写表单页面用于发起加班流程,该加班流程查看页面和用户加班列表页面。接口是创建流程接口、查看流程接口以及取消流程接口。加班流程页面和查看页面还用来设计流程中表单路由模式,只需将两个页面的地址加入到vue中即可路由跳转,方便流程的快速申请和查看,这点也是框架定义的,非常好的功能设计。

我们利用自动生成的列表代码,可以快速修改下页面,加上申请的按钮操作以及跳转申请页面以及取消申请操作。其中vue.directive是设计的内置的指令(如v-model和v-show)之外的自定义指令。设计了v-hasPermi指令来判断用户对应角色是否可以调用接口权限。

<!-- 新增操作操作工具栏 --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"v-hasPermi="['bpm:oa-wop:create']">发起申请</el-button></el-col><right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar></el-row>/** 新增按钮操作 */handleAdd() {this.$router.push({ path: "/bpm/oa/wop/create"});}<!-- 表数据操作工具栏 --><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template slot-scope="scope"><el-button size="mini" type="text" icon="el-icon-delete" @click="handleCancel(scope.row)"v-hasPermi="['bpm:oa-wop:delete']" v-if="scope.row.result === 1">取消申请</el-button><el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)"v-hasPermi="['bpm:oa-wop:query']">详情</el-button><el-button size="mini" type="text" icon="el-icon-edit" @click="handleProcessDetail(scope.row)">审批进度</el-button></template></el-table-column>

表单展示申请加班工资的记录,左上角可以发起申请,进入表达路由,主要是表单的填写和接口的调用,操作可以取消申请和查看详情及进度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-738xCSHx-1653325847178)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220523223829790.png)]

审批进度详情页面服用的框架的页面,主要包含三部分,第一部分申请详情的路由,第二部分审批记录,第三部分进度图。第二是获取的flowable的任务审批记录,框架包了一层表结构得到的结果,流程详情这个也是flowable原始表+框架自己的包装的表合起来返回的结果。可以在不同流程中快速复用这个页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFd8TNKP-1653325847179)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220523225313653.png)]

后端代码主要是申请流程接口,其他主要都是借助的flowable开放的接口来实现功能的拓展。

@Override
@Transactional(rollbackFor = Exception.class)
public Long createOaWop(OaWopCreateReqVO createReqVO) {Long userID = getLoginUserId();// 插入业务表long day = DateUtil.betweenDay(createReqVO.getStartTime(), createReqVO.getEndTime(), false);OaWopDO oaWop = OaWopConvert.INSTANCE.convert(createReqVO).setUserId(userID).setDay((int) day).setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());oaWopMapper.insert(oaWop);// 发起 BPM 流程 生成流程实例Map<String, Object> processInstanceVariables = new HashMap<>();// 放入条件参数,流程图条件表达式会用到改变量processInstanceVariables.put("workTime ", day);processInstanceVariables.put("project", createReqVO.getType());// 调用flowable api封装接口String processInstanceId = processInstanceApi.createProcessInstance(userID,new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setVariables(processInstanceVariables).setBusinessKey(String.valueOf(oaWop.getId())));// 将工作流的编号,更新到 OA 请假单中oaWopMapper.updateById(new OaWopDO().setId(oaWop.getId()).setProcessInstanceId(processInstanceId));return oaWop.getId();
}

下面的代码流程详细描述了每个类的工作流程,二开框架结合flowable框架用来大量的监听模式来完成业务的耦合。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrPHDAAk-1653325847180)(C:\Users\煎饼果子\AppData\Roaming\Typora\typora-user-images\image-20220524010107130.png)]

上述式创建加班流程的开发,后面会继续完成流程的流转开发,以及flowable相应的开发流程原理。

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

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

相关文章

查询各部门总工资最高的部门中工资最高的员工姓名,工资,所在区域,部门

sql 表 1. staff表&#xff08;.sql文件&#xff09; SET FOREIGN_KEY_CHECKS0; – Table structure for staff DROP TABLE IF EXISTS staff; CREATE TABLE staff ( staffId int(11) NOT NULL, deptId int(11) DEFAULT NULL, staffName varchar(255) COLLATE utf8mb4_unicode…

Problem Q: 计算公司员工的工资

Problem Description 某公司有老板Boss、雇员Employee、小时工HourlyWorker和营销人员CommWorker&#xff0c;他们的薪金计算方法如下&#xff1a; 老板实行年薪制&#xff0c;如一年15万&#xff1b;雇员按月计酬&#xff0c;方法是基本工资奖金&#xff1b;小时工按工作时间计…

OpenAi最简洁的Java流式返回接入方式,没有第三方依赖,只需要使用Spring Boot即可!轻松构建你的带有聊天记忆、画图功能的chatgpt!

OpenAi最简洁的Java流式返回接入方式&#xff0c;没有第三方依赖&#xff0c;只需要使用Spring Boot即可&#xff01;轻松构建你的带有聊天记忆、画图功能的chatgpt&#xff01; GitHub - NiuXiangQian/chatgpt-stream: OpenAi最简洁的Java流式返回接入方式&#xff0c;没有第…

ChatGPT使用的SSE技术是什么?

在现代web应用程序中&#xff0c;实时通信变得越来越重要。HTTP协议的传统请求/响应模式总是需要定期进行轮询以获得最新的数据&#xff0c;这种方式效率低下并且浪费资源。因此&#xff0c;出现了一些新的通信技术&#xff0c;如WebSocket和SSE。但是&#xff0c;GPT为什么选择…

用Python对自己的文章做文本分析

新型冠状病毒疫情加剧&#xff0c;让人闲的不行。重新打开我的简书之后&#xff0c;发现我在简书上也写了72篇文章了…… 想“温故而知新”一下&#xff0c;但是在家总是慵懒&#xff0c;就算是自己写的文章也不想看。但是又十分好奇自己在过去的一年多的时间里到底写了啥&…

考研复试高频问题集锦!

今天给大家带来的是考研复试中的高频问题&#xff0c;感兴趣的同学可以想想如果是自己被问到这些问题会怎么回答&#xff0c;以及可以思考老师问这些问题的原因。基本回答公式&#xff1a; 公式&#xff1a;感谢提问我认为以上是我对此问题的回答 技巧&#xff1a;扬长避短 另外…

计算机考研初试/复试——软件工程

一、软件 软件定义 计算机程序、文档、运行程序所必须的方法、数据、规则。方法和规则在文档中说明&#xff0c;在程序中实现。&#xff08;文档程序数据&#xff09; 软件分类 基于软件功能的划分 系统软件&#xff1a;与计算机硬件紧密配合使计算机各个部件与相关软件和…

电子信息工程保研复试|考研复试——通信原理复试问题集锦

电子信息工程保研/考研复试——通信原理问题集锦 保研/考研复试——通信原理问题集锦&#xff08;复习重点以及面试真题&#xff01;&#xff01;良心整理&#xff09; 面向考研/保研同学&#xff0c;时间紧任务重&#xff0c;归纳了去年保研面试中复习以及被问到的通信原理相关…

北邮考研复试机试准备过程(已上岸)

纯自用请勿转载&#xff0c;用来给自己最后复习和捋思路用的&#xff0c;主要参考牛客网王道机试指南&#xff0c;C、C混用。考研人太久不写代码了…什么都不记得了&#xff0c;从头开始过一遍吧。 黑色代码段是要记住的重点函数/方法。每天下午做几个小时&#xff0c;一共不到…

【计算机考研】复试常见问题

操作系统 操作系统的特点&#xff1f; – 共享&#xff1a;资源可被多个并发执行的进程使用 – 并发&#xff1a;可以在同一时间间隔处理多个进程&#xff0c;需要硬件支持 – 虚拟&#xff1a;将物理实体映射成为多个虚拟设备 – 异步&#xff1a;进程执行走走停停&#xff0c…

会话存档-如何高性能存储海量聊天记录

场景 每天大约500w条数据&#xff0c;存档消息&#xff0c;并对消息进行统计分析。 大概计算一下&#xff1a; 每天的工作时间是8小时&#xff0c;大约是8小时处理400w条数据就足够了&#xff0c;为避免某时刻的峰值超负荷&#xff0c;还按照8小时处理500w条数据的标准来搭建…

开通会话存档查看聊天记录需要准备什么?

会话存档是腾讯企业微信推出的一项付费增值功能&#xff0c;开通会话存档之后企业可以通过会话存档API接口获取员工的聊天记录&#xff0c;可以获取到员工与员工之间的聊天记录、员工与客户的聊天记录&#xff0c;员工所在群的聊天记录&#xff0c;企业可以通过企小码会话存档存…

一个网站查遍所有英文文章 “会议地点及出版商”(亲测搜了80篇全部有效)

说明&#xff1a;本人用下面方法进行会议文章——会议地点及出版商 ——的搜索&#xff0c;连搜80篇文章没有任何问题&#xff01; 前提使用学校网络&#xff0c;可能有的学校没有买会议的权限 第一步&#xff1a;点击所有版本 打开谷歌学术镜像网站&#xff0c;不用翻墙的那…

全国跨境电商联合运营服务平台,定义跨境新力量!

近年来&#xff0c;我国跨境电商行业不断发展&#xff0c;预计2021年跨境电商进出口交易规模有望达到14.3万亿元&#xff0c;疫情催化的市场需求、不断扩大的市场规模、频繁释放利好的政府政策&#xff0c;让跨境的风愈吹愈旺&#xff0c;面对波谲云诡的市场环境&#xff0c;如…

跨境电商卖家,如何运营Facebook?

随着跨境电商的兴起&#xff0c;越来越多的卖家开始运营Facebook&#xff0c;以吸引更多的潜在客户和提高品牌知名度。那么&#xff0c;作为跨境电商卖家&#xff0c;我们可以在Facebook上做些什么呢&#xff1f; 首先&#xff0c;我们可以通过Facebook建立一个专业的品牌页面&…

新手运营适合哪个跨境电商平台

很多企业的网站被收录却没有排名&#xff0c;关键词优化不上去&#xff0c;网站也没有什么流量&#xff0c;不断更新文章&#xff0c;即使是原创&#xff0c;也排不上去&#xff0c;这究竟是由于哪些原因造成的呢&#xff1f;米贸搜作为专业的SEO平台&#xff0c;整理了以下几种…

跨境电商运营做什么的?跨境电商运营怎么样?

图片来源&#xff1a;123rf.com.cn 随着国内电商的逐渐饱和&#xff0c;越来越多的人涌入了跨境电商领域&#xff0c;那么作为一个跨境电商运营工作&#xff0c;每天是做什么工作呢&#xff1f;今天就主要为大家分析跨境电商运营做什么的&#xff1f;跨境电商运营怎么样&#x…

使用Foxmail登录阿里企业邮箱(钉钉邮箱)

pop服务器和SMTP服务器地址分别是&#xff1a;pop.qiye.aliyun.com smtp.qiye.aliyun.com 可以到邮箱里查&#xff1a; 开源项目&#xff1a; https://github.com/xutongbao/learn-chatgpt

第一批因 AI 失业的人已经出现!有公司直接裁掉一半人

点关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 当大家还在讨论ChatGPT未来将如何发展的时候&#xff0c;第一批因AI失业的人已经出现了。 据媒体报道&#xff0c;已经有一众游戏公司迅速拥抱技术变革&#xff0c;将AI绘画引进工作流程&#xff0c;用以摆脱…

ChatGPT:AI不取代程序员,只取代的不掌握AI的程序员

作者&#xff1a;成都兰亭集势信息技术有限公司技术总监张雄 可能大家会有如下的问题&#xff0c;我就使用chatGPT这个AI工具的API来问一下。 问&#xff1a;chatGPT会替换掉程序员吗&#xff1f;如果能&#xff0c;预计好久&#xff1f; 答&#xff1a;作为一名 AI 语言模型&a…