当前位置: 首页 > 科技观察

Springboot集成工作流引擎Activiti的网关路由

时间:2023-03-22 13:10:39 科技观察

环境:Springboot2.3.12.RELEASE+Activiti7.1.0.M6本文主要演示复杂审批流程的应用:独享网关路由(ExclusiveGateway)流程设计审批说明:当员工请假少于或等于3天时,部门经理批准。当部门经理同意flag==1时,流程结束,如果部门经理不同意flag==0,则流程返回“员工请假”节点;请假天数大于3天时,先由部门经理审批,再由总经理审批。当总经理同意flag==1流程时,流程结束,如果不同意flag==0流程,则流程返回“员工请假”节点。3}"sourceRef="exclusivegateway1"targetRef="usertask3">3}]]>/定义>国际设计语言服务接口@ServicepublicclassHolidayService{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(HolidayService2.class);@ResourceprivateRuntimeServiceruntimeService;@ResourceprivateTaskServicetaskService;/***

*设置assignee的值,用户可以在接口上设置进程的执行者*

*

时间:2021年1月22日-晚上8:30:39

*@authorgrandpa*@paramprocessDefinitionId*@returnProcessInstance*/publicProcessInstancestartProcessInstanceAssignVariables(StringprocessDefinitionId,Mapvariables){Authentication.setAuthenticatedUserId((String)variables.get("assignee"));ProcessInstanceprocessInstance=runtimeService.startProcessInstanceById(processDefinitionId,variables);logger.info("进程定义ID:{}",processInstance.getProcessDefinitionId());logger.info("流程实例ID:{}",processInstance.getId());logger.info("BussinessKey:{}",processInstance.getBusinessKey());returnprocessInstance;}/***

执行任务

*

时间:2021-01-24-10:40:39上午

*@author爷爷*@paramvariables*@paraminstanceId*@returnvoid*/publicvoidexecutionTask(Mapvariables,StringinstanceId){Tasktask=taskService.createTaskQuery().processInstanceId(instanceId).singleResult();if(task==null){logger.error("任务【{}】不存在",instanceId);thrownewRuntimeException("Task【"+instanceId+"】不存在");}//注意这里必须设置变量,否则无法获取进程中设置的表达式,如下图taskService.setVariables(task.getId(),variables);taskService.complete(task.getId(),variables);}}方法的含义在代码中已经说明控制器接口packagecom.pack.controller;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importjavax.annotation.Resource;importorg.activiti.engine.history.HistoricActivityInstance;importorg.activiti.engine.runtime.ProcessInstance;importorg.activiti.engine.task.Task;importorg.apache.commons.lang3.StringUtils;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind。注释.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importcom.pack.dto.ProcessDefinitionDTO;importcom。pack.dto.ProcessInstanceDTO;importcom.pack.dto.R;importcom.pack.task.HolidayService2;@RestController@RequestMapping("/holidays2")publicclassHolidayController2{@ResourceprivateHolidayServiceholidayService;/***

启动请假审核流程

*

时间:2021年1月23日-上午10:32:55

*@author爷爷*@paramuserId*@paramprocessDefinitionId流程定义ID*@returnR*/@GetMapping("/start")publicRstartProcess(StringuserId,StringprocessDefinitionId){Mapvariables=newHashMap<>();variables.put("userId",userId);ProcessInstanceinstance=holidayService.startProcessInstanceAssignVariables(processDefinitionId,variables);ProcessInstanceDTOdto=newProcessInstanceDTO();dto.setInstanceId(instance.getId());returnR.success(dto);}/***

*填写审批表*

*

时间:2021-01-23-11:57:30

p>*@authorgrandpa*@paramMap取值如下*@paramdays请假天数*@paramexplainapproval表单描述*@paraminstanceId流程实例ID*@paramassignee指定下一个流程执行者*@returnR*/@GetMapping("/apply")publicRfillApply(@RequestParamMapvariables){StringinstanceId=(String)variables.remove("instanceId");if(StringUtils.isEmpty(instanceId)){returnR.failure("Unknownt问");}假日服务。执行任务(变量,实例编号);returnR.success();}}测试启动流程d_mgr:部门经理IDdays:3(小于3天)部门经理处理标志:0(不同意,拒绝给员工申请)查看act_hi_actinst表数据:流程转到“employeeapplication”节点,再次重复上述过程。当你到达部门经理时,设置flag=1来结束这个过程。当请求天数大于3天时,处理流程基本同上。

最新推荐
猜你喜欢