SpringBoot整合Activiti7——实战之请假流程(普通)

文章目录

    • 代码实现
      • xml文件
      • 部署流程
      • 启动流程
      • 查询任务
      • 填写请假单
      • 部门审批


请假流程:开始-填写请假单-部门审批-结束

代码实现

在这里插入图片描述

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="myLeave" name="1" isExecutable="true"><documentation>模拟请假流程</documentation><startEvent id="sid-1e77c6ca-a221-4f1f-8612-89cbd47d73fe" activiti:initiator="applyUserId"/><userTask id="sid-be8148c6-fcc1-4d56-b227-e0064a4ceeac" name="填写申请单" activiti:assignee="${applyUserId}"/><userTask id="sid-fcdba2f4-3fe4-4bea-afda-a646b5025bff" name="部门审批" activiti:assignee="department"/><endEvent id="sid-6d5d833b-e788-4a16-8cd5-e9664057a345"/><sequenceFlow id="sid-54888794-4af7-4c37-a8a0-605f7f048309" sourceRef="sid-1e77c6ca-a221-4f1f-8612-89cbd47d73fe" targetRef="sid-be8148c6-fcc1-4d56-b227-e0064a4ceeac"/><sequenceFlow id="sid-f8331f9d-8d8b-4761-b2bf-dd0d9adadef8" sourceRef="sid-be8148c6-fcc1-4d56-b227-e0064a4ceeac" targetRef="sid-fcdba2f4-3fe4-4bea-afda-a646b5025bff"/><sequenceFlow id="sid-3f39c651-acaa-4e31-b8a7-4dde41983e51" sourceRef="sid-fcdba2f4-3fe4-4bea-afda-a646b5025bff" targetRef="sid-6d5d833b-e788-4a16-8cd5-e9664057a345"/></process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane bpmnElement="myLeave" id="BPMNPlane_1"><bpmndi:BPMNShape id="shape-00ed4ba3-c35c-404b-9575-e158567503e1" bpmnElement="sid-1e77c6ca-a221-4f1f-8612-89cbd47d73fe"><omgdc:Bounds x="-52.55767" y="-23.649477" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-b810a899-6ace-485a-ba7a-5015b4bc2c96" bpmnElement="sid-be8148c6-fcc1-4d56-b227-e0064a4ceeac"><omgdc:Bounds x="11.5" y="-48.649475" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-d0bf7bf7-8173-46d5-874e-d2ac54b13ab4" bpmnElement="sid-fcdba2f4-3fe4-4bea-afda-a646b5025bff"><omgdc:Bounds x="139.52191" y="-48.649475" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-748a0993-8b0e-4337-83fc-786abe655dfa" bpmnElement="sid-6d5d833b-e788-4a16-8cd5-e9664057a345"><omgdc:Bounds x="276.476" y="-23.649475" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-7fd1a708-50c3-488d-8487-9b59bab9ba60" bpmnElement="sid-54888794-4af7-4c37-a8a0-605f7f048309"><omgdi:waypoint x="-22.55767" y="-8.649477"/><omgdi:waypoint x="11.5" y="-8.649475"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-f293cb0a-2de4-44e0-bfea-14004e779656" bpmnElement="sid-f8331f9d-8d8b-4761-b2bf-dd0d9adadef8"><omgdi:waypoint x="111.5" y="-8.649475"/><omgdi:waypoint x="139.52191" y="-8.649475"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-a97ffe9c-369d-4a30-87e1-ad7bf1655f76" bpmnElement="sid-3f39c651-acaa-4e31-b8a7-4dde41983e51"><omgdi:waypoint x="239.52191" y="-8.649475"/><omgdi:waypoint x="276.476" y="-8.649475"/></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

部署流程

@Test
public void testDeployProcess() throws IOException {ClassPathResource classPathResource = new ClassPathResource("/processes/leave.bpmn20.xml");// 部署流程 act_re_procdefDeployment deploy = repositoryService.createDeployment().addInputStream(classPathResource.getPath(), classPathResource.getInputStream()).deploy();System.out.println("deploy = " + deploy);
}

启动流程

