activiti使用心得(4) 请假申请单流程启动,任务列表、审批

相关文章
activiti使用心得(1) spring 集成activiti
activiti使用心得(2) activiti的web应用 请假审批为例,bpmn文件的定义
activiti使用心得(3) 请假申请单业务
activiti使用心得(4) 请假申请单流程启动,任务列表、审批
activiti使用心得(5) activiti 对表单的使用说明
activiti使用心得(6) 请假申请单查看备注、审批结束

1、流程单启动

activiti使用心得(3) 请假申请单业务中,vacationService.startVacation(vacationForm);方法中,对流程单进行了启动,代码如下:

public ProcessInstance startVacation(VacationForm vacationForm) {
        vacationForm.setTitle(vacationForm.getUserName()+" 的请假申请");
        vacationForm.setBussinessType("请假申请");
        vacationForm.setBussinessId(vacationForm.getId());
        //TODO 查询流程定义    此处需要进入sh
        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey(VacationForm.VACATION_PROCESS_DEFINITION).singleResult();
        //初始化任务参数
        Map<String,Object> vars = new HashMap<String,Object>();
        vars.put("arg", vacationForm);
        System.out.println("----------#####-------------"+pd.getKey());
        String bussinessKey = vacationForm.getId(); 
        //启动流程
        ProcessInstance pi = runtimeService.startProcessInstanceByKey(pd.getKey(),bussinessKey,vars);
        //记录请假数据
        commitVacation(vacationForm,pi.getId());
        return pi;
    }

VacationForm.VACATION_PROCESS_DEFINITION = “vacation_flow7” 为流程定义的ID.
在上一篇的注释中写道流程的启动最好不要写在业务代码中,后期会进一步进行优化。

2、 任务列表

任务列表,本着一个业务一个列表的原则,此处做了统一处理,通过processDefinitionKey对业务进行区分

@ResponseBody
    @RequestMapping(value = "/auditList", produces = "application/json;charset=utf-8")
    public Result<List<TaskVo>> auditList(HttpServletRequest request,String processDefinitionKey) {
        String userKey = SessionUtils.getUserkey(request);
        User user = userService.findById(userKey);
        String userId = user.getUsername();
        List<TaskVo> list = listTasks(userId,processDefinitionKey);
        Result<List<TaskVo>> br = new Result<>();
        br.setResult(list);
        return br;

    }

    public List<TaskVo> listTasks(String userId,String processDefinitionKey) {
        //processDefinitionKey(processDefinitionKey);
        //根据流程定义key及受理人查询待办
        List<Task> taskList = taskService.createTaskQuery().taskAssignee(userId).processDefinitionKey(processDefinitionKey).list();
        return createTaskVoList(taskList);

    }

    private List<TaskVo> createTaskVoList(List<Task> taskList) {
        List<TaskVo> result = new ArrayList<TaskVo>();
        for (Task task : taskList) {
            ProcessInstance pi = runtimeService.createProcessInstanceQuery()
                    .processInstanceId(task.getProcessInstanceId()).singleResult();
            BaseForm arg = (BaseForm) runtimeService.getVariable(pi.getId(), "arg");
            if (arg != null) {
                TaskVo vo = new TaskVo();
                vo.setProcessInstanceId(task.getProcessInstanceId());
                vo.setTitle(arg.getTitle());
                vo.setBussinessType(arg.getBussinessType());
                vo.setTaskId(task.getId());
                vo.setRequestDate(arg.getRequestDate());
                String bussinessId = arg.getBussinessId();
                vo.setBussinessId(bussinessId);
                result.add(vo);
            }

        }
        return result;
    }

3、 审批

@ResponseBody
@RequestMapping(value = "/audit", produces = "application/json;charset=utf-8")
public Result<BussinessResult> audit(AuditTask auditTask, HttpServletRequest request) {
    String userKey = SessionUtils.getUserkey(request);
    User user = userService.findById(userKey);
    String userId = user.getUsername();
    Result<BussinessResult> br = new Result<>();
    // 使用任务id,获取任务对象,获取流程实例id
    Task task = taskService.createTaskQuery().taskId(auditTask.getTaskId()).singleResult();
    // 利用任务对象,获取流程实例id
    String processInstancesId = task.getProcessInstanceId();

    System.out.println(processInstancesId);

    // Authentication.setAuthenticatedUserId("cmc"); // 添加批注时候的审核人,通常应该从session获取
    // 添加审批备注
    // taskService.addComment(taskId,processInstancesId,"尝试添加批注");
    Authentication.setAuthenticatedUserId(user.getRealname()); // 添加批注时候的审核人,通常应该从session获取
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("operateApprove", auditTask.getOperateApprove()==0?"true":"false");
    taskService.addComment(auditTask.getTaskId(), processInstancesId, (auditTask.getOperateApprove()==0?"同意 ":"拒绝 ")+auditTask.getComment());
    taskService.complete(auditTask.getTaskId(), map);
    return br;

}

猜你喜欢

转载自blog.csdn.net/wangxiaohua_001/article/details/82495701