IT 工作流:足迹第六十八步:eclipse搭配activiti工作流的必须结构

1.引擎自动创建23张表

    @Test
    public void createTable(){
        //创建引擎配置类
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        configuration.setJdbcDriver("com.mysql.jdbc.Driver");
        configuration.setJdbcUrl("jdbc:mysql://192.168.27.xx:3306/activiti");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("root");

        //不自动创建表,需要表存在 DB_SCHEMA_UPDATE_FALSE = "false";
        //先删除表,再创建表 DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";
        //如果表不存在,先创建表 DB_SCHEMA_UPDATE_TRUE = "true";
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //创建工作流核心对象
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.out.println(processEngine);
    }

2.部署和定义.png:通过processEngine.getRepositoryService()

2.1流程部署:依据两张图片,通过RepositoryService实现部署(插入act_ge_bytearray二进制数据表;act_re_deployment部署信息表;act_re_procdef流程定义数据表)

//xxx.bpmn和xxx.png压缩成xxx.zip
//先使用processEngine.getRepositoryService()获取RepositoryService类
repositoryService.createDeployment()
		 .addZipInputStream(zipInputStream)
		 .name("xxx")
		 .deploy();

2.2流程定义:通过RepositoryService获取流程定义,三种方式:

//先使用processEngine.getRepositoryService()获取RepositoryService类

//1依据画bpmn时的自定义Id查询一个流程定义
repositoryService.createProcessDefinitionQuery()
		.processDefinitionKey("key");
//2依据画bpmn时的Name查询一个流程定义
repositoryService.createProcessDefinitionQuery()
		.processDefinitionName("name");
//3遍历获取全部流程定义
		List<ProcessDefinition> pds = repositoryService.createProcessDefinitionQuery().list()
		
		for (ProcessDefinition pd : pds) {
			System.out.println("数字ID=流程定义的key+版本+随机生成数"+pd.getId()+",KEY:"+pd.getKey()+",NAME:"+pd.getName())
		}

3.启动流程实例:通过processEngine.getRuntimeService()

3.1在这一步通过RuntimeService启动请假单流程,使用流程定义的Key(act_ru_task运行时任务节点表 ,act_ru_execution运行时流程执行实例表, act_ru_identitylink运行时节点人员参与表)

//先使用processEngine.getRuntimeService()获取RuntimeService类

		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("key");
		System.out.println("id:"+processInstance.getId()+",activitiId:"+processInstance.getActivityId());

3.2流程执行的过程中,创建的流程实例ID在整个过程中都不会变

在这里插入图片描述

4.查询流程实例状态(判断流程是正在执行还是结束)

    /**查询流程状态(依据库中有没这个实例,判断流程正在执行,还是结束)*/
    @Test
    public void isProcessEnd(){
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()//创建流程实例查询
                .processInstanceId("processInstanceId")//使用流程实例ID查询
                .singleResult();
        if(processInstance ==null){
            System.out.println("流程已经结束");
        }
        else{
            System.out.println("流程没有结束");
        }
    }

5.任务:实例与任务是一对多

5.1先查询个人任务:通过"用户ID",查询该用户的个人任务

//先使用processEngine.getTaskService()获取TaskService类

		List<Task> tasks = taskService.createTaskQuery().taskAssignee("loginName").list()
		for (Task task : tasks) {
			System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee();
		}

5.2.后办结个人任务:只能通过5.1查出任务ID,再办结个人任务(办结后,将从act_ru_task中删除)

在这里插入图片描述

//先使用processEngine.getTaskService()获取TaskService类

		taskService.complete("act_ru_task表里的任务id")

6.历史节点表

6.1流程完毕,可以再act_hi_actinst历史节点表中看到整个请假流程

在这里插入图片描述

6.2查询历史任务:通过"用户ID",查询该用户的历史个人任务

/**查询历史任务*/
@Test
public void findHistoryTask(){
    List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
            .createHistoricTaskInstanceQuery()//创建历史任务实例查询
            .taskAssignee("用户ID")
            .list();
    if(list!=null && list.size()>0){
        for(HistoricTaskInstance hti:list){
            System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime();
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值