【Activiti】從入門到放棄——專案實戰之檢視任務
阿新 • • 發佈:2018-12-07
引入
當我們流程啟動後,會產生對應私人任務或公有任務,只要對應的辦理者或候選人,檢視任務後,進行認領,辦理等操作。整個流程才能走完。我們先來看檢視任務。
分析
當用戶登入系統後,要有個地方查詢自己的任務,這時我們專門準備一個選單來展示任務,當然任務又分私人任務和公有任務。需要區分對待。
1、提供一個“任務管理”的一級選單,在該選單下面有“待辦任務(私人任務)”和“可接任務(公共任務)”
2、需要通過Controller跳轉頁面
3、每個二級選單需要調整一個管理介面
實現
選單:
選單,Controller,頁面
列表:
返回值List
注意:在CommonUtil中針對任務建立日期的建立日期做格式化。
跳轉到代辦任務首頁
核心程式碼如下:
//跳轉到待辦任務的管理介面
///workFlow/personalTask/index
@RequestMapping("/personalTask/index")
public String personalTask()
{
return "workFlow/personalTask";
}
查詢代辦任務列表
程式碼如下:
@RequestMapping("/listPersonalTasks") @ResponseBody public List<Map<String,Object>> listPersonalTasks() { //把Session裡面使用者傳入Service,降低Service與web層耦合 String assignee = UserContext.getUser().getNickname(); return workFlowService.listPersonalTasks(assignee); }
service層程式碼:
@Override public List<Map<String, Object>> listPersonalTasks(String assignee) { //建立查詢物件 TaskQuery query = taskService.createTaskQuery(); //設定查詢條件 query.taskAssignee(assignee); query.orderByProcessDefinitionId().desc();//相同規則放到一起 query.orderByTaskCreateTime().desc();//按時間倒序 //做查詢-List<Task> List<Task> list = query.list(); //宣告要返回型別 List<Map<String, Object>> result = new ArrayList<>(); //轉換 for (Task task : list) { //一個task就是一個map result.add(task2map(task)); } //返回 return result; } private Map<String, Object> task2map(Task task) { Map<String, Object> obj2map = CommUtil .obj2map(task, new String[] { "id", "name", "assignee", "createTime", "description" }); //為了構造動態表單,需要將formKey businessObjType businessObjId這三個引數和task屬性一起返回 obj2map.put("businessObjType", getBusinessObjType(task)); obj2map.put("businessObjId", getBusinessObjId(task)); obj2map.put("formKey", getFormKey(task)); return obj2map; } private String getFormKey(Task task) { String formKey = task.getFormKey(); return formKey; } private Long getBusinessObjId(Task task) { return taskService.getVariable(task.getId(), "businessObjId", Long.class); } private String getBusinessObjType(Task task) { String businessObjType = taskService.getVariable(task.getId(), "businessObjType", String.class); businessObjType = businessObjType.substring(0, 1).toLowerCase()+businessObjType.substring(1); return businessObjType; } 工具類時間轉換: //獲取到的值,其中就有Date Object value = readMethod.invoke(source, new Object[0]); if (value instanceof Date) { //日期型別 Date dateValue = (Date) value; DateFormat df = new SimpleDateFormat(PATTERN); String dateStr = df.format(dateValue); map.put(p, dateStr); }else{ map.put(p, value); }