【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);
					}

猜你喜欢

转载自blog.csdn.net/qq_43097451/article/details/84726524
今日推荐