JeecgFlow工作流-审批(通过,驳回,终止)

server/2024/9/22 16:25:05/

引言

工作流为保障审批流程的正常流转,可以设计审批的操作有。

同意,驳回,终止,加签,取消,转办等各种操作.

本文以activiti工作流引擎为核心, 讲述各个操作的概念和代码积累。

**演示审批操作站点 **

具体概念和代码

通过
通过动作由审批人操作,是否需要输入通过描述(便于追溯)、是否必填需要根据实际业务情况决定。要点总结如下:
简单申请不需要填写通过描述,或者选填
通过描述需要填的话,可用于反馈或激励发起人的情况、追溯审批流程
  • 代码

//创建评论
CommentHistoryRes.CommentDTO commentDTO = new CommentHistoryRes.CommentDTO();
commentDTO.setComment(userTaskApproveReq.getComment());
commentDTO.setImageUrl(userTaskApproveReq.getImageUrl());
taskService.addComment(userTaskApproveReq.getTaskId(), userTaskApproveReq.getProcessInstanceId(), JSON.toJSONString(commentDTO));//完成任务
Map<String, Object> map = new HashMap<>(12);
map.put("comment", userTaskApproveReq.getComment());
map.put("imageUrl", userTaskApproveReq.getImageUrl());
taskService.complete(userTaskApproveReq.getTaskId(), map);
驳回
驳回修改动作由审批人操作,和通过不同,为了让发起人知道如何修改,
驳回原因一般需要设定成必填项,否则发起人或上一个审批环节的人不知道为何被驳回、以及要如何修改。驳回修改可根据业务需要,在以下逻辑中选择:
-   驳回到发起人
-   驳回上一环节
-   驳回到选定的之前的某个审批环节
  • 代码
Task t = taskService.createTaskQuery().taskId(userTaskRejectReq.getTaskId()).singleResult();
String processDefinitionId = runtimeService.createProcessInstanceQuery().processInstanceId(t.getProcessInstanceId()).singleResult().getProcessDefinitionId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
// 寻找流程实例当前任务的activeId
Execution execution = runtimeService.createExecutionQuery().executionId(t.getExecutionId()).singleResult();
String activityId = execution.getActivityId();
FlowNode currentNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
FlowNode targetNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(userTaskRejectReq.getTargetActivityId());
// 创建连接线
List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
SequenceFlow newSequenceFlow = new SequenceFlow();
newSequenceFlow.setId("newFlow");
newSequenceFlow.setSourceFlowElement(currentNode);
newSequenceFlow.setTargetFlowElement(targetNode);
newSequenceFlowList.add(newSequenceFlow);
// 备份原有方向
List<SequenceFlow> dataFlows = currentNode.getOutgoingFlows();
List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
oriSequenceFlows.addAll(dataFlows);
// 清空原有方向
currentNode.getOutgoingFlows().clear();
// 设置新方向
currentNode.setOutgoingFlows(newSequenceFlowList);
//创建评论
CommentHistoryRes.CommentDTO commentDTO = new CommentHistoryRes.CommentDTO();
commentDTO.setComment(userTaskRejectReq.getComment());
commentDTO.setImageUrl(userTaskRejectReq.getImageUrl());
taskService.addComment(userTaskRejectReq.getTaskId(), userTaskRejectReq.getProcessInstanceId(), JSON.toJSONString(commentDTO));
taskService.complete(userTaskRejectReq.getTaskId());
// 恢复原有方向
currentNode.setOutgoingFlows(oriSequenceFlows);

activiti动态流程只流程驳回

终止(撤销)

终止动作,一般是审批人操作。 即可以在自己所在的节点直接将流程终结。

  • 代码
Task t = taskService.createTaskQuery().taskId(userTaskForceEndReq.getTaskId()).singleResult();
String processDefinitionId = runtimeService.createProcessInstanceQuery().processInstanceId(t.getProcessInstanceId()).singleResult().getProcessDefinitionId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
// 寻找流程实例当前任务的activeId
Execution execution = runtimeService.createExecutionQuery().executionId(t.getExecutionId()).singleResult();
String activityId = execution.getActivityId();
FlowNode currentNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
// 创建结束节点和连接线
EndEvent end = new EndEvent();
end.setName("强制结束");
end.setId("forceEnd");
List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
SequenceFlow newSequenceFlow = new SequenceFlow();
newSequenceFlow.setId("newFlow");
newSequenceFlow.setSourceFlowElement(currentNode);
newSequenceFlow.setTargetFlowElement(end);
newSequenceFlowList.add(newSequenceFlow);// 备份原有方向
List<SequenceFlow> dataFlows = currentNode.getOutgoingFlows();
List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
oriSequenceFlows.addAll(dataFlows);// 清空原有方向
currentNode.getOutgoingFlows().clear();
// 设置新方向
currentNode.setOutgoingFlows(newSequenceFlowList);
// 完成当前任务
taskService.addComment(userTaskForceEndReq.getTaskId(), t.getProcessInstanceId(), "comment", "撤销流程");
taskService.complete(userTaskForceEndReq.getTaskId());
// 恢复原有方向
currentNode.setOutgoingFlows(oriSequenceFlows);

Activiti使用动态流程将流程实例结束

取消
取消动作可选,一般来说是发起人取消,而不是审批人取消,原因如下:-   审批人只关心一个审批事务过来后,判断并决策是通过还是驳回
-   取消和驳回含义容易混淆,区分不开
  • 加签
加签动作可选,一般来说是审批人加签,原因如下:
审批人只关心一个审批事务过来后,判断并决策是通过还是驳回不清晰发起人的信息需要其他人员的审批之后才可确认
  • 转办
转移动作可选,一般来说是审批人操作,原因如下:
审批人看到了信息,但是自己无暇处理,转移给其他人尽心细节查看和审批

演示审批操作站点


http://www.ppmy.cn/server/5918.html

相关文章

大厂面试精华面试刷题

1.自定义unshift实现相同效果 2.数组去重 用vs2019来写这种练习题可以更直观的查看代码执行的效果&#xff0c;最后的代码是控制控制台执行完毕后不自动关闭 use strict;let arr [1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10] //1.//查重最简单的方法for循环结合splice从数组中…

Spark-机器学习(3)回归学习之线性回归

在之前的文章中&#xff0c;我们了解我们的机器学习&#xff0c;了解我们spark机器学习中的特征提取和我们的tf-idf&#xff0c;word2vec算法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你…

基于Springboot的职称评审管理系统

基于SpringbootVue的获取源码 联系方式 &#x1f447;&#x1f3fb;的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 评审条件 论坛信息 系统公告 后台登录…

IaC:实现持续交付和 DevOps 自动化的关键

基础架构即代码&#xff08;IaC&#xff09;和 CI/CD 流水线最初似乎并不匹配。因为它们代表了两种不同的流程。IaC 主要关注基础设施的配置和开发&#xff0c;而 CI/CD 则围绕软件开发、测试和部署。 然而&#xff0c;将 IaC 集成到 CI/CD 流水线中具有多种优势。首先&#xf…

网络通信中字节流存在的问题,tcp协议特点,自定义协议(引入+介绍,序列化反序列化介绍,实现思路)

目录 字节流存在的问题 介绍 tcp协议特点介绍 tcp的收发自主权 tcp的全双工通信 自定义协议 引入 计算器 字符串形式 结构体形式 思考 序列化和反序列化 引入 介绍 计算器代码思路 字节流存在的问题 介绍 我们前面写的代码都是以字符串形式收发的,虽然暂且没有…

【nvm最新解决方案】Node.js v16.20.2 is not yet released or available

【nvm最新解决方案】Node.js v16.20.2 is not yet released or available 解决办法&#xff1a;下载想安装的node压缩包&#xff0c;放入nvm对应目录。 2024年最新node压缩包地址&#xff1a;https://nodejs.org/dist/ 1、选择对应的node版本&#xff1a;例如&#xff0c;我选的…

数据结构-双链表(图解)

目录 双链表&#xff08;Double-Linked List&#xff09;的概念与基本特性 一、双链表的基本组成 二、双链表的主要特性 三、双链表的操作 代码展示 malloc开辟函数 解析 初始化 解析 头插 解析 尾插 解析 头删 解析 尾删 解析 pos之后插入 解析 pos删除 …

聊聊应用商城评分4.9的Apipost IDEA插件

Apipost Helper&#xff0c;作为IDEA插件&#xff0c;可以快速生成和查询API文档&#xff0c;直观友好地在IDE中调试接口。它简化了开发流程并提升效率&#xff0c;即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能&#xff0c;如通过代码查找接口或者通过接口查找代…