流程图–接上篇
public Map<String, Object> getCoordingByTask(String taskId) {
// 存放坐标
Map<String, Object> map = new HashMap<String, Object>();
// 使用任务ID,查询任务对象
Task task = taskService.createTaskQuery()//
.taskId(taskId)// 使用任务ID查询
.singleResult();
// 获取流程定义的ID
String processDefinitionId = task.getProcessDefinitionId();
// 获取流程定义的实体对象(对应.bpmn文件中的数据)
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
// 流程实例ID
String processInstanceId = task.getProcessInstanceId();
// 使用流程实例ID,查询正在执行的执行对象表,获取当前活动对应的流程实例对象
ProcessInstance pi = runtimeService.createProcessInstanceQuery()// 创建流程实例查询
.processInstanceId(processInstanceId)// 使用流程实例ID查询
.singleResult();
// 获取当前活动的ID:从流程实例中获取,但是如果时多实例的话,将得不到相应的结果,需要从act_run_execution中获取
String activityId = pi.getActivityId();
// jatham 修改
if (activityId == null) {
// 流程实例业务id
String processInstanceBusinessKey = pi.getBusinessKey();
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceBusinessKey(processInstanceBusinessKey, true).list();
for (Execution e : executions) {
// TODO 这里没有对并行实例做封装
if (e.getActivityId() != null) {
activityId = e.getActivityId();
logger.debug("当前活动的节点id为:" + activityId + ";它的父节点id为:" + e.getParentId());
}
}
}
// 获取当前活动对象
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);// 活动ID
// 获取坐标
map.put("x", activityImpl.getX());
map.put("y", activityImpl.getY());
map.put("width", activityImpl.getWidth());
map.put("height", activityImpl.getHeight());
return map;
}