diff --git a/src/main/java/com/lyxh/api/docking/service/GenericApiService.java b/src/main/java/com/lyxh/api/docking/service/GenericApiService.java index a7c6a92..1487168 100644 --- a/src/main/java/com/lyxh/api/docking/service/GenericApiService.java +++ b/src/main/java/com/lyxh/api/docking/service/GenericApiService.java @@ -1,9 +1,13 @@ package com.lyxh.api.docking.service; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.lyxh.api.docking.client.ApiCallResult; import com.lyxh.api.docking.client.GenericApiClient; import com.lyxh.api.docking.entity.ApiCacheData; import com.lyxh.api.docking.entity.ThirdPartyConfig; +import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +15,7 @@ import org.springframework.stereotype.Service; import java.time.Duration; import java.time.LocalDateTime; +import java.util.UUID; import java.util.function.Predicate; /** @@ -32,6 +37,9 @@ public class GenericApiService { @Autowired private ApiInvokeLogService invokeLogService; + @Autowired + private ObjectMapper objectMapper; + /** * 执行第三方 API 调用(含缓存、日志),返回响应体原始 JSON * @@ -65,7 +73,19 @@ public class GenericApiService { ApiCacheData cached = cacheDataService.getNonExpiredCache(apiCode, cacheKey, config.getId()); if (cached != null) { log.info("Cache hit: weOrderNo={} apiCode={} cacheKey={}", weOrderNo, apiCode, cacheKey); - return cached.getCacheValue(); + // 命中缓存,更新 responseId + String cacheValue = cached.getCacheValue(); + try { + JsonNode root = objectMapper.readTree(cacheValue); + if (root.has("responseId")) { + String newResponseId = DigestUtils.md5Hex(UUID.randomUUID().toString()); + ((ObjectNode) root).put("responseId", newResponseId); + return objectMapper.writeValueAsString(root); + } + } catch (Exception e) { + log.warn("Failed to replace responseId in cached response: weOrderNo={}", weOrderNo, e); + } + return cacheValue; } log.info("Cache miss: weOrderNo={} apiCode={} cacheKey={}", weOrderNo, apiCode, cacheKey); }