From 3ebea6476ef100c507f90bfb83284f06eecb155f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 10 Nov 2025 13:25:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/xinfa/XinFaDeviceService.java | 83 +++++++++++++------ 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index fd1eb065e..144b447d1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -327,33 +327,66 @@ public class XinFaDeviceService { private String sendPostRequest(String requestBody, String requestUrl) { log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); - - int maxRetries = 3; - for (int i = 0; i < maxRetries; i++) { - try { - Request request = new Request.Builder() - .url(requestUrl) - .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) - .build(); - - return sendPost(requestUrl, request); - } catch (Exception e) { - log.warn("请求失败,第{}次重试,错误: {}", i + 1, e.getMessage()); - if (i == maxRetries - 1) { - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败: " + e.getMessage()); - } - // 重试前等待 - try { - Thread.sleep(1000 * (i + 1)); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "重试被中断"); - } - } - } - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败"); + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .build(); + return sendPost(requestUrl, request); } + + /** + * 不重试 请求接口 + * @param requestBody + * @param requestUrl + * @param token + * @return + */ + private String sendPostRequestNoRetryByToken(String requestBody, String requestUrl, String token) { + log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); + + try { + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .addHeader("token", token) + .build(); + + String result = sendPost(requestUrl, request); + + // 检查是否token失效 + if (isTokenExpired(result)) { + log.warn("Token已失效,清除缓存并重新获取token"); + // 清除对应账号的token缓存并获取新token + String newToken = clearAccountTokenCacheForToken(token); + + if (newToken != null) { + // 使用新token重新发起一次请求 + Request newRequest = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .addHeader("token", newToken) + .build(); + + result = sendPost(requestUrl, newRequest); + } else { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "Token失效且无法获取新token"); + } + } + return result; + } catch (Exception e) { + log.error("请求异常,错误: {}", e.getMessage()); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求失败: " + e.getMessage()); + } + } + + /** + * 包含重试 适用于批量拉取数据 ,正常页面接口无需重试 + * @param requestBody + * @param requestUrl + * @param token + * @return + */ private String sendPostRequestByToken(String requestBody, String requestUrl, String token) { log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody);