activiti学习由浅入深07 weir 2014-12-26 11:16:45.0 java,activiti 2332 上次我们分析了请假添加过程的数据变化,也就是我们在添加请假信息时就启动了流程,流程一旦启动就会往下执行,就会交给不同的人去执行流程,这个过程我们称之为待办,等待某人办理处理,因此我们有了待办管理模块。 我们可以从“depLeaderAduit” name=“部门领导审批“activiti:candidateUsers=“1000”> 部门领带审批是交给了用户ID=1000的人,那么这个代办列表是怎么获得的呢?我依然先把代码拿出来: @ResponseBody @RequestMapping(“/list”) public Listlist(String key,HttpSession session,Model model) { User u = (User) session.getAttribute(“U”); ListTodoVo = workFlowService.todoList(u.getUserId(),key); return TodoVo; } public class TodoVo { private String taskId; private String name; private Date createTime; private String assignee; private boolean suspended;//ProcessInstance // private Task task; private String processinsId; // private ProcessDefinition processdefine; // private ProcessInstance processins; /** * 流程名 */ private String processdefName; /** * 具体业务 */ private String businessName; /** * 业务事件(天数) */ private String businessdes; /** * 具体业务ID */ private String businessKey; 后面的省略了, @Override public ListtodoList(String userId,String key) { //取得一个人(当前用户)未签收的任务(未签收就是没有被访问到的任务) ListtaskCandidates = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(userId).orderByTaskPriority().desc().list(); //取得一个人(当前用户)的待办任务(已签收) ListtaskAssignees = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(userId).orderByTaskPriority().desc().list(); ListtaskAll = new ArrayList(); taskAll.addAll(taskCandidates); taskAll.addAll(taskAssignees); ListtodoVos = new ArrayList(); for (Task task : taskAll) { ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); TodoVo todoVo = new TodoVo(task.getName(), task.getCreateTime(), task.getAssignee(), pi.isSuspended()); todoVo.setTaskId(task.getId()); todoVo.setProcessdefName(pd.getName()); if (key.equals(“leave”)) { Leave leave = leaveService.findByProcessinsId(task.getProcessInstanceId()); todoVo.setBusinessName(leave.getLeavetype()); todoVo.setBusinessdes(leave.getLeaveday()); todoVo.setBusinessKey(leave.getLeaveId()); }else if (key.equals(“review”)) { Review review = reviewService.finfByProcessinsId(task.getProcessInstanceId()); todoVo.setBusinessName(review.getReviewtitle()); todoVo.setBusinessdes(review.getReviewcontent()); todoVo.setBusinessKey(review.getReviewId()); } if (todoVo.getAssignee()==null) { todoVo.setAssignee(“未签收”); }else{ todoVo.setAssignee(“可以处理”); } todoVos.add(todoVo); } return todoVos; } 这里产生了一个概念——签收与未签收 未签收就是当前用户没有被访问到的任务,所谓的任务当然就是待办了,这样就容易理解了。 你们看签收与未签收的代码有哪里不同? taskCandidateUser(userId) 未签收 taskAssignee(userId) 签收 拿到签收与未签收的任务之后,我们看for循环里面做了什么,大家还知不知道 ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult(); 这两个得到的是什么? ProcessInstance 流程实例 ProcessDefinition 流程定义 剩下的代码我就不讲了,大家应该能看明白。 那么接下来的流程就是按照没一个节点一环一环处理,首先部门领导要签收一下,然后就是处理,即是否同意,同意交给了人事部,不同意就要进入调整,调整完又到了部门领导审批。人事部的处理,即同意了就要销假,不同意就继续调整。销假之后是否发送电子邮件,最后到流程结束,其实之后的操作都不复杂,几个api就搞定了。