浏览代码

@ApiOperation("【小程序】按门店与餐桌查询预约详情(透传点餐 → Feign 门店,与 APP 直调 /user/reservation/detailByStoreAndTableRecord 等价)")

lutong 3 周之前
父节点
当前提交
d6bb6f2109

+ 24 - 0
alien-dining/src/main/java/shop/alien/dining/controller/DiningController.java

@@ -9,6 +9,7 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.dto.DiningWalkInReservationDTO;
 import shop.alien.entity.store.vo.TableDiningStatusVO;
 import shop.alien.entity.store.vo.*;
+import shop.alien.dining.feign.AlienStoreFeign;
 import shop.alien.dining.service.DiningService;
 import shop.alien.dining.service.DiningWalkInReservationService;
 import shop.alien.dining.util.TokenUtil;
@@ -32,6 +33,7 @@ public class DiningController {
 
     private final DiningService diningService;
     private final DiningWalkInReservationService diningWalkInReservationService;
+    private final AlienStoreFeign alienStoreFeign;
 
     @ApiOperation(value = "提交到店就餐信息", notes = "选完人数并填写姓名/电话/时段后调用:写入 user_reservation,状态为已到店(2),并关联当前桌;同时将 store_table 置为就餐中(1)、写入 diner_count(与 page-info 首客传人数一致),便于 /table-dining-status。返回预约ID。下单时可不传 userReservationId,后端将按 tableId 解析本桌当日有效预约。")
     @PostMapping("/walk-in/reservation")
@@ -50,6 +52,28 @@ public class DiningController {
         }
     }
 
+    @ApiOperation(value = "【小程序】按门店与餐桌查询预约详情列表", notes = "内部 Feign 调用门店 GET /user/reservation/detailByStoreAndTableRecord。userReservationTableId 为 store_table.id。reservationDate 为 yyyy-MM-dd 可选。免登录,与门店接口一致。")
+    @GetMapping("/reservation/detail-by-store-table-record")
+    public R<List<UserReservationVo>> reservationDetailByStoreAndTableRecord(
+            @ApiParam(value = "门店ID", required = true) @RequestParam Integer storeId,
+            @ApiParam(value = "餐桌ID(store_table.id)", required = true) @RequestParam Integer userReservationTableId,
+            @ApiParam(value = "预订日期 yyyy-MM-dd,不传则不过滤") @RequestParam(required = false) String reservationDate) {
+        log.info("DiningController.reservationDetailByStoreAndTableRecord?storeId={}, userReservationTableId={}, reservationDate={}",
+                storeId, userReservationTableId, reservationDate);
+        try {
+            if (storeId == null) {
+                return R.fail("门店ID不能为空");
+            }
+            if (userReservationTableId == null) {
+                return R.fail("餐桌ID不能为空");
+            }
+            return alienStoreFeign.detailByStoreAndTableRecord(storeId, userReservationTableId, reservationDate);
+        } catch (Exception e) {
+            log.error("查询预约详情列表失败: {}", e.getMessage(), e);
+            return R.fail("查询预约详情列表失败: " + e.getMessage());
+        }
+    }
+
     @ApiOperation(value = "查询餐桌是否处于就餐中", notes = "免登录可调用,用于前端判断是否跳过选择用餐人数。返回 tableNumber 为桌号名称。就餐中(status=1)、加餐(status=3) 均视为就餐状态,且 diner_count 有值 时 inDining=true")
     @GetMapping("/table-dining-status")
     public R<TableDiningStatusVO> getTableDiningStatus(

+ 13 - 0
alien-dining/src/main/java/shop/alien/dining/feign/AlienStoreFeign.java

@@ -13,6 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeCollect;
 import shop.alien.entity.store.vo.LifeDiscountCouponVo;
+import shop.alien.entity.store.vo.UserReservationVo;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -159,4 +160,16 @@ public interface AlienStoreFeign {
      */
     @PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     R<String> uploadFile(@RequestPart("file") MultipartFile file);
+
+    // ==================== 用户预约(门店实现,小程序经点餐 Feign 转发) ====================
+
+    /**
+     * 与 {@code UserReservationController#detailByStoreAndTableRecord} 一致。
+     * {@code userReservationTableId} 对应 {@code store_table.id}(餐桌主键)。
+     */
+    @GetMapping("user/reservation/detailByStoreAndTableRecord")
+    R<List<UserReservationVo>> detailByStoreAndTableRecord(
+            @RequestParam("storeId") Integer storeId,
+            @RequestParam("userReservationTableId") Integer userReservationTableId,
+            @RequestParam(value = "reservationDate", required = false) String reservationDate);
 }

+ 16 - 0
alien-store/src/main/java/shop/alien/store/controller/dining/StoreDiningPathProxyController.java

@@ -57,6 +57,22 @@ public class StoreDiningPathProxyController {
         }
     }
 
+    @ApiOperation("【小程序】按门店与餐桌查询预约详情(透传点餐 → Feign 门店,与 APP 直调 /user/reservation/detailByStoreAndTableRecord 等价)")
+    @GetMapping("/reservation/detail-by-store-table-record")
+    public R<List<UserReservationVo>> reservationDetailByStoreAndTableRecord(
+            HttpServletRequest request,
+            @RequestParam Integer storeId,
+            @RequestParam Integer userReservationTableId,
+            @RequestParam(required = false) String reservationDate) {
+        try {
+            return diningServiceFeign.reservationDetailByStoreAndTableRecord(
+                    auth(request), storeId, userReservationTableId, reservationDate);
+        } catch (Exception e) {
+            log.error("reservationDetailByStoreAndTableRecord: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
     @ApiOperation("获取点餐页面信息")
     @GetMapping("/page-info")
     public R<DiningPageInfoVO> getDiningPageInfo(

+ 10 - 0
alien-store/src/main/java/shop/alien/store/feign/DiningServiceFeign.java

@@ -61,6 +61,16 @@ public interface DiningServiceFeign {
             @RequestBody DiningWalkInReservationDTO dto);
 
     /**
+     * 【微信小程序 / 统一网关】按门店与餐桌查询预约详情;点餐服务内 Feign 门店 {@code /user/reservation/detailByStoreAndTableRecord}。
+     */
+    @GetMapping("/store/dining/reservation/detail-by-store-table-record")
+    R<List<UserReservationVo>> reservationDetailByStoreAndTableRecord(
+            @RequestHeader(value = "Authorization", required = false) String authorization,
+            @RequestParam("storeId") Integer storeId,
+            @RequestParam("userReservationTableId") Integer userReservationTableId,
+            @RequestParam(value = "reservationDate", required = false) String reservationDate);
+
+    /**
      * 获取点餐页面信息
      *
      * @param authorization 请求头 Authorization,供 dining 解析当前用户