Merge branch 'feature/REQ-2752' into feature/merge_2924_2752
This commit is contained in:
commit
4de1354ae7
2
pom.xml
2
pom.xml
@ -28,7 +28,7 @@
|
||||
<apache-maven.version>3.2.5</apache-maven.version>
|
||||
<javaparse.version>3.26.0</javaparse.version>
|
||||
<elasticsearch.version>7.14.0</elasticsearch.version>
|
||||
<easy-es.version>2.0.0-beta7</easy-es.version>
|
||||
<easy-es.version>2.0.0</easy-es.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -20,16 +20,6 @@ public class ProcessTaskDocumentVO {
|
||||
*/
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 归属的流程实例 ID
|
||||
*/
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 归属的流程实例定义 ID
|
||||
*/
|
||||
private String processDefinitionId;
|
||||
|
||||
/**
|
||||
* 任务定义 KEY,对应节点 ID
|
||||
*/
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<String, List<Attachment>> attachmentMap = bpmnProcessTaskForEsService.queryAttachmentByProcessInstanceId(hpi.getId())
|
||||
// .stream().collect(Collectors.groupingBy(Attachment::getTaskId, Collectors.mapping(Function.identity(), Collectors.toList())));
|
||||
|
||||
Map<String, Object> variables = hpi.getProcessVariables();
|
||||
|
||||
// 过滤出有效任务, 比如同节点的多实例下或签, 一个人操作了同节点的一个任务,会把同节点的其他任务处理了,此时被处理的任务认为非人工处理
|
||||
List<HistoricTaskInstance> filteredEffectiveTasks = filterEffectiveTasks(tasks, instanceVersion);
|
||||
|
||||
List<String> taskIds = filteredEffectiveTasks.stream().map(i-> INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getId()).distinct().collect(Collectors.toList());
|
||||
Map<String, Object> taskAssigneeMap = bpmnProcessInstanceForEsService.queryInstanceVariables(hpi.getId(), taskIds);
|
||||
|
||||
List<ProcessTaskDocument> 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);
|
||||
}
|
||||
|
||||
@ -107,7 +107,7 @@ public class EsProcessInstanceServiceImpl implements EsProcessInstanceService {
|
||||
if (!CollectionUtils.isEmpty(dto.getProcessInstanceIds())) {
|
||||
List<ProcessInstanceDocument> processInstanceDocuments = esProcessInstanceMapper
|
||||
.selectList(new LambdaEsQueryWrapper<ProcessInstanceDocument>()
|
||||
.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())
|
||||
|
||||
@ -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<ProcessTaskDocument> search(TaskSearchReqDTO dto) {
|
||||
LambdaEsQueryWrapper<ProcessTaskDocument> wrapper = new LambdaEsQueryWrapper<>();
|
||||
wrapper.eq(StringUtils.hasText(dto.getAssigneeOuId()), ProcessTaskDocument::getAssigneeOuId, dto.getAssigneeOuId())
|
||||
LambdaEsQueryWrapper<ProcessTaskDocument> wrapper = new LambdaEsQueryWrapper<ProcessTaskDocument>()
|
||||
.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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user