lyh
10 天以前 30c9299fa9ffc8d3cd51d4a18b4c0b33c3ef8141
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package com.lxzn.activiti;
 
import org.activiti.engine.ProcessEngine;
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.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestActiviti {
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private ProcessEngine processEngine;
 
    /**
     * 流程定义的部署
     * activiti表有哪些?
     * act_re_deployment  部署信息
     * act_re_procdef     流程定义的一些信息
     * act_ge_bytearray   流程定义的bpmn文件及png文件
     */
    @Test
    public void testDeployment() {
        //ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService.createDeployment().addClasspathResource("processes/assign_nc_to_device.bpmn")  //添加bpmn资源
                .name("指派NC文档到设备")
                .deploy();
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }
 
    /**
     * 启动流程实例:
     *     前提是先已经完成流程定义的部署工作
     *
     *  背后影响的表:
     *  ACT_HI_ACTINST     已完成的活动信息
     *  ACT_HI_DETAIL      历史详情
     *  ACT_HI_IDENTITYLINK   参与者信息
     *  ACT_HI_PROCINST   流程实例
     *  ACT_HI_TASKINST   任务实例
     *  ACT_HI_VARINST   历史变量
     *  ACT_RU_IDENTITYLINK  执行时 参与者信息
     *  ACT_RU_EXECUTION     执行表
     *  ACT_RU_TASK  当前任务
     *  ACT_RU_VARIABLE  执行时 参数信息
     */
    @Test
    public void testStartInstance() {
        //3.创建流程实例  流程定义的key需要知道 holiday
        String applyUser = "1255172650880737281";
        //String[] approveUsers = {"1254773336467689474", "1254966905669160962"};
        String approveUsers = "1254773336467689474, 1254966905669160962";
        String businessKey = "111111";
        String key = "assign_nc_to_device";
        Map<String, Object> map = new HashMap<>();
 
        map.put("apply_user", applyUser);
        map.put("approve_users", approveUsers);
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, businessKey, map);
 
        //4.输出实例的相关信息
        System.out.println("流程部署ID"+processInstance.getDeploymentId());//null
        System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//holiday:1:4
        System.out.println("流程实例ID"+processInstance.getId());//2501
        System.out.println("活动ID"+processInstance.getActivityId());//null
    }
 
    /**
     * 从ACT_RU_TASK表中获取当前用户的任务列表
     * 从ACT_RU_TASK表中获取taskId的任务
     */
    @Test
    public void testCompleteTask() {
        //获取用户的任务列表
        //List<Task> taskList = taskService.createTaskQuery().taskAssignee("1255172650880737281").list();
        Task task = taskService.createTaskQuery().taskId("7509").singleResult();
        if(task != null) {
            //4.任务列表的展示
            System.out.println("流程实例ID:"+task.getProcessInstanceId());
            System.out.println("任务ID:"+task.getId());  //5002
            System.out.println("任务负责人:"+task.getAssignee());
            System.out.println("任务名称:"+task.getName());
            taskService.complete(task.getId());
        }
    }
 
    @Test
    public void testCandidateUser() {
        String key = "assign_nc_to_device";
        String candidate_user = "1254773336467689474";
//        List<Task> taskList = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidate_user)//设置候选用户
//                .list();
//        taskList.forEach(System.out::println);
        Task task = taskService.createTaskQuery().processDefinitionKey(key)
                .taskCandidateUser(candidate_user).singleResult();
        if(task != null) {
            taskService.claim(task.getId(), candidate_user);
            System.out.println("拾取任务成功");
            taskService.complete(task.getId());
            System.out.println("完成任务成功");
        }
    }
}