|
|
@@ -751,6 +751,24 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
Map<Integer, List<StoreOrderDetail>> detailsMap = allDetails.stream()
|
|
|
.collect(Collectors.groupingBy(StoreOrderDetail::getOrderId));
|
|
|
|
|
|
+ // 4.1 批量查询菜品标签(用于分页列表展示)
|
|
|
+ Set<Integer> cuisineIds = allDetails.stream()
|
|
|
+ .map(StoreOrderDetail::getCuisineId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ Map<Integer, String> cuisineIdToTags = new HashMap<>();
|
|
|
+ if (!cuisineIds.isEmpty()) {
|
|
|
+ List<StoreCuisine> cuisines = storeCuisineMapper.selectBatchIds(new ArrayList<>(cuisineIds));
|
|
|
+ if (cuisines != null) {
|
|
|
+ for (StoreCuisine c : cuisines) {
|
|
|
+ if (c.getTags() != null) {
|
|
|
+ cuisineIdToTags.put(c.getId(), c.getTags());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<Integer, String> finalCuisineIdToTags = cuisineIdToTags;
|
|
|
+
|
|
|
// 5. 批量查询门店名称
|
|
|
Set<Integer> storeIds = orders.stream().map(StoreOrder::getStoreId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
Map<Integer, String> storeNameMap = new HashMap<>();
|
|
|
@@ -769,7 +787,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
vo.setOrder(order);
|
|
|
vo.setStoreName(storeNameMap.getOrDefault(order.getStoreId(), ""));
|
|
|
|
|
|
- // 获取该订单的菜品列表
|
|
|
+ // 获取该订单的菜品列表(含菜品标签)
|
|
|
List<StoreOrderDetail> orderDetails = detailsMap.getOrDefault(order.getId(), new ArrayList<>());
|
|
|
List<OrderCuisineItemVO> cuisineItems = orderDetails.stream()
|
|
|
.map(detail -> {
|
|
|
@@ -779,6 +797,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
item.setCuisineImage(detail.getCuisineImage());
|
|
|
item.setQuantity(detail.getQuantity());
|
|
|
item.setUnitPrice(detail.getUnitPrice());
|
|
|
+ item.setTags(detail.getCuisineId() != null ? finalCuisineIdToTags.get(detail.getCuisineId()) : null);
|
|
|
return item;
|
|
|
})
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -1292,6 +1311,24 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
Map<Integer, List<StoreOrderDetail>> detailsMap = allDetails.stream()
|
|
|
.collect(Collectors.groupingBy(StoreOrderDetail::getOrderId));
|
|
|
|
|
|
+ // 4.1 批量查询菜品标签(用于我的订单分页展示)
|
|
|
+ Set<Integer> cuisineIdsMy = allDetails.stream()
|
|
|
+ .map(StoreOrderDetail::getCuisineId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ Map<Integer, String> cuisineIdToTagsMy = new HashMap<>();
|
|
|
+ if (!cuisineIdsMy.isEmpty()) {
|
|
|
+ List<StoreCuisine> cuisinesMy = storeCuisineMapper.selectBatchIds(new ArrayList<>(cuisineIdsMy));
|
|
|
+ if (cuisinesMy != null) {
|
|
|
+ for (StoreCuisine c : cuisinesMy) {
|
|
|
+ if (c.getTags() != null) {
|
|
|
+ cuisineIdToTagsMy.put(c.getId(), c.getTags());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<Integer, String> finalCuisineIdToTagsMy = cuisineIdToTagsMy;
|
|
|
+
|
|
|
// 5. 批量查询门店名称
|
|
|
Set<Integer> storeIds = orders.stream().map(StoreOrder::getStoreId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
Map<Integer, String> storeNameMap = new HashMap<>();
|
|
|
@@ -1310,7 +1347,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
vo.setOrder(order);
|
|
|
vo.setStoreName(storeNameMap.getOrDefault(order.getStoreId(), ""));
|
|
|
|
|
|
- // 获取该订单的菜品列表
|
|
|
+ // 获取该订单的菜品列表(含菜品标签)
|
|
|
List<StoreOrderDetail> orderDetails = detailsMap.getOrDefault(order.getId(), new ArrayList<>());
|
|
|
List<OrderCuisineItemVO> cuisineItems = orderDetails.stream()
|
|
|
.map(detail -> {
|
|
|
@@ -1320,6 +1357,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
item.setCuisineImage(detail.getCuisineImage());
|
|
|
item.setQuantity(detail.getQuantity());
|
|
|
item.setUnitPrice(detail.getUnitPrice());
|
|
|
+ item.setTags(detail.getCuisineId() != null ? finalCuisineIdToTagsMy.get(detail.getCuisineId()) : null);
|
|
|
return item;
|
|
|
})
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -1478,6 +1516,23 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
Map<String, List<StoreOrderChangeLog>> batchMap = logs.stream()
|
|
|
.collect(Collectors.groupingBy(StoreOrderChangeLog::getBatchNo));
|
|
|
|
|
|
+ // 2.1 批量查询菜品标签(用于订单详情展示)
|
|
|
+ Set<Integer> cuisineIds = logs.stream()
|
|
|
+ .map(StoreOrderChangeLog::getCuisineId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ Map<Integer, String> cuisineIdToTags = new HashMap<>();
|
|
|
+ if (!cuisineIds.isEmpty()) {
|
|
|
+ List<StoreCuisine> cuisines = storeCuisineMapper.selectBatchIds(new ArrayList<>(cuisineIds));
|
|
|
+ if (cuisines != null) {
|
|
|
+ for (StoreCuisine c : cuisines) {
|
|
|
+ if (c.getTags() != null) {
|
|
|
+ cuisineIdToTags.put(c.getId(), c.getTags());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 3. 转换为批次VO列表
|
|
|
List<OrderChangeLogBatchVO> batchList = new ArrayList<>();
|
|
|
for (Map.Entry<String, List<StoreOrderChangeLog>> entry : batchMap.entrySet()) {
|
|
|
@@ -1512,7 +1567,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
batchVO.setTotalAmountChange(totalAmountChange);
|
|
|
batchVO.setItemCount(batchLogs.size());
|
|
|
|
|
|
- // 转换为商品项VO列表
|
|
|
+ // 转换为商品项VO列表(含菜品标签)
|
|
|
+ Map<Integer, String> finalCuisineIdToTags = cuisineIdToTags;
|
|
|
List<OrderChangeLogItemVO> items = batchLogs.stream().map(log -> {
|
|
|
OrderChangeLogItemVO itemVO = new OrderChangeLogItemVO();
|
|
|
itemVO.setCuisineId(log.getCuisineId());
|
|
|
@@ -1525,6 +1581,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
itemVO.setQuantityAfter(log.getQuantityAfter());
|
|
|
itemVO.setAmountChange(log.getAmountChange());
|
|
|
itemVO.setRemark(log.getRemark());
|
|
|
+ itemVO.setTags(log.getCuisineId() != null ? finalCuisineIdToTags.get(log.getCuisineId()) : null);
|
|
|
return itemVO;
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
@@ -1835,28 +1892,51 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
public shop.alien.entity.store.dto.CartDTO changeTable(Integer fromTableId, Integer toTableId, String changeReason, Integer userId) {
|
|
|
log.info("换桌, fromTableId={}, toTableId={}, changeReason={}, userId={}", fromTableId, toTableId, changeReason, userId);
|
|
|
|
|
|
+ // 0. 校验:目标桌只能是空桌(空闲且无当前订单)
|
|
|
+ if (fromTableId.equals(toTableId)) {
|
|
|
+ throw new RuntimeException("原桌号与目标桌号不能相同");
|
|
|
+ }
|
|
|
+ StoreTable fromTable = storeTableMapper.selectById(fromTableId);
|
|
|
+ if (fromTable == null) {
|
|
|
+ throw new RuntimeException("原桌号不存在");
|
|
|
+ }
|
|
|
+ StoreTable toTable = storeTableMapper.selectById(toTableId);
|
|
|
+ if (toTable == null) {
|
|
|
+ throw new RuntimeException("目标桌号不存在");
|
|
|
+ }
|
|
|
+ if (!fromTable.getStoreId().equals(toTable.getStoreId())) {
|
|
|
+ throw new RuntimeException("原桌号与目标桌号须在同一门店");
|
|
|
+ }
|
|
|
+ // 空桌:状态为空闲(0)且无当前订单
|
|
|
+ boolean emptyStatus = (toTable.getStatus() == null || toTable.getStatus() == 0);
|
|
|
+ boolean noOrder = (toTable.getCurrentOrderId() == null);
|
|
|
+ if (!emptyStatus || !noOrder) {
|
|
|
+ throw new RuntimeException("只能换到空桌,请选择空闲且无订单的桌号");
|
|
|
+ }
|
|
|
+
|
|
|
// 1. 迁移购物车
|
|
|
shop.alien.entity.store.dto.CartDTO cart = cartService.migrateCart(fromTableId, toTableId);
|
|
|
|
|
|
// 2. 迁移所有关联数据(订单、订单变更记录、优惠券使用记录等)
|
|
|
migrateTableData(fromTableId, toTableId, userId);
|
|
|
|
|
|
- // 3. 查询桌号信息
|
|
|
- StoreTable fromTable = storeTableMapper.selectById(fromTableId);
|
|
|
- StoreTable toTable = storeTableMapper.selectById(toTableId);
|
|
|
-
|
|
|
- // 4. 记录换桌日志
|
|
|
+ // 3. 记录换桌日志(fromTable、toTable 已在步骤0中查询)
|
|
|
+ Date now = new Date();
|
|
|
StoreTableLog tableLog = new StoreTableLog();
|
|
|
tableLog.setStoreId(cart.getStoreId());
|
|
|
+ tableLog.setOrderId(fromTable.getCurrentOrderId()); // 有订单则记录,仅购物车换桌时为 null
|
|
|
tableLog.setFromTableId(fromTableId);
|
|
|
tableLog.setFromTableNumber(fromTable != null ? fromTable.getTableNumber() : null);
|
|
|
tableLog.setToTableId(toTableId);
|
|
|
tableLog.setToTableNumber(toTable != null ? toTable.getTableNumber() : null);
|
|
|
tableLog.setChangeReason(changeReason);
|
|
|
tableLog.setCreatedUserId(userId);
|
|
|
+ tableLog.setCreatedTime(now);
|
|
|
+ tableLog.setUpdatedTime(now);
|
|
|
+ tableLog.setUpdatedUserId(userId);
|
|
|
storeTableLogMapper.insert(tableLog);
|
|
|
|
|
|
- // 5. 推送购物车更新消息到新桌号
|
|
|
+ // 4. 推送购物车更新消息到新桌号
|
|
|
sseService.pushCartUpdate(toTableId, cart);
|
|
|
|
|
|
log.info("换桌完成, fromTableId={}, toTableId={}", fromTableId, toTableId);
|