/**
* 启动流程
*
* @param personal 申请人
* @param day 请假天数
* @param reason 请假原因
* @return
*/
@RequestMapping("/start")
public synchronized String startProcess(@RequestParam String personal, @RequestParam String day, @RequestParam String reason) {
try {
Map<String, Object> map = new HashMap<>();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ProcessInstance vacate = runtimeService.startProcessInstanceByKey("vacate", map);
//获取当前最新的任务
Task task = taskService.createTaskQuery().processInstanceId(vacate.getProcessInstanceId()).singleResult();
//受理人
if(Double.valueOf(day)<=7){
map.put("groupLeaderUsers", "组长1,组长2,组长3");
}else{
map.put("managerUsers", "经理1,经理2,经理3");
}
//填写申请(参数)
map.put("personal", personal);
map.put("day", day);
map.put("reason", reason);
map.put("state", "待处理");
map.put("createDate", formater.format(new Date()));
taskService.setVariables(task.getId(),map);
//申请人
taskService.setOwner(task.getId(),personal);
//申请任务完成
taskService.complete(task.getId());
return "提交成功";
} catch (Exception e) {
return e + "提交失败";
}
}
以请假流程为例,在启动流程并且填写申请,选择受理人
受理人认领任务后Activiti 历史任务表才会有任务办理人(可以根据该办理人获取未完成,已完成以及全部的任务):
/**
* 认领任务
*
* @param taskId 任务ID
* @param claimUser 认领人
* @return
*/
@GetMapping("/claim")
public String taskClaim(@RequestParam String taskId, @RequestParam String claimUser) {
try {
taskService.claim(taskId, claimUser);
return "认领成功";
} catch (Exception e) {
return e.getMessage() + "认领失败";
}
}