Forráskód Böngészése

停车优惠二维码做转换处理防止二次使用

skyline 7 hónapja
szülő
commit
19746b9d30

+ 1 - 0
car-wash-entity/src/main/java/com/kym/entity/common/RedisKeys.java

@@ -20,6 +20,7 @@ public interface RedisKeys {
     String STATION_ID_TO_INVESTOR_ADMIN_USER_ID = "STATION_ID_TO_INVESTOR_ADMIN_USER_ID:";
     String USER_ID_TO_STATION_ID = "USER_ID_TO_STATION_ID:";
     String SHORT_ID_TO_SEQ_NAME = "SHORT_ID_TO_SEQ_NAME:";
+    String PARKING_COUPON_CODE = "PARKING_COUPON_CODE";
 
     // =======================================洗车======================================
 

+ 0 - 18
car-wash-miniapp/src/main/java/com/kym/miniapp/controller/MpMsgTemplateController.java

@@ -1,18 +0,0 @@
-package com.kym.miniapp.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 微信公众号消息模版表 前端控制器
- * </p>
- *
- * @author skyline
- * @since 2024-08-07
- */
-@RestController
-@RequestMapping("/mp-msg-template")
-public class MpMsgTemplateController {
-
-}

+ 31 - 0
car-wash-miniapp/src/main/java/com/kym/miniapp/controller/ParkingCouponController.java

@@ -0,0 +1,31 @@
+package com.kym.miniapp.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.kym.service.cache.KymCache;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+
+/**
+ * 停车优惠链接跳转
+ * @author skyline
+ * @since 2024-08-07
+ */
+@RestController
+@RequestMapping("/parking-coupon")
+public class ParkingCouponController {
+
+	/**
+	 * 停车优惠链接跳转
+	 */
+	@SaIgnore
+	@RequestMapping("/{code}")
+	public void jump(HttpServletResponse response, @PathVariable String code) throws IOException {
+		// 从缓存中获取链接并跳转
+		var url = KymCache.INSTANCE.getParkingCouponUrl(code);
+		response.sendRedirect(url);
+	}
+}

+ 1 - 0
car-wash-miniapp/src/main/resources/application-dev.yml

@@ -57,3 +57,4 @@ spring:
 
 kym:
   notify-email: skyline@kuaiyuman.cn
+  domain: https://dev-wash.kuaiyuman.cn

+ 1 - 0
car-wash-miniapp/src/main/resources/application-prod.yml

@@ -57,3 +57,4 @@ spring:
 
 kym:
   notify-email: skyline@kuaiyuman.cn
+  domain: https://wash.kuaiyuman.cn

+ 9 - 1
car-wash-service/src/main/java/com/kym/service/awoara/event/handle/OrderCloseEventHandler.java

@@ -7,6 +7,7 @@ import com.kym.service.*;
 import com.kym.service.cache.KymCache;
 import com.kym.service.factory.DiscountStrategyFactory;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -14,6 +15,7 @@ import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * 关闭订单事件(订单结算)
@@ -23,6 +25,8 @@ import java.util.List;
 @Slf4j
 @Component
 public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObject> {
+    @Value("${kym.domain}}")
+    private String domain;
     private final WashOrderService washOrderService;
     private final WalletDetailService walletDetailService;
     private final AccountService accountService;
@@ -139,7 +143,11 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         // 判断消费金额是否达标,达标发送领取停车优惠券消息
         if (orderInfo.getAmount() >= WashOrder.PARKING_COUPON_MIN_AMOUNT) {
             var parkingCouponUrl = KymCache.INSTANCE.getParkingQrCodeUrlByStationId(washOrder.getStationId());
-            mpMsgTemplateService.sendParkingCouponMsg(washOrder, parkingCouponUrl);
+            // 维码链接做转换防止重复使用,有效期2小时
+            var code = UUID.randomUUID().toString();
+            KymCache.INSTANCE.setParkingCouponCode(code, parkingCouponUrl, LocalDateTime.now().plusHours(2));
+            var url = domain + "/parking-coupon?code=" + code;
+            mpMsgTemplateService.sendParkingCouponMsg(washOrder, url);
         } else {
             // 发送公众号消息(订单完成)
             mpMsgTemplateService.sendOrderCompletedMsg(washOrder, account.getBalance());

+ 9 - 0
car-wash-service/src/main/java/com/kym/service/cache/KymCache.java

@@ -7,6 +7,7 @@ import com.kym.entity.common.RedisKeys;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -206,6 +207,14 @@ public enum KymCache {
         return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.SHORT_ID_TO_SEQ_NAME + shortId);
     }
 
+    public void setParkingCouponCode(String code, String parkingCouponUrl, LocalDateTime localDateTime) {
+        KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.PARKING_COUPON_CODE + code, parkingCouponUrl);
+    }
+
+    public String getParkingCouponUrl(String code) {
+        return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.PARKING_COUPON_CODE + code);
+    }
+
 
     @Component
     public static class KymCacheInjector {