From 68a9b2281a2117535581ef8e0cb912eea741851e Mon Sep 17 00:00:00 2001 From: xupei Date: Fri, 21 Feb 2025 17:16:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BC=98=E5=8C=96=E3=80=81stripe=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=80=9A=E7=9F=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ai/da/common/utils/RedisUtil.java | 2 ++ .../ConvenientInquiryController.java | 2 +- .../com/ai/da/controller/StripeController.java | 14 ++++++++++++-- .../java/com/ai/da/service/StripeService.java | 2 ++ .../impl/ConvenientInquiryServiceImpl.java | 4 +--- .../ai/da/service/impl/StripeServiceImpl.java | 18 +++++++++++++++++- .../resources/mapper/primary/DesignMapper.xml | 5 +++-- 7 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ai/da/common/utils/RedisUtil.java b/src/main/java/com/ai/da/common/utils/RedisUtil.java index a0d42840..f7b9ea1a 100644 --- a/src/main/java/com/ai/da/common/utils/RedisUtil.java +++ b/src/main/java/com/ai/da/common/utils/RedisUtil.java @@ -300,4 +300,6 @@ public class RedisUtil { redisTemplate.delete(keys); } } + + public final static String STRIPE_EXCEPTION_LOG = "StripeException:"; } diff --git a/src/main/java/com/ai/da/controller/ConvenientInquiryController.java b/src/main/java/com/ai/da/controller/ConvenientInquiryController.java index 78c9ff51..95014eec 100644 --- a/src/main/java/com/ai/da/controller/ConvenientInquiryController.java +++ b/src/main/java/com/ai/da/controller/ConvenientInquiryController.java @@ -61,7 +61,7 @@ public class ConvenientInquiryController { @ApiOperation("获取指定时间区间内所有用户design的使用情况") @GetMapping("/getDesignStatistic") - public Response> getDesignStatistic(@RequestParam String startTime, @RequestParam String endTime, + public Response> getDesignStatistic(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) List ids, @RequestParam(required = false) String email) { Long accountId = UserContext.getUserHolder().getId(); String userEmail = accountService.getById(accountId).getUserEmail(); diff --git a/src/main/java/com/ai/da/controller/StripeController.java b/src/main/java/com/ai/da/controller/StripeController.java index 7d24e2d2..6eea73e8 100644 --- a/src/main/java/com/ai/da/controller/StripeController.java +++ b/src/main/java/com/ai/da/controller/StripeController.java @@ -1,6 +1,8 @@ package com.ai.da.controller; import com.ai.da.common.response.Response; +import com.ai.da.common.utils.DateUtil; +import com.ai.da.common.utils.RedisUtil; import com.ai.da.common.utils.SendEmailUtil; import com.ai.da.model.dto.ProductPurchaseDTO; import com.ai.da.service.StripeService; @@ -20,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.util.Date; import java.util.List; @Api(tags = "Stripe模块") @@ -31,6 +34,8 @@ public class StripeController { @Resource private StripeService stripeService; + @Resource + private RedisUtil redisUtil; @ApiOperation("创建支付链接") @PostMapping("/createOrder") @@ -54,11 +59,16 @@ public class StripeController { }catch (Exception e){ log.error("Stripe Controller层异常捕捉, {}", e.getMessage()); e.printStackTrace(); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + String key_1 = RedisUtil.STRIPE_EXCEPTION_LOG + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH); + String key_2 = key_1 + ":" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_hh_mm_ss); + String stackTrace = stripeService.getStackTrace(e, 10); + redisUtil.addToString(key_2, stackTrace); + Long size = redisUtil.getSize(key_1); // 给我发送邮件 - if (webhookReminderFlag.equals("1")){ + if (webhookReminderFlag.equals("1") && size == 3){ SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调", new String[]{"xupei3360@163.com"}); } + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } diff --git a/src/main/java/com/ai/da/service/StripeService.java b/src/main/java/com/ai/da/service/StripeService.java index 008b615c..3b91fed1 100644 --- a/src/main/java/com/ai/da/service/StripeService.java +++ b/src/main/java/com/ai/da/service/StripeService.java @@ -49,4 +49,6 @@ public interface StripeService { String detachCustomerAllPaymentMethod(String name, String email); // Map getIp(HttpServletRequest request); + + String getStackTrace(Exception e, int maxLines); } diff --git a/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java b/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java index fb24c7ef..8e92d0a8 100644 --- a/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java @@ -7,7 +7,6 @@ import com.ai.da.common.enums.CreditsEventsEnum; import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.utils.CopyUtil; import com.ai.da.common.utils.DateUtil; -import com.ai.da.common.utils.MinioUtil; import com.ai.da.mapper.primary.*; import com.ai.da.mapper.primary.entity.Account; import com.ai.da.mapper.primary.entity.Questionnaire; @@ -31,7 +30,6 @@ import io.minio.http.Method; import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.*; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -421,7 +419,7 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl> countryCount = trialOrderMapper.selectMaps(queryWrapper); Map countryCountMap = countryCount.stream().collect(Collectors.toMap( - map -> map.get("country"), + map -> map.get("country") == null ? "Not provided" : map.get("country"), map -> map.get("count") )); HashMap> resp = new HashMap<>(); diff --git a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java index 0743164e..81fe8ceb 100644 --- a/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/StripeServiceImpl.java @@ -473,7 +473,7 @@ public class StripeServiceImpl implements StripeService { OrderInfo orderByOrderNo = orderInfoService.getOrderByOrderNo(orderNo); // 2、确认订单状态为支付失败 boolean resp = true; - if (orderByOrderNo.getOrderStatus().equals(OrderStatusEnum.FAILURE.getType())) { + if (!Objects.isNull(orderByOrderNo) && orderByOrderNo.getOrderStatus().equals(OrderStatusEnum.FAILURE.getType())) { // 3、判断失败订单之后再无成功的订单 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("account_id", orderByOrderNo.getAccountId()); @@ -1326,4 +1326,20 @@ public class StripeServiceImpl implements StripeService { // // return request.getRemoteAddr(); // } + + + public String getStackTrace(Exception e, int maxLines) { + StringBuilder sb = new StringBuilder(); + StackTraceElement[] stackTraceElements = e.getStackTrace(); + int lines = Math.min(maxLines, stackTraceElements.length); + + for (int i = 0; i < lines; i++) { + sb.append(stackTraceElements[i].toString()).append("\n"); + } + // 如果堆栈信息超过 maxLines 行,添加提示 + if (stackTraceElements.length > maxLines) { + sb.append("... (More stack trace lines truncated)\n"); + } + return sb.toString(); + } } diff --git a/src/main/resources/mapper/primary/DesignMapper.xml b/src/main/resources/mapper/primary/DesignMapper.xml index 8a056a59..e887f921 100644 --- a/src/main/resources/mapper/primary/DesignMapper.xml +++ b/src/main/resources/mapper/primary/DesignMapper.xml @@ -27,9 +27,10 @@