Activiti集成spring boot

maven:

<!--activiti-->
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>6.0.0</version>
</dependency>

启动报错:

一:Description:

Field restTemplate in com.vvar.cloudflow.base.utils.SimpleWebServiceUtil required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.

The injection point has the following annotations:

解决 

@Primary
    @Bean
    public TaskExecutor primaryTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        return executor;
    }

二:nested exception is java.io.FileNotFoundException: class path resource [org/springframework/security/config/annotation/authentication/configurers/GlobalAuthenticationConfigurerAdapter.class] cannot be opened because it does not exist

解决集成 去掉org.activiti.spring.boot.SecurityAutoConfiguration.class

@SpringBootApplication(exclude={
 org.activiti.spring.boot.SecurityAutoConfiguration.class
})
#activiti配置
spring.activiti.database-schema-update=true
spring.activiti.history-level=full
spring.activiti.check-process-definitions=false

流程图:

在activiti6官网中下载,将activiti.app.war在tomcat 的webapps中,启动tomcat。输入网址:http://localhost:8080/activiti-app

账号 admin 密码test

进入Kickstart App,右上角新建(Create Process)

将流程图下载下来放进项目中processes文件夹下(在rescources目录下创建processes文件,如果processes没有流程图会报未找到文件的错误,activiti启动会扫描processes文件夹)


activiti设置用户和用户组:

https://blog.csdn.net/qq_29914837/article/details/92104148

部署流程:

public void deploy1( ){
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
            .createDeployment()//创建部署对象
            .name("修改合同审核流程")//声明流程的名称
            .addClasspathResource("processes/***.bpmn20.xml")//加载资源文件,一次只能加载一个文件
            .deploy();//完成部署
    System.out.println("部署ID:"+deployment.getId());//1
    System.out.println("部署时间:"+deployment.getDeploymentTime());
}

提交申请:

public void startProcessInstance(){
   String processDefinitionKey = "***";//***.bpmn20.xml中的id(流程图id)
   ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service
                .startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应leave.bpmn文件中id的属性
        Task vacationApply = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
//        for (String group : groups) {
//            taskService.addCandidateGroup(vacationApply.getId(), group);//设置处理组
//        }
//      taskService.addCandidateUser(vacationApply.getId(), "userId");//设置处理人
        System.out.println("流程实例ID:" + processInstance.getId());// 流程实例ID:
        System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());// 流
        System.out.println("任务ID:" + vacationApply.getId()); 
    }

处理任务:

public void completeMyPersonalTask(String taskId) throws ParseException {
    String taskIdFin = null;
    String execution = null;
//    List<Task> taskList = //taskService.createTaskQuery().taskAssignee("userId").list();//根据处理人查询任务
    List<Task> tasks = taskService.createTaskQuery().taskCandidateOrAssigned("userId").list();//根据处理人或者处理组查询任务
    if (CollectionUtils.isEmpty(tasks))
        return ServerResponse.createByErrorMessage("你未有权限审批合同");
    for (Task task : tasks) {
        if (task.getId().equals(taskId))
            execution = task.getExecutionId();//执行对象id
    }
    Map<String, Object> args = new HashMap<>();
    args.put("submitType", "y");
    processEngine.getTaskService()// 与正在执行的任务管理相关的Service
            .complete(taskId,args);
    List<Task> taskList = taskService.createTaskQuery().taskCandidateOrAssigned("userId").list();
    for (Task task : taskList) {
        if (task.getExecutionId().equals(execution))
            taskIdFin = task.getId();//获取下个任务id
    }
    System.out.println("完成任务:任务ID:" + taskId);
}

任务出结束后自动配置处理人或者处理组有多种方式,我采用了监听方式。其他网上有很多。

创建监听类,实现 TaskListener的notify方法

public class AdminTaskListenerImpl implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
      delegateTask.addCandidateGroup("groupId");//设置处理组
      delegateTaskaddCandidateGroups(Collection<String> candidateGroups)//设置多个处理组 
      delegateTask.addCandidateUser("userId"); //设置处理人
      delegateTask.addCandidateUsers(Collection<String> candidateUsers); //设置多个处理人   
    }
}

监听需要在流程图中进行配置。

如果需要使用@Autowired或者spring 注入时报空指针,处理办法如下:

@Component("AdminTaskListenerImpl")
public class AdminTaskListenerImpl implements TaskListener {
    @Autowired
    private PositionRepository positionRepository;
    @Override
    public void notify(DelegateTask delegateTask) {
        List<Position> positions = positionRepository.findAllByApprovalProcess(ApprovalProcess.EMPLOYEE);
        List<String> positionIds = positions.stream().map(e -> e.getId().toString()).collect(Collectors.toList());
        delegateTask.addCandidateGroups(positionIds);
        
    }
}

在流程图监听配置修改成:create 设置成complete

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti Spring Boot Starter Basic 是一个基于 ActivitiSpring Boot 的开发框架,可以帮助开发人员快速搭建基于 Activiti 的工作流应用。 使用 Activiti Spring Boot Starter Basic,我们可以轻松引入 Activiti 的核心功能,如流程定义、流程实例管理、任务管理等等。通过简单的配置,我们就可以使用 Activiti 提供的各种功能,而无需手动配置和初始化 Activiti 的相关组件。 此外,Activiti Spring Boot Starter Basic 还提供了一些便利的特性。例如,它可以自动创建 Activiti 相关的数据库表,简化了部署过程;它还提供了一系列的 RESTful API,方便我们通过 HTTP 请求操作 Activiti 的各种功能;同时,它还集成了一些常用的插件,如 Spring Security,可以帮助我们实现更加复杂的权限控制。 使用 Activiti Spring Boot Starter Basic 还有一些先决条件。首先,我们需要有一个 Spring Boot 应用,可以是新建的,也可以是已有的;其次,我们需要添加相应的依赖项,包括 activiti-spring-boot-starter-basic 和相应版本的 Activiti;最后,我们还需要按照 Activiti 的规范创建工作流定义文件,以定义和管理工作流程。 综上所述,Activiti Spring Boot Starter Basic 是一个灵活、简单、易用的开发框架,可以帮助我们快速构建和管理基于 Activiti 的工作流应用。无论是对于新手还是有经验的开发人员来说,它都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值