if (historicActivityInstances != null && historicActivityInstances.size() > 0) { for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { assertEquals(processInstanceId, historicActivityInstance.getProcessInstanceId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no activity id", historicActivityInstance.getActivityId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no activity type", historicActivityInstance.getActivityType()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no process definition id", historicActivityInstance.getProcessDefinitionId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no process instance id", historicActivityInstance.getProcessInstanceId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no execution id", historicActivityInstance.getExecutionId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no start time", historicActivityInstance.getStartTime()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no end time", historicActivityInstance.getEndTime());
/** * find out single activity's highlighted flowIds * * @param activity * @param hisActInstList * @param isExclusive if true only return one flowId(Such as exclusiveGateway, BoundaryEvent On Task) * @return */ private List<String> getHighlightedFlows(List<PvmTransition> pvmTransitionList, LinkedList<HistoricActivityInstance> hisActInstList, boolean isParallel) { List<String> highLightedFlowIds = new ArrayList<String>(); PvmTransition earliestTrans = null; HistoricActivityInstance earliestHisActInst = null; for (PvmTransition pvmTransition : pvmTransitionList) { String destActId = pvmTransition.getDestination().getId(); HistoricActivityInstance destHisActInst = findHisActInst(hisActInstList, destActId); if (destHisActInst != null) { if (isParallel) { highLightedFlowIds.add(pvmTransition.getId()); } else if (earliestHisActInst == null || (earliestHisActInst.getId().compareTo(destHisActInst.getId()) > 0)) { earliestTrans = pvmTransition; earliestHisActInst = destHisActInst; } } } if ((!isParallel) && earliestTrans != null) { highLightedFlowIds.add(earliestTrans.getId()); } return highLightedFlowIds; }
String firstActType = (String) firstHistActInst.getActivityType(); if (firstActType != null && firstActType.toLowerCase().indexOf("startevent") < 0) { PvmTransition startTrans = getStartTransaction(startEventActList, firstHistActInst); ActivityImpl activity = activityMap.get(histActInst.getActivityId()); if (activity != null) { boolean isParallel = false; String type = histActInst.getActivityType(); if ("parallelGateway".equals(type) || "inclusiveGateway".equals(type)) { isParallel = true; } else if ("subProcess".equals(histActInst.getActivityType())) { getHighlightedFlows(activity.getActivities(), hisActInstList, 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)); } } } } }
public HistoricActivityInstanceResponse createHistoricActivityInstanceResponse(HistoricActivityInstance activityInstance, RestUrlBuilder urlBuilder) { HistoricActivityInstanceResponse result = new HistoricActivityInstanceResponse(); result.setActivityId(activityInstance.getActivityId()); result.setActivityName(activityInstance.getActivityName()); result.setActivityType(activityInstance.getActivityType()); result.setAssignee(activityInstance.getAssignee()); result.setCalledProcessInstanceId(activityInstance.getCalledProcessInstanceId()); result.setDurationInMillis(activityInstance.getDurationInMillis()); result.setEndTime(activityInstance.getEndTime()); result.setExecutionId(activityInstance.getExecutionId()); result.setId(activityInstance.getId()); result.setProcessDefinitionId(activityInstance.getProcessDefinitionId()); result.setProcessDefinitionUrl(urlBuilder.buildUrl(RestUrls.URL_PROCESS_DEFINITION, activityInstance.getProcessDefinitionId())); result.setProcessInstanceId(activityInstance.getProcessInstanceId()); result.setProcessInstanceUrl(urlBuilder.buildUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE, activityInstance.getId())); result.setStartTime(activityInstance.getStartTime()); result.setTaskId(activityInstance.getTaskId()); result.setTenantId(activityInstance.getTenantId()); return result; }
protected void printActivityInstanceInfo(HistoricActivityInstance actInst) { LinkedHashMap<String, String> nvMap = new LinkedHashMap<String, String>(); nvMap.put("Activity ID", actInst.getActivityId()); if (!this.isQuiet()) { nvMap.put("Activity Type", actInst.getActivityType()); } nvMap.put("Activity Name", actInst.getActivityName()); if (!this.isQuiet()) { nvMap.put("Execution ID", actInst.getExecutionId()); } nvMap.put("Start Time", Commands.UTIL.formatDate(actInst.getStartTime())); nvMap.put("End Time", Commands.UTIL.formatDate(actInst.getEndTime())); if (!this.isQuiet()) { nvMap.put("Duration", Commands.UTIL.formatDuration(actInst.getDurationInMillis())); } PrintWriter out = new PrintWriter(out(), true); Commands.UTIL.printNameValues(out, nvMap); // print activity vars this.getPrintHandler().printActivityData(out, this.isVerbose(), this.isQuiet(), actInst); out().println("-------------"); }
.list(); for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { System.out.println("任务ID:" + historicActivityInstance.getId()); System.out.println("流程实例ID:" + historicActivityInstance.getProcessInstanceId()); System.out.println("活动名称:" + historicActivityInstance.getActivityName()); System.out.println("办理人:" + historicActivityInstance.getAssignee()); System.out.println("开始时间:" + historicActivityInstance.getStartTime()); System.out.println("结束时间:" + historicActivityInstance.getEndTime()); System.out.println("===========================");
private HistoricActivityInstance findHisActInst(LinkedList<HistoricActivityInstance> hisActInstList, String actId) { for (HistoricActivityInstance hisActInst : hisActInstList) { if (hisActInst.getActivityId().equals(actId)) { return hisActInst; } } return null; } }
/** * Populates the job Object with completed workflow steps. * * @param job, the Job object * @param historicActivitiTasks, the completed activiti steps */ private void populateCompletedActivitiSteps(Job job, List<HistoricActivityInstance> historicActivitiTasks) { // Set completed steps List<WorkflowStep> completedWorkflowSteps = new ArrayList<>(); for (HistoricActivityInstance historicActivityInstance : historicActivitiTasks) { completedWorkflowSteps.add(new WorkflowStep(historicActivityInstance.getActivityId(), historicActivityInstance.getActivityName(), HerdDateUtils.getXMLGregorianCalendarValue(historicActivityInstance.getStartTime()), HerdDateUtils.getXMLGregorianCalendarValue(historicActivityInstance.getEndTime()))); } job.setCompletedWorkflowSteps(completedWorkflowSteps); }
if (historicActivityInstances != null && historicActivityInstances.size() > 0) { for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { assertEquals(processInstanceId, historicActivityInstance.getProcessInstanceId()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no start time", historicActivityInstance.getStartTime()); assertNotNull("Historic activity instance " + historicActivityInstance.getActivityId() + " has no end time", historicActivityInstance.getEndTime());
@Override public void printActivityData(PrintWriter out, boolean verbose, boolean quite, HistoricActivityInstance actInst) { this.setVerbose(verbose); this.setQuiet(quite); if (quite) { // don't print activity variable update per activity return; } List<HistoricDetail> varList = null; try { varList = this.processEngine.getHistoryService().createHistoricDetailQuery() .variableUpdates().activityInstanceId(actInst.getId()).orderByTime().desc().list(); } catch (ActivitiException ex) { //silent about the error. and log it. LOG.log(Level.INFO, "Error in getting process variables. " + ex.getMessage(), ex); } if (varList != null && varList.size() > 0) { out.println("-------- Task Variables"); printVariables(out, varList); } else { LOG.info("------ No Task Variables! for " + actInst.getActivityId()); } }
private SlpTaskState calculateTaskState(Step step, HistoricActivityInstance historicActivity) { StepMetadata currentStepMetadata = step.getStepMetadata(); if (historicActivity.getId().equals(processState.getCurrentTaskId())) { processState.setCurrentReached(true); return processState.getCurrentTaskState(); } SlpTaskState targetState = currentStepMetadata.getTargetState(); SlpTaskState defaultTargetState = null; if (historicActivity.getEndTime() != null) { return SlpTaskState.SLP_TASK_STATE_FINISHED; } if (historicActivity.getActivityType().equals("receiveTask")) { defaultTargetState = SlpTaskState.SLP_TASK_STATE_ACTION_REQUIRED; } else { defaultTargetState = SlpTaskState.SLP_TASK_STATE_RUNNING; } SlpTaskState state = targetState != null ? targetState : defaultTargetState; return state; }
/** * 当前节点是否已经在执行节点中 * * @param historicActivityInstanceList 已近执行的任务节点 * @param activity 判断节点 * @return false 不在完成节点中 true 在完成节点中 */ public boolean findInDoneActivityList(List<HistoricActivityInstance> historicActivityInstanceList, PvmActivity activity) { for (HistoricActivityInstance activityVo : historicActivityInstanceList) { if (activityVo.getActivityId().equals(activity.getId()) && activityVo.getEndTime() == null) { return false; } } for (HistoricActivityInstance activityVo : historicActivityInstanceList) { if (activityVo.getActivityId().equals(activity.getId()) && activityVo.getEndTime() != null) { return true; } } return false; }
private String findCurrentTaskId(List<HistoricActivityInstance> historicInstances, List<ProgressMessage> progressMessages) { Date currentTaskStartTime = null; String currentTaskId = null; for (HistoricActivityInstance historicInstance : historicInstances) { if (currentTaskStartTime == null || currentTaskStartTime.before(historicInstance.getStartTime())) { currentTaskStartTime = historicInstance.getStartTime(); currentTaskId = historicInstance.getId(); } } LOGGER.debug("Last known execution time from historic activities: " + currentTaskStartTime); for (ProgressMessage progressMessage : progressMessages) { if (currentTaskStartTime == null || currentTaskStartTime.before(progressMessage.getTimestamp())) { currentTaskStartTime = progressMessage.getTimestamp(); currentTaskId = progressMessage.getTaskId(); } } LOGGER.debug("Last known execution time from progress messagses: " + currentTaskStartTime); return currentTaskId; }
/** * get var updates in the node * @param historicActivityInstance * @return */ private Map<String, Object> getVarUpdates(HistoricActivityInstance historicActivityInstance) { Map<String, Object> updates = new HashMap<String,Object>(); List<HistoricDetail> historicUpdates = historyService.createHistoricDetailQuery() .processInstanceId( historicActivityInstance.getProcessInstanceId()) .activityInstanceId( historicActivityInstance.getId()) .variableUpdates() .list(); for (HistoricDetail historicDetail : historicUpdates) updates.put( ((HistoricVariableUpdate) historicDetail).getVariableName(), ((HistoricVariableUpdate) historicDetail).getValue()); return updates; }
@Override public List<ActivitiTask> createTask(Step step) { int index = processState.getTaskIndexProvider().getTaskIndex(step.getStepMetadata().getId()); HistoricActivityInstance historicActivity = step.getHistoricActivityInstance(); Date startTime = historicActivity.getStartTime(); Date endTime = historicActivity.getEndTime(); SlpTaskState state = calculateTaskState(step, historicActivity); double progress = endTime == null ? 0 : 100; StepMetadata stepMetadata = step.getStepMetadata(); String taskId = stepMetadata.getId() + index; return Arrays.asList(new ActivitiTask(taskId, stepMetadata.getDisplayName(), stepMetadata.getDescription(), stepMetadata, state, startTime, endTime, progress, Collections.<ProgressMessage> emptyList(), null, Collections.<String, String> emptyMap(), parentId)); }
@Override public long simulateTaskExecution(TaskEntity execTask, Map<String, Object> variables) { String playbackProcessInstanceId = (String) runtimeService.getVariable(execTask.getExecutionId(), PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); // activity instance has to by only one HistoricActivityInstance activityInstance = playbackHistoryService.createHistoricActivityInstanceQuery() .processInstanceId(playbackProcessInstanceId) .activityId(execTask.getTaskDefinitionKey()) .singleResult(); if ( activityInstance == null ) //use backupExecutor return backUpExecutor.simulateTaskExecution(execTask, variables); List<HistoricDetail> playbackDetails = playbackHistoryService.createHistoricDetailQuery() .activityInstanceId(activityInstance.getId()) .processInstanceId(playbackProcessInstanceId) .variableUpdates() .list(); // fulfill variables for ( HistoricDetail detail : playbackDetails) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } //@TODO change in version 5.12 return activityInstance.getDurationInMillis(); }
for (HistoricActivityInstance historicActivityInstance : historicActivityInstanceList) { if (!historicActivityInstance.getActivityType().equals("userTask") && !historicActivityInstance .getActivityType().equals("startEvent")) continue; ActivityVo vo = new ActivityVo(); BeanUtils.copyProperties(historicActivityInstance, vo); if (historicActivityInstance.getActivityType().equals("startEvent")) { vo.setAssigneeName(identityPageService.getUserNamesByUserIds (processInstance==null?startUserId:getStartUserId
HistoricActivityInstance prev = null; for (HistoricActivityInstance activity : list) { LOGGER.fine("Handling: " + activity.getActivityName()); String activityName = activity.getActivityName(); if (prev != null) { TransitionArc ta = (TransitionArc) processGraphElements.get("__AWF__" + prev.getActivityName() + "_" + activityName); if (ta == null) { //look for default! ta = (TransitionArc) processGraphElements.get("__AWF__default_transition_" + prev.getActivityName()); if (sn == null) continue; sn = sn.cloneNode(); sn.setUnfinished(activity.getEndTime() == null); if (sn != null) { if (prev != null) { TransitionArc ta = (TransitionArc) processGraphElements.get("__AWF__" + prev.getActivityName() + "_" + sn.getLabel()); if (ta == null) { //look for default! ta = (TransitionArc) processGraphElements.get("__AWF__default_transition_" + prev.getActivityName());
/** * 获取历史审批结果和审批意见 * * @param activityInstance 历史任务节点 * @return */ public Map<String, String> getApproveMap(HistoricActivityInstance activityInstance) { //审批结果和审批意见为Local变量 Map<String, String> map = new HashMap<>(); if (StrUtil.isEmpty(activityInstance.getTaskId())) return map; List<HistoricVariableInstance> variableInstances = historyService.createHistoricVariableInstanceQuery() .processInstanceId(activityInstance.getProcessInstanceId()).taskId(activityInstance.getTaskId()).list(); for (HistoricVariableInstance variableInstance : variableInstances) { if (variableInstance.getVariableName().equals(Constants.APPROVE_RESULT)) { map.put(Constants.APPROVE_RESULT, variableInstance.getValue().toString()); } else { map.put(Constants.APPROVE_SUGGESTION, variableInstance.getValue().toString()); } } return map; }