From adbd06248206e1ce401a60b833dbe24b71c6d1a4 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Wed, 31 Dec 2025 16:17:49 +0800 Subject: [PATCH] =?UTF-8?q?12-31=20=E9=80=80=E7=BA=A2=E5=8C=85=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E5=B7=AE=E4=BF=AE=E6=94=B9Link=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/serviceImpl/Temporary/RedServiceImpl.java | 80 ++++++++++++++-------- .../demo/serviceImpl/coin/AuditServiceImpl.java | 1 + 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java index e53a7e1..207ad37 100644 --- a/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java @@ -11,6 +11,7 @@ import com.example.demo.mapper.Temporary.RedMapper; import com.example.demo.service.Temporary.RedService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -23,6 +24,9 @@ import org.springframework.http.*; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + import java.io.IOException; import java.math.BigDecimal; import java.net.ConnectException; @@ -227,35 +231,57 @@ public class RedServiceImpl implements RedService { @Override public String checkRed(String linkId)throws Exception { - // 组装 form 表单参数 - MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("order_id", linkId); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - HttpEntity> request = - new HttpEntity<>(params, headers); - - // 发送 POST 请求 - ResponseEntity response = - restTemplate.postForEntity(BASE_URLDev+PATH_REFUND, request, String.class); - - // 解析返回 JSON - JsonNode root = objectMapper.readTree(response.getBody()); - - int code = root.path("code").asInt(); - boolean flag = root.path("data").path("flag").asBoolean(); + try { + // 构造 参数(order_id=L125) + String body = "{\"order_id\":\"" + linkId + "\"}"; + + /* // 从当前请求中获取 Authorization(关键!) + ServletRequestAttributes attrs = + (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest currentRequest = attrs.getRequest(); + String authHeader = currentRequest.getHeader("Authorization"); +*/ + // 构建 HttpRequest + HttpRequest request = HttpRequest.newBuilder() + // .uri(URI.create(BASE_URLDev + PATH_REFUND)) + .uri(URI.create("http://a4f24573.natappfree.cc/api/coupon/refundRedPacket")) + .header("Content-Type", "application/json") + // ⭐ 透传 token,避免 JWT 过期问题 + // .header("Authorization", authHeader) + .POST(HttpRequest.BodyPublishers.ofString(body)) + .build(); + + // 发送请求 + HttpResponse resp = + CLIENT.send(request, HttpResponse.BodyHandlers.ofString()); + + // HTTP 层校验 + if (resp.statusCode() != 200) { + log.warn("红包接口 HTTP 异常,status:{},body:{}", + resp.statusCode(), resp.body()); + throw new RuntimeException("红包接口 HTTP 异常"); + } + + // 解析返回 JSON + JsonNode root = objectMapper.readTree(resp.body()); + int code = root.path("code").asInt(); + boolean flag = root.path("data").path("flag").asBoolean(); + int num = root.path("data").path("num").asInt(); // ✅ 获取 num + // 业务判断 + if (code == 200 && flag) { + //updateOrderStatus(linkId); + return "success"; + } + + // 失败 + throw new RuntimeException("红包校验失败,orderId=" + linkId +"还需金币数"+num); + + } catch (IOException | InterruptedException e) { + log.error("调用红包接口失败,orderId:{}", linkId, e); + throw new RuntimeException("调用红包接口异常", e); + } - // 业务判断 - if (code == 200 && flag) { - // 正常流程 - updateOrderStatus(linkId); - return "success"; - } - // false 或接口异常 - throw new RuntimeException("红包校验失败,orderId=" + linkId); } @Override public void updateOrderStatus(String linkId) throws Exception { diff --git a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java index 70a9d5c..8a89333 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java @@ -147,6 +147,7 @@ public class AuditServiceImpl implements AuditService { order.getRemark(),0, auditName, "金币充值"); }else if (order.getType()==2) { //退款 + //退红包校验 try { redService.checkRed(linkId); } catch (Exception e) {