Merge branch 'feature/REQ-5965' into dev

This commit is contained in:
wangli 2025-10-30 16:06:30 +08:00
commit 51d5ea99b8

View File

@ -3,6 +3,9 @@ package cn.axzo.workflow.server.controller.web.manage;
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.oss.http.api.ServerFileServiceApi;
import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest;
import cn.axzo.oss.http.model.ApiSignUrlDownloadResponse;
import cn.axzo.workflow.client.feign.manage.PrintAdminApi;
import cn.axzo.workflow.common.constant.VariableConstants;
import cn.axzo.workflow.common.enums.AttachmentTypeEnum;
@ -44,6 +47,7 @@ import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
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.TaskService;
@ -162,6 +166,8 @@ public class PrintAdminController implements PrintAdminApi {
private ExtAxProcessLogService processLogService;
@Resource
private TaskService taskService;
@Resource
private ServerFileServiceApi serverFileServiceApi;
/**
* 查询指定流程实例是否能使用打印
@ -526,6 +532,7 @@ public class PrintAdminController implements PrintAdminApi {
.collect(Collectors.groupingBy(Attachment::getTaskId));
ExtAxProcessLog query = new ExtAxProcessLog();
query.setProcessInstanceId(dto.getProcessInstanceId());
// TODO 这里可能需要结合节点隐藏来过滤
processLogService.genericQuery(query).stream()
.sorted(Comparator.comparing(ExtAxProcessLog::getEndTime, Comparator.nullsLast(Comparator.naturalOrder())))
.collect(Collectors.toList())
@ -540,9 +547,32 @@ public class PrintAdminController implements PrintAdminApi {
.operationTime(DateUtil.format(log.getEndTime(), "yyyy.MM.dd HH:mm:ss"))
.build());
});
parseSignatureUrl(logItems);
vo.setLogItems(logItems);
return success(vo);
}
private void parseSignatureUrl(List<ProcessLogItemDTO> logItems) {
List<String> signUrls = logItems.stream()
.map(ProcessLogItemDTO::getSignatureUrl)
.filter(StringUtils::hasText)
.distinct()
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(signUrls)) {
Map<String, String> ossUrlMap = ListUtils.emptyIfNull(getSignPrivateUrl(signUrls)).stream()
.collect(Collectors.toMap(ApiSignUrlDownloadResponse::getFileKey, ApiSignUrlDownloadResponse::getSignUrl, (s, t) -> s));
logItems.stream()
.filter(i -> StringUtils.hasText(i.getSignatureUrl()))
.forEach(i -> i.setSignatureUrl(ossUrlMap.getOrDefault(i.getSignatureUrl(), null)));
}
}
private List<ApiSignUrlDownloadResponse> getSignPrivateUrl(List<String> signUrls) {
ApiSignUrlDownloadRequest request = new ApiSignUrlDownloadRequest();
request.setFileKeys(signUrls);
return RpcExternalUtil.rpcProcessor(() -> serverFileServiceApi.signUrlFetchDownload(request), "批量获取手写签私有访问地址", request);
}
}