相关文章
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;
}