1. 程式人生 > >【Activiti】從入門到放棄——專案實戰之檢視任務

【Activiti】從入門到放棄——專案實戰之檢視任務

引入
當我們流程啟動後,會產生對應私人任務或公有任務,只要對應的辦理者或候選人,檢視任務後,進行認領,辦理等操作。整個流程才能走完。我們先來看檢視任務。
分析
當用戶登入系統後,要有個地方查詢自己的任務,這時我們專門準備一個選單來展示任務,當然任務又分私人任務和公有任務。需要區分對待。
1、提供一個“任務管理”的一級選單,在該選單下面有“待辦任務(私人任務)”和“可接任務(公共任務)”
2、需要通過Controller跳轉頁面
3、每個二級選單需要調整一個管理介面
在這裡插入圖片描述
實現
選單:
選單,Controller,頁面
列表:
返回值List
先通過id把整體流程跑通,再新增其他屬性。

注意:在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);
					}