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

引言

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

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

本文以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使用动态流程将流程实例结束

取消
取消动作可选,一般来说是发起人取消,而不是审批人取消,原因如下:

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

演示审批操作站点

相关推荐

  1. JeecgFlow工作-审批(通过驳回终止)

    2024-04-21 13:10:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 13:10:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 13:10:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 13:10:01       87 阅读
  4. Python语言-面向对象

    2024-04-21 13:10:01       96 阅读

热门阅读

  1. DevOps(六)Git特点和命令详解

    2024-04-21 13:10:01       33 阅读
  2. Linux命令学习—DHCP 服务器

    2024-04-21 13:10:01       36 阅读
  3. R-tree原理与代码实现逻辑总结

    2024-04-21 13:10:01       37 阅读
  4. 第二章:初步了解Hugging Face与如何使用Hugging Face

    2024-04-21 13:10:01       35 阅读
  5. 【Camera Sensor Driver笔记】三、点亮指南之Sensor DTS

    2024-04-21 13:10:01       33 阅读
  6. linux常用命令

    2024-04-21 13:10:01       36 阅读
  7. SpringBoot常用20个注解及其作用

    2024-04-21 13:10:01       29 阅读