博主
258
258
258
258
专辑

第十九节 SSM框架使用Activiti工作流(二)

亮子 2023-10-21 11:25:37 855 0 0 0

1、引入全局变量

    @Autowired
    RepositoryService repositoryService;

    @Autowired
    RuntimeService runtimeService;

    @Autowired
    TaskService taskService;

2、部署流程

    /***
     * @description 部署流程
     * @params
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/21 18:55
     */
    @GetMapping(value = "/deploy")
    public String deploy() {
        repositoryService.createDeployment()
                .addClasspathResource("activiti/test1.bpmn20.xml")
                .addClasspathResource("activiti/test1.bpmn20.png")
                .deploy();
        return "OK";
    }

3、查询流程列表

    /***
     * @description 获取流程列表
     * @params
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/21 19:01
     */
    @GetMapping(value = "/bpmnList")
    public String bpmnList() {
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();

        for (ProcessDefinition processDefinition : list) {
            System.out.println(processDefinition.getName());
        }

        return "OK";
    }

4、开启一个流程

    /***
     * @description 开启一个流程
     * @params
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/21 20:36
     */
    @GetMapping(value = "/start")
    public String start() {
        //-- 启动流程的参数
        // 1、流程的KEY:流程的唯一标识 key=test1
        // 2、第三方系统的唯一ID(标识)与第三方系统结合
        // 3、传入流程变量
        String key = UUID.randomUUID().toString();

        HashMap<String, Object> map = new HashMap<>();
        map.put("user1", "老田");
        map.put("user2", "王院");

        ProcessInstance test1 = runtimeService.startProcessInstanceByKey("test1", key, map);
        System.out.println("start:"+test1.toString());
        return "OK";
    }

5、获取流程列表

    /***
     * @description 查询正在进行的流程
     * @params
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/21 20:40
     */
    @GetMapping(value = "/processList")
    public String processList() {
        List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processDefinitionKey("test1").list();
        for (ProcessInstance processInstance : list) {
            System.out.println(processInstance.getName());
        }

        return "OK";
    }

6、获取任务列表

    /***
     * @description 查询流程实例节点
     * @params
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/21 23:38
     */
    @GetMapping(value = "/taskList")
    public String taskList(String pid) {
        List<Task> list = taskService.createTaskQuery().processInstanceId(pid).list();
        for (Task task : list) {
            System.out.println(task.toString());
            String taskId = task.getId();
            System.out.println("taskId:" + taskId);
        }

        return "OK";
    }

7、执行审核流程

    /***
     * @description 执行任务(也就是执行流程实例下的任务节点)
     * @return java.lang.String
     * @author 军哥
     * @date 2023/10/22 8:43
     */
    @GetMapping(value = "/taskStep")
    public String taskStep(String pid, String taskId) {
        // 查询实例流程
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(pid).singleResult();
        if(processInstance == null) {
            return "流程实例不存在";
        }

        //-- 完成下一步的流程
        taskService.complete(taskId);

        //-- 查询流程是否为最后一步审批
        ProcessInstance lastProcess = runtimeService.createProcessInstanceQuery().processInstanceId(pid).singleResult();
        if(lastProcess == null) {
            // 发送通知邮件或者短信
            System.out.println("发送邮件通知用户");
            System.out.println("修改审核状态:审核通过");
        }
        return "OK";
    }