package jnpf.fileStorage.dms; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.dms.DmsResourceApi; import jnpf.dmsEntity.download.form.DmsWorkflowDownloadAuthorizeForm; import jnpf.dmsEntity.download.vo.DmsWorkflowDownloadAuthorizationVO; import jnpf.exception.DataException; import jnpf.flowable.WorkFlowApi; import jnpf.flowable.entity.TaskEntity; import jnpf.flowable.enums.TaskStatusEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class DmsWorkflowDownloadAuthorizeService { private static final String SERVICE_ID = "jnpf-file"; private final WorkFlowApi workFlowApi; private final DmsResourceApi dmsResourceApi; public DmsWorkflowDownloadAuthorizationVO authorize( DmsWorkflowDownloadAuthorizeForm form, String auditBizSign) { String flowId = form.getSourceId().trim(); String taskId = form.getTaskId().trim(); requireApprovedTask(flowId, taskId); ActionResult response = dmsResourceApi.authorizeWorkflowDownload(SERVICE_ID, auditBizSign, form); if (response == null || !ActionResultCode.SUCCESS.getCode().equals(response.getCode()) || response.getData() == null || !Boolean.TRUE.equals(response.getData().getCompleted())) { String message = response == null ? null : response.getMsg(); throw new DataException(message == null || message.trim().isEmpty() ? "DMS下载授权失败或响应数据不完整" : message); } return response.getData(); } private void requireApprovedTask(String flowId, String taskId) { TaskEntity task = workFlowApi.getInfoSubmit(taskId); if (task == null || !taskId.equals(task.getId())) { throw new DataException("未找到与taskId匹配的流程任务"); } if (!flowId.equals(task.getFlowId()) && !flowId.equals(task.getTemplateId())) { throw new DataException("流程任务不属于指定flowID"); } if (!TaskStatusEnum.PASSED.getCode().equals(task.getStatus())) { throw new DataException("流程任务尚未审核通过,不能授予下载权限"); } } }