wangyingyang

ifx kds

No preview for this file type
......@@ -4,6 +4,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.ClientLabelDTO;
import com.infoloop.tianting.model.dto.ClientLabelDTO.LabelDto;
import com.infoloop.tianting.model.dto.KdsDTO;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderSkuDto;
import com.infoloop.tianting.service.KdsService;
......@@ -45,4 +46,11 @@ public class KdsController {
return kdsService.getOrderDetailByLocation(queryDto);
}
@ApiOperation(value = "kds获取餐别详情")
@PostMapping("/kds/mealDetails")
@ResponseStatus(HttpStatus.OK)
public List<KdsMealDetailDto> getMealDetail() {
return kdsService.getMealDetail();
}
}
......
......@@ -29,6 +29,7 @@ public class KdsDTO {
private String remark;
private CustomerNotice customerNotice;
private String adjustSkuRemark;
private String mealTime;
}
@Data
......@@ -51,6 +52,7 @@ public class KdsDTO {
@ApiModel(description = "KdsOrderSkuDto")
public static class KdsOrderSkuDto {
private String showName;
private String skuCode;
private Integer totalCount;
private List<KdsOrderSkuDetailDto> orderList;
}
......@@ -66,6 +68,7 @@ public class KdsDTO {
private String tableCode;
private Integer totalCount;
private String remark;
private String mealTime;
private CustomerNotice customerNotice;
private List<KdsOrderLocationDetailDto> orderDetailList;
}
......@@ -77,7 +80,7 @@ public class KdsDTO {
@ApiModel(description = "KdsOrderSkuDto")
public static class KdsOrderSkuQueryDto {
private ServeStatusEnum serveStatus;
private Integer categoryId;
private Integer mealId;
}
@Data
......@@ -87,6 +90,17 @@ public class KdsDTO {
@ApiModel(description = "KdsOrderLocationQueryDto")
public static class KdsOrderLocationQueryDto {
private OrderStatusEnum orderStatus;
private Integer categoryId;
private Integer mealId;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "KdsMealDetailDto")
public static class KdsMealDetailDto {
private Integer mealId;
private String mealName;
private Integer totalCount;
}
}
......
......@@ -562,9 +562,7 @@ public class OrderDbDTO {
@ToString
@ApiModel(description = "批量修改菜品细节信息")
public static class OrderDetailBatchUpdateDto {
private Integer updatedBy;
private OrderSourceEnum updatedSource;
private Integer enterpriseId;
private List<OrderDetailUpdateDto> details;
}
......
package com.infoloop.tianting.service;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationQueryDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderSkuDto;
......@@ -11,4 +12,6 @@ public interface KdsService {
List<KdsOrderSkuDto> getOrderDetailBySku(KdsOrderSkuQueryDto queryDto);
List<KdsOrderLocationDto> getOrderDetailByLocation(KdsOrderLocationQueryDto queryDto);
List<KdsMealDetailDto> getMealDetail();
}
......
......@@ -28,6 +28,7 @@ import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrde
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.UpdateClientCustomerOrderRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.UpdateClientCustomerOrderRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.enums.OrderTypeEnum;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto;
......@@ -39,6 +40,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto;
import io.swagger.models.auth.In;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
......@@ -120,6 +122,7 @@ public class OrderServiceRpcClient {
public BatchUpdateClientCustomerOrderDetailsRpcResponse batchUpdateClientCustomerOrderDetails(
OrderDetailBatchUpdateDto orderDetailBatchUpdateDto) {
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
final var modifications = orderDetailBatchUpdateDto.getDetails().stream().map( d-> {
MealDetail mealDetail = MealDetail.newBuilder().build();;
Integer menuDetailId = 0;
......@@ -130,7 +133,7 @@ public class OrderServiceRpcClient {
if (d.getShouldUpdateMenuDetailId()) {
menuDetailId = d.getMenuDetailId();
final var menuDetail = menuServiceRpcClient.getMenuDetailById(
orderDetailBatchUpdateDto.getEnterpriseId(), menuDetailId).getResponse();
operatorLoginInfo.getEnterpriseId(), menuDetailId).getResponse();
mealId = menuDetail.getMealId();
categoryId = menuDetail.getCategoryId();
skuId = menuDetail.getSkuId();
......@@ -192,8 +195,8 @@ public class OrderServiceRpcClient {
}
).collect(Collectors.toList());
final var request = BatchUpdateClientCustomerOrderDetailsRpcRequest.newBuilder()
.setEnterpriseId(orderDetailBatchUpdateDto.getEnterpriseId())
.setUpdatedBy(orderDetailBatchUpdateDto.getUpdatedBy())
.setEnterpriseId(operatorLoginInfo.getEnterpriseId())
.setUpdatedBy(operatorLoginInfo.getId())
.setUpdateSourceValue(orderDetailBatchUpdateDto.getUpdatedSource().getNumber())
.addAllModifications(modifications)
.build();
......@@ -258,7 +261,7 @@ public class OrderServiceRpcClient {
.setMealDetailJson(mealDetail)
// .setAdjustSkuRemark(orderDetailDto.getAdjustSkuRemark())
.setServeStatus(ServeStatusEnum.SERVE_NOT_START)
.setShouldCreateAdjustSkuRemark(true)
// .setShouldCreateAdjustSkuRemark(true)
.setShouldCreatePrice(true)
.setShouldCreateMealDetailJson(true)
.setSkuId(orderDetailDto.getSkuId())
......@@ -270,10 +273,19 @@ public class OrderServiceRpcClient {
.addAllDoctors(createOrderDto.getCustomerNoticeJson().getDoctors())
.build();
//判断用餐时间是否是当天
final var mealDate = createOrderDto.getMealTime().toLocalDate();
final var todayDate = LocalDate.now();
OrderStatusEnum orderStatus = OrderStatusEnum.TO_PREPARE;
if (mealDate.equals(todayDate)) {
orderStatus = OrderStatusEnum.PREPARING;
}
final var creation = ClientCustomerOrderCreation.newBuilder()
.setShouldCreateCustomerId(createOrderDto.getShouldCreateCustomerId())
.setCustomerId(createOrderDto.getCustomerId())
.setStallId(createOrderDto.getStallId())
.setStatus(orderStatus)
.setAddress(createOrderDto.getAddress())
.setClientId(createOrderDto.getClientId())
.setShouldCreateOpenId(createOrderDto.getShouldCreateOpenId())
......
package com.infoloop.tianting.service.impl;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationQueryDto;
......@@ -12,15 +14,20 @@ import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderSkuQueryDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CustomerNotice;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.service.KdsService;
import com.infoloop.tianting.service.MealService;
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;
import com.infoloop.tianting.utils.DateUtil;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -34,6 +41,8 @@ public class KdsServiceImpl implements KdsService {
private final OrderServiceRpcClient orderServiceRpcClient;
private final EnterpriseResourceServiceRpcClient enterpriseResourceServiceRpcClient;
private final WOperatorServiceRpcClient wOperatorServiceRpcClient;
private final MealServiceRpcClient mealServiceRpcClient;
private final SkuServiceRpcClient skuServiceRpcClient;
@Override
public List<KdsOrderSkuDto> getOrderDetailBySku(KdsOrderSkuQueryDto queryDto) {
......@@ -59,10 +68,10 @@ public class KdsServiceImpl implements KdsService {
.enterpriseId(operatorLoginInfo.getEnterpriseId())
.shouldFilterStallIds(shouldFilterStallIds)
.stallIds(stallIds)
.shouldFilterCreatedAtTimeStart(true)
.createdAtTimeStart(todayZero)
.shouldFilterCreatedAtTimeEnd(true)
.createdAtTimeEnd(tomorrowZero)
.shouldFilterMealTimeStart(true)
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
List<Integer> orderIds = orderList.stream()
......@@ -71,7 +80,7 @@ public class KdsServiceImpl implements KdsService {
.collect(Collectors.toList());
final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);
final var filteredOrderDetailList = orderDetailList.stream()
.filter(od -> od.getServeStatus() == queryDto.getServeStatus() && od.getCategoryId() == queryDto.getCategoryId())
.filter(od -> od.getServeStatus() == queryDto.getServeStatus() && od.getMealId() == queryDto.getMealId())
.collect(Collectors.toList());
//在所有的orderDetail里找出所有所有不同的menuDetailId,然后根据menuDetailId进行分类
......@@ -79,6 +88,13 @@ public class KdsServiceImpl implements KdsService {
.map(SingleClientCustomerOrderDetailRpcResponse::getMenuDetailId)
.distinct()
.collect(Collectors.toList());
final var skuIds = filteredOrderDetailList.stream()
.map(SingleClientCustomerOrderDetailRpcResponse::getSkuId)
.distinct()
.collect(Collectors.toList());
final var skus = skuServiceRpcClient.getDishSkusByIds(skuIds).getResponseList();
List<KdsOrderSkuDto> kdsOrderSkuList = new ArrayList<>();
for (Integer menuDetailId: menuDetailIds) {
// 找出该menuDetailId 的所有orderDetail
......@@ -108,12 +124,22 @@ public class KdsServiceImpl implements KdsService {
.avoids(order.get().getCustomerNoticeJson().getAvoidsList())
.build())
.adjustSkuRemark(detail.getAdjustSkuRemark())
.mealTime(DateUtil.formatDate(order.get().getMealTime()))
.build();
kdsOrders.add(kdsOrder);
}
String skuCode = "";
if (!curOrderDetails.isEmpty()) {
final var skuId = curOrderDetails.get(0).getSkuId();
final var sku = skus.stream().filter(s -> s.getId() == skuId).findFirst();
if (sku.isPresent()) {
skuCode = sku.get().getCode();
}
}
final var kdsOrderSku = KdsOrderSkuDto.builder()
.showName(curOrderDetails.get(0).getShowName())
.skuCode(skuCode)
.totalCount(totalCount)
.orderList(kdsOrders)
.build();
......@@ -125,8 +151,75 @@ public class KdsServiceImpl implements KdsService {
}
@Override
public List<KdsMealDetailDto> getMealDetail() {
// 获取当日用餐的所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDateTime todayZero = today.atStartOfDay();
LocalDate tomorrow = today.plusDays(1);
LocalDateTime tomorrowZero = tomorrow.atStartOfDay();
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
boolean shouldFilterStallIds = false;
List<Integer> stallIds = new ArrayList<>();
final var operator = wOperatorServiceRpcClient.getWOperatorById(operatorLoginInfo.getId()).getResponse();
if (!operator.getIsSuper()) {
shouldFilterStallIds = true;
final var userResource = enterpriseResourceServiceRpcClient.getUserResources(
operatorLoginInfo.getEnterpriseId(), operatorLoginInfo.getId());
stallIds.addAll(userResource.getStallIdsList());
}
final var queryOrderDto = QueryOrderByConditionDto.builder()
.enterpriseId(operatorLoginInfo.getEnterpriseId())
.shouldFilterStallIds(shouldFilterStallIds)
.stallIds(stallIds)
.shouldFilterMealTimeStart(true)
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
List<Integer> orderIds = orderList.stream()
.filter(o -> o.getStatus() == OrderStatusEnum.ALL_SERVED || o.getStatus() == OrderStatusEnum.PARTIAL_SERVED || o.getStatus() == OrderStatusEnum.PREPARING)
.map(SingleClientCustomerOrderRpcResponse::getId)
.distinct()
.collect(Collectors.toList());
final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);
//找出所有的不同的meal Ids
final var mealIds = orderDetailList.stream()
.map(SingleClientCustomerOrderDetailRpcResponse::getMealId)
.distinct()
.collect(Collectors.toList());
//获取到所有的餐别
final var allMeals = mealServiceRpcClient.getAllMeals(operatorLoginInfo.getEnterpriseId()).getResponsesList();
List<KdsMealDetailDto> kdsMealDetailDtoList = new ArrayList<>();
for(Integer mealId: mealIds) {
final var meal = allMeals.stream().filter(m -> m.getId() == mealId).findFirst();
if(meal.isEmpty()) {
continue;
}
final var totalCount = orderDetailList.stream()
.filter(od -> od.getMealId() == mealId)
.mapToInt(SingleClientCustomerOrderDetailRpcResponse::getCount)
.sum();
final var mealDetail = KdsMealDetailDto.builder()
.mealId(meal.get().getId())
.mealName(meal.get().getName())
.totalCount(totalCount)
.build();
kdsMealDetailDtoList.add(mealDetail);
}
return kdsMealDetailDtoList;
}
@Override
public List<KdsOrderLocationDto> getOrderDetailByLocation(KdsOrderLocationQueryDto queryDto) {
// 获取当日所有的订单 和 订单明细
// 获取当日用餐的所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDateTime todayZero = today.atStartOfDay();
LocalDate tomorrow = today.plusDays(1);
......@@ -148,10 +241,10 @@ public class KdsServiceImpl implements KdsService {
.enterpriseId(operatorLoginInfo.getEnterpriseId())
.shouldFilterStallIds(shouldFilterStallIds)
.stallIds(stallIds)
.shouldFilterCreatedAtTimeStart(true)
.createdAtTimeStart(todayZero)
.shouldFilterCreatedAtTimeEnd(true)
.createdAtTimeEnd(tomorrowZero)
.shouldFilterMealTimeStart(true)
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.shouldFilterStatus(true)
.status(queryDto.getOrderStatus())
.build();
......@@ -163,7 +256,7 @@ public class KdsServiceImpl implements KdsService {
.collect(Collectors.toList());
final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);
final var filteredOrderDetailList = orderDetailList.stream()
.filter(od -> od.getCategoryId() == queryDto.getCategoryId())
.filter(od -> od.getMealId() == queryDto.getMealId())
.collect(Collectors.toList());
//在所有的orderDetail里找出所有所有不同的menuDetailId,然后根据menuDetailId进行分类
......@@ -198,6 +291,7 @@ public class KdsServiceImpl implements KdsService {
.avoids(order.getCustomerNoticeJson().getAvoidsList())
.build())
.orderDetailList(kdsOrderDetails)
.mealTime(DateUtil.formatDate(order.getMealTime()))
.build();
kdsOrderLocationList.add(kdsOrder);
}
......