Browse Source

停车优惠查询

skyline 6 months ago
parent
commit
70313a24b5

+ 17 - 1
car-wash-miniapp/src/main/java/com/kym/miniapp/controller/ParkingCouponController.java

@@ -1,5 +1,6 @@
 package com.kym.miniapp.controller;
 
+import com.kym.service.WashOrderService;
 import com.kym.service.cache.KymCache;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.bind.annotation.*;
@@ -15,7 +16,13 @@ import java.io.IOException;
 @RequestMapping("/parking-coupon")
 public class ParkingCouponController {
 
-	/**
+	private final WashOrderService washOrderService;
+
+    public ParkingCouponController(WashOrderService washOrderService) {
+        this.washOrderService = washOrderService;
+    }
+
+    /**
 	 * 停车优惠链接跳转
 	 */
 	@GetMapping
@@ -24,4 +31,13 @@ public class ParkingCouponController {
 		var url = KymCache.INSTANCE.getParkingCouponUrl(code);
 		response.sendRedirect(url);
 	}
+
+	/**
+	 * 查询是否符合停车优惠
+	 */
+	@GetMapping("/checkParkingCoupon")
+	public void checkParkingCoupon(@RequestParam String mobilePhone) {
+		var url = washOrderService.checkParkingCoupon(mobilePhone);
+	}
+
 }

+ 2 - 0
car-wash-service/src/main/java/com/kym/service/WashOrderService.java

@@ -50,4 +50,6 @@ public interface WashOrderService extends MyBaseService<WashOrder> {
     WashOrder getOrderInProgressByUserId(long userId);
 
     List<StationTrendVo> stationTrend(StatQueryParam params);
+
+    String checkParkingCoupon(String mobilePhone);
 }

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

@@ -149,7 +149,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
             var parkingCouponUrl = KymCache.INSTANCE.getParkingQrCodeUrlByStationId(washOrder.getStationId());
             // 维码链接做转换防止重复使用,有效期2小时
             var code = UUID.randomUUID().toString();
-            KymCache.INSTANCE.setParkingCouponCode(code, parkingCouponUrl, LocalDateTime.now().plusHours(2));
+            KymCache.INSTANCE.setParkingCouponCode(code, parkingCouponUrl, 3600*2L);
             var url = DOMAIN + "/api/parking-coupon?code=" + code;
             mpMsgTemplateService.sendParkingCouponMsg(washOrder, url);
         } else {

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

@@ -207,8 +207,8 @@ 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 void setParkingCouponCode(String code, String parkingCouponUrl, Long seconds) {
+        KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.PARKING_COUPON_CODE + code, parkingCouponUrl, seconds);
     }
 
     public String getParkingCouponUrl(String code) {

+ 20 - 0
car-wash-service/src/main/java/com/kym/service/impl/WashOrderServiceImpl.java

@@ -315,5 +315,25 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
     public List<StationTrendVo> stationTrend(StatQueryParam params) {
         return baseMapper.StationTrend(params);
     }
+
+    @Override
+    public String checkParkingCoupon(String mobilePhone) {
+        // 查询xx时间内该用户的是否有满足消费金额的订单,如果有,取最近一条的场站
+        var user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobilePhone, mobilePhone));
+        if (user == null) {
+            throw new BusinessException("请输入注册洗车小程序使用的手机号码!");
+        }
+
+        // 优惠券有效期2小时
+        var orderList = lambdaQuery()
+                .eq(WashOrder::getUserId, user.getId())
+                .ge(WashOrder::getEndTime, LocalDateTime.now().minusHours(2))
+                .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_已支付)
+                .orderByDesc(WashOrder::getId).list();
+        if(orderList.isEmpty() || (orderList.stream().collect(Collectors.summarizingInt(WashOrder::getAmount)).getSum() < WashOrder.PARKING_COUPON_MIN_AMOUNT)){
+            throw new BusinessException("不符合优惠条件:订单完成超过2小时或洗车金额不足6元。");
+        }
+        return KymCache.INSTANCE.getParkingQrCodeUrlByStationId(orderList.get(0).getStationId());
+    }
     //endregion
 }