Jelajahi Sumber

Merge remote-tracking branch 'origin/sit-OrderFood' into sit-OrderFood

刘云鑫 2 bulan lalu
induk
melakukan
f8ac4a8c9a
20 mengubah file dengan 391 tambahan dan 106 penghapusan
  1. 1 1
      SSE前后端使用说明书.md
  2. 2 2
      alien-dining/src/main/java/shop/alien/dining/config/CartWebSocketProcess.java
  3. 103 0
      alien-dining/src/main/java/shop/alien/dining/config/WebSocketConfig.java
  4. 2 2
      alien-dining/src/main/java/shop/alien/dining/controller/DiningController.java
  5. 88 0
      alien-dining/src/main/java/shop/alien/dining/controller/DiningCouponController.java
  6. 0 41
      alien-dining/src/main/java/shop/alien/dining/controller/DiningMenuController.java
  7. 5 5
      alien-dining/src/main/java/shop/alien/dining/controller/StoreOrderController.java
  8. 52 2
      alien-dining/src/main/java/shop/alien/dining/feign/AlienStoreFeign.java
  9. 1 2
      alien-dining/src/main/java/shop/alien/dining/service/CartService.java
  10. 48 0
      alien-dining/src/main/java/shop/alien/dining/service/DiningCouponService.java
  11. 0 13
      alien-dining/src/main/java/shop/alien/dining/service/DiningMenuService.java
  12. 1 2
      alien-dining/src/main/java/shop/alien/dining/service/DiningService.java
  13. 1 1
      alien-dining/src/main/java/shop/alien/dining/service/SseService.java
  14. 1 1
      alien-dining/src/main/java/shop/alien/dining/service/StoreOrderService.java
  15. 3 3
      alien-dining/src/main/java/shop/alien/dining/service/impl/CartServiceImpl.java
  16. 73 0
      alien-dining/src/main/java/shop/alien/dining/service/impl/DiningCouponServiceImpl.java
  17. 0 21
      alien-dining/src/main/java/shop/alien/dining/service/impl/DiningMenuServiceImpl.java
  18. 5 5
      alien-dining/src/main/java/shop/alien/dining/service/impl/DiningServiceImpl.java
  19. 2 2
      alien-dining/src/main/java/shop/alien/dining/service/impl/SseServiceImpl.java
  20. 3 3
      alien-dining/src/main/java/shop/alien/dining/service/impl/StoreOrderServiceImpl.java

+ 1 - 1
SSE前后端使用说明书.md

@@ -794,7 +794,7 @@ wss://your-domain/ws/cart/{tableId}  (HTTPS环境)
 
 后端已实现 `CartWebSocketProcess` 类,位于:
 ```
-shop.alien.store.config.CartWebSocketProcess
+shop.alien.dining.config.CartWebSocketProcess
 ```
 
 **主要功能:**

+ 2 - 2
alien-store/src/main/java/shop/alien/store/config/CartWebSocketProcess.java → alien-dining/src/main/java/shop/alien/dining/config/CartWebSocketProcess.java

@@ -1,4 +1,4 @@
-package shop.alien.store.config;
+package shop.alien.dining.config;
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
@@ -6,9 +6,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
+import shop.alien.dining.service.CartService;
 import shop.alien.entity.store.dto.AddCartItemDTO;
 import shop.alien.entity.store.dto.CartDTO;
-import shop.alien.store.service.CartService;
 
 import javax.websocket.*;
 import javax.websocket.server.PathParam;

+ 103 - 0
alien-dining/src/main/java/shop/alien/dining/config/WebSocketConfig.java

@@ -0,0 +1,103 @@
+package shop.alien.dining.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+import javax.websocket.HandshakeResponse;
+import javax.websocket.server.HandshakeRequest;
+import javax.websocket.server.ServerEndpointConfig;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * WebSocketConfig
+ *
+ * @author ssk
+ * @version 1.0
+ * @date 2024/2/29 14:40
+ */
+@Configuration
+@EnableWebSocket
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+    
+    /**
+     * WebSocket配置器,用于在握手时获取IP地址和User-Agent
+     */
+    public static class WebSocketConfigurator extends ServerEndpointConfig.Configurator {
+        @Override
+        public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
+            Map<String, Object> userProperties = sec.getUserProperties();
+            Map<String, List<String>> headers = request.getHeaders();
+            
+            // 获取User-Agent
+            List<String> userAgentList = headers.get("User-Agent");
+            String userAgent = (userAgentList != null && !userAgentList.isEmpty()) ? userAgentList.get(0) : null;
+            userProperties.put("userAgent", userAgent);
+            
+            // 获取IP地址(从请求头中获取)
+            String ipAddress = getIpAddress(headers);
+            userProperties.put("ipAddress", ipAddress);
+        }
+        
+        /**
+         * 从请求头中获取客户端IP地址
+         */
+        private String getIpAddress(Map<String, List<String>> headers) {
+            String ip = null;
+            
+            // 尝试从各种请求头中获取IP
+            if (headers.containsKey("X-Forwarded-For")) {
+                List<String> xffList = headers.get("X-Forwarded-For");
+                if (xffList != null && !xffList.isEmpty()) {
+                    ip = xffList.get(0);
+                }
+            }
+            if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
+                if (headers.containsKey("Proxy-Client-IP")) {
+                    List<String> proxyList = headers.get("Proxy-Client-IP");
+                    if (proxyList != null && !proxyList.isEmpty()) {
+                        ip = proxyList.get(0);
+                    }
+                }
+            }
+            if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
+                if (headers.containsKey("WL-Proxy-Client-IP")) {
+                    List<String> wlProxyList = headers.get("WL-Proxy-Client-IP");
+                    if (wlProxyList != null && !wlProxyList.isEmpty()) {
+                        ip = wlProxyList.get(0);
+                    }
+                }
+            }
+            if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
+                if (headers.containsKey("HTTP_CLIENT_IP")) {
+                    List<String> httpClientList = headers.get("HTTP_CLIENT_IP");
+                    if (httpClientList != null && !httpClientList.isEmpty()) {
+                        ip = httpClientList.get(0);
+                    }
+                }
+            }
+            if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
+                if (headers.containsKey("HTTP_X_FORWARDED_FOR")) {
+                    List<String> httpXffList = headers.get("HTTP_X_FORWARDED_FOR");
+                    if (httpXffList != null && !httpXffList.isEmpty()) {
+                        ip = httpXffList.get(0);
+                    }
+                }
+            }
+            
+            // 如果是多级代理,取第一个IP
+            if (ip != null && ip.contains(",")) {
+                ip = ip.split(",")[0].trim();
+            }
+            
+            return ip;
+        }
+    }
+}

+ 2 - 2
alien-store/src/main/java/shop/alien/store/controller/DiningController.java → alien-dining/src/main/java/shop/alien/dining/controller/DiningController.java

@@ -1,4 +1,4 @@
-package shop.alien.store.controller;
+package shop.alien.dining.controller;
 
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
@@ -7,7 +7,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.vo.*;
-import shop.alien.store.service.DiningService;
+import shop.alien.dining.service.DiningService;
 import shop.alien.util.common.JwtUtil;
 
 import java.util.List;

+ 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);
+    }
+}

+ 0 - 41
alien-dining/src/main/java/shop/alien/dining/controller/DiningMenuController.java

@@ -1,41 +0,0 @@
-package shop.alien.dining.controller;
-
-import io.swagger.annotations.Api;
-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;
-
-/**
- * 点餐菜单控制器
- *
- * @author ssk
- * @version 1.0
- * @date 2024/12/4
- */
-@Slf4j
-@Api(tags = {"微信点餐-菜单管理(用户端)"})
-@ApiSort(1)
-@CrossOrigin
-@RestController
-@RequestMapping("/dining/menu")
-@RequiredArgsConstructor
-public class DiningMenuController {
-
-    @ApiOperation(value = "获取菜单列表", notes = "获取点餐菜单列表")
-    @GetMapping("/list")
-    public R list() {
-        // TODO: 实现菜单列表查询逻辑
-        return R.ok("菜单列表功能待实现");
-    }
-
-    @ApiOperation(value = "获取菜单详情", notes = "根据菜单ID获取菜单详情")
-    @GetMapping("/{id}")
-    public R getById(@PathVariable Long id) {
-        // TODO: 实现菜单详情查询逻辑
-        return R.ok("菜单详情功能待实现");
-    }
-}
-

+ 5 - 5
alien-store/src/main/java/shop/alien/store/controller/StoreOrderController.java → alien-dining/src/main/java/shop/alien/dining/controller/StoreOrderController.java

@@ -1,4 +1,4 @@
-package shop.alien.store.controller;
+package shop.alien.dining.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -19,10 +19,10 @@ import shop.alien.mapper.StoreTableMapper;
 import shop.alien.mapper.StoreInfoMapper;
 import shop.alien.entity.store.StoreTable;
 import shop.alien.entity.store.StoreInfo;
-import shop.alien.store.config.CartWebSocketProcess;
-import shop.alien.store.service.CartService;
-import shop.alien.store.service.SseService;
-import shop.alien.store.service.StoreOrderService;
+import shop.alien.dining.config.CartWebSocketProcess;
+import shop.alien.dining.service.CartService;
+import shop.alien.dining.service.SseService;
+import shop.alien.dining.service.StoreOrderService;
 import shop.alien.util.common.JwtUtil;
 
 import javax.validation.Valid;

+ 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);
 }

+ 1 - 2
alien-store/src/main/java/shop/alien/store/service/CartService.java → alien-dining/src/main/java/shop/alien/dining/service/CartService.java

@@ -1,8 +1,7 @@
-package shop.alien.store.service;
+package shop.alien.dining.service;
 
 import shop.alien.entity.store.dto.AddCartItemDTO;
 import shop.alien.entity.store.dto.CartDTO;
-import shop.alien.entity.store.dto.CartItemDTO;
 
 /**
  * 购物车服务接口

+ 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);
+}

+ 0 - 13
alien-dining/src/main/java/shop/alien/dining/service/DiningMenuService.java

@@ -1,13 +0,0 @@
-package shop.alien.dining.service;
-
-/**
- * 点餐菜单服务接口
- *
- * @author ssk
- * @version 1.0
- * @date 2024/12/4
- */
-public interface DiningMenuService {
-    // TODO: 定义菜单相关业务方法
-}
-

+ 1 - 2
alien-store/src/main/java/shop/alien/store/service/DiningService.java → alien-dining/src/main/java/shop/alien/dining/service/DiningService.java

@@ -1,7 +1,6 @@
-package shop.alien.store.service;
+package shop.alien.dining.service;
 
 import shop.alien.entity.store.vo.*;
-import shop.alien.entity.store.dto.CartDTO;
 
 import java.util.List;
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/SseService.java → alien-dining/src/main/java/shop/alien/dining/service/SseService.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service;
+package shop.alien.dining.service;
 
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/StoreOrderService.java → alien-dining/src/main/java/shop/alien/dining/service/StoreOrderService.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service;
+package shop.alien.dining.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

+ 3 - 3
alien-store/src/main/java/shop/alien/store/service/impl/CartServiceImpl.java → alien-dining/src/main/java/shop/alien/dining/service/impl/CartServiceImpl.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service.impl;
+package shop.alien.dining.service.impl;
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
@@ -18,8 +18,8 @@ import shop.alien.mapper.StoreCartMapper;
 import shop.alien.mapper.StoreCouponUsageMapper;
 import shop.alien.mapper.StoreCuisineMapper;
 import shop.alien.mapper.StoreTableMapper;
-import shop.alien.store.config.BaseRedisService;
-import shop.alien.store.service.CartService;
+import shop.alien.dining.config.BaseRedisService;
+import shop.alien.dining.service.CartService;
 import shop.alien.util.common.JwtUtil;
 
 import java.math.BigDecimal;

+ 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("获取门店可用优惠券列表失败");
+        }
+    }
+}

+ 0 - 21
alien-dining/src/main/java/shop/alien/dining/service/impl/DiningMenuServiceImpl.java

@@ -1,21 +0,0 @@
-package shop.alien.dining.service.impl;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import shop.alien.dining.service.DiningMenuService;
-
-/**
- * 点餐菜单服务实现类
- *
- * @author ssk
- * @version 1.0
- * @date 2024/12/4
- */
-@Slf4j
-@Service
-@RequiredArgsConstructor
-public class DiningMenuServiceImpl implements DiningMenuService {
-    // TODO: 实现菜单相关业务逻辑
-}
-

+ 5 - 5
alien-store/src/main/java/shop/alien/store/service/impl/DiningServiceImpl.java → alien-dining/src/main/java/shop/alien/dining/service/impl/DiningServiceImpl.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service.impl;
+package shop.alien.dining.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
@@ -11,9 +11,9 @@ import shop.alien.entity.store.dto.CartDTO;
 import shop.alien.entity.store.dto.CartItemDTO;
 import shop.alien.entity.store.vo.*;
 import shop.alien.mapper.*;
-import shop.alien.store.config.BaseRedisService;
-import shop.alien.store.service.CartService;
-import shop.alien.store.service.DiningService;
+import shop.alien.dining.config.BaseRedisService;
+import shop.alien.dining.service.CartService;
+import shop.alien.dining.service.DiningService;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -44,7 +44,7 @@ public class DiningServiceImpl implements DiningService {
     private final LifeDiscountCouponUserMapper lifeDiscountCouponUserMapper;
     private final CartService cartService;
     private final BaseRedisService baseRedisService;
-    private final shop.alien.store.service.StoreOrderService storeOrderService;
+    private final shop.alien.dining.service.StoreOrderService storeOrderService;
     private final shop.alien.mapper.StoreOrderMapper storeOrderMapper;
 
     @Override

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/impl/SseServiceImpl.java → alien-dining/src/main/java/shop/alien/dining/service/impl/SseServiceImpl.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service.impl;
+package shop.alien.dining.service.impl;
 
 import com.alibaba.fastjson2.JSON;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
  */
 @Slf4j
 @Service
-public class SseServiceImpl implements shop.alien.store.service.SseService {
+public class SseServiceImpl implements shop.alien.dining.service.SseService {
 
     // 存储每个桌号的SSE连接,一个桌号可以有多个连接(多个用户)
     private final ConcurrentHashMap<Integer, ConcurrentHashMap<String, SseEmitter>> connections = new ConcurrentHashMap<>();

+ 3 - 3
alien-store/src/main/java/shop/alien/store/service/impl/StoreOrderServiceImpl.java → alien-dining/src/main/java/shop/alien/dining/service/impl/StoreOrderServiceImpl.java

@@ -1,4 +1,4 @@
-package shop.alien.store.service.impl;
+package shop.alien.dining.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,8 +13,8 @@ import shop.alien.entity.store.*;
 import shop.alien.entity.store.dto.CartDTO;
 import shop.alien.entity.store.dto.CreateOrderDTO;
 import shop.alien.mapper.*;
-import shop.alien.store.service.CartService;
-import shop.alien.store.service.StoreOrderService;
+import shop.alien.dining.service.CartService;
+import shop.alien.dining.service.StoreOrderService;
 import shop.alien.util.common.JwtUtil;
 
 import java.math.BigDecimal;