diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java index 81746af15..41d20462a 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java @@ -347,25 +347,56 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic @Override public BpmPageResult getAdminProcessInstancePage(BpmnProcessInstanceAdminPageReqVO dto) { - HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery(); + NativeHistoricProcessInstanceQuery query = historyService.createNativeHistoricProcessInstanceQuery(); + String tableName = managementService.getTableName(HistoricProcessInstance.class); + StringBuilder baseQuerySql = new StringBuilder("SELECT RES.*, ") + .append("DEF.KEY_ as PROC_DEF_KEY_,") + .append("DEF.NAME_ as PROC_DEF_NAME_,") + .append("DEF.VERSION_ as PROC_DEF_VERSION_,") + .append("DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_ FROM ") + .append(" FROM ").append(tableName) + .append(" RES LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_") + .append(" WHERE 1 = 1"); + + // HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery(); if (StringUtils.isNotBlank(dto.getName())) { - query.processInstanceNameLike(dto.getName()); + // query.processInstanceNameLike(dto.getName()); + baseQuerySql.append(" AND RES.NAME_ LIKE #{name}"); + query.parameter("name", "%" + dto.getName() + "%"); } if (StringUtils.isNotBlank(dto.getCategory())) { - query.processDefinitionCategory(dto.getCategory()); + // query.processDefinitionCategory(dto.getCategory()); + baseQuerySql.append(" AND DEF.CATEGORY_ = #{category}"); + query.parameter("category", dto.getCategory()); } - if (StringUtils.isNotBlank(dto.getTenantId())) { - query.processInstanceTenantId(dto.getTenantId()); + if (!CollectionUtils.isEmpty(dto.getTenantIds())) { + // query.processInstanceTenantId(); + baseQuerySql.append(" AND RES.TENANT_ID_ IN ("); + for (int i = 0; i < dto.getTenantIds().size(); i++) { + baseQuerySql.append("#{tenantId").append(i).append("}"); + if (i < dto.getTenantIds().size() - 1) { + baseQuerySql.append(","); + } + query.parameter("tenantId" + i, dto.getTenantIds().get(i)); + } + baseQuerySql.append(")"); } if (StringUtils.isNotBlank(dto.getBusinessStatus())) { - query.processInstanceBusinessStatus(dto.getBusinessStatus()); + // query.processInstanceBusinessStatus(dto.getBusinessStatus()); + baseQuerySql.append(" AND RES.BUSINESS_STATUS_ = #{businessStatus}'"); + query.parameter("businessStatus", dto.getBusinessStatus()); } if (Objects.nonNull(dto.getStartTime()) && Objects.nonNull(dto.getEndTime())) { - query.startedAfter(dto.getStartTime()); - query.startedBefore(dto.getEndTime()); + // query.startedAfter(dto.getStartTime()); + baseQuerySql.append(" AND RES.START_TIME_ >= #{startedAfter}"); + query.parameter("startedAfter", dto.getStartTime()); + baseQuerySql.append(" AND RES.START_TIME_ <= #{startedBefore}"); + query.parameter("startedBefore", dto.getEndTime()); } - List instances = query.orderByProcessInstanceStartTime().desc() - .listPage((dto.getPageNo() - 1) * dto.getPageSize(), dto.getPageSize()); + baseQuerySql.append(" ORDER BY RES.START_TIME_ DESC "); + List instances = query.sql(baseQuerySql.toString()) + .listPage((dto.getPageNo() - 1) * dto.getPageSize(), + dto.getPageSize()); if (CollectionUtils.isEmpty(instances)) { return BpmPageResult.empty();