|
@@ -361,8 +361,9 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 支付成功后,清空购物车
|
|
|
|
|
- cartService.clearCart(order.getTableId());
|
|
|
|
|
|
|
+ // 支付完成后,自动重置餐桌(保留订单数据,只重置餐桌绑定关系和购物车)
|
|
|
|
|
+ // resetTableAfterPayment 方法会完全清空购物车,所以不需要单独调用 clearCart
|
|
|
|
|
+ resetTableAfterPayment(order.getTableId());
|
|
|
|
|
|
|
|
log.info("订单支付成功, orderId={}", orderId);
|
|
log.info("订单支付成功, orderId={}", orderId);
|
|
|
return order;
|
|
return order;
|
|
@@ -807,6 +808,62 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 支付完成后重置餐桌(保留订单数据,只重置餐桌绑定关系)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param tableId 餐桌ID
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void resetTableAfterPayment(Integer tableId) {
|
|
|
|
|
+ log.info("支付完成后重置餐桌, tableId={}", tableId);
|
|
|
|
|
+
|
|
|
|
|
+ // 验证餐桌是否存在
|
|
|
|
|
+ StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
|
|
+ if (table == null) {
|
|
|
|
|
+ log.warn("餐桌不存在,跳过重置, tableId={}", tableId);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 完全清空购物车(包括已下单的商品,因为订单已支付完成)
|
|
|
|
|
+ // 逻辑删除所有购物车数据
|
|
|
|
|
+ LambdaQueryWrapper<StoreCart> cartWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ cartWrapper.eq(StoreCart::getTableId, tableId);
|
|
|
|
|
+ cartWrapper.eq(StoreCart::getDeleteFlag, 0);
|
|
|
|
|
+ List<StoreCart> cartList = storeCartMapper.selectList(cartWrapper);
|
|
|
|
|
+ if (cartList != null && !cartList.isEmpty()) {
|
|
|
|
|
+ List<Integer> cartIds = cartList.stream()
|
|
|
|
|
+ .map(StoreCart::getId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ storeCartMapper.deleteBatchIds(cartIds);
|
|
|
|
|
+ log.info("支付完成后删除购物车数据, tableId={}, count={}", tableId, cartList.size());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 清空Redis中的购物车缓存
|
|
|
|
|
+ String cartKey = "cart:table:" + tableId;
|
|
|
|
|
+ baseRedisService.delete(cartKey);
|
|
|
|
|
+ log.info("清空Redis购物车缓存, tableId={}", tableId);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 清除优惠券使用标记
|
|
|
|
|
+ cartService.clearCouponUsed(tableId);
|
|
|
|
|
+ log.info("清除优惠券使用标记, tableId={}", tableId);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 重置餐桌表(使用 LambdaUpdateWrapper 来显式设置 null 值)
|
|
|
|
|
+ LambdaUpdateWrapper<StoreTable> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ updateWrapper.eq(StoreTable::getId, tableId)
|
|
|
|
|
+ .set(StoreTable::getCurrentOrderId, null) // 显式设置 null
|
|
|
|
|
+ .set(StoreTable::getCurrentCouponId, null) // 显式设置 null
|
|
|
|
|
+ .set(StoreTable::getCartItemCount, 0)
|
|
|
|
|
+ .set(StoreTable::getCartTotalAmount, BigDecimal.ZERO)
|
|
|
|
|
+ .set(StoreTable::getStatus, 0) // 空闲
|
|
|
|
|
+ .set(StoreTable::getUpdatedTime, new Date());
|
|
|
|
|
+ Integer userId = TokenUtil.getCurrentUserId();
|
|
|
|
|
+ if (userId != null) {
|
|
|
|
|
+ updateWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
|
|
+ }
|
|
|
|
|
+ storeTableMapper.update(null, updateWrapper);
|
|
|
|
|
+ log.info("支付完成后重置餐桌表完成, tableId={}", tableId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public OrderInfoVO getOrderInfo(Integer orderId) {
|
|
public OrderInfoVO getOrderInfo(Integer orderId) {
|
|
|
log.info("查询订单信息, orderId={}", orderId);
|
|
log.info("查询订单信息, orderId={}", orderId);
|