zhuyifan

feat(kds): 添加菜单ID和名称字段以支持订单详情展示

- 在KdsDTO及其嵌套类中新增menuId和menuName字段
- 引入MenuServiceRpcClient用于获取菜单信息- 在订单处理逻辑中集成菜单数据查询与映射
- 更新订单详情构建过程以包含菜单相关信息
- 为避免空指针异常增加空值检查机制
- 使用Function.identity()优化代码可读性
......@@ -38,6 +38,8 @@ public class KdsDTO {
private ClientDto client;
private ClientDto stall;
private CustomerDetailDto customer;
private Integer menuId;
private String menuName;
}
@Data
......@@ -87,6 +89,8 @@ public class KdsDTO {
private ClientDto client;
private CustomerDetailDto customer;
private List<KdsOrderLocationDetailDto> orderDetailList;
private Integer menuId;
private String menuName;
}
@Data
......
......@@ -6,6 +6,7 @@ import com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.menuservice.SingleMenuRpcResponse;
import com.infoloop.tianting.model.dto.ClientInventoryDbDTO.ClientDto;
import com.infoloop.tianting.model.dto.KdsDTO;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
......@@ -23,6 +24,7 @@ import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.ClientInventoryServiceRpcClient;
import com.infoloop.tianting.service.client.EnterpriseResourceServiceRpcClient;
import com.infoloop.tianting.service.client.MealServiceRpcClient;
import com.infoloop.tianting.service.client.MenuServiceRpcClient;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import com.infoloop.tianting.service.client.SkuServiceRpcClient;
import com.infoloop.tianting.service.client.WOperatorServiceRpcClient;
......@@ -36,6 +38,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
......@@ -50,6 +53,7 @@ public class KdsServiceImpl implements KdsService {
private final SkuServiceRpcClient skuServiceRpcClient;
private final ClientInventoryServiceRpcClient clientInventoryServiceRpcClient;
private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;
private final MenuServiceRpcClient menuServiceRpcClient;
@Override
public List<KdsOrderSkuDto> getOrderDetailBySku(KdsOrderSkuQueryDto queryDto) {
......@@ -119,6 +123,9 @@ public class KdsServiceImpl implements KdsService {
.collect(Collectors.toList());
final var skus = skuServiceRpcClient.getDishSkusByIds(skuIds).getResponseList();
final var menuIds = orderList.stream().map(SingleClientCustomerOrderRpcResponse::getMenuId).distinct().toList();
final var menuMap = menuServiceRpcClient.getMenusByIds(operator.getEnterpriseId(), menuIds).getResponsesList().stream().collect(Collectors.toMap(SingleMenuRpcResponse::getId, Function.identity()));
List<KdsOrderSkuDto> kdsOrderSkuList = new ArrayList<>();
for (Integer menuDetailId : menuDetailIds) {
// 找出该menuDetailId 的所有orderDetail
......@@ -171,6 +178,8 @@ public class KdsServiceImpl implements KdsService {
.remark(order.get().getRemark())
.orderId(order.get().getId())
.roomNo(order.get().getSyncRoomNo().isEmpty() ? order.get().getRoomNo() : order.get().getSyncRoomNo())
.menuId(order.get().getMenuId())
.menuName(menuMap.get(order.get().getMenuId()) == null ? "" : menuMap.get(order.get().getMenuId()).getName())
.tableCode(order.get().getTableCode())
.customerNotice(CustomerNotice.builder()
.doctors(order.get().getCustomerNoticeJson().getDoctorsList())
......@@ -342,6 +351,12 @@ public class KdsServiceImpl implements KdsService {
final var filteredOrderDetailList = orderDetailList.stream()
.filter(od -> od.getMealId() == queryDto.getMealId() && od.getServeStatus() != ServeStatusEnum.SERVE_REJECT)
.collect(Collectors.toList());
final var menuIds = orderList.stream().map(SingleClientCustomerOrderRpcResponse::getMenuId).distinct().toList();
final var menuMap = menuServiceRpcClient.getMenusByIds(operator.getEnterpriseId(), menuIds).getResponsesList().stream().collect(Collectors.toMap(SingleMenuRpcResponse::getId, Function.identity()));
List<KdsOrderLocationDto> kdsOrderLocationList = new ArrayList<>();
for (SingleClientCustomerOrderRpcResponse order : orderList) {
......@@ -401,6 +416,8 @@ public class KdsServiceImpl implements KdsService {
.orderId(order.getId())
.roomNo(order.getSyncRoomNo().isEmpty() ? order.getRoomNo() : order.getSyncRoomNo())
.tableCode(order.getTableCode())
.menuId(order.getMenuId())
.menuName(menuMap.get(order.getMenuId()) == null ? "" : menuMap.get(order.getMenuId()).getName())
.customerNotice(CustomerNotice.builder()
.doctors(order.getCustomerNoticeJson().getDoctorsList())
.avoids(order.getCustomerNoticeJson().getAvoidsList())
......