|
@@ -1,6 +1,8 @@
|
|
|
package shop.alien.store.service.impl;
|
|
package shop.alien.store.service.impl;
|
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -34,6 +36,8 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.Arrays;
|
|
|
|
|
+import java.util.Collections;
|
|
|
import java.util.Comparator;
|
|
import java.util.Comparator;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.HashSet;
|
|
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 配对,并同步预约时段与桌台占用。
|
|
* 执行换桌:按源/目标桌数量关系处理 1×1、1×多、多×1(合并)、N×N 配对,并同步预约时段与桌台占用。
|
|
|
* <p>
|
|
* <p>
|
|
|
* 约定:多桌合并为一桌时,多笔待支付合并为一笔,保证「多人加餐、一人结账」仅一笔待支付;明细与实付金额累加至主单。
|
|
* 约定:多桌合并为一桌时,多笔待支付合并为一笔,保证「多人加餐、一人结账」仅一笔待支付;明细与实付金额累加至主单。
|