private List<String> getHighLightedFlows(String processInstanceId, ProcessDefinitionEntity processDefinition) { List<String> highLightedFlows = new ArrayList<String>(); List<HistoricActivityInstance> historicActivityInstances = historyService .createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .orderByHistoricActivityInstanceStartTime().asc().list(); List<String> historicActivityInstanceList = new ArrayList<String>(); for (HistoricActivityInstance hai : historicActivityInstances) { historicActivityInstanceList.add(hai.getActivityId()); } // add current activities to list List<String> highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); historicActivityInstanceList.addAll(highLightedActivities); // activities and their sequence-flows for (ActivityImpl activity : processDefinition.getActivities()) { int index = historicActivityInstanceList.indexOf(activity.getId()); if (index >= 0 && index + 1 < historicActivityInstanceList.size()) { List<PvmTransition> pvmTransitionList = activity .getOutgoingTransitions(); for (PvmTransition pvmTransition : pvmTransitionList) { String destinationFlowId = pvmTransition.getDestination().getId(); if (destinationFlowId.equals(historicActivityInstanceList.get(index + 1))) { highLightedFlows.add(pvmTransition.getId()); } } } } return highLightedFlows; }
protected void assertHistoricActivitiesDeleteReason(ProcessInstance processInstance, String expectedDeleteReason, String ... activityIds) { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) { for (String activityId : activityIds) { List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery() .activityId(activityId).processInstanceId(processInstance.getId()).list(); assertTrue("Could not find historic activities", historicActivityInstances.size() > 0); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { assertNotNull(historicActivityInstance.getEndTime()); if (expectedDeleteReason == null) { assertNull(historicActivityInstance.getDeleteReason()); } else { assertTrue(historicActivityInstance.getDeleteReason().startsWith(expectedDeleteReason)); } } } } }
@GetMapping(value = "/process-instance/{processInstanceId}/highlights", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public Object getHighlighted(@PathVariable String processInstanceId) { JSONObject responseJSON = new JSONObject(); responseJSON.put("processInstanceId", processInstanceId); JSONArray activitiesArray = new JSONArray(); JSONArray flowsArray = new JSONArray(); HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService .getProcessDefinition(processInstance.getProcessDefinitionId()); responseJSON.put("processDefinitionId", processInstance.getProcessDefinitionId()); List<String> highLightedActivities; if (processInstance.getEndTime() != null) { highLightedActivities = historyService .createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityType("endEvent") .list().stream().map(HistoricActivityInstance::getActivityId) .collect(Collectors.toList()); } else { highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId); } List<String> highLightedFlows = getHighLightedFlows(processDefinition, processInstanceId); activitiesArray.addAll(highLightedActivities); flowsArray.addAll(highLightedFlows); responseJSON.put("activities", activitiesArray); responseJSON.put("flows", flowsArray); return responseJSON; }
/** * getHighLightedFlows * * @param processDefinition * @param processInstanceId * @return */ private List<String> getHighLightedFlows(ProcessDefinitionEntity processDefinition, String processInstanceId) { List<String> highLightedFlows = new ArrayList<String>(); List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) //order by startime asc is not correct. use default order is correct. //.orderByHistoricActivityInstanceStartTime().asc()/*.orderByActivityId().asc()*/ .list(); LinkedList<HistoricActivityInstance> hisActInstList = new LinkedList<HistoricActivityInstance>(); hisActInstList.addAll(historicActivityInstances); getHighlightedFlows(processDefinition.getActivities(), hisActInstList, highLightedFlows); return highLightedFlows; }
/** * 查询指定任务节点的最新记录 * * @param processInstance * 流程实例 * @param activityId * @return */ public List<HistoricActivityInstance> findHistoricUserTask(String instanceId) { // 查询当前流程实例审批结束的历史节点 List<HistoricActivityInstance> historicActivityInstances = historyService .createHistoricActivityInstanceQuery().activityType("userTask") .processInstanceId(instanceId).finished() .orderByHistoricActivityInstanceEndTime().desc().list(); return historicActivityInstances; }
@Override public void processEndedAndInExclusiveEndEvent(final String processInstanceId, final String endEventId) { // Assert the process instance is ended getAssertFactory().getProcessInstanceAssertable(callback).processIsEnded(processInstanceId); // Assert that there is exactly one historic activity instance for end // events and that it has the correct id callback.trace(LogMessage.PROCESS_10, processInstanceId, endEventId); final List<HistoricActivityInstance> historicActivityInstances = getHistoryService().createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId).activityType("endEvent").finished().list(); Assert.assertThat(historicActivityInstances.size(), is(1)); Assert.assertThat(historicActivityInstances.get(0).getActivityId(), is(endEventId)); }
public String getActivityType(String processInstanceId, String activityId) { HistoricActivityInstance historicInstance = engine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId( processInstanceId).activityId(activityId).singleResult(); return historicInstance != null ? historicInstance.getActivityType() : null; }
.processInstanceId("5") // 指定流程实例id .finished() // 查询已经完成的任务 .orderByHistoricActivityInstanceEndTime() .asc() .list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId());
query.activityId(queryRequest.getActivityId()); query.activityInstanceId(queryRequest.getActivityInstanceId()); query.activityName(queryRequest.getActivityName()); query.activityType(queryRequest.getActivityType()); query.executionId(queryRequest.getExecutionId()); Boolean finished = queryRequest.getFinished(); if (finished) { query.finished(); } else { query.unfinished(); query.taskAssignee(queryRequest.getTaskAssignee()); query.processInstanceId(queryRequest.getProcessInstanceId()); query.processDefinitionId(queryRequest.getProcessDefinitionId()); query.activityTenantId(queryRequest.getTenantId()); query.activityTenantIdLike(queryRequest.getTenantIdLike()); query.activityWithoutTenantId();
.orderByHistoricActivityInstanceStartTime() .asc() .list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId());
HistoricActivityInstance getHistoricActivitiInstance(String processId, String activityType) { return engine.getHistoryService().createHistoricActivityInstanceQuery().activityType(activityType).processInstanceId( processId).singleResult(); }
.orderByHistoricActivityInstanceEndTime() .asc() .list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId());
@Override public void evaluate(SimulationRunEntity simulationRun) { if (simulationRun != null) { long count = SimulationRunContext.getHistoryService().createHistoricActivityInstanceQuery() .processDefinitionId( processDefinitionId) .activityId(activityId) .count(); if ( count> 0) { RuntimeService runtimeService = SimulationContext.getSimulationEngineConfiguration().getRuntimeService(); Map<String, Object> resultVariables = new HashMap<String, Object>(); resultVariables.put("processDefinitionKey", processDefinitionId); resultVariables.put("taskDefinitionKey", activityId); resultVariables.put( "description", Long.toString( count)); runtimeService.saveResult(type, resultVariables); } } }
.processInstanceId(processInstanceId).list(); if (historicActivityInstances != null && historicActivityInstances.size() > 0) { for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
.processInstanceId(processInstanceId).activityType("endEvent").finished().list();
/** * @param historicProcessInstance HistoricProcessInstance * @return Map */ public Map<String, Object> getStartVariables(HistoricProcessInstance historicProcessInstance) { if (historicProcessInstance.getStartActivityId() == null) { return Collections.emptyMap(); } // Get historic variable values for start-event HistoricActivityInstance startEvent = activitiUtil.getHistoryService() .createHistoricActivityInstanceQuery() .processInstanceId(historicProcessInstance.getId()) .activityId(historicProcessInstance.getStartActivityId()) .singleResult(); Map<String, Object> variables = getHistoricActivityVariables(startEvent.getId()); return variables; }
@Override public void handle(SimulationEvent event) { // start process now String processInstanceId = (String) event.getProperty(PROCESS_INSTANCE_ID); // get process variables for startEvent HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityType("startEvent") .singleResult(); List<HistoricDetail> details = historyService.createHistoricDetailQuery() .processInstanceId( processInstanceId ) .activityInstanceId( activityInstance.getId()) .variableUpdates() .list(); // fulfill variables Map<String, Object> variables = new HashMap<String,Object>(); for ( HistoricDetail detail : details) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } variables.put( PROCESS_INSTANCE_ID, processInstanceId); log.debug("[{}] Starting new processKey[{}] properties[{}]", ClockUtil.getCurrentTime(), processToStartKey, variables); SimulationRunContext.getRuntimeService().startProcessInstanceByKey( processToStartKey, variables); }
.processInstanceId(instanceId).orderByHistoricActivityInstanceStartTime().asc().list();