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);