Quellcode durchsuchen

商家端 查询桌号下是否有预订信息

qinxuyang vor 4 Wochen
Ursprung
Commit
b1cb39d9ea

+ 27 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreBookingTableController.java

@@ -204,4 +204,31 @@ public class StoreBookingTableController {
         }
     }
 
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("查询桌号下是否有预订信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "tableId", value = "桌号ID", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/hasReservation")
+    public R<Boolean> hasReservationInTable(@RequestParam Integer tableId, @RequestParam Integer storeId) {
+        log.info("StoreBookingTableController.hasReservationInTable?tableId={}, storeId={}", tableId, storeId);
+        
+        if (tableId == null) {
+            return R.fail("桌号ID不能为空");
+        }
+        
+        if (storeId == null) {
+            return R.fail("门店ID不能为空");
+        }
+        
+        try {
+            boolean hasReservation = storeBookingTableService.hasReservationInTable(tableId, storeId);
+            return R.data(hasReservation);
+        } catch (Exception e) {
+            log.error("查询桌号下是否有预订信息失败", e);
+            return R.fail("查询失败:" + e.getMessage());
+        }
+    }
+
 }

+ 9 - 0
alien-store/src/main/java/shop/alien/store/service/StoreBookingTableService.java

@@ -77,4 +77,13 @@ public interface StoreBookingTableService extends IService<StoreBookingTable> {
      * @return boolean
      */
     boolean deleteTable(Integer id);
+
+    /**
+     * 查询桌号下是否有预订信息
+     *
+     * @param tableId 桌号ID
+     * @param storeId 门店ID
+     * @return true-有预订信息, false-没有预订信息
+     */
+    boolean hasReservationInTable(Integer tableId, Integer storeId);
 }

+ 55 - 1
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingTableServiceImpl.java

@@ -14,8 +14,12 @@ import org.springframework.util.StringUtils;
 import org.springframework.beans.BeanUtils;
 import shop.alien.entity.store.StoreBookingCategory;
 import shop.alien.entity.store.StoreBookingTable;
+import shop.alien.entity.store.UserReservation;
+import shop.alien.entity.store.UserReservationTable;
 import shop.alien.entity.store.vo.StoreBookingTableVo;
 import shop.alien.mapper.StoreBookingTableMapper;
+import shop.alien.mapper.UserReservationMapper;
+import shop.alien.mapper.UserReservationTableMapper;
 import shop.alien.store.service.StoreBookingCategoryService;
 import shop.alien.store.service.StoreBookingTableService;
 import shop.alien.util.common.JwtUtil;
@@ -37,9 +41,15 @@ import java.util.stream.Collectors;
 public class StoreBookingTableServiceImpl extends ServiceImpl<StoreBookingTableMapper, StoreBookingTable> implements StoreBookingTableService {
 
     private final StoreBookingCategoryService storeBookingCategoryService;
+    private final UserReservationTableMapper userReservationTableMapper;
+    private final UserReservationMapper userReservationMapper;
 
-    public StoreBookingTableServiceImpl(@Lazy StoreBookingCategoryService storeBookingCategoryService) {
+    public StoreBookingTableServiceImpl(@Lazy StoreBookingCategoryService storeBookingCategoryService,
+                                        UserReservationTableMapper userReservationTableMapper,
+                                        UserReservationMapper userReservationMapper) {
         this.storeBookingCategoryService = storeBookingCategoryService;
+        this.userReservationTableMapper = userReservationTableMapper;
+        this.userReservationMapper = userReservationMapper;
     }
 
     @Override
@@ -401,6 +411,50 @@ public class StoreBookingTableServiceImpl extends ServiceImpl<StoreBookingTableM
         return this.removeById(id);
     }
 
+    @Override
+    public boolean hasReservationInTable(Integer tableId, Integer storeId) {
+        log.info("StoreBookingTableServiceImpl.hasReservationInTable?tableId={}, storeId={}", tableId, storeId);
+        
+        if (tableId == null || storeId == null) {
+            log.warn("查询桌号下是否有预订信息失败:桌号ID或门店ID不能为空");
+            return false;
+        }
+        
+        // 查询该桌号下是否有预订信息
+        // 通过 user_reservation_table 关联 user_reservation 表查询
+        // 条件:table_id = 桌号ID,且 user_reservation.store_id = 门店ID,且两个表的 delete_flag = 0
+        LambdaQueryWrapper<UserReservationTable> tableWrapper = new LambdaQueryWrapper<>();
+        tableWrapper.eq(UserReservationTable::getTableId, tableId);
+        // @TableLogic 会自动过滤已删除的记录(delete_flag=0)
+        
+        List<UserReservationTable> reservationTables = userReservationTableMapper.selectList(tableWrapper);
+        
+        if (reservationTables == null || reservationTables.isEmpty()) {
+            log.info("查询桌号下是否有预订信息完成,tableId={}, storeId={}, count=0, hasReservation=false", 
+                    tableId, storeId);
+            return false;
+        }
+        
+        // 检查这些预订是否属于该门店
+        List<Integer> reservationIds = reservationTables.stream()
+                .map(UserReservationTable::getReservationId)
+                .distinct()
+                .collect(Collectors.toList());
+        
+        LambdaQueryWrapper<UserReservation> reservationWrapper = new LambdaQueryWrapper<>();
+        reservationWrapper.in(UserReservation::getId, reservationIds)
+                .eq(UserReservation::getStoreId, storeId);
+        // @TableLogic 会自动过滤已删除的记录(delete_flag=0)
+        
+        long count = userReservationMapper.selectCount(reservationWrapper);
+        boolean hasReservation = count > 0;
+        
+        log.info("查询桌号下是否有预订信息完成,tableId={}, storeId={}, count={}, hasReservation={}", 
+                tableId, storeId, count, hasReservation);
+        
+        return hasReservation;
+    }
+
     /**
      * 从JWT获取当前登录用户ID
      *