feat(REQ-5965) - 流程引擎测增加审批日志pdf 结果查询 API

This commit is contained in:
wangli 2025-11-07 18:23:35 +08:00
parent 956c7d1314
commit 2d25ff475d
4 changed files with 108 additions and 6 deletions

View File

@ -8,7 +8,9 @@ import cn.axzo.workflow.common.model.request.bpmn.print.Print4ProcessLogDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintProcessLogPdfDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.QueryProcessLogPdfDTO;
import cn.axzo.workflow.common.model.response.bpmn.process.PrintData4LogVO;
import cn.axzo.workflow.common.model.response.print.ProcessLogPdfResultDTO;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.validation.annotation.Validated;
@ -91,7 +93,10 @@ public interface PrintAdminApi {
CommonResponse<PrintData4LogVO> getPrintDataForProcessLog(@Validated @RequestBody Print4ProcessLogDTO dto);
/**
* 后端请求指定流程日志 PDF 文件生成
* 后端请求指定流程日志 PDF 文件生成, 实现是异步的
* <p>
* 请使用 {@link PrintAdminApi#queryProcessLogPdfResult(QueryProcessLogPdfDTO)} 函数查询
* 或者使用 {@link cn.axzo.nanopart.doc.api.conversion.DocConversionApi#queryConvertResultByBiz} 函数查询bizCode:固定为"workflow-process-log", bizKey:为实例 ID
*
* @return
*/
@ -99,4 +104,15 @@ public interface PrintAdminApi {
@PostMapping("/api/print/admin/process/log/pdf")
@InvokeMode(SYNC)
CommonResponse<String> createProcessLogPdf(@Validated @RequestBody PrintProcessLogPdfDTO dto);
/**
* 后端查询指定审批日志 PDF 文件的生成结果
*
* @param dto
* @return
*/
@Operation(summary = "后端查询指定审批日志 PDF 文件的生成结果")
@PostMapping("/api/print/admin/process/log/pdf/result")
@InvokeMode(SYNC)
CommonResponse<ProcessLogPdfResultDTO> queryProcessLogPdfResult(@Validated @RequestBody QueryProcessLogPdfDTO dto);
}

View File

@ -0,0 +1,30 @@
package cn.axzo.workflow.common.model.request.bpmn.print;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* 查询审批日志转 pdf 的入参模型
*
* @author wangli
* @since 2025-10-31 17:15
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class QueryProcessLogPdfDTO {
/**
* 审批实例 ID
*/
@ApiModelProperty(value = "审批实例 ID")
@NotBlank(message = "审批实例 ID 不能为空")
private String processInstanceId;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.workflow.common.model.response.print;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 审批日志 PDF 查询结果相应模型
*
* @author wangli
* @since 2025-11-07 18:13
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProcessLogPdfResultDTO {
/**
* 转换状态
* INIT("初始"),
* <p>
* CONVERTING("转换中"),
* <p>
* SUCCESS("转换完成"),
* <p>
* FAILED("转换失败");
*/
private String status;
/**
* 转换成功后的oss fileKey
*/
private String pdfFileKey;
}

View File

@ -1,10 +1,13 @@
package cn.axzo.workflow.server.controller.web.manage;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.maokai.api.client.OrganizationalNodeUserQueryApi;
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
import cn.axzo.nanopart.doc.api.conversion.DocConversionApi;
import cn.axzo.nanopart.doc.api.conversion.req.QueryConversionTaskRequestV2;
import cn.axzo.nanopart.doc.api.conversion.req.SubmitConversionTaskRequest;
import cn.axzo.nanopart.doc.api.conversion.res.FileConvertResultResp;
import cn.axzo.nanopart.doc.api.enums.DocConversionTypeEnum;
import cn.axzo.oss.http.api.ServerFileServiceApi;
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
@ -21,6 +24,7 @@ import cn.axzo.workflow.common.model.request.bpmn.print.Print4ProcessLogDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintFieldQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintProcessLogPdfDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.PrintTemplateConfigUpsertDTO;
import cn.axzo.workflow.common.model.request.bpmn.print.QueryProcessLogPdfDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceLogQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
@ -31,6 +35,7 @@ import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinition
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceLogVO;
import cn.axzo.workflow.common.model.response.bpmn.process.PrintData4LogVO;
import cn.axzo.workflow.common.model.response.category.CategoryGroupVarItemVo;
import cn.axzo.workflow.common.model.response.print.ProcessLogPdfResultDTO;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
import cn.axzo.workflow.core.conf.SupportRefreshProperties;
import cn.axzo.workflow.core.engine.cmd.CustomGetFormInstanceLatestValuesCmd;
@ -227,11 +232,11 @@ public class PrintAdminController implements PrintAdminApi {
printFields.addAll(formContainer.getFields().get(0).stream()
.filter(field -> {
// if (Objects.equals(Boolean.TRUE, dto.getFilterEnablePrint())) {
if (!CollectionUtils.isEmpty(field.getParams())) {
Optional<Object> optEnablePrint = Optional.ofNullable(field.getParam("enablePrint"));
return optEnablePrint.map(obj -> Boolean.parseBoolean(obj.toString())).orElse(Boolean.TRUE);
}
return true;
if (!CollectionUtils.isEmpty(field.getParams())) {
Optional<Object> optEnablePrint = Optional.ofNullable(field.getParam("enablePrint"));
return optEnablePrint.map(obj -> Boolean.parseBoolean(obj.toString())).orElse(Boolean.TRUE);
}
return true;
// } else {
// return false;
// }
@ -596,4 +601,19 @@ public class PrintAdminController implements PrintAdminApi {
String taskId = RpcExternalUtil.rpcApiResultProcessor(() -> docConversionApi.submitConvertTask(request), "创建网页转 PDF 的异步任务", request);
return CommonResponse.success(taskId);
}
@Operation(summary = "后端查询指定审批日志 PDF 文件的生成结果")
@PostMapping("/process/log/pdf/result")
@Override
public CommonResponse<ProcessLogPdfResultDTO> queryProcessLogPdfResult(@Validated @RequestBody QueryProcessLogPdfDTO dto) {
QueryConversionTaskRequestV2 request = new QueryConversionTaskRequestV2();
request.setBizCode("workflow-process-log");
request.setBizKey(dto.getProcessInstanceId());
List<FileConvertResultResp> taskConvertResults = RpcExternalUtil.rpcApiResultProcessor(() -> docConversionApi.queryConvertResultByBiz(request), "查询流程日志转 PDF 的结果", request);
List<ProcessLogPdfResultDTO> results = BeanMapper.copyList(taskConvertResults, ProcessLogPdfResultDTO.class, (s, t) -> {
t.setPdfFileKey(s.getResultFileFileKey());
t.setStatus(s.getStatus().name());
});
return CommonResponse.success(results.isEmpty() ? null : results.get(0));
}
}