diff --git a/pom.xml b/pom.xml index e3676b268..17d35aa02 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 3.2.5 3.26.0 7.14.0 - 2.0.0-beta7 + 2.0.0 diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/es/InstanceSearchReqDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/es/InstanceSearchReqDTO.java index a1629cfff..5ada6095f 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/es/InstanceSearchReqDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/es/InstanceSearchReqDTO.java @@ -22,11 +22,9 @@ import java.util.List; public class InstanceSearchReqDTO extends BpmPageParam { @ApiModelProperty(value = "审批人所属租户 ID") - @NotBlank(message = "租户 ID 不能为空") private String tenantId; @ApiModelProperty(value = "审批人所属单位 ID") - @NotBlank(message = "单位 ID 不能为空") private String ouId; @ApiModelProperty(value = "审批人自然人 ID") diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/es/ProcessTaskDocumentVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/es/ProcessTaskDocumentVO.java index 37d707ae6..1c486aa33 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/es/ProcessTaskDocumentVO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/es/ProcessTaskDocumentVO.java @@ -20,16 +20,6 @@ public class ProcessTaskDocumentVO { */ private String taskId; - /** - * 归属的流程实例 ID - */ - private String processInstanceId; - - /** - * 归属的流程实例定义 ID - */ - private String processDefinitionId; - /** * 任务定义 KEY,对应节点 ID */ diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessInstanceDocument.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessInstanceDocument.java index dad146e98..100d07c73 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessInstanceDocument.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessInstanceDocument.java @@ -10,6 +10,7 @@ import org.dromara.easyes.annotation.Node; import org.dromara.easyes.annotation.Settings; import org.dromara.easyes.annotation.rely.FieldType; import org.dromara.easyes.annotation.rely.IdType; +import org.dromara.easyes.annotation.rely.RefreshPolicy; import java.util.Date; @@ -23,7 +24,7 @@ import static org.dromara.easyes.annotation.rely.Analyzer.IK_MAX_WORD; */ @Data @Settings(settingsProvider = CustomIndexSettingProvider.class) -@IndexName(value = "process_instance_document", keepGlobalPrefix = true) +@IndexName(value = "process_instance_document", keepGlobalPrefix = true, refreshPolicy = RefreshPolicy.IMMEDIATE) @Join(nodes = {@Node(parentClass = ProcessInstanceDocument.class, parentAlias = "process_instance_document", childClasses = {ProcessTaskDocument.class}, childAliases = {"process_task_document"})}) public class ProcessInstanceDocument { @@ -31,6 +32,9 @@ public class ProcessInstanceDocument { * 流程实例 ID */ @IndexId(type = IdType.CUSTOMIZE) + private String id; + + @IndexField(fieldType = FieldType.KEYWORD) private String instanceId; /** diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessTaskDocument.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessTaskDocument.java index 497d06bff..fe328e8c8 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessTaskDocument.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/model/ProcessTaskDocument.java @@ -24,18 +24,6 @@ public class ProcessTaskDocument { @IndexId(type = IdType.CUSTOMIZE) private String taskId; - /** - * 归属的流程实例 ID - */ - @IndexField(fieldType = FieldType.KEYWORD) - private String processInstanceId; - - /** - * 归属的流程实例定义 ID - */ - @IndexField(fieldType = FieldType.KEYWORD) - private String processDefinitionId; - /** * 任务定义 KEY,对应节点 ID */ diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessInstanceService.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessInstanceService.java index d2e933a9d..cb9950846 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessInstanceService.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessInstanceService.java @@ -60,6 +60,7 @@ public class AggregateProcessInstanceService { return Collections.emptyList(); } ProcessInstanceDocument processInstanceDocument = new ProcessInstanceDocument(); + processInstanceDocument.setId(hpi.getId()); processInstanceDocument.setInstanceId(hpi.getId()); processInstanceDocument.setProcessInstanceName(hpi.getName()); processInstanceDocument.setBusinessKey(hpi.getBusinessKey()); @@ -115,7 +116,6 @@ public class AggregateProcessInstanceService { .max(Comparator.comparing(ProcessTaskDocument::getTaskEndTime)) .ifPresent(processTaskDocument -> { processInstanceDocument.setLastOperationTime(processTaskDocument.getTaskEndTime()); - esProcessInstanceService.update(ES_FIXED_ROUTING, processInstanceDocument); }); } else { processInstanceDocument.setLastOperationTime(null); diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessTaskService.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessTaskService.java index c3435cdad..7ebef37b7 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessTaskService.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/aggregation/AggregateProcessTaskService.java @@ -80,8 +80,6 @@ public class AggregateProcessTaskService { logs.forEach(log -> { ProcessTaskDocument processTaskDocument = new ProcessTaskDocument(); processTaskDocument.setTaskId(log.getTaskId()); - processTaskDocument.setProcessInstanceId(log.getProcessInstanceId()); - processTaskDocument.setProcessDefinitionId(hpi.getProcessDefinitionId()); processTaskDocument.setTaskDefinitionKey(log.getActivityId()); processTaskDocument.setTaskName(log.getActivityName()); processTaskDocument.setTaskStatus(log.getStatus()); @@ -142,11 +140,12 @@ public class AggregateProcessTaskService { // Map> attachmentMap = bpmnProcessTaskForEsService.queryAttachmentByProcessInstanceId(hpi.getId()) // .stream().collect(Collectors.groupingBy(Attachment::getTaskId, Collectors.mapping(Function.identity(), Collectors.toList()))); - Map variables = hpi.getProcessVariables(); - // 过滤出有效任务, 比如同节点的多实例下或签, 一个人操作了同节点的一个任务,会把同节点的其他任务处理了,此时被处理的任务认为非人工处理 List filteredEffectiveTasks = filterEffectiveTasks(tasks, instanceVersion); + List taskIds = filteredEffectiveTasks.stream().map(i-> INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getId()).distinct().collect(Collectors.toList()); + Map taskAssigneeMap = bpmnProcessInstanceForEsService.queryInstanceVariables(hpi.getId(), taskIds); + List toEsProcessTaskDocuments = new ArrayList<>(); for (HistoricTaskInstance task : filteredEffectiveTasks) { ExtAxHiTaskInst extTask = extTaskMap.getOrDefault(task.getId(), new ExtAxHiTaskInst()); @@ -155,8 +154,6 @@ public class AggregateProcessTaskService { ProcessTaskDocument processTaskDocument = new ProcessTaskDocument(); processTaskDocument.setTaskId(task.getId()); - processTaskDocument.setProcessInstanceId(task.getProcessInstanceId()); - processTaskDocument.setProcessDefinitionId(task.getProcessDefinitionId()); processTaskDocument.setTaskDefinitionKey(task.getTaskDefinitionKey()); processTaskDocument.setTaskName(task.getName()); processTaskDocument.setTaskStatus(extTask.getStatus()); @@ -170,23 +167,20 @@ public class AggregateProcessTaskService { processTaskDocument.setTaskStartTime(task.getCreateTime()); processTaskDocument.setTaskEndTime(task.getEndTime()); processTaskDocument.setDuration(task.getDurationInMillis()); -// esProcessTask.setLastUpdateTime(task); processTaskDocument.setTaskTenantId(task.getTenantId()); - BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(variables.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + task.getId(), null)); + BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(taskAssigneeMap.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + task.getId(), null)); if(Objects.nonNull(assigner)) { processTaskDocument.setAssigneeName(assigner.getAssignerName()); processTaskDocument.setAssigneeOuId(assigner.getOuId()); processTaskDocument.setAssigneePersonId(assigner.getPersonId()); processTaskDocument.setAssigneeTenantId(assigner.getTenantId()); } -// esProcessTask.setAttachments(attachmentConverter.toVos(attachments)); if (Objects.nonNull(bpmnModel)) { FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); BpmnMetaParserHelper.getApprovalMethod(flowElement) .ifPresent(e -> processTaskDocument.setApprovalMethod(e.getType())); BpmnMetaParserHelper.getNodeType(flowElement) .ifPresent(e -> processTaskDocument.setNodeType(e.getType())); -// esProcessTask.setNodeMode(); } toEsProcessTaskDocuments.add(processTaskDocument); } diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessInstanceServiceImpl.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessInstanceServiceImpl.java index 9970775a0..3f5a9ad07 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessInstanceServiceImpl.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessInstanceServiceImpl.java @@ -107,7 +107,7 @@ public class EsProcessInstanceServiceImpl implements EsProcessInstanceService { if (!CollectionUtils.isEmpty(dto.getProcessInstanceIds())) { List processInstanceDocuments = esProcessInstanceMapper .selectList(new LambdaEsQueryWrapper() - .in(FieldUtils.val(ProcessInstanceDocument::getInstanceId), dto.getProcessInstanceIds())); + .in(FieldUtils.val(ProcessInstanceDocument::getId), dto.getProcessInstanceIds())); return new BpmPageResult<>(processInstanceDocuments, (long) processInstanceDocuments.size()); } @@ -120,7 +120,7 @@ public class EsProcessInstanceServiceImpl implements EsProcessInstanceService { ) .eq(StringUtils.hasText(dto.getBusinessStatus()), FieldUtils.val(ProcessInstanceDocument::getBusinessStatus), dto.getBusinessStatus()) .matchPhrase(StringUtils.hasText(dto.getProcessInstanceName()), FieldUtils.val(ProcessInstanceDocument::getProcessInstanceName), dto.getProcessInstanceName()) - .in(CollectionUtils.isEmpty(dto.getProcessInstanceIds()), FieldUtils.val(ProcessInstanceDocument::getInstanceId), dto.getProcessInstanceIds()) + .in(CollectionUtils.isEmpty(dto.getProcessInstanceIds()), FieldUtils.val(ProcessInstanceDocument::getId), dto.getProcessInstanceIds()) .ge(Objects.nonNull(dto.getBeginStartTime()), ProcessInstanceDocument::getInstanceStartTime, dto.getBeginStartTime()) .le(Objects.nonNull(dto.getOverStartTime()), ProcessInstanceDocument::getInstanceStartTime, dto.getOverStartTime()) .ge(Objects.nonNull(dto.getBeginEndTime()), ProcessInstanceDocument::getInstanceEndTime, dto.getBeginEndTime()) diff --git a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessTaskServiceImpl.java b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessTaskServiceImpl.java index 8da16ac34..82e82527f 100644 --- a/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessTaskServiceImpl.java +++ b/workflow-engine-elasticsearch/src/main/java/cn/axzo/workflow/es/service/impl/EsProcessTaskServiceImpl.java @@ -2,12 +2,14 @@ package cn.axzo.workflow.es.service.impl; import cn.axzo.workflow.common.model.request.es.TaskSearchReqDTO; import cn.axzo.workflow.es.mapper.EsProcessTaskMapper; +import cn.axzo.workflow.es.model.ProcessInstanceDocument; import cn.axzo.workflow.es.model.ProcessTaskDocument; import cn.axzo.workflow.es.service.EsProcessTaskService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.easyes.annotation.IndexName; import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper; +import org.dromara.easyes.core.toolkit.FieldUtils; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -58,12 +60,14 @@ public class EsProcessTaskServiceImpl implements EsProcessTaskService { @Override public List search(TaskSearchReqDTO dto) { - LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper<>(); - wrapper.eq(StringUtils.hasText(dto.getAssigneeOuId()), ProcessTaskDocument::getAssigneeOuId, dto.getAssigneeOuId()) + LambdaEsQueryWrapper wrapper = new LambdaEsQueryWrapper() + .eq(StringUtils.hasText(dto.getAssigneeOuId()), ProcessTaskDocument::getAssigneeOuId, dto.getAssigneeOuId()) .eq(StringUtils.hasText(dto.getAssigneeTenantId()), ProcessTaskDocument::getAssigneeTenantId, dto.getAssigneeTenantId()) .eq(StringUtils.hasText(dto.getAssigneePersonId()), ProcessTaskDocument::getAssigneePersonId, dto.getAssigneePersonId()) .matchPhrase(StringUtils.hasText(dto.getAssigneeName()), ProcessTaskDocument::getAssigneeName, dto.getAssigneeName()) - .parentId(StringUtils.hasText(dto.getProcessInstanceId()), dto.getProcessInstanceId(), "process_instance_document") + .hasParent(StringUtils.hasText(dto.getProcessInstanceId()), "process_instance_document", + w-> w.eq(FieldUtils.val(ProcessInstanceDocument::getInstanceId), dto.getProcessInstanceId())) +// .parentId(StringUtils.hasText(dto.getProcessInstanceId()), dto.getProcessInstanceId(), "process_instance_document") .routing(ES_FIXED_ROUTING) ; return esProcessTaskMapper.selectList(wrapper);