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

微信小程序用户登录功能(我的卷包)

panzhilin 2 hónapja
szülő
commit
609c887c2b

+ 88 - 0
alien-dining/src/main/java/shop/alien/dining/controller/DiningCouponController.java

@@ -0,0 +1,88 @@
+package shop.alien.dining.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiSort;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.vo.LifeDiscountCouponVo;
+import shop.alien.dining.service.DiningCouponService;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 点餐模块-优惠券控制器(Feign 调 store,供小程序:我的优惠券/详情/选券)
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/1/29
+ */
+@Slf4j
+@Api(tags = {"微信点餐-优惠券(用户端)"})
+@ApiSort(3)
+@CrossOrigin
+@RestController
+@RequestMapping("/dining/coupon")
+@RequiredArgsConstructor
+public class DiningCouponController {
+
+    private final DiningCouponService diningCouponService;
+
+    /**
+     * 获取当前用户优惠券列表(分 tab:全部/即将过期/已使用/已过期)
+     */
+    @ApiOperation(value = "获取用户优惠券列表", notes = "需登录,请求头带 Authorization。tabType:0全部未使用,1即将过期,2已使用,3已过期")
+    @GetMapping("/userList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页码", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "每页条数", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "tabType", value = "tab类型:0全部未使用,1即将过期,2已使用,3已过期", dataType = "String", paramType = "query", required = true)
+    })
+    public R<List<LifeDiscountCouponVo>> getUserCouponList(
+            HttpServletRequest request,
+            @RequestParam(value = "page", defaultValue = "1") int page,
+            @RequestParam(value = "size", defaultValue = "10") int size,
+            @RequestParam("tabType") String tabType) {
+        String authorization = request.getHeader("Authorization");
+        return diningCouponService.getUserCouponList(authorization, page, size, tabType);
+    }
+
+    /**
+     * 根据优惠券 id 获取优惠券详情(规则、门槛等)
+     */
+    @ApiOperation(value = "获取优惠券详情", notes = "需登录,请求头带 Authorization。counponId 与 store 接口拼写一致")
+    @GetMapping("/detail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "counponId", value = "优惠券id", dataType = "String", paramType = "query", required = true)
+    })
+    public R<LifeDiscountCouponVo> getCounponDetailById(
+            HttpServletRequest request,
+            @RequestParam("counponId") String counponId) {
+        String authorization = request.getHeader("Authorization");
+        return diningCouponService.getCounponDetailById(authorization, counponId);
+    }
+
+    /**
+     * 获取该门店下用户可用/不可用优惠券列表(用于购物车/下单选券,按金额区分)
+     */
+    @ApiOperation(value = "获取门店可用优惠券列表", notes = "需登录。按 storeId+amount 返回可用券与不可用券及原因(满减门槛等)")
+    @GetMapping("/storeUsableList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "storeId", value = "门店id", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "amount", value = "当前消费金额(满减门槛)", dataType = "BigDecimal", paramType = "query", required = true)
+    })
+    public R<Map<String, Object>> getStoreUserUsableCouponList(
+            HttpServletRequest request,
+            @RequestParam("storeId") String storeId,
+            @RequestParam("amount") BigDecimal amount) {
+        String authorization = request.getHeader("Authorization");
+        return diningCouponService.getStoreUserUsableCouponList(authorization, storeId, amount);
+    }
+}

+ 52 - 2
alien-dining/src/main/java/shop/alien/dining/feign/AlienStoreFeign.java

@@ -2,11 +2,17 @@ package shop.alien.dining.feign;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.vo.LifeDiscountCouponVo;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
- * 点餐模块调用 alien-store(发码、校验等)
+ * 点餐模块调用 alien-store(发码、校验、优惠券等)
  *
  * @author ssk
  * @version 1.0