@Test
public void testStartProcess() {//启动流程时传递的参数列表 这里根据实际情况 也可以选择不传Map<String, Object> variables = new HashMap<>();variables.put("applyUserId", "12345678"); // 代理人activiti:assignee="${applyUserId}// 获取流程定义的KeyString processDefinitionKey = "myLeave";// 定义businessKeyString businessKey = processDefinitionKey + ":" + "10001"; // 假设模拟请假业务id为1001// 设置启动流程的人(可选)// Authentication.setAuthenticatedUserId("admin");// 启动流程 act_hi_procinst act_ru_variable act_ru_taskProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);System.out.println("processInstance = " + processInstance);System.out.println("流程实例ID:" + processInstance.getId());
}

查询任务

将启动流程后的流程实例ID更换到下面

@Test
public void queryTaskList() {// 查询任务 act_ru_taskTaskQuery taskQuery = taskService.createTaskQuery().processInstanceId("08badca0-35c4-11ee-b423-18c04dcd4aee") // 流程实例ID.taskAssignee("12345678") // 代理人.orderByTaskCreateTime().asc();List<Task> taskList = taskQuery.list();System.out.println("taskList = " + taskList);
}

填写请假单

将启动流程后的流程实例ID更换到下面

@Test
public void completeLeaveFormTask() {// 根据id查询任务 act_ru_taskTask task = taskService.createTaskQuery().taskId("08bde9e7-35c4-11ee-b423-18c04dcd4aee").singleResult();Map<String, Object> hashMap = new HashMap<>();hashMap.put("applyUserId", "12345678");hashMap.put("leaveDay", 10);hashMap.put("leaveReason", "理由是不限");hashMap.put("leaveTime", new Date());// 完成任务,填写任务则更新为审核任务,任务ID改变taskService.complete(task.getId(), hashMap);
}

部门审批

将启动流程后的流程实例ID更换到下面

@Test
public void departAudit() {Task task = taskService.createTaskQuery().processInstanceId("08badca0-35c4-11ee-b423-18c04dcd4aee").singleResult();// 添加备注Map<String, Object> hashMap = new HashMap<>();hashMap.put("remark", "注意休息");// 部门审批完成任务,任务列表为空taskService.complete(task.getId(), hashMap);
}

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

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

相关文章

服务器段的连接端口和监听端口编程实现

new ServerSocket(int)是开启监听端口&#xff0c;并不是连接端口。真正的连接端口是随机开辟的空闲端口&#xff0c;当连接创建完成后&#xff0c;监听关口可以继续等待下一次连接请求&#xff0c;处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态&#xff0c…

编程高级陷阱-破坏原有生态

今天聊点有意思的&#xff0c;昨天写了一个链表翻转&#xff0c;说一说里面大家会遇到的坑&#xff0c;具体可以看 教你三指针拿捏链表翻转-CSDN博客 有这样一个场景&#xff0c;给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回…

汇总全网免费API,持续更新(新闻api、每日一言api、音乐。。。)

Public&FreeAPI 网址&#xff1a;apis.whyta.cn &#xff08;推荐&#xff09; UomgAPI 网址&#xff1a;https://api.uomg.com 教书先生 网址&#xff1a;https://api.oioweb.cn/ 山海API https://api.shserve.cn/ 云析API铺 https://api.a20safe.com/ 韩小韩…

提交数据加快百度搜索引擎收录

百度站长工具做了更新&#xff0c;百度收录的地址分享如下&#xff0c;新站点提交后&#xff0c;可以加快百度收录。 普通收录_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台普通收录工具可实时向百度推送数据&#xff0c;创建并提交site…

【Git】Github 上commit后,绿格子contribution却不显示?不知道怎么弥补?解决方法在这里

github 上commit后&#xff0c;绿格子&#xff08;contribution&#xff09;却不显示 问题描述 今天一直在github上面commit代码&#xff0c;但是github中并没有显示自己的contribution&#xff08;没有绿色的格子&#xff09;&#xff0c;全是空白&#xff0c;网上一查是因为…

tcp/ip协议2实现的插图,数据结构8 (30 - 32章)

(201) 201 三十0 中断优先级补充 (202) 202 三十1 TCP的用户需求 函tcp_usrreq一 (203) 203 三十2 TCP的用户需求 函tcp_usrreq二 (204) 204 三十3 TCP的用户需求 函tcp_usrreq三 (205) 205 三十4 TCP的用户需求 函tcp_usrreq四 (206) 206 三十5 TCP的用户需求 函tcp_usrreq五 …

Python爬虫:原理与实战

引言 在当今的信息时代&#xff0c;互联网上的数据如同浩瀚的海洋&#xff0c;充满了无尽的宝藏。Python爬虫作为一种高效的数据抓取工具&#xff0c;能够帮助我们轻松地获取这些数据&#xff0c;并进行后续的分析和处理。本文将深入探讨Python爬虫的原理&#xff0c;并结合实战…

AHU 汇编 实验二

一、实验名称&#xff1a;实验二 不同寻址方式的灵活运用 二、实验内容&#xff1a;定义数组a[6]&#xff0c;用多种寻址方式访问对应元素&#xff0c;实现&#xff08;a[0]a[1]&#xff09;*(a[2]-a[3])/a[4],将结果保存在内存a[5]中&#xff0c;用debug查询结果。 实验过程&a…

19 OpenCV 霍夫曼变换检测圆

文章目录 cv::HoughCircles算子参数示例 cv::HoughCircles 因为霍夫圆检测对噪声比较敏感&#xff0c;所以首先要对图像做中值滤波。 基于效率考虑&#xff0c;Opencv中实现的霍夫变换圆检测是基于图像梯度的实现&#xff0c;分为两步&#xff1a; 检测边缘&#xff0c;发现可能…

空气源热泵、地源热泵和水源热泵三种热泵的优缺点和选型比较

空气源热泵 空气源热泵是由电动机驱动的,利用空气中的热量作为低温热源,经过空调冷凝器或蒸发器进行热交换,然后通过循环系统,提取或释放热能,利用机组循环系统将能量转移到建筑物内用户需求。 1、适用范围广:适用温度范围在-7至40℃,并且一年四季全天候使用,不受阴、…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PluginComponent)

提供外部应用组件嵌入式显示功能&#xff0c;即外部应用提供的UI可在本应用内显示。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。本组件为系统接口。 子组件 无 接口 PluginComponent(value:…

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras_学习率选择-CSDN博客文章浏览阅读9.2k次&#xff0c;点赞6次&#xff0c;收藏55次。keras 版本的LRFinder&#xff0c;借鉴 fast.ai Deep Learning course。前言学习率lr在神经网络中是最难调的全局参数&#x…

Soft Robotics 变结构手掌和变刚度手指的仿人软体手的人机交互操作-武科大ESIR课题组师兄成果

一、引言 在当今的机器人技术领域&#xff0c;人类对机器人的需求日益增长&#xff0c;涉及到工业生产、医疗护理、服务业等各个领域。然而&#xff0c;由于任务的多样性和复杂性&#xff0c;单独依靠自主机器人操作往往难以满足实际需求。为了解决这一问题&#xff0c;人机协作…

详细分析Java中Stream流和for循环的差异之处

目录 前言1. 基本知识2. Demo 前言 事情起因是遍历大数据的时候&#xff0c;数据卡顿很严重 对于Java的基本知识推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09; 1. 基本知识 在Java中&#xff0c;Stream API提供…

perl 用 XML::LibXML DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#xff0c;比如数学公式、节点属性面板等。 在云计算中&#xff0c;解析XML元素和属性是一种常见的操作…

基础:TCP是什么?

1. TCP 是什么&#xff1f; TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09; 是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793 [1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机…

第十四届校模拟赛第一期(一)

“须知少时凌云志&#xff0c;自许人间第一流” 鄙人11月八号有幸参加学校校选拔赛&#xff0c;题型为5道填空题&#xff0c;5道编程题&#xff0c;总时间为4小时。奈何能力有限&#xff0c;只完成了5道填空和3道编程大题&#xff0c;现进行自省自纠&#xff0c;分享学习&#…

基于Python django的人脸识别门禁系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&…

服务器数据恢复—服务器硬盘灯显示红色的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器中有一组由多块硬盘组建的raid阵列&#xff0c;在运行过程中服务器突然崩溃&#xff0c;管理员检查服务器发现该服务器raid阵列中有两块硬盘的指示灯显示红色。于是&#xff0c;管理员重启服务器&#xff0c;服务器重启后&a…

CIDR网络地址、广播地址、网段区间计算说明与计算工具

文章目录 开始问题参考答案 答案解析计算工具测试 开始 好久没有看计算网络&#xff0c;感觉已经完全返给老师了。 最近&#xff0c;有同事遇到个问题&#xff0c;网络一直不对&#xff0c;又开始重新看一下。 相信很多朋友长时间不看也忘了&#xff0c;所以&#xff0c;这里…