-
- 方式一
-
方式二
-
总结
在Activiti流程设计中,会有2种处理方式,以请假流程举例:
- 方式一:第一个节点为组长审批
- 方式二:有单独的提交请假节点,第二个节点才是组长审批
我们平常的开发都是推荐第二种方式,因为第二种方式有以下优点:
-
可以更好的应对组长审批退回到提交申请节点,这是个很常见的功能。
-
使流程展示的更加完善,第二种能看出来流程的第一步是提交请假。
方式一
填写完申请单,在启动流程后,获取当前流程实例申请人的待办任务,并执行当前流程实例的下一步任务。
// 提交表单
// 启动流程
Task task = null;
TaskQuery query = taskService.createTaskQuery().taskAssignee(“empId”).active();
List todoList = query.list();//获取申请人的待办任务列表
for (Task tmp : todoList) {
if(tmp.getProcessInstanceId().equals(processInstance.getId())){
task = tmp;//获取当前流程实例,当前申请人的待办任务
break;
}
}
variables.put(ProcessConstants.KEY_DEPT_LEADER_ID, employeeId);//设置下一步办理人的流程变量
taskService.complete(task.getId(),variables);
优点:
实现简单,便于理解
缺点:
必须每个流程都要这样hardcoding,这不能装逼啊
方式二
-
首先监听任务的创建
-
判断是否是第一个用户任务
-
如果是,则主动调用一下完成任务的方法
完整代码如下:
public class AutoCompleteFirstTaskEventListener implements ActivitiEventListener {
@Override
public void onEvent(ActivitiEvent event) {
switch (event.getType()) {
case TASK_CREATED:
System.out.println(event);
if (!(event instanceof ActivitiEntityEventImpl)) {
return;
}
ActivitiEntityEventImpl activitiEntityEventImpl = (ActivitiEntityEventImpl) event;
Object entity = activitiEntityEventImpl.getEntity();
if (!(entity instanceof TaskEntity)) {
return;
}
TaskEntity taskEntity = (TaskEntity) entity;
this.onCreate(taskEntity);
break;
default:
break;
}
}
@Override
public boolean isFailOnException() {
return false;
}
private void onCreate(TaskEntity delegateTask) {
System.out.println(delegateTask);
ExecutionEntity execution = delegateTask.getExecution();
FlowElement currentFlowElement1 = execution.getCurrentFlowElement();
Process process = ProcessDefinitionUtil.getProcess(delegateTask.getProcessDefinitionId());
UserTask currentFlowElementTask = (UserTask) currentFlowElement1;
List incomingFlows = currentFlowElementTask.getIncomingFlows();
SequenceFlow sequenceFlow = incomingFlows.get(0);
FlowElement sourceFlowElement = sequenceFlow.getSourceFlowElement();
if (sourceFlowElement instanceof StartEvent) { // 判断当前任务的前一个节点是否是StartEvent,即是否是第一个任务
new CompleteTaskCmd(delegateTask.getId(), null).execute(Context.getCommandContext());// 执行完成命令
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。
学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。
“道路是曲折的,前途是光明的!”
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
“道路是曲折的,前途是光明的!”
[外链图片转存中…(img-Sevr84Bl-1713309414791)]
[外链图片转存中…(img-HuRINnaK-1713309414791)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!