当前位置: 首页 > news >正文

java请假审批怎么做

请假审批怎么做
结合你之前提到的 Spring Boot + MyBatis-Plus + Flowable 的技术栈,实现一个标准的“请假审批”功能,其实可以拆解为以下 5 个清晰的步骤。我们一步步来:

1. 设计业务流程图 (BPMN)

src/main/resources/processes/目录下新建一个 XML 文件(比如leave-process.bpmn20.xml)。这就是你的请假审批“地图”。

一个最基础的请假流程包含:员工提交 -> 领导审批 -> 结束。对应的 XML 代码如下:

<?xml version="1.0" encoding="UTF-8"?><definitionsxmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:flowable="http://flowable.org/bpmn"targetNamespace="http://flowable.org/bpmn"><processid="leaveProcess"name="请假审批流程"isExecutable="true"><!-- 1. 开始事件 --><startEventid="startEvent"/><!-- 2. 员工提交请假申请 (Assignee 是动态传入的申请人) --><userTaskid="submitLeave"name="提交请假申请"flowable:assignee="${applicant}"/><!-- 3. 领导审批 (Assignee 是动态传入的审批人) --><userTaskid="managerApprove"name="领导审批"flowable:assignee="${manager}"/><!-- 4. 结束事件 --><endEventid="endEvent"/><!-- 连线:把上面的节点按顺序串起来 --><sequenceFlowsourceRef="startEvent"targetRef="submitLeave"/><sequenceFlowsourceRef="submitLeave"targetRef="managerApprove"/><sequenceFlowsourceRef="managerApprove"targetRef="endEvent"/></process></definitions>

(注:如果你想要实现“请假天数 > 3 天需要总监审批”的复杂逻辑,可以在中间加一个“排他网关 ExclusiveGateway”来做条件判断。)

2. 准备业务实体 (MyBatis-Plus)

请假审批不能光走流程,你还需要一张自己的业务表来存具体的请假信息。用 MyBatis-Plus 的常规操作即可:

@Data@TableName("t_leave")publicclassLeave{@TableId(type=IdType.AUTO)privateLongid;privateLonguserId;// 申请人IDprivateStringreason;// 请假理由privateIntegerdays;// 请假天数privateStringstatus;// 审批状态:PENDING(审批中), APPROVED(通过), REJECTED(拒绝)privateStringprocessInstanceId;// 关联 Flowable 的流程实例ID (核心关联字段!)}

3. 核心业务代码实现 (Service层)

在 Service 层,你需要把“存业务数据”和“走审批流程”结合起来。这里需要用到 Flowable 的两个核心服务:RuntimeService(管流程运转)和TaskService(管具体任务)。

@Service@RequiredArgsConstructorpublicclassLeaveService{privatefinalLeaveMapperleaveMapper;privatefinalRuntimeServiceruntimeService;// Flowable核心服务privatefinalTaskServicetaskService;// Flowable任务服务// 1. 员工提交请假申请@TransactionalpublicvoidsubmitLeave(Leaveleave){// 第一步:先把请假单存到自己的业务表里leave.setStatus("PENDING");leaveMapper.insert(leave);// 第二步:设置流程变量(把申请人、审批人等信息传给 Flowable)Map<String,Object>variables=newHashMap<>();variables.put("applicant","张三");// 实际开发中从登录上下文获取variables.put("manager","李四");// 实际开发中根据组织架构获取// 第三步:启动 Flowable 流程实例,并把业务表的ID传进去作为业务主键ProcessInstanceinstance=runtimeService.startProcessInstanceByKey("leaveProcess",leave.getId().toString(),variables);// 第四步:把生成的流程实例ID存回业务表,方便以后关联查询leave.setProcessInstanceId(instance.getId());leaveMapper.updateById(leave);}// 2. 领导审批(同意或拒绝)@TransactionalpublicvoidapproveTask(StringtaskId,booleanapproved){// 设置审批结果变量,流程会根据这个变量决定下一步走向(如果加了网关的话)Map<String,Object>variables=newHashMap<>();variables.put("approved",approved);// 核心:完成当前这个审批任务,流程会自动流向下一个节点taskService.complete(taskId,variables);// 根据审批结果,更新自己业务表里的状态// (实际开发中需要通过 taskId 查出流程实例ID,再找到对应的业务单据进行更新)// ... update leave set status = 'APPROVED' ...}}

4. 查询待办任务

领导登录系统后,怎么知道自己有哪些请假单要批?直接问 Flowable 的TaskService要:

// 查询当前用户(比如李四)的待办任务publicList<Task>getTodoTasks(Stringassignee){returntaskService.createTaskQuery().taskAssignee(assignee)// 指定办理人.orderByTaskCreateTime().desc()// 按时间倒序.list();}

5. 进阶:使用 Flowable UI 拖拽画图

如果你觉得手写上面的 XML 太痛苦,Flowable 官方其实自带了一套非常好用的 UI 设计器。

  • 在项目中引入flowable-spring-boot-starter-ui相关的依赖。
  • 启动项目后,访问http://localhost:8080/flowable-ui(默认账号密码都是admin)。
  • 你可以像画思维导图一样,直接拖拽“用户任务”、“网关”等组件来设计请假流程,画完后点击部署,流程就会自动存到数据库里。

总结一下核心思路:
用 MyBatis-Plus 维护你自己的t_leave业务表,用 Flowable 维护审批的流转状态。两者通过processInstanceId(流程实例ID)进行关联。先存业务数据,再启动流程;审批时先完成任务,再更新业务数据。按照这个节奏,请假审批功能就能顺利跑通了!

http://www.jsqmd.com/news/733424/

相关文章:

  • ComfyUI ControlNet辅助预处理器完整指南:轻松掌握AI图像控制技术
  • 终极指南:如何免费解锁Cursor Pro全部功能 - cursor-free-vip完整解决方案
  • 拆解蓝桥杯JavaB组真题:除了算法,这些‘工程思维’和‘调试技巧’你掌握了吗?
  • 【3】明明建了索引,为什么 MySQL 还是慢?一文带你理清 InnoDB 存储引擎
  • JetBrains Gateway远程连接报错‘host-status’?别急着改VM参数,先试试这个‘重启大法’
  • 通过taotoken快速为ubuntu上的多个python微服务接入ai能力
  • Ubuntu 18.04 + ROS Melodic 下,手把手搞定YOLOv5与CUDA 10.2的完美配对(避坑显卡驱动)
  • Midscene.js终极指南:用AI视觉模型实现跨平台UI自动化,告别传统脚本编程
  • 父类Animal的getter和setter方法怎么写?
  • 通过 curl 命令直接测试 Taotoken 提供的多模型聊天补全接口
  • 告别‘炼丹’黑盒:用HuggingFace Transformers库逐行调试T5模型注意力机制
  • 《QGIS快速入门与应用基础》312:进阶:结合行政区统计POI数量
  • 终极指南:如何无限重置JetBrains IDE试用期,让30天免费体验永不过期
  • 告别Postman和JMeter单打独斗?手把手教你用MeterSphere搭建一站式测试平台(含Jenkins集成)
  • 手把手教你实现el-table的‘智能’Tooltip:仅在文本溢出时才显示(附完整代码与防抖优化)
  • 江浙沪皖铝蜂窝板厂家实测:工地视角看品质与服务 - 奔跑123
  • Unity新手避坑指南:别再乱用Layer了!从碰撞检测到灯光剔除,5个实战场景帮你理清思路
  • 专栏C-产品战略与竞争-04-时机判断
  • 农民工工资保障程序,薪资合约上链,按期自动发放,杜绝拖欠,卷款跑路。
  • 10款五四青年节标题设计,一键直出直接抄!
  • 3分钟快速上手!GTNH中文汉化完整安装指南:告别语言障碍畅玩顶级整合包
  • Prezident Ijod 比赛题解
  • 如何在Windows上免费实现本地实时语音转文字:TMSpeech终极指南
  • 3大突破:FastMRI如何用AI技术将MRI扫描速度提升4倍
  • 高低温一体机|上海东玺制冷仪器 - 品牌推荐大师
  • 如何用PPTAgent快速生成专业演示文稿:面向新手的完整指南
  • 如何高效配置开源媒体播放器:5个专业技巧提升观影体验
  • 前端富文本处理:解码、清洗与适配
  • AT32F4系列CAN总线配置避坑指南:从过滤器组到时间戳,手把手调通你的第一个CAN节点
  • 不锈钢反应釜|上海东玺制冷仪器 - 品牌推荐大师