SpringBoot整合activiti7学生请假示例

参考博客:https://blog.csdn.net/weixin_44096448/article/details/103613377?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.baidujsUnder6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.baidujsUnder6

Java版本:1.8

SpringBoot版本<version>2.4.4</version>(SpringBoot和Activit7最好都用最新版本)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>

        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.0.0.Beta3</version>
        </dependency>

配置文件

server:
  port: 8080
spring:
  #Activiti property configuration
  activiti:
    database-schema-update: true
    history-level: full
    db-history-used: true
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://localhost:3306/activiti?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

安装actibpm插件

把编码设置成UTF8 

-Dfile.encoding=UTF-8

构建流程文件

 

 

 复制一份刚刚构建的流程文件,并将后缀名改为bpmn20.xml,打开后将报错的xmlns加上文件顶部的xmln约束

生成png文件,保存下来放到一起

接口

package com.example.mindsa.controller;

import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
@Slf4j
public class TestController {
    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    /**
     * 项目启动部署请假流程引擎。
     */
    @PostConstruct
    public void prepare() {
        // 创建一个部署对象
        Deployment deployment = repositoryService.createDeployment()
                .name("请假流程")
                .addClasspathResource("qbhs_bpmn20.xml")
                .addClasspathResource("qbhs.png")
                .deploy();
        log.info("部署ID:" + deployment.getId());
        log.info("部署名称:" + deployment.getName());
    }

    @ApiOperation("发起流程")
    @PostMapping("startProcess")
    public void startProcess(@RequestParam String student, @RequestParam String teacher) {
        String processDefinitionKey = "test01";
        Map<String, Object> map = new HashMap<>();

        //使用UEL 表达式设置

        // 学生填写申请单    Assignee:${student}
        map.put("student", student);

        // 班主任审批    Assignee:${teacher}
        map.put("teacher", teacher);

        ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, map);

        log.info("流程实例ID:" + instance.getId());
        log.info("流程定义ID:" + instance.getProcessDefinitionId());
    }

    @ApiOperation("任务查询")
    @PostMapping("searchTask")
    public List<String> searchTask() {
        //流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。
        List<Task> list = taskService.createTaskQuery()
                //流程实例key
                .processDefinitionKey("test01")
                //查询谁的任务
                //.taskAssignee("")
                .list();
        List<String> idList = new ArrayList<String>();

        for (Task task : list) {
            idList.add(task.getId());
            log.info("任务ID:" + task.getId());
            log.info("任务名称:" + task.getName());
            log.info("任务的创建时间:" + task.getCreateTime());
            log.info("任务的办理人:" + task.getAssignee());
            log.info("流程实例ID:" + task.getProcessInstanceId());
            log.info("执行对象ID:" + task.getExecutionId());
            log.info("流程定义ID:" + task.getProcessDefinitionId());
        }
        return idList;

    }

    @ApiOperation("任务处理")
    @PostMapping("disposeTask")
    public void disposeTask(List<String> list) {
        for (String id : list) {
            // 任务id
            taskService.complete(id);
            System.out.println("处理任务id:" + id);
        }
    }
}

如果启动报错找不到act_ge_property表的话就在数据库连接加上

&nullCatalogMeansCurrent=true

例如

jdbc:mysql://localhost:3306/activiti?characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT&useSSL=fals

结尾、扫一扫下方微信名片即可+博主徽信哦 ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓  ↓↓↓

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
好的,下面是基于Spring BootActiviti 5的请假工作流示例: 1. 首先,创建一个Spring Boot项目,并添加以下依赖: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>5.22.0</version> </dependency> ``` 2. 在项目中创建一个Activiti配置类: ```java @Configuration public class ActivitiConfig { @Bean public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) { SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration(); processEngineConfiguration.setDataSource(dataSource); processEngineConfiguration.setTransactionManager(transactionManager); processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); return processEngineConfiguration; } @Bean public ProcessEngineFactoryBean processEngineFactoryBean(ProcessEngineConfiguration processEngineConfiguration) { ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean(); processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration); return processEngineFactoryBean; } @Bean public RepositoryService repositoryService(ProcessEngine processEngine) { return processEngine.getRepositoryService(); } @Bean public RuntimeService runtimeService(ProcessEngine processEngine) { return processEngine.getRuntimeService(); } @Bean public TaskService taskService(ProcessEngine processEngine) { return processEngine.getTaskService(); } @Bean public HistoryService historyService(ProcessEngine processEngine) { return processEngine.getHistoryService(); } @Bean public ManagementService managementService(ProcessEngine processEngine) { return processEngine.getManagementService(); } } ``` 3. 创建请假流程的BPMN文件: 请假流程BPMN文件示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" targetNamespace="http://www.activiti.org/test"> <process id="leaveProcess" name="请假流程" isExecutable="true"> <startEvent id="startEvent" name="开始"/> <userTask id="applyTask" name="请假申请" activiti:assignee="${applyUser}"> <extensionElements> <activiti:taskListener event="create" class="com.example.activiti.listener.ApplyTaskListener"/> </extensionElements> </userTask> <userTask id="auditTask" name="审批" activiti:assignee="${auditUser}"> <extensionElements> <activiti:taskListener event="create" class="com.example.activiti.listener.AuditTaskListener"/> </extensionElements> </userTask> <endEvent id="endEvent" name="结束"/> <sequenceFlow id="startToApply" sourceRef="startEvent" targetRef="applyTask"/> <sequenceFlow id="applyToAudit" sourceRef="applyTask" targetRef="auditTask"/> <sequenceFlow id="auditToEnd" sourceRef="auditTask" targetRef="endEvent"/> </process> </definitions> ``` 4. 创建请假申请和审批任务的TaskListener: ```java public class ApplyTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { // 设置任务的候选人 delegateTask.addCandidateUser("user1"); delegateTask.addCandidateUser("user2"); } } public class AuditTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { // 获取请假申请的信息 String leaveInfo = delegateTask.getVariable("leaveInfo").toString(); // TODO: 根据请假申请的信息进行审批 } } ``` 5. 创建一个请假申请的Controller: ```java @RestController @RequestMapping("/leave") public class LeaveController { @Autowired private RuntimeService runtimeService; @PostMapping("/apply") public String apply(@RequestBody LeaveRequest leaveRequest) { // 启动请假流程 Map<String, Object> variables = new HashMap<>(); variables.put("applyUser", "user"); variables.put("leaveInfo", leaveRequest.getInfo()); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables); return processInstance.getId(); } } ``` 6. 创建一个测试用例,模拟审批流程: ```java @RunWith(SpringRunner.class) @SpringBootTest public class LeaveProcessTest { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Test public void testLeaveProcess() { // 启动请假流程 Map<String, Object> variables = new HashMap<>(); variables.put("applyUser", "user"); variables.put("auditUser", "admin"); variables.put("leaveInfo", "请假三天"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables); // 审批任务 Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); taskService.claim(task.getId(), "admin"); taskService.complete(task.getId()); } } ``` 以上就是基于Spring BootActiviti 5的请假工作流示例,希望能够帮助到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值