import org.activiti.engine.task.NativeTaskQuery; //導入依賴的package包/類
/**
* 讀取啟動流程的表單字段
*/
@RequestMapping(value = "task/list")
public ModelAndView todoTasks(HttpServletRequest request, @RequestParam(value = "taskName", required = false) String taskName) throws Exception {
String viewName = "chapter6/task-list";
ModelAndView mav = new ModelAndView(viewName);
User user = UserUtil.getUserFromSession(request.getSession());
Page page = new Page(PageUtil.PAGE_SIZE);
int[] pageParams = PageUtil.init(page, request);
NativeTaskQuery nativeTaskQuery = taskService.createNativeTaskQuery();
LeaveJpaEntity leave = leaveEntityManager.getLeave(1l);
System.out.println(leave);
/*
過濾條件
*/
String filters = "";
if (StringUtils.isNotBlank(taskName)) {
filters += " and RES.NAME_ like #{taskName}";
nativeTaskQuery.parameter("taskName", "%" + taskName + "%");
mav.addObject("taskName", taskName);
}
// 當前人在候選人或者候選組範圍之內
String sql = "select distinct RES.* from ACT_RU_TASK RES left join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_ WHERE SUSPENSION_STATE_ = '1' and " +
" ( RES.ASSIGNEE_ = #{userId}" +
" or (RES.ASSIGNEE_ is null and ( I.USER_ID_ = #{userId} or I.GROUP_ID_ IN (select G.GROUP_ID_ from ACT_ID_MEMBERSHIP G where G.USER_ID_ = #{userId} ) )" +
") )" + filters + " order by RES.CREATE_TIME_ desc";
nativeTaskQuery.sql(sql).parameter("userId", user.getId());
List tasks = nativeTaskQuery.listPage(pageParams[0], pageParams[1]);
page.setResult(tasks);
page.setTotalCount(nativeTaskQuery.sql("select count(*) from (" + sql + ")").count());
// 從5.16版本開始可以使用以下方式
/*TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(user.getId());
page.setTotalCount(taskQuery.count());
page.setResult(taskQuery.list());
mav.addObject("tasks", tasks);*/
mav.addObject("page", page);
return mav;
}