|
|
@@ -186,7 +186,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
StoreOrder order = null;
|
|
|
String orderNo = null;
|
|
|
boolean isUpdate = false; // 是否是更新订单
|
|
|
- boolean isFirstAddDish = false; // 是否是首次加餐(首次订单发生变化)
|
|
|
|
|
|
// 检查桌号是否已绑定订单
|
|
|
if (table.getCurrentOrderId() != null) {
|
|
|
@@ -199,15 +198,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
orderNo = order.getOrderNo(); // 使用原订单号
|
|
|
log.info("桌号已绑定订单,更新订单信息, orderId={}, orderNo={}", order.getId(), orderNo);
|
|
|
|
|
|
- // 在更新订单之前,检查订单明细中是否已经有 is_add_dish=1 的记录
|
|
|
- // 如果没有,说明这是首次加餐(首次订单发生变化)
|
|
|
- LambdaQueryWrapper<StoreOrderDetail> checkBeforeAddDishWrapper = new LambdaQueryWrapper<>();
|
|
|
- checkBeforeAddDishWrapper.eq(StoreOrderDetail::getOrderId, order.getId())
|
|
|
- .eq(StoreOrderDetail::getDeleteFlag, 0)
|
|
|
- .eq(StoreOrderDetail::getIsAddDish, 1);
|
|
|
- Integer addDishCountBefore = orderDetailMapper.selectCount(checkBeforeAddDishWrapper);
|
|
|
- isFirstAddDish = (addDishCountBefore == null || addDishCountBefore == 0);
|
|
|
-
|
|
|
// 更新订单信息(完全采用前端传参,不做金额校验)
|
|
|
order.setDinerCount(dto.getDinerCount());
|
|
|
order.setContactPhone(dto.getContactPhone());
|
|
|
@@ -283,7 +273,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
final StoreOrder finalOrder = order;
|
|
|
final String finalOrderNo = orderNo;
|
|
|
final boolean finalIsUpdate = isUpdate; // 用于 lambda 表达式
|
|
|
- final boolean finalIsFirstAddDish = isFirstAddDish; // 用于后续判断
|
|
|
|
|
|
// 更新优惠券使用记录状态为已下单
|
|
|
if (dto.getCouponId() != null) {
|
|
|
@@ -391,21 +380,31 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
// 记录订单变更日志
|
|
|
recordOrderChangeLog(finalOrder.getId(), finalOrderNo, cart.getItems(), finalIsUpdate ? 3 : 1, now, userId, userPhone);
|
|
|
|
|
|
- // 更新桌号的当前订单ID和状态
|
|
|
+ // 更新桌号的当前订单ID和状态(显式用 LambdaUpdateWrapper 写入,避免 updateById 忽略更新)
|
|
|
+ // 约定:首次下单 → 餐桌状态=就餐中(1);后续下单(更新订单/加餐) → 餐桌状态=加餐(3)
|
|
|
+ Integer tableId = table.getId();
|
|
|
if (!finalIsUpdate) {
|
|
|
- // 新订单:设置订单ID,状态为就餐中(1)
|
|
|
- table.setCurrentOrderId(finalOrder.getId());
|
|
|
- table.setStatus(1); // 就餐中
|
|
|
- storeTableMapper.updateById(table);
|
|
|
- } else if (finalIsFirstAddDish) {
|
|
|
- // 更新订单且是首次加餐:更新餐桌状态为加餐状态(3)
|
|
|
- table.setStatus(3); // 加餐状态
|
|
|
- table.setUpdatedTime(now);
|
|
|
+ // 首次下单:设置订单ID,餐桌状态为就餐中(1)
|
|
|
+ LambdaUpdateWrapper<StoreTable> newTableWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ newTableWrapper.eq(StoreTable::getId, tableId)
|
|
|
+ .set(StoreTable::getCurrentOrderId, finalOrder.getId())
|
|
|
+ .set(StoreTable::getStatus, 1)
|
|
|
+ .set(StoreTable::getUpdatedTime, now);
|
|
|
+ if (userId != null) {
|
|
|
+ newTableWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
+ }
|
|
|
+ storeTableMapper.update(null, newTableWrapper);
|
|
|
+ } else {
|
|
|
+ // 后续下单(更新订单/加餐):餐桌状态设为加餐(3)
|
|
|
+ LambdaUpdateWrapper<StoreTable> addDishTableWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ addDishTableWrapper.eq(StoreTable::getId, tableId)
|
|
|
+ .set(StoreTable::getStatus, 3)
|
|
|
+ .set(StoreTable::getUpdatedTime, now);
|
|
|
if (userId != null) {
|
|
|
- table.setUpdatedUserId(userId);
|
|
|
+ addDishTableWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
}
|
|
|
- storeTableMapper.updateById(table);
|
|
|
- log.info("首次加餐(通过更新订单),更新餐桌状态为加餐状态, tableId={}, orderId={}", table.getId(), finalOrder.getId());
|
|
|
+ storeTableMapper.update(null, addDishTableWrapper);
|
|
|
+ log.info("更新订单(加餐),设置餐桌状态为加餐, tableId={}, orderId={}", tableId, finalOrder.getId());
|
|
|
}
|
|
|
|
|
|
// 锁定购物车商品数量(禁止减少或删除已下单的商品)
|
|
|
@@ -544,20 +543,24 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
// 清除优惠券使用标记
|
|
|
cartService.clearCouponUsed(order.getTableId());
|
|
|
|
|
|
- // 更新桌号状态(检查购物车是否为空,如果为空则设为空闲并清空就餐人数)
|
|
|
- StoreTable table = storeTableMapper.selectById(order.getTableId());
|
|
|
+ // 更新桌号状态:显式清空 currentOrderId(updateById 会忽略 null,必须用 LambdaUpdateWrapper)
|
|
|
+ Integer tableId = order.getTableId();
|
|
|
+ StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
if (table != null) {
|
|
|
- table.setCurrentOrderId(null);
|
|
|
- // 检查购物车是否为空,如果为空则设为空闲
|
|
|
- CartDTO cart = cartService.getCart(order.getTableId());
|
|
|
+ LambdaUpdateWrapper<StoreTable> tableWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ tableWrapper.eq(StoreTable::getId, tableId)
|
|
|
+ .set(StoreTable::getCurrentOrderId, null)
|
|
|
+ .set(StoreTable::getUpdatedTime, new Date());
|
|
|
+ CartDTO cart = cartService.getCart(tableId);
|
|
|
if (cart.getItems() == null || cart.getItems().isEmpty()) {
|
|
|
- table.setStatus(0); // 空闲
|
|
|
- table.setDinerCount(null);
|
|
|
+ tableWrapper.set(StoreTable::getStatus, 0).set(StoreTable::getDinerCount, null);
|
|
|
} else {
|
|
|
- // 购物车还有商品,保持当前状态或设为就餐中
|
|
|
- table.setStatus(1); // 就餐中
|
|
|
+ tableWrapper.set(StoreTable::getStatus, 1); // 就餐中
|
|
|
+ }
|
|
|
+ if (userId != null) {
|
|
|
+ tableWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
}
|
|
|
- storeTableMapper.updateById(table);
|
|
|
+ storeTableMapper.update(null, tableWrapper);
|
|
|
}
|
|
|
|
|
|
log.info("订单取消成功, orderId={}", orderId);
|
|
|
@@ -823,13 +826,20 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
|
|
|
this.updateById(order);
|
|
|
|
|
|
- // 更新桌号状态
|
|
|
- StoreTable table = storeTableMapper.selectById(order.getTableId());
|
|
|
+ // 更新桌号状态:显式清空 currentOrderId(updateById 会忽略 null,必须用 LambdaUpdateWrapper)
|
|
|
+ Integer tableId = order.getTableId();
|
|
|
+ StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
if (table != null) {
|
|
|
- table.setCurrentOrderId(null);
|
|
|
- table.setStatus(0); // 空闲
|
|
|
- table.setDinerCount(null);
|
|
|
- storeTableMapper.updateById(table);
|
|
|
+ LambdaUpdateWrapper<StoreTable> tableWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ tableWrapper.eq(StoreTable::getId, tableId)
|
|
|
+ .set(StoreTable::getCurrentOrderId, null)
|
|
|
+ .set(StoreTable::getStatus, 0)
|
|
|
+ .set(StoreTable::getDinerCount, null)
|
|
|
+ .set(StoreTable::getUpdatedTime, new Date());
|
|
|
+ if (userId != null) {
|
|
|
+ tableWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
+ }
|
|
|
+ storeTableMapper.update(null, tableWrapper);
|
|
|
}
|
|
|
|
|
|
log.info("订单完成成功, orderId={}", orderId);
|
|
|
@@ -857,13 +867,20 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
|
|
|
this.updateById(order);
|
|
|
|
|
|
- // 更新桌号状态
|
|
|
- StoreTable table = storeTableMapper.selectById(order.getTableId());
|
|
|
+ // 更新桌号状态:显式清空 currentOrderId(updateById 会忽略 null,必须用 LambdaUpdateWrapper)
|
|
|
+ Integer tableId = order.getTableId();
|
|
|
+ StoreTable table = storeTableMapper.selectById(tableId);
|
|
|
if (table != null) {
|
|
|
- table.setCurrentOrderId(null);
|
|
|
- table.setStatus(0); // 空闲
|
|
|
- table.setDinerCount(null);
|
|
|
- storeTableMapper.updateById(table);
|
|
|
+ LambdaUpdateWrapper<StoreTable> tableWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ tableWrapper.eq(StoreTable::getId, tableId)
|
|
|
+ .set(StoreTable::getCurrentOrderId, null)
|
|
|
+ .set(StoreTable::getStatus, 0)
|
|
|
+ .set(StoreTable::getDinerCount, null)
|
|
|
+ .set(StoreTable::getUpdatedTime, new Date());
|
|
|
+ if (userId != null) {
|
|
|
+ tableWrapper.set(StoreTable::getUpdatedUserId, userId);
|
|
|
+ }
|
|
|
+ storeTableMapper.update(null, tableWrapper);
|
|
|
}
|
|
|
|
|
|
log.info("商家手动完成订单成功, orderId={}", orderId);
|