|
@@ -16,6 +16,8 @@ import shop.alien.dining.service.StoreOrderService;
|
|
|
import shop.alien.dining.util.TokenUtil;
|
|
import shop.alien.dining.util.TokenUtil;
|
|
|
import shop.alien.entity.store.*;
|
|
import shop.alien.entity.store.*;
|
|
|
import shop.alien.entity.store.dto.CartDTO;
|
|
import shop.alien.entity.store.dto.CartDTO;
|
|
|
|
|
+import shop.alien.mapper.UserReservationMapper;
|
|
|
|
|
+import shop.alien.mapper.UserReservationTableMapper;
|
|
|
import shop.alien.entity.store.dto.CartItemDTO;
|
|
import shop.alien.entity.store.dto.CartItemDTO;
|
|
|
import shop.alien.entity.store.dto.CreateOrderDTO;
|
|
import shop.alien.entity.store.dto.CreateOrderDTO;
|
|
|
import shop.alien.entity.store.vo.OrderChangeLogBatchVO;
|
|
import shop.alien.entity.store.vo.OrderChangeLogBatchVO;
|
|
@@ -58,6 +60,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
private final StoreOrderChangeLogMapper orderChangeLogMapper;
|
|
private final StoreOrderChangeLogMapper orderChangeLogMapper;
|
|
|
private final shop.alien.dining.service.SseService sseService;
|
|
private final shop.alien.dining.service.SseService sseService;
|
|
|
private final shop.alien.dining.service.OrderLockService orderLockService;
|
|
private final shop.alien.dining.service.OrderLockService orderLockService;
|
|
|
|
|
+ private final UserReservationMapper userReservationMapper;
|
|
|
|
|
+ private final UserReservationTableMapper userReservationTableMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public StoreOrder createOrder(CreateOrderDTO dto) {
|
|
public StoreOrder createOrder(CreateOrderDTO dto) {
|
|
@@ -208,6 +212,10 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
order.setDiscountAmount(discountAmount);
|
|
order.setDiscountAmount(discountAmount);
|
|
|
order.setPayAmount(payAmount);
|
|
order.setPayAmount(payAmount);
|
|
|
order.setRemark(dto.getRemark());
|
|
order.setRemark(dto.getRemark());
|
|
|
|
|
+ if (dto.getUserReservationId() != null) {
|
|
|
|
|
+ validateUserReservationForOrder(dto.getUserReservationId(), table);
|
|
|
|
|
+ order.setUserReservationId(dto.getUserReservationId());
|
|
|
|
|
+ }
|
|
|
order.setUpdatedUserId(userId);
|
|
order.setUpdatedUserId(userId);
|
|
|
order.setUpdatedTime(now);
|
|
order.setUpdatedTime(now);
|
|
|
this.updateById(order);
|
|
this.updateById(order);
|
|
@@ -231,6 +239,10 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
|
|
|
|
|
// 如果没有订单需要更新,创建新订单
|
|
// 如果没有订单需要更新,创建新订单
|
|
|
if (!isUpdate) {
|
|
if (!isUpdate) {
|
|
|
|
|
+ if (dto.getUserReservationId() == null) {
|
|
|
|
|
+ throw new RuntimeException("请先完成就餐信息登记后再下单(需传入预约ID)");
|
|
|
|
|
+ }
|
|
|
|
|
+ validateUserReservationForOrder(dto.getUserReservationId(), table);
|
|
|
// 生成订单号
|
|
// 生成订单号
|
|
|
orderNo = generateOrderNo();
|
|
orderNo = generateOrderNo();
|
|
|
|
|
|
|
@@ -257,6 +269,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
// payType在支付时设置
|
|
// payType在支付时设置
|
|
|
order.setPayStatus(0); // 未支付
|
|
order.setPayStatus(0); // 未支付
|
|
|
order.setRemark(dto.getRemark());
|
|
order.setRemark(dto.getRemark());
|
|
|
|
|
+ order.setUserReservationId(dto.getUserReservationId());
|
|
|
order.setCreatedUserId(userId);
|
|
order.setCreatedUserId(userId);
|
|
|
order.setUpdatedUserId(userId);
|
|
order.setUpdatedUserId(userId);
|
|
|
// 手动设置创建时间和更新时间(临时方案,避免自动填充未生效导致 created_time 为 null)
|
|
// 手动设置创建时间和更新时间(临时方案,避免自动填充未生效导致 created_time 为 null)
|
|
@@ -1471,6 +1484,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
vo.setStoreType(storeType);
|
|
vo.setStoreType(storeType);
|
|
|
vo.setBusinessStatus(businessStatus);
|
|
vo.setBusinessStatus(businessStatus);
|
|
|
vo.setTableNumber(order.getTableNumber());
|
|
vo.setTableNumber(order.getTableNumber());
|
|
|
|
|
+ vo.setUserReservationId(order.getUserReservationId());
|
|
|
vo.setDinerCount(order.getDinerCount());
|
|
vo.setDinerCount(order.getDinerCount());
|
|
|
vo.setContactPhone(order.getContactPhone());
|
|
vo.setContactPhone(order.getContactPhone());
|
|
|
vo.setRemark(order.getRemark());
|
|
vo.setRemark(order.getRemark());
|
|
@@ -1625,6 +1639,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
vo.setOrderNo(order.getOrderNo());
|
|
vo.setOrderNo(order.getOrderNo());
|
|
|
vo.setStoreName(storeName);
|
|
vo.setStoreName(storeName);
|
|
|
vo.setTableNumber(order.getTableNumber());
|
|
vo.setTableNumber(order.getTableNumber());
|
|
|
|
|
+ vo.setUserReservationId(order.getUserReservationId());
|
|
|
vo.setDinerCount(order.getDinerCount());
|
|
vo.setDinerCount(order.getDinerCount());
|
|
|
vo.setContactPhone(order.getContactPhone());
|
|
vo.setContactPhone(order.getContactPhone());
|
|
|
vo.setRemark(order.getRemark());
|
|
vo.setRemark(order.getRemark());
|
|
@@ -1767,6 +1782,30 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
|
+ * 校验预约存在、归属门店一致,且当前桌在该预约占用桌位中;不限制预约状态(延迟任务仅在已到店时更新)。
|
|
|
|
|
+ */
|
|
|
|
|
+ private void validateUserReservationForOrder(Integer reservationId, StoreTable table) {
|
|
|
|
|
+ if (reservationId == null || table == null) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ UserReservation r = userReservationMapper.selectById(reservationId);
|
|
|
|
|
+ if (r == null) {
|
|
|
|
|
+ throw new RuntimeException("预约不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (r.getStoreId() == null || !r.getStoreId().equals(table.getStoreId())) {
|
|
|
|
|
+ throw new RuntimeException("预约与门店不匹配");
|
|
|
|
|
+ }
|
|
|
|
|
+ long cnt = userReservationTableMapper.selectCount(
|
|
|
|
|
+ new LambdaQueryWrapper<UserReservationTable>()
|
|
|
|
|
+ .eq(UserReservationTable::getReservationId, reservationId)
|
|
|
|
|
+ .eq(UserReservationTable::getTableId, table.getId())
|
|
|
|
|
+ .eq(UserReservationTable::getDeleteFlag, 0));
|
|
|
|
|
+ if (cnt == 0) {
|
|
|
|
|
+ throw new RuntimeException("当前桌位不在该预约占用桌位中");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
* 生成订单号
|
|
* 生成订单号
|
|
|
*/
|
|
*/
|
|
|
private String generateOrderNo() {
|
|
private String generateOrderNo() {
|