From cde78989f05a54040858dbdf12e307fe570b6d10 Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 17 Mar 2026 17:44:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(ops):=20=E5=B7=A5=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E5=AE=89=E4=BF=9D=E5=9B=BE=E7=89=87=20URL=20=E9=A2=84?= =?UTF-8?q?=E7=AD=BE=E5=90=8D=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OrderCenterController.getDetail 对 extInfo 中 imageUrl/resultImgUrls 生成预签名地址 - RPC 异常时降级返回原始 URL,避免接口整体失败 Co-Authored-By: Claude Opus 4.6 --- .../admin/OrderCenterController.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/controller/admin/OrderCenterController.java b/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/controller/admin/OrderCenterController.java index 53433f1..42b3e9b 100644 --- a/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/controller/admin/OrderCenterController.java +++ b/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/controller/admin/OrderCenterController.java @@ -1,7 +1,9 @@ package com.viewsh.module.ops.controller.admin; +import cn.hutool.core.util.StrUtil; import com.viewsh.framework.common.pojo.CommonResult; import com.viewsh.framework.common.pojo.PageResult; +import com.viewsh.module.infra.api.file.FileApi; import com.viewsh.module.ops.api.clean.QuickStatsRespDTO; import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.DashboardStatsRespVO; import com.viewsh.module.ops.controller.admin.workorder.vo.statistics.WorkspaceStatsRespVO; @@ -23,7 +25,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static com.viewsh.framework.common.pojo.CommonResult.success; @@ -43,6 +47,8 @@ public class OrderCenterController { @Resource private OrderQueryService orderQueryService; + @Resource + private FileApi fileApi; @Autowired(required = false) private CleanDashboardService cleanDashboardService; @@ -64,6 +70,8 @@ public class OrderCenterController { @PreAuthorize("@ss.hasPermission('ops:order-center:query')") public CommonResult getDetail(@PathVariable("id") Long id) { OrderDetailVO detail = orderQueryService.getDetail(id); + // 私有桶:对 extInfo 中的图片 URL 生成预签名访问地址 + presignExtInfoImageUrls(detail); return success(detail); } @@ -127,4 +135,43 @@ public class OrderCenterController { return success(opsStatisticsService.getWorkspaceStats()); } + /** + * 对 extInfo 中的图片 URL 生成预签名访问地址 + */ + private void presignExtInfoImageUrls(OrderDetailVO detail) { + if (detail == null || detail.getExtInfo() == null) { + return; + } + Map extInfo = detail.getExtInfo(); + // imageUrl:单个告警截图 + Object imageUrl = extInfo.get("imageUrl"); + if (imageUrl instanceof String url && StrUtil.isNotEmpty(url)) { + try { + extInfo.put("imageUrl", fileApi.presignGetUrl(url, null).getCheckedData()); + } catch (Exception e) { + log.warn("[presignExtInfoImageUrls] imageUrl 签名失败: {}", url, e); + } + } + // resultImgUrls:处理结果图片,JSON 数组字符串 如 ["url1","url2"] + Object resultImgUrls = extInfo.get("resultImgUrls"); + if (resultImgUrls instanceof String urlsJson && StrUtil.isNotEmpty(urlsJson)) { + try { + List urls = cn.hutool.json.JSONUtil.toList(urlsJson, String.class); + List signedUrls = urls.stream() + .map(u -> { + try { + return fileApi.presignGetUrl(u, null).getCheckedData(); + } catch (Exception e) { + log.warn("[presignExtInfoImageUrls] resultImgUrl 签名失败: {}", u, e); + return u; + } + }) + .collect(Collectors.toList()); + extInfo.put("resultImgUrls", cn.hutool.json.JSONUtil.toJsonStr(signedUrls)); + } catch (Exception e) { + log.warn("[presignExtInfoImageUrls] 解析 resultImgUrls 失败: {}", resultImgUrls, e); + } + } + } + }