aiciviti 查询历史流程实例
需求
用户和管理员有时候需要统计,有多少个业务实例通过了审核,这个时候需要查询指定流程下的已完成的流程实例,用做后期的统计
根据流程定义key,依赖historyservice服务来完成
代码
public Map processState(@RequestParam Integer num,@RequestParam String processDefinitionKey,
@RequestParam Integer size ){
SearchStartedProcess searchStartedProcess = new SearchStartedProcess();
searchStartedProcess.setProcessDefinitionKey(processDefinitionKey);
//searchStartedProcess.setProcessDefinitionName(processDefinitionName);
if (num <= 1)
num = 1;
if (size <= 1)
size = 0xf423f;
int start = (num - 1) * size;
int limit = size*num;
HistoryService historyService = processEngine.getHistoryService();
//创建历史流程实例,查询对象
// HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
// List<HistoricProcessInstance> lists = historicProcessInstanceQuery.list();
HistoricProcessInstanceQuery taskQuery = getTaskQuery(searchStartedProcess);
//数据列表
List<HistoricProcessInstance> list = taskQuery.list();
for (HistoricProcessInstance historicProcessInstance : list) {
System.out.println("===================");
System.out.println("流程实例所属流程定义id:" + historicProcessInstance.getProcessDefinitionId());
System.out.println("流程实例id:"+ historicProcessInstance.getId());
System.out.println("业务标识:" + historicProcessInstance.getBusinessKey());
System.out.println("开始执行时间:" + historicProcessInstance.getStartTime());
System.out.println("结束执行时间:" + historicProcessInstance.getEndTime());
System.out.println("执行时长:" + historicProcessInstance.getDurationInMillis());
}
total = list.size();
List listss = new ArrayList();
listss=list.subList(start, (limit>total?total:(limit)));
Map map = new HashMap();
map.put("list",listss);
map.put("total",total);
map.put("pageSize",size);
map.put("pageNum",num);
return map;
}
//流程实例查询条件的过滤
private HistoricProcessInstanceQuery getTaskQuery(SearchStartedProcess searchStartedProcess) {
HistoryService historyService = processEngine.getHistoryService();
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
if (searchStartedProcess != null) {
Authentication auth= SecurityContextHolder.getContext().getAuthentication();
String creator=auth.getName();
String processDefinitionKey = searchStartedProcess.getProcessDefinitionKey();
if (StringUtils.isNotEmpty(processDefinitionKey)) {
historicProcessInstanceQuery = historicProcessInstanceQuery.processDefinitionKey(processDefinitionKey);
}
// String processDefinitionName = searchStartedProcess.getProcessDefinitionName();
// if (StringUtils.isNotEmpty(processDefinitionName)) {
// historicProcessInstanceQuery = historicProcessInstanceQuery.processDefinitionName(processDefinitionName);
// }
/*taskQuery.taskCreatedBefore();
taskQuery.taskCreatedAfter()
*/
}
return historicProcessInstanceQuery;
}