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

本文详细介绍了在Activiti工作流引擎中实现的各种审批操作,如同意、驳回、终止、加签、取消和转办,提供了相应的代码示例,帮助理解这些操作的概念和实践应用。
摘要由CSDN通过智能技术生成

引言

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

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

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

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

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

演示审批操作站点

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值