activiti学习03

任务加签,转办

流程:开始---》经理---》财务-----》老板---》结束


加签:
    //流程经理审批完开始财务审批,但是我想在财务审批前,加一个人审批,这个人审批结束,财务在审批,然后是老板,最后结束
    @Test
    public void addOneTask() {

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processInstanceBusinessKey("bussiness2")
                .singleResult();
        taskService.delegateTask(task.getId(), "加签人1");
    }
加签审批通过:
    // 加签人完成审批,若是拒绝应如何拒绝,那就是加签人审批通过,由创建加签人这个人去拒绝,也就是加签人只能同意
    @Test
    public void jiaCompleteProcess(){
        String user = "加签人1";
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task taskSingle = taskService.createTaskQuery()
                .processInstanceBusinessKey("bussiness2")
                .taskAssignee(user)
                .singleResult();
        if(Objects.isNull(taskSingle)){
            System.out.println("此加签人当前节点没有审批任务");
            return;
        }
        taskService.resolveTask(taskSingle.getId());
        System.out.println("任务: bussiness2 加签人 ==> "+user+"审批完成");
    }
转办:

    // 转签:转签就是该财务审批了,但是财务不审批了,我把这个机会交给其他人去审批,其他人审批完成,直接向下走,不用回来了
    // 和加签的区别是:加签人审批完成会回到创建加签人这,但是转办就是转办人替我审批,不用回来了
    @Test
    public void trunTask() {
        //转签
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processInstanceBusinessKey("bussiness2")
                .singleResult();
        taskService.setAssignee(task.getId(), "转签人1");
    }
 转办人完成(就是正常的完成)
    @Test
    public void completeProcess(){
        String user = "转签人1";
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task taskSingle = taskService.createTaskQuery()
                .processInstanceBusinessKey("bussiness2")
                .taskAssignee(user)
                .singleResult();
        if(Objects.isNull(taskSingle)){
            System.out.println("此人当前节点没有审批任务");
            return;
        }
        taskService.complete(taskSingle.getId());
        System.out.println("任务: bussiness1 ==> "+user+"审批完成");
    }
抄送任务:
第 1 种方式:
根据业务逻辑实现就行了
创建流程时根据业务id创建抄送信息,单独存表,
业务id,抄送人id,是否已读

第 2 种方式:
审批流不存在子任务时(也就是没用到 act_run_task  ===> parent_task_id 这个字段时 就可以用这个字段保存业务id,当做此业务抄送)
	//1 启动流程实例时调用此方法
	createSonTask("bussiness2");
	
 	/**
     * 创建子任务
     */
    public void createSonTask(String bussinessId){
        String users = "曹操,典韦,刘备";
        List<String> split = Arrays.asList(users.split(","));
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        split.forEach(e->{
            Task newtask = taskService.newTask();
            newtask.setAssignee(e);
            newtask.setName("抄送任务");
            newtask.setParentTaskId(bussinessId);//业务id
            taskService.saveTask(newtask);
        });
    }

	/**
	  * 查询当前用户全部抄送任务
	  */
     @Test
     public void findSonTask(){
         String user = "曹操";
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         TaskService taskService = processEngine.getTaskService();
         List<Task> taskList = taskService.createTaskQuery().taskAssignee(user).list()
                 .stream().filter(e->StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList());
         System.out.println(taskList);
     }


    /**
     * 用户已读抄送任务
     * businessId 不为空 即【已读此条消息】,
     * businessId 为空   即【全部已读】
     */
    @Test
    public void readSonTask(){
        String user = "刘备";
        String businessId = "";
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> list =  taskService.createTaskQuery().taskAssignee(user).list();
        for(Task task:list){
            if(!StringUtils.isBlank(businessId) && StringUtils.equals(businessId,task.getParentTaskId())){
                //已读当前任务
                taskService.complete(task.getId());
                break;
            }else {
                taskService.complete(task.getId());
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值