2 Commits f8f8f02104 ... a3c59f18a0

Auteur SHA1 Message Date
  刘云鑫 a3c59f18a0 feat:商户端动态评论点赞 il y a 1 jour
  刘云鑫 14da76eec9 feat: 收银台,订单详情 il y a 2 jours

+ 35 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreBookingOrderController.java

@@ -1,12 +1,16 @@
 package shop.alien.store.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperationSupport;
+import io.swagger.annotations.ApiParam;
 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.StoreOrder;
 import shop.alien.entity.store.dto.StoreBookingChangeTableDTO;
 import shop.alien.entity.store.dto.StoreBookingCheckoutSubmitDTO;
 import shop.alien.entity.store.dto.StoreBookingPlaceOrderDTO;
@@ -112,4 +116,35 @@ public class StoreBookingOrderController {
             return R.fail("结账失败:" + e.getMessage());
         }
     }
+
+    /**
+     * 分页查询本门店下全部预订订单(store_order),不经过 alien-dining。
+     * <p>
+     * 状态筛选与堂食订单列表约定一致:不传为全部;0 为进行中(待支付+已支付);3 为已完成。
+     * 订单号支持模糊搜索,最多 15 个字符。
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("分页查询店铺订单:全部/进行中/已完成(orderStatus 不传、0、3),支持按订单号 keyword 模糊搜索")
+    @GetMapping("/page")
+    public R<IPage<StoreOrder>> pageBookingOrders(
+            @ApiParam(value = "门店ID", required = true) @RequestParam Integer storeId,
+            @ApiParam(value = "页码", defaultValue = "1") @RequestParam(defaultValue = "1") Long current,
+            @ApiParam(value = "每页条数", defaultValue = "10") @RequestParam(defaultValue = "10") Long size,
+            @ApiParam(value = "订单状态筛选:不传=全部,0=进行中(待支付+已支付),3=已完成")
+            @RequestParam(required = false) Integer orderStatus,
+            @ApiParam(value = "订单号模糊搜索,最多15字")
+            @RequestParam(required = false) String keyword) {
+        log.info("StoreBookingOrderController.pageBookingOrders?storeId={}, current={}, size={}, orderStatus={}, keyword={}",
+                storeId, current, size, orderStatus, keyword);
+        try {
+            Page<StoreOrder> page = new Page<>(current, size);
+            return R.data(storeBookingOrderService.pageBookingStoreOrders(page, storeId, orderStatus, keyword));
+        } catch (IllegalArgumentException e) {
+            log.warn("pageBookingOrders biz: {}", e.getMessage());
+            return R.fail(e.getMessage());
+        } catch (Exception e) {
+            log.error("pageBookingOrders error", e);
+            return R.fail("查询订单列表失败:" + e.getMessage());
+        }
+    }
 }

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/LifeCommentService.java

@@ -196,7 +196,7 @@ public class LifeCommentService {
                 return commonRatingMapper.update(null, new UpdateWrapper<CommonRating>()
                         .setSql("like_count = like_count + 1")
                         .eq("id", huifuId));
-            } else if (CommonConstant.COMMENT_LIKE.equals(type) || CommonConstant.DYNAMIC_LIKE.equals(type) || CommonConstant.CLOCK_IN_LIKE.equals(type) || CommonConstant.SECOND_HAND_LIKE.equals(type)) {
+            } else if (CommonConstant.COMMENT_LIKE.equals(type) || CommonConstant.DYNAMIC_LIKE.equals(type) || CommonConstant.CLOCK_IN_LIKE.equals(type) || CommonConstant.SECOND_HAND_LIKE.equals(type) || CommonConstant.STORE_DYNAMIC_LIKE.equals(type)) {
                 // 12-评论点赞:更新评论表点赞数
                 return commonCommentMapper.update(null, new UpdateWrapper<CommonComment>()
                         .setSql("like_count = like_count + 1")
@@ -364,7 +364,7 @@ public class LifeCommentService {
                 return commonRatingMapper.update(null, new UpdateWrapper<CommonRating>()
                         .setSql("like_count = like_count - 1")
                         .eq("id", huifuId));
-            } else if (CommonConstant.COMMENT_LIKE.equals(type) || CommonConstant.DYNAMIC_LIKE.equals(type) || CommonConstant.CLOCK_IN_LIKE.equals(type) || CommonConstant.SECOND_HAND_LIKE.equals(type)) {
+            } else if (CommonConstant.COMMENT_LIKE.equals(type) || CommonConstant.DYNAMIC_LIKE.equals(type) || CommonConstant.CLOCK_IN_LIKE.equals(type) || CommonConstant.SECOND_HAND_LIKE.equals(type) || CommonConstant.STORE_DYNAMIC_LIKE.equals(type)) {
                 // 12-评论点赞:更新评论表点赞数
                 return commonCommentMapper.update(null, new UpdateWrapper<CommonComment>()
                         .setSql("like_count = like_count - 1")

+ 15 - 0
alien-store/src/main/java/shop/alien/store/service/StoreBookingOrderService.java

@@ -1,5 +1,8 @@
 package shop.alien.store.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import shop.alien.entity.store.StoreOrder;
 import shop.alien.entity.store.dto.StoreBookingChangeTableDTO;
 import shop.alien.entity.store.dto.StoreBookingPlaceOrderDTO;
 import shop.alien.entity.store.vo.StoreBookingChangeTableUnifiedResultVo;
@@ -19,4 +22,16 @@ public interface StoreBookingOrderService {
      * 换桌统一入口:{@link StoreBookingChangeTableDTO#getSourceTableIds()} 为空则只返回空闲桌列表;否则执行换桌。
      */
     StoreBookingChangeTableUnifiedResultVo changeTable(StoreBookingChangeTableDTO dto);
+
+    /**
+     * 分页查询本门店预订侧订单(直连 store_order,与 alien-dining 分页语义一致)。
+     * <ul>
+     *   <li>{@code orderStatus == null}:全部状态</li>
+     *   <li>{@code orderStatus == 0}:进行中(库中 0 待支付 + 1 已支付)</li>
+     *   <li>{@code orderStatus == 3}:已完成</li>
+     * </ul>
+     *
+     * @param keyword 订单号模糊匹配,非空时最多截取 15 字
+     */
+    IPage<StoreOrder> pageBookingStoreOrders(Page<StoreOrder> page, Integer storeId, Integer orderStatus, String keyword);
 }

+ 2 - 0
alien-store/src/main/java/shop/alien/store/service/impl/CommonCommentServiceImpl.java

@@ -90,6 +90,8 @@ public class CommonCommentServiceImpl extends ServiceImpl<CommonCommentMapper, C
             likeType = CommonConstant.CLOCK_IN_LIKE;
         } else if (sourceType == CommentSourceTypeEnum.SECOND_HAND_COMMENT.getType()){
             likeType =  CommonConstant.SECOND_HAND_LIKE;
+        } else if (sourceType == CommentSourceTypeEnum.STORE_DYNAMIC_COMMENT.getType()){
+            likeType = CommonConstant.STORE_DYNAMIC_LIKE;
         }
         List<CommonCommentVo> firstLevelComment = getFirstLevelComment(sourceType, sourceId, pageNum, pageSize, userId,likeType);
         CommonRatingVo commonRatingVo = new CommonRatingVo();

+ 50 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingOrderServiceImpl.java

@@ -1,6 +1,8 @@
 package shop.alien.store.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +36,8 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashSet;
@@ -162,6 +166,52 @@ public class StoreBookingOrderServiceImpl extends ServiceImpl<StoreOrderMapper,
     }
 
     /**
+     * 商家端分页查询本店订单列表(筛选规则与堂食订单分页一致,便于前端复用「全部 / 进行中 / 已完成」Tab)。
+     * <p>
+     * 「进行中」= 待支付(0) + 已支付(1);「已完成」= 订单状态 3;「全部」不传 {@code orderStatus}。
+     */
+    @Override
+    public IPage<StoreOrder> pageBookingStoreOrders(Page<StoreOrder> page, Integer storeId, Integer orderStatus, String keyword) {
+        if (storeId == null) {
+            throw new IllegalArgumentException("门店ID不能为空");
+        }
+        List<Integer> orderStatusList = resolveBookingListOrderStatusFilter(orderStatus);
+        LambdaQueryWrapper<StoreOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StoreOrder::getDeleteFlag, 0)
+                .eq(StoreOrder::getStoreId, storeId);
+        if (orderStatusList != null && !orderStatusList.isEmpty()) {
+            wrapper.in(StoreOrder::getOrderStatus, orderStatusList);
+        }
+        if (StringUtils.hasText(keyword)) {
+            String kw = keyword.trim();
+            if (kw.length() > 15) {
+                kw = kw.substring(0, 15);
+            }
+            wrapper.like(StoreOrder::getOrderNo, kw);
+        }
+        wrapper.orderByDesc(StoreOrder::getCreatedTime);
+        log.info("pageBookingStoreOrders storeId={}, orderStatus(raw)={}, resolvedStatuses={}, keywordPresent={}",
+                storeId, orderStatus, orderStatusList, StringUtils.hasText(keyword));
+        return this.page(page, wrapper);
+    }
+
+    /**
+     * 与堂食订单列表一致:仅 0→进行中、3→已完成 参与筛选;其它取值不按状态过滤(等同不筛选时的行为由调用方保证不传非法值)。
+     */
+    private static List<Integer> resolveBookingListOrderStatusFilter(Integer orderStatus) {
+        if (orderStatus == null) {
+            return null;
+        }
+        if (orderStatus == 0) {
+            return Arrays.asList(0, 1);
+        }
+        if (orderStatus == 3) {
+            return Collections.singletonList(3);
+        }
+        return null;
+    }
+
+    /**
      * 执行换桌:按源/目标桌数量关系处理 1×1、1×多、多×1(合并)、N×N 配对,并同步预约时段与桌台占用。
      * <p>
      * 约定:多桌合并为一桌时,多笔待支付合并为一笔,保证「多人加餐、一人结账」仅一笔待支付;明细与实付金额累加至主单。

+ 1 - 0
alien-store/src/main/java/shop/alien/store/util/CommonConstant.java

@@ -114,6 +114,7 @@ public class CommonConstant {
     public static final String DYNAMIC_LIKE = "13";
     public static final String CLOCK_IN_LIKE = "14";
     public static final String SECOND_HAND_LIKE = "15";
+    public static final String STORE_DYNAMIC_LIKE = "16";
 
 
     /**

+ 2 - 1
alien-util/src/main/java/shop/alien/util/common/constant/CommentSourceTypeEnum.java

@@ -5,7 +5,8 @@ public enum CommentSourceTypeEnum {
     STORE_COMMENT(1, "店铺评价"),
     DYNAMIC_COMMENT(2, "动态评论"),
     CLOCK_IN_COMMENT(3, "打卡评论"),
-    SECOND_HAND_COMMENT(4, "二手商品评论");
+    SECOND_HAND_COMMENT(4, "二手商品评论"),
+    STORE_DYNAMIC_COMMENT(5, "商家动态评论");
     private final Integer type;
     private final String info;