From 2655fa708f4f64d718a9fd86fbfbcabe54254ea2 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 9 Apr 2025 18:09:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3769)=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=BA=BA=E5=9C=A8=E7=AD=BE=E6=89=B9=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E4=B8=8B=EF=BC=8C=E6=96=87=E6=A1=A3=E7=9A=84=E9=98=85?= =?UTF-8?q?=E8=AF=BB=E7=8A=B6=E6=80=81=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/bpmn/model/doc/DocStatusDTO.java | 4 +-- .../bpmn/process/doc/DocPendingVO.java | 2 ++ .../engine/cmd/CustomGetModelDocsCmd.java | 27 ++++++++++++---- .../repository/entity/ExtAxReadRecord.java | 8 ----- .../impl/ExtAxReadRecordServiceImpl.java | 10 ------ .../bpmn/BpmnProcessInstanceController.java | 31 ++++--------------- 6 files changed, 31 insertions(+), 51 deletions(-) diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocStatusDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocStatusDTO.java index 7fad36ca3..ba091cf13 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocStatusDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/model/doc/DocStatusDTO.java @@ -20,9 +20,9 @@ import lombok.NoArgsConstructor; @Builder public class DocStatusDTO { /** - * + * 文档 ID */ - @ApiModelProperty(value = "") + @ApiModelProperty(value = "文档 ID") private Long id; /** diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/doc/DocPendingVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/doc/DocPendingVO.java index f4ed9945d..ea1fff963 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/doc/DocPendingVO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/doc/DocPendingVO.java @@ -16,5 +16,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class DocPendingVO extends DocBaseVO { + private String fileKey; + private String ossUrl; } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetModelDocsCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetModelDocsCmd.java index ae317a723..e798e5bd4 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetModelDocsCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomGetModelDocsCmd.java @@ -10,14 +10,17 @@ import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; +import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.variable.api.history.HistoricVariableInstance; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -28,6 +31,7 @@ import static cn.axzo.workflow.common.code.BpmnModelRespCode.MODEL_FILE_QUERY_ER import static cn.axzo.workflow.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_ID_ILLEGAL; import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID; import static cn.axzo.workflow.common.constant.BpmnConstants.SIGN_PROCESS_ENABLE_DOC_IDS; +import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING; import static cn.axzo.workflow.core.service.impl.ExtAxModelDocServiceImpl.buildQueryWrapper; @@ -80,22 +84,33 @@ public class CustomGetModelDocsCmd implements Command> { ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext); RepositoryService repositoryService = processEngineConfiguration.getRepositoryService(); ProcessDefinition processDefinition; - List selectDocIds = new ArrayList<>(); + List enableDocIds = new ArrayList<>(); if (StringUtils.hasText(processInstanceId)) { HistoryService historyService = processEngineConfiguration.getHistoryService(); HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); - processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(instance.getProcessDefinitionId()).singleResult(); if (filterSelect) { - HistoricVariableInstance variableInstance = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName(SIGN_PROCESS_ENABLE_DOC_IDS).singleResult(); - if (Objects.nonNull(variableInstance)) { - selectDocIds.addAll((List) variableInstance.getValue()); + if (Objects.isNull(instance)) { + return Collections.emptyList(); + } + if (Objects.equals(PROCESSING.getStatus(), instance.getBusinessStatus())) { + RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); + enableDocIds.addAll(runtimeService.getVariable(processInstanceId, SIGN_PROCESS_ENABLE_DOC_IDS, List.class)); + } else { + HistoricVariableInstance variableInstance = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName(SIGN_PROCESS_ENABLE_DOC_IDS).singleResult(); + if (Objects.nonNull(variableInstance)) { + enableDocIds.addAll((List) variableInstance.getValue()); + } } } + processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(instance.getProcessDefinitionId()).singleResult(); } else { List definitions = repositoryService.createProcessDefinitionQuery() .processDefinitionKey(parseProcessDefinitionKey()) .processDefinitionWithoutTenantId() .list(); + if (CollectionUtils.isEmpty(definitions)) { + return Collections.emptyList(); + } Optional first = definitions.stream().filter(i -> i.getTenantId().equals(tenantId)) .max(Comparator.comparing(ProcessDefinition::getVersion)); processDefinition = first.orElseGet(() -> definitions.stream().filter(i -> i.getTenantId().equals(NO_TENANT_ID)).max(Comparator.comparing(ProcessDefinition::getVersion)).get()); @@ -108,7 +123,7 @@ public class CustomGetModelDocsCmd implements Command> { List docs = extAxModelDocMapper.selectList(buildQueryWrapper(query)); if (filterSelect) { - docs = docs.stream().filter(i -> selectDocIds.contains(i.getId())).collect(Collectors.toList()); + docs = docs.stream().filter(i -> enableDocIds.contains(i.getId())).collect(Collectors.toList()); } return BeanMapper.copyList(docs, DocBaseVO.class, (s, t) -> t.setFileType(FileTypeEnum.valueOfType(s.getFileType()))); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxReadRecord.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxReadRecord.java index f230a34b5..98f66cbd9 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxReadRecord.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/repository/entity/ExtAxReadRecord.java @@ -29,14 +29,6 @@ public class ExtAxReadRecord extends BaseEntity { * 流程实例 ID */ private String processInstanceId; - /** - * 审批模板节点 ID - */ - private String activityId; - /** - * 任务 ID - */ - private String taskId; /** * 自热人 ID diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxReadRecordServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxReadRecordServiceImpl.java index 61529a73f..cdeec873f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxReadRecordServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxReadRecordServiceImpl.java @@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.TaskService; -import org.flowable.task.api.Task; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -52,7 +51,6 @@ public class ExtAxReadRecordServiceImpl extends ServiceImpl buildWrapper(ExtAxReadRecord entity) { return new LambdaQueryWrapper() .eq(StringUtils.hasText(entity.getProcessInstanceId()), ExtAxReadRecord::getProcessInstanceId, entity.getProcessInstanceId()) - .eq(StringUtils.hasText(entity.getActivityId()), ExtAxReadRecord::getActivityId, entity.getActivityId()) - .eq(StringUtils.hasText(entity.getTaskId()), ExtAxReadRecord::getTaskId, entity.getTaskId()) .eq(Objects.nonNull(entity.getPersonId()), ExtAxReadRecord::getPersonId, entity.getPersonId()) ; } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java index aecdf880c..5c30cf0f0 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java @@ -1,7 +1,6 @@ package cn.axzo.workflow.server.controller.web.bpmn; import cn.axzo.nanopart.doc.api.anonymous.DocAnonymousDatabaseApi; -import cn.axzo.nanopart.doc.api.index.request.GetNodeInfoRequest; import cn.axzo.oss.http.api.ServerFileServiceApi; import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest; import cn.axzo.oss.http.model.ApiSignUrlDownloadResponse; @@ -52,7 +51,6 @@ import cn.axzo.workflow.server.controller.web.BasicPopulateAvatarController; import cn.azxo.framework.common.model.CommonResponse; import cn.hutool.json.JSONUtil; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.collect.Lists; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; @@ -76,7 +74,6 @@ import javax.annotation.Nullable; import javax.annotation.Resource; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -104,7 +101,7 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController @Resource private ServerFileServiceApi serverFileServiceApi; @Resource - private DocAnonymousDatabaseApi docApi; + private DocAnonymousDatabaseApi docAnonymousApi; @Resource private ExtAxReadRecordService readRecordService; @Resource @@ -462,23 +459,15 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController @PostMapping("/select/doc/list") public CommonResponse> processInstanceSelectDocs(ProcessDocQueryDTO dto) { List docs = bpmnProcessInstanceService.processInstanceSelectDocs(dto); - GetNodeInfoRequest request = new GetNodeInfoRequest(); - List wpsCodes = docs.stream().map(DocPendingVO::getFileRelationId).distinct().collect(Collectors.toList()); - // TODO 需要提供支持批量查询 fileKey 的接口 -// request.setCode(wpsCodes); - docApi.getNodeInfo(request); - Map wpsCodeWithFileKeyMap = new HashMap<>(); - + List fileKeys = docs.stream().map(DocPendingVO::getFileKey).filter(StringUtils::hasText).collect(Collectors.toList()); ApiSignUrlDownloadRequest ossRequest = new ApiSignUrlDownloadRequest(); - ossRequest.setFileKeys(Lists.newArrayList(wpsCodeWithFileKeyMap.values())); - Map ossUrlMap = RpcExternalUtil.rpcProcessor(() -> serverFileServiceApi.signUrlFetchDownload(ossRequest), "批量获取文件 OSS 地址", request) + ossRequest.setFileKeys(fileKeys); + Map ossUrlMap = RpcExternalUtil.rpcProcessor(() -> serverFileServiceApi.signUrlFetchDownload(ossRequest), "批量获取文件 OSS 地址", ossRequest) .stream().collect(Collectors.toMap(ApiSignUrlDownloadResponse::getFileKey, ApiSignUrlDownloadResponse::getSignUrl, (s, t) -> s)); docs.forEach(i -> { - String fileKey = wpsCodeWithFileKeyMap.getOrDefault(i.getFileRelationId(), null); - if (!StringUtils.hasText(fileKey)) { - return; + if (StringUtils.hasText(i.getFileKey())) { + i.setOssUrl(ossUrlMap.getOrDefault(i.getFileKey(), null)); } - i.setOssUrl(ossUrlMap.getOrDefault(fileKey, null)); }); return success(docs); } @@ -490,12 +479,6 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController if (!StringUtils.hasText(dto.getAssigner().getPersonId())) { throw new WorkflowEngineException(PROCESS_DOC_READ_PARAM_ERROR); } - try { - String taskId = bpmnProcessTaskService.findTaskIdByInstanceIdAndPersonId(dto.getProcessInstanceId(), dto.getAssigner().getPersonId()); - dto.setTaskId(taskId); - } catch (Exception e) { - // ignore - } return success(readRecordService.queryReadStatus(dto)); } @@ -511,8 +494,6 @@ public class BpmnProcessInstanceController extends BasicPopulateAvatarController relationDocs.stream().filter(i -> Objects.equals(i.getId(), dto.getDocId())) .findAny().orElseThrow(() -> new WorkflowEngineException(PROCESS_DOC_ID_NOT_IN_MODEL)); - String taskId = bpmnProcessTaskService.findTaskIdByInstanceIdAndPersonId(dto.getProcessInstanceId(), dto.getAssigner().getPersonId()); - dto.setTaskId(taskId); return success(readRecordService.changeReadStatus(dto)); } }