Activit开发

Activiti介绍

1.概述
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架
2.工作引擎
ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
3.BPM
业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)
4.Activiti中数据表的介绍
ACT_RE_* 表示reposity,该前缀表包含了流程定义和流程静态资源。
ACT_RU_* 表示runtime,该前缀表示运行时表,包含咯流程实例、任务、变量、任务等数据。在流程进行过程中这些数据将会暂时保存,流程结束就会删除这些数据。
ACT_RE_* 表示history,该前缀表示历史数据。如历史审批数据等。
ACT_GE_* 表示general,该前缀表示通用数据。
ACT_ID_* 表示identity,该前缀的表表示用户、组的身份信息。
5.Activiti中比较重要的数据表
act_re_procdef 流程定义数据表
act_re_deployment 部署信息表
act_re_model 流程设计模型部署表
act_ru_execution 运行时流程执行实例表
act_ru_task 运行时任务节点表
act_ru_variable 运行时流程变量数据表
act_hi_detail 历史详情表,提供历史变量的查询
act_hi_actinst 历史节点表
act_hi_comment 历史意见表
act_hi_procinst 历史流程实例表
act_hi_taskinst 历史任务实例表
act_id_group 用户组信息表
6.实际开发中的应用
1>首先在idea中安装插件actiBPM
如果找不到插件这里有 链接: https://pan.baidu.com/s/1UHOotwpHO7pAo_f0itae5w 提取码: 2dwq

2>搭建springcloud项目(这里不再赘述,有需要的小伙伴参考https://blog.csdn.net/myITliveAAA/article/details/108314939)

3>在springcloud父项目下新建activitidemo(参考https://blog.csdn.net/myITliveAAA/article/details/108314939)

4>在resource下新建processes

5>右击processes文件新建demo.bpmn文件
在这里插入图片描述

6>画如下流程图

以上符号是刚刚开始会用到的符号
以上是我们初始activiti时常用的属性值
在这里插入图片描述
7>复制activitidemo.bpmn并重命名为activitidemo.xml

8>部分代码展示
接口

@RequestMapping("/ac")
public interface ActivitiService {

    /*
    * 开启流程
    * */
    @GetMapping(value = "/start")
    String startActiviti();

    /*
    * 进行一步审核
    * */
    @PostMapping(value = "/complete")
    void completeActiviti(String processId,int flug,int days,int role);

    /*
    * 查询神审批历史
    * */
    @GetMapping(value = "/activitHosity")
    void queryHistoricInstance(String processId);

    /*
    * 查询某个人或者某个角色的任务
    * */
    @GetMapping(value = "/activitTask")
    void queryActivitTask(String username);

    /*
    * 部署流程
    * */
    @GetMapping(value = "deployActiviti")
    void deployActiviti();
}

实现类


```java
@RestController
@Slf4j
public class ActivitiServiceImpl implements ActivitiService {

    @Resource
    private RepositoryService repositoryService;

    @Resource
    private RuntimeService runtimeService;

    @Resource
    private TaskService taskService;

    @Resource
    ProcessEngine processEngine;

    @Resource
    HistoryService historyService;


    //启动流程
    @Override
    public String startActiviti() {
        Map<String, Object> variable = new HashMap<>();
        variable.put("username", "用户提交");
        //启动流程
        ProcessInstance pi = runtimeService
                .startProcessInstanceByKey("demo_activiti",variable);

        //获取流程Id
        String processId = pi.getProcessInstanceId();
        //根据流程ID查询任务流程
        Task task = taskService.createTaskQuery()
                .processInstanceId(processId)
                .singleResult();
        //执行一步流程
        Map<String, Object> variables = new HashMap<>();

        variables.put("username", "组长审核");
        taskService.complete(task.getId(), variables);

        return processId;
    }


    //执行一步流程
    @Override
    public void completeActiviti(String processId, int flug,int days,int role) {//role  0提交人 1组长  2班长  3主任  4总监
        //查询流程
        Task task = taskService.createTaskQuery()
                .processInstanceId(processId)
                .singleResult();


        //获取流程执行任务
       /* List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processId).orderByTaskCreateTime().desc().list();
        HistoricTaskInstance historicTaskInstance = taskList.get(0);
        if (historicTaskInstance.getAssignee().equals("预正则")) {
            taskService.setAssignee(task.getId(), "测试");
        } else {
            taskService.setAssignee(task.getId(), "王菲");
        }*/
        Map<String, Object> variables = new HashMap<>();

        switch (role){
            case 1:
                if (flug == 1){
                    if (days > 0 && days < 3){
                        variables.put("username","班长审核");
                    }
                    if (days >=3 && days < 6){
                        variables.put("username","主任审核");
                    }
                    if (days >= 6){
                        variables.put("username","总监审核");
                    }
                }else {
                    variables.put("username", "用户提交");
                }
                break;

            case 0:
                variables.put("username", "组长审核");
                break;

        }

        variables.put("days",days);
        variables.put("flug", flug);
        taskService.complete(task.getId(), variables);
    }

    @Override
    public void queryHistoricInstance(String processId) {
       /* List<HistoricProcessInstance> list = processEngine.getHistoryService()
                .createHistoricProcessInstanceQuery()
                .processInstanceId("50005")
                .orderByProcessInstanceStartTime().asc()//排序
                .list();
        if (list != null && list.size() > 0) {
            for (HistoricProcessInstance hpi : list) {
                System.out.println("流程实例ID:" + hpi.getId());
                System.out.println("=======================================");
            }
        }*/

        //查询某个流程的审批历史
        List<HistoricTaskInstance> list = processEngine.getHistoryService()
                .createHistoricTaskInstanceQuery()
                .processInstanceId(processId)
                .list();
        if (list != null && list.size() > 0) {
            for (HistoricTaskInstance hvi : list) {
                System.out.println(hvi.getId() + "    " + hvi.getName() + "	" + hvi.getProcessDefinitionId() + " " + hvi.getAssignee());
            }
        }

    }

    @Override
    public void queryActivitTask(String username) {
        TaskService taskService = processEngine.getTaskService();
        List<Task> taskList = taskService.createTaskQuery().taskAssignee(username).list();
        if (taskList != null && taskList.size() > 0){
            for (Task task:taskList){
                System.out.println(task.getId() + " " + task.getName() + " " + task.getAssignee() + " " + task.getProcessInstanceId());
            }
        }

    }


    //部署流程
    @Override
    public void deployActiviti() {
        //部署流程
        Deployment deployment = repositoryService
                .createDeployment()
                .addClasspathResource("processes/demo.bpmn")
                .name("流程")
                .deploy();

    }
}

9>执行后的数据库结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200908153442678.png#pic_center)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值