@BeforeClass public void before() { List<ProcessInstance> instances = runtimeService.createProcessInstanceQuery().list(); for (ProcessInstance instance : instances) { runtimeService.deleteProcessInstance(instance.getId(), "test"); historyService.deleteHistoricProcessInstance(instance.getId()); } List<HistoricProcessInstance> historicProcessInstances=historyService.createHistoricProcessInstanceQuery() .list(); for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); } }
for (ProcessDefinition processDefinition : processDefinitions) { completedProcessInstanceCountMap.put(processDefinition.getKey() + " (v" + processDefinition.getVersion() + ")", processEngine.getHistoryService().createHistoricProcessInstanceQuery().finished().processDefinitionId(processDefinition.getId()).count()); processEngine.getTaskService().createTaskQuery().count()); metrics.put("completedTaskCount", processEngine.getHistoryService().createHistoricTaskInstanceQuery().finished().count()); processEngine.getHistoryService().createHistoricTaskInstanceQuery().finished().taskCompletedAfter( new Date(System.currentTimeMillis() - secondsForDays(1))).count()); processEngine.getHistoryService().createHistoricActivityInstanceQuery().finished().count());
@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; }
@Override public HistoricProcessInstance selectHisProInst(String procInstId) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstId).singleResult(); }
/** * 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; }
@GetMapping("/tasks") @Authorize(action = Permission.ACTION_QUERY) @ApiOperation("查询当前用户的历史任务信息") public ResponseMessage<PagerResult<TaskInfo>> getHistory(QueryParamEntity query, Authentication authentication) { HistoricTaskInstanceQuery historyQuery = historyService.createHistoricTaskInstanceQuery(); historyQuery.taskAssignee(authentication.getUser().getId()); PagerResult<TaskInfo> result = QueryUtils.doQuery(historyQuery, query, TaskInfo::of, (term, q) -> { if ("status".equals(term.getColumn())) { switch (String.valueOf(term.getValue())) { case "finished": q.finished(); break; case "processFinished": q.processFinished(); break; default: break; } } }); return ResponseMessage.ok(result).exclude(query.getExcludes()).include(query.getIncludes()); }
List<HistoricTaskInstance> taskInstances = historyService.createHistoricTaskInstanceQuery().taskInvolvedUser (userId).finished().orderByTaskCreateTime().desc().list(); for (HistoricTaskInstance taskInstance : taskInstances) { List<HistoricProcessInstance> instances = historyService.createHistoricProcessInstanceQuery().startedBy(userId).list(); for (HistoricProcessInstance instance : instances) { processInstanceIdSet.add(instance.getId()); HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().processInstanceIds(processInstanceIdSet); if (!StrUtil.isEmpty(userId)) query.involvedUser(userId);
@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); }
/** * Get all variable updates for task instance, latest updates on top * * @param taskId String * @return Map */ public Map<String, Object> getHistoricTaskVariables(String taskId) { HistoricDetailQuery query = activitiUtil.getHistoryService() .createHistoricDetailQuery() .taskId(taskId); return getHistoricVariables(query); }
@Override public List<TaskHistoryVo> records(String busykey) { List<TaskHistoryVo> result = new ArrayList<TaskHistoryVo>(); List<HistoricTaskInstance> instances = historyService.createHistoricTaskInstanceQuery().processInstanceBusinessKey(busykey).list(); if (instances != null) { for (HistoricTaskInstance historicTaskInstance : instances) { List<HistoricVariableInstance> v = historyService.createHistoricVariableInstanceQuery().taskId(historicTaskInstance.getId()).list(); Map<String, Object> maxps = new HashMap<String, Object>(); if (v != null) { for (HistoricVariableInstance historicVariableInstance : v) { maxps.put(historicVariableInstance.getVariableName(), historicVariableInstance.getValue()); } } TaskHistoryVo vo = new TaskHistoryVo(); vo.setNote("" + maxps.get("note")); vo.setUser("" + maxps.get("user")); vo.setState("" + maxps.get("state")); vo.setAddDate(historicTaskInstance.getTime()); if (vo.getState() != null && !"null".equals(vo.getState())) { result.add(vo); } } } return result; }
/** * 获取指定历史流程的变量列表 */ public Map<String, Object> getHistoricProcessVariables(String processId) { List<HistoricVariableInstance> list = _processEngine.getHistoryService().createHistoricVariableInstanceQuery() .processInstanceId(processId).list(); Map<String, Object> vars = new HashMap<String, Object>(); for (HistoricVariableInstance var : list) { vars.put(var.getVariableName(), var.getValue()); } return vars; }
List<HistoricDetail> updates = historyService.createHistoricDetailQuery() .variableUpdates() .processInstanceId(task.getProcessInstanceId()) HistoricTaskInstance hti = historyService.createHistoricTaskInstanceQuery().taskId(task.getId()).singleResult(); assertNotNull(hti); assertEquals("admin", hti.getAssignee());
@RequestMapping(value = "/processinstance/delete/{instanceId}", method = RequestMethod.POST) @ResponseBody public Result deleteInstance(@PathVariable("instanceId") String id) { try { runtimeService.deleteProcessInstance(id, "流程实例管理界面删除"); historyService.deleteHistoricProcessInstance(id); return new Result(true); } catch (Exception ex) { return new Result(false, "删除实例失败", "失败原因:" + ex.getMessage()); } }
protected void generateReport(ProcessInstance processInstance) { // Report dataset is stored as historical variable as json HistoricVariableInstance historicVariableInstance = ProcessEngines.getDefaultProcessEngine() .getHistoryService() .createHistoricVariableInstanceQuery() .processInstanceId(processInstance.getId()) .variableName("reportData") .singleResult(); // Generate chart byte[] reportData = (byte[]) historicVariableInstance.getValue(); ChartComponent chart = ChartGenerator.generateChart(reportData); chart.setWidth(100, UNITS_PERCENTAGE); chart.setHeight(100, UNITS_PERCENTAGE); // Put chart on screen if (processDefinitionStartForm != null) { detailContainer.removeComponent(processDefinitionStartForm); processDefinitionStartForm = null; } detailContainer.addComponent(chart); // The historic process instance can now be removed from the system // Only when save is clicked, the report will be regenerated ProcessEngines.getDefaultProcessEngine().getHistoryService().deleteHistoricProcessInstance(processInstance.getId()); }
@Override public String getStartUserId(String taskId) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(task.getProcessInstanceId()) .singleResult(); return historicProcessInstance.getStartUserId(); }
HistoricProcessInstance instance=historyService.createHistoricProcessInstanceQuery() .processInstanceId(instanceId).singleResult(); processDefinitionId=instance.getProcessDefinitionId(); .createHistoricActivityInstanceQuery() .processInstanceId(instanceId).orderByHistoricActivityInstanceStartTime().asc().list();
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 assertHistoricTasksDeleteReason(ProcessInstance processInstance, String expectedDeleteReason, String ... taskNames) { if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.AUDIT)) { for (String taskName : taskNames) { List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstance.getId()).taskName(taskName).list(); assertTrue(historicTaskInstances.size() > 0); for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) { assertNotNull(historicTaskInstance.getEndTime()); if (expectedDeleteReason == null) { assertNull(historicTaskInstance.getDeleteReason()); } else { assertTrue(historicTaskInstance.getDeleteReason().startsWith(expectedDeleteReason)); } } } } }
@Override public void execute(ActivityExecution execution) throws Exception { String processInstanceId = (String) execution.getVariable(PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); HistoryService historyService = (HistoryService) Context.getProcessEngineConfiguration().getBeans().get(PLAYBACK_HISTORY_SERVICE); // get process variables for the current activityId HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityId( execution.getCurrentActivityId() ) .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()); } execution.setVariables(variables); PvmTransition transition = execution.getActivity().getOutgoingTransitions().get(0); execution.take(transition); }
/** * Get all variable updates for activity, latest updates on top * * @param activityId String * @return Map */ public Map<String, Object> getHistoricActivityVariables(String activityId) { HistoricDetailQuery query = activitiUtil.getHistoryService() .createHistoricDetailQuery() .activityInstanceId(activityId); return getHistoricVariables(query); }