@@ -24,9 +30,53 @@ public interface AlienStoreFeign {
      * @param code         验证码
      */
     @GetMapping("ali/checkSmsCode")
-    R checkSmsCode(
+    R<?> checkSmsCode(
             @RequestParam("phone") String phone,
             @RequestParam("appType") Integer appType,
             @RequestParam("businessType") Integer businessType,
             @RequestParam("code") Integer code);
+
+    // ==================== 优惠券接口(Feign 调 store life-discount-coupon) ====================
+
+    /**
+     * 获取用户优惠券列表(分 tab:全部/即将过期/已使用/已过期)
+     *
+     * @param authorization 请求头 Authorization,供 store 解析当前用户
+     * @param page          页码
+     * @param size          每页条数
+     * @param tabType       0:全部(未使用),1:即将过期,2:已使用,3:已过期
+     * @return R.data 为 List&lt;LifeDiscountCouponVo&gt;
+     */
+    @GetMapping("life-discount-coupon/getUserCouponList")
+    R<List<LifeDiscountCouponVo>> getUserCouponList(
+            @RequestHeader(value = "Authorization", required = false) String authorization,
+            @RequestParam("page") int page,
+            @RequestParam("size") int size,
+            @RequestParam("tabType") String tabType);
+
+    /**
+     * 根据优惠券 ID 获取优惠券详情(含规则、门槛等)
+     *
+     * @param authorization 请求头 Authorization
+     * @param counponId      优惠券 id(接口拼写为 counponId)
+     * @return R.data 为 LifeDiscountCouponVo
+     */
+    @GetMapping("life-discount-coupon/getCounponDetailById")
+    R<LifeDiscountCouponVo> getCounponDetailById(
+            @RequestHeader(value = "Authorization", required = false) String authorization,
+            @RequestParam("counponId") String counponId);
+
+    /**
+     * 获取该门店下用户可用/不可用优惠券列表(按消费金额区分)
+     *
+     * @param authorization 请求头 Authorization
+     * @param storeId        门店 id
+     * @param amount         当前消费金额(用于满减门槛判断)
+     * @return R.data 为 Map:canUseLifeDiscountCouponVos、forbidUseLifeDiscountCouponVos
+     */
+    @GetMapping("life-discount-coupon/getStoreUserUsableCouponList")
+    R<Map<String, Object>> getStoreUserUsableCouponList(
+            @RequestHeader(value = "Authorization", required = false) String authorization,
+            @RequestParam("storeId") String storeId,
+            @RequestParam("amount") BigDecimal amount);
 }

+ 48 - 0
alien-dining/src/main/java/shop/alien/dining/service/DiningCouponService.java

@@ -0,0 +1,48 @@
+package shop.alien.dining.service;
+
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.vo.LifeDiscountCouponVo;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 点餐模块-优惠券服务(Feign 调 store 优惠券接口,供小程序使用)
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/1/29
+ */
+public interface DiningCouponService {
+
+    /**
+     * 获取当前用户优惠券列表(分 tab)
+     *
+     * @param authorization 请求头 Authorization,透传至 store 解析用户
+     * @param page          页码
+     * @param size          每页条数
+     * @param tabType       0:全部(未使用),1:即将过期,2:已使用,3:已过期
+     * @return R.data 为 List&lt;LifeDiscountCouponVo&gt;
+     */
+    R<List<LifeDiscountCouponVo>> getUserCouponList(String authorization, int page, int size, String tabType);
+
+    /**
+     * 根据优惠券 id 获取优惠券详情
+     *
+     * @param authorization 请求头 Authorization
+     * @param counponId     优惠券 id(与 store 接口拼写一致)
+     * @return R.data 为 LifeDiscountCouponVo
+     */
+    R<LifeDiscountCouponVo> getCounponDetailById(String authorization, String counponId);
+
+    /**
+     * 获取该门店下用户可用/不可用优惠券列表(按消费金额区分,用于选券)
+     *
+     * @param authorization 请求头 Authorization
+     * @param storeId        门店 id
+     * @param amount         当前消费金额(满减门槛)
+     * @return R.data 为 Map:canUseLifeDiscountCouponVos、forbidUseLifeDiscountCouponVos
+     */
+    R<Map<String, Object>> getStoreUserUsableCouponList(String authorization, String storeId, BigDecimal amount);
+}

+ 73 - 0
alien-dining/src/main/java/shop/alien/dining/service/impl/DiningCouponServiceImpl.java

@@ -0,0 +1,73 @@
+package shop.alien.dining.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import shop.alien.dining.feign.AlienStoreFeign;
+import shop.alien.dining.service.DiningCouponService;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.vo.LifeDiscountCouponVo;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 点餐模块-优惠券服务实现(透传 Feign 调 store,满足小程序我的优惠券/详情/选券)
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2025/1/29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class DiningCouponServiceImpl implements DiningCouponService {
+
+    private final AlienStoreFeign alienStoreFeign;
+
+    @Override
+    public R<List<LifeDiscountCouponVo>> getUserCouponList(String authorization, int page, int size, String tabType) {
+        log.info("DiningCouponService.getUserCouponList page={}, size={}, tabType={}", page, size, tabType);
+        try {
+            R<List<LifeDiscountCouponVo>> result = alienStoreFeign.getUserCouponList(authorization, page, size, tabType);
+            if (result == null) {
+                return R.fail("获取优惠券列表失败");
+            }
+            return result;
+        } catch (Exception e) {
+            log.error("DiningCouponService.getUserCouponList ERROR Msg={}", e.getMessage());
+            return R.fail("获取优惠券列表失败");
+        }
+    }
+
+    @Override
+    public R<LifeDiscountCouponVo> getCounponDetailById(String authorization, String counponId) {
+        log.info("DiningCouponService.getCounponDetailById counponId={}", counponId);
+        try {
+            R<LifeDiscountCouponVo> result = alienStoreFeign.getCounponDetailById(authorization, counponId);
+            if (result == null) {
+                return R.fail("获取优惠券详情失败");
+            }
+            return result;
+        } catch (Exception e) {
+            log.error("DiningCouponService.getCounponDetailById ERROR Msg={}", e.getMessage());
+            return R.fail("获取优惠券详情失败");
+        }
+    }
+
+    @Override
+    public R<Map<String, Object>> getStoreUserUsableCouponList(String authorization, String storeId, BigDecimal amount) {
+        log.info("DiningCouponService.getStoreUserUsableCouponList storeId={}, amount={}", storeId, amount);
+        try {
+            R<Map<String, Object>> result = alienStoreFeign.getStoreUserUsableCouponList(authorization, storeId, amount);
+            if (result == null) {
+                return R.fail("获取门店可用优惠券列表失败");
+            }
+            return result;
+        } catch (Exception e) {
+            log.error("DiningCouponService.getStoreUserUsableCouponList ERROR Msg={}", e.getMessage());
+            return R.fail("获取门店可用优惠券列表失败");
+        }
+    }
+}