feat(REQ-5965) - 优化流程日志 PDF 生成逻辑
This commit is contained in:
parent
edf617cb6b
commit
cd3ee2f46a
@ -96,7 +96,7 @@ public interface PrintAdminApi {
|
||||
* 后端请求指定流程日志 PDF 文件生成, 实现是异步的。
|
||||
* <p>
|
||||
* 请使用 {@link PrintAdminApi#queryProcessLogPdfResult(QueryProcessLogPdfDTO)} 函数查询,
|
||||
* 或者使用 {@link cn.axzo.nanopart.doc.api.conversion.DocConversionApi#queryConvertResultByBiz(cn.axzo.nanopart.doc.api.conversion.req.QueryConversionTaskRequestV2)} 函数查询,该接口入参默认情况下应该为:bizCode:固定为"workflow-process-log", bizKey:为实例 ID
|
||||
* 或者使用 {@link cn.axzo.nanopart.doc.api.conversion.DocConversionApi#queryConvertResultByBiz(cn.axzo.nanopart.doc.api.conversion.req.QueryConversionTaskRequestV2)} 函数查询,该接口入参默认情况下应该为:bizCode:固定为"workflow-process-log", bizKey:为实例 ID+":"+访问人 personId
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
|
||||
@ -22,7 +22,8 @@ public enum OtherRespCode implements IModuleRespCode {
|
||||
ASYNC_JOB_EXECUTION_ERROR("007", "获取指定实例 ID【{}】的锁失败"),
|
||||
ILLEGAL_PARAM_ERROR("008", "非法的参数:【{}】"),
|
||||
MESSAGE_IM_EVENT_BUILD_ERROR("009", "不能使用 createEvent 函数创建`IM 消息`的事件, 请调用 createIMEvent 函数"),
|
||||
ASSIGNEE_NODE_ID_NOT_EXISTS("010", "【{}】 nodeId 不存在, 请检查参数是否正确")
|
||||
ASSIGNEE_NODE_ID_NOT_EXISTS("010", "【{}】 nodeId 不存在, 请检查参数是否正确"),
|
||||
CANT_GENERATE_PROCESS_LOG_PDF("011", "流程未处于终态不能用默认参数创建,请自行添加 BizCode和 BizKey"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
|
||||
@ -5,7 +5,9 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
@ -45,4 +47,11 @@ public class PrintProcessLogPdfDTO {
|
||||
* 可不传, 默认值为:{@link PrintProcessLogPdfDTO#processInstanceId}
|
||||
*/
|
||||
private String bizKey;
|
||||
|
||||
@AssertTrue(message = "bizKey和bizCode必须同时为空或同时不为空")
|
||||
public boolean isBizKeyAndCodeValid() {
|
||||
boolean hasBizCode = StringUtils.hasText(bizCode);
|
||||
boolean hasBizKey = StringUtils.hasText(bizKey);
|
||||
return hasBizCode == hasBizKey;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,9 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
@ -27,6 +29,13 @@ public class QueryProcessLogPdfDTO {
|
||||
@NotBlank(message = "审批实例 ID 不能为空")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 访问人的 personId
|
||||
*/
|
||||
@ApiModelProperty(value = "对应生成时的访问人 personId")
|
||||
@NotBlank(message = "访问者的 personId 不能为空")
|
||||
private String personId;
|
||||
|
||||
/**
|
||||
* 自定义该审批日志的 bizCode
|
||||
* 可不传,默认值为: workflow-process-log
|
||||
@ -38,4 +47,12 @@ public class QueryProcessLogPdfDTO {
|
||||
* 可不传, 默认值为:{@link QueryProcessLogPdfDTO#processInstanceId}
|
||||
*/
|
||||
private String bizKey;
|
||||
|
||||
@AssertTrue(message = "bizKey和bizCode必须同时为空或同时不为空")
|
||||
public boolean isBizKeyAndCodeValid() {
|
||||
boolean hasBizCode = StringUtils.hasText(bizCode);
|
||||
boolean hasBizKey = StringUtils.hasText(bizKey);
|
||||
return hasBizCode == hasBizKey;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -59,7 +59,9 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.task.Attachment;
|
||||
import org.flowable.form.api.FormInfo;
|
||||
import org.flowable.form.api.FormRepositoryService;
|
||||
@ -93,6 +95,7 @@ import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.code.FormModelRespCode.FORM_MODEL_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.code.OtherRespCode.CANT_GENERATE_PROCESS_LOG_PDF;
|
||||
import static cn.axzo.workflow.common.constant.FormConstants.FORM_FIELD_TYPE_IMAGE;
|
||||
import static cn.axzo.workflow.common.constant.FormConstants.FORM_FIELD_TYPE_INPUT;
|
||||
import static cn.axzo.workflow.common.constant.VariableConstants.PRINT_VAR_PROCESS_DEFINITION_KEY;
|
||||
@ -182,6 +185,8 @@ public class PrintAdminController implements PrintAdminApi {
|
||||
private DocConversionApi docConversionApi;
|
||||
@Resource
|
||||
private SupportRefreshProperties refreshProperties;
|
||||
@Resource
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
/**
|
||||
* 查询指定流程实例是否能使用打印
|
||||
@ -594,9 +599,15 @@ public class PrintAdminController implements PrintAdminApi {
|
||||
@PostMapping("/process/log/pdf")
|
||||
@Override
|
||||
public CommonResponse<String> createProcessLogPdf(@Validated @RequestBody PrintProcessLogPdfDTO dto) {
|
||||
if (!StringUtils.hasText(dto.getBizCode())) {
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(dto.getProcessInstanceId()).singleResult();
|
||||
if (Objects.nonNull(processInstance)) {
|
||||
throw new WorkflowEngineException(CANT_GENERATE_PROCESS_LOG_PDF);
|
||||
}
|
||||
}
|
||||
SubmitConversionTaskRequest request = new SubmitConversionTaskRequest();
|
||||
request.setBizCode(StringUtils.hasText(dto.getBizCode()) ? dto.getBizCode() : "workflow-process-log");
|
||||
request.setBizKey(StringUtils.hasText(dto.getBizKey()) ? dto.getBizKey() : dto.getProcessInstanceId());
|
||||
request.setBizKey(StringUtils.hasText(dto.getBizKey()) ? dto.getBizKey() : dto.getProcessInstanceId() + ":" + dto.getPersonId());
|
||||
request.setConversionType(DocConversionTypeEnum.HTML_URL_TO_PDF);
|
||||
request.setFileName(String.format(refreshProperties.getProcessLogHtmlUrl(), dto.getProcessInstanceId(), dto.getPersonId()));
|
||||
String taskId = RpcExternalUtil.rpcApiResultProcessor(() -> docConversionApi.submitConvertTask(request), "创建网页转 PDF 的异步任务", request);
|
||||
@ -609,7 +620,7 @@ public class PrintAdminController implements PrintAdminApi {
|
||||
public CommonResponse<ProcessLogPdfResultDTO> queryProcessLogPdfResult(@Validated @RequestBody QueryProcessLogPdfDTO dto) {
|
||||
QueryConversionTaskRequestV2 request = new QueryConversionTaskRequestV2();
|
||||
request.setBizCode(StringUtils.hasText(dto.getBizCode()) ? dto.getBizCode() : "workflow-process-log");
|
||||
request.setBizKeys(Lists.newArrayList(StringUtils.hasText(dto.getBizKey()) ? dto.getBizKey() : dto.getProcessInstanceId()));
|
||||
request.setBizKeys(Lists.newArrayList(StringUtils.hasText(dto.getBizKey()) ? dto.getBizKey() : dto.getProcessInstanceId() + ":" + dto.getPersonId()));
|
||||
List<FileConvertResultResp> taskConvertResults = RpcExternalUtil.rpcApiResultProcessor(() -> docConversionApi.queryConvertResultByBiz(request), "查询流程日志转 PDF 的结果", request);
|
||||
List<ProcessLogPdfResultDTO> results = BeanMapper.copyList(taskConvertResults, ProcessLogPdfResultDTO.class, (s, t) -> {
|
||||
t.setPdfFileKey(s.getResultFileFileKey());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user