zhuyifan

feat(MenuService): 添加出院状态在 MenuService.proto 文件中,为未知枚举类型增加了出院(LEAVE_HOSPITAL)状态。

......@@ -2,6 +2,7 @@ package com.infoloop.tianting.model.dto;
import com.infoloop.tianting.annotation.RequestKeyParam;
import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
import com.infoloop.tianting.clientcustomerorderservice.OnlinePayEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
......@@ -222,6 +223,9 @@ public class OrderDbDTO {
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "支付方式")
private OnlinePayEnum onlinePay;
@ApiModelProperty(value = "订单菜品详情列表")
private List<OperatorCreateOrderDetailDto> orderDetailDtos;
}
......@@ -260,8 +264,8 @@ public class OrderDbDTO {
@ApiModelProperty(value = "实际支付金额,单位为分")
private Integer payPrice;
@ApiModelProperty(value = "是否在线付费;0=未付费,1=付费")
private Boolean onlinePay;
@ApiModelProperty(value = "支付方式")
private OnlinePayEnum onlinePay;
@ApiModelProperty(value = "支付时间")
private LocalDateTime payTime;
......@@ -364,8 +368,8 @@ public class OrderDbDTO {
@ApiModelProperty(value = "实际支付金额,单位为分")
private Integer payPrice;
@ApiModelProperty(value = "是否在线付费;0=未付费,1=付费")
private Boolean onlinePay;
@ApiModelProperty(value = "支付方式")
private OnlinePayEnum onlinePay;
@ApiModelProperty(value = "支付时间")
private String payTime;
......
......@@ -22,10 +22,12 @@ import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDe
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByOrderIdsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrdersByCustomerIdRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.MealDetail;
import com.infoloop.tianting.clientcustomerorderservice.OnlinePayEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderOperationRecordCreation;
import com.infoloop.tianting.clientcustomerorderservice.OrderOperationType;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderTypeEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByConditionRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByPaginationRpcRequest;
......@@ -524,9 +526,7 @@ public class OrderServiceRpcClient {
.setShowName(orderDetailDto.getShowName())
.setPrice(orderDetailDto.getPrice())
.setMealDetailJson(mealDetail)
// .setAdjustSkuRemark(orderDetailDto.getAdjustSkuRemark())
.setServeStatus(ServeStatusEnum.SERVE_NOT_START)
// .setShouldCreateAdjustSkuRemark(true)
.setShouldCreatePrice(true)
.setShouldCreateMealDetailJson(true)
.setSkuId(orderDetailDto.getSkuId())
......@@ -537,43 +537,33 @@ public class OrderServiceRpcClient {
.addAllAvoids(createOrderDto.getCustomerNoticeJson().getAvoids())
.addAllDoctors(createOrderDto.getCustomerNoticeJson().getDoctors())
.build();
final var menuById = menuServiceRpcClient.getMenuById(createOrderDto.getEnterpriseId(), createOrderDto.getMenuId());
OrderStatusEnum orderStatus = OrderStatusEnum.TO_PREPARE;
if (menuById.getResponse().getOrderRuleJson().getModeOfPayment() == ModeOfPaymentEnum.ONLINE && menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.IMMEDIATELY) {
orderStatus = OrderStatusEnum.PREPARING;
}
final var creation = ClientCustomerOrderCreation.newBuilder()
.setShouldCreateCustomerId(createOrderDto.getShouldCreateCustomerId())
.setCustomerId(createOrderDto.getCustomerId())
.setShouldCreateCustomerId(true).setCustomerId(createOrderDto.getCustomerId())
.setStallId(createOrderDto.getStallId())
.setStatus(orderStatus)
.setAddress(createOrderDto.getAddress())
.setClientId(createOrderDto.getClientId())
.setShouldCreateOpenId(!LoginContextHolder.getOpenId().isEmpty())
.setOpenId(LoginContextHolder.getOpenId())
.setShouldCreateRoomNo(!createOrderDto.getRoomNo().isEmpty())
.setRoomNo(createOrderDto.getRoomNo())
.setTableCode(createOrderDto.getTableCode() == null ? "" : createOrderDto.getTableCode())
.setShouldCreateOnlinePay(true)
.setOnlinePay(createOrderDto.getOnlinePay())
.setShouldCreatePayStatus(createOrderDto.getOnlinePay())
.setPayStatus(PayStatusEnum.TO_PAY)
.setShouldCreateOpenId(!LoginContextHolder.getOpenId().isEmpty()).setOpenId(LoginContextHolder.getOpenId())
.setShouldCreateRoomNo(!createOrderDto.getRoomNo().isEmpty()).setRoomNo(createOrderDto.getRoomNo())
.setShouldCreateTableCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY) || StringUtils.isNotEmpty(createOrderDto.getTableCode())).setTableCode(createOrderDto.getTableCode() == null ? "" : createOrderDto.getTableCode())
.setShouldCreateOnlinePay(true).setOnlinePay(createOrderDto.getOnlinePay())
.setShouldCreatePayStatus(true).setPayStatus(createOrderDto.getOnlinePay() == OnlinePayEnum.ONLINE || createOrderDto.getOnlinePay() == OnlinePayEnum.LEAVE_HOSPITAL ? PayStatusEnum.TO_PAY : PayStatusEnum.SUCCEED)
.setMenuId(createOrderDto.getMenuId())
.setTotalNum(createOrderDto.getTotalNum())
.setPayPrice(createOrderDto.getPayPrice())
.setShouldCreatePayPrice(createOrderDto.getOnlinePay() == OnlinePayEnum.LEAVE_HOSPITAL).setPayPrice(createOrderDto.getPayPrice())
.setMealTime(createOrderDto.getMealTime().toLocalDate().atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli())
.setShouldCreateTableCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY) || StringUtils.isNotEmpty(createOrderDto.getTableCode()))
.setShouldCreatePickupCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY))
.setPickupCode(generatePickupCode())
.setShouldCreateRemark(true)
.setRemark(createOrderDto.getRemark())
.setShouldCreateCustomerNoticeJson(true)
.setCustomerNoticeJson(customerNotice)
.setShouldCreatePickupCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY)).setPickupCode(generatePickupCode())
.setShouldCreateOrderType(true).setOrderType(menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.RESERVATION ? OrderTypeEnum.DELIVERY : OrderTypeEnum.DINE_IN)
.setShouldCreateRemark(true).setRemark(createOrderDto.getRemark())
.setShouldCreateCustomerNoticeJson(true).setCustomerNoticeJson(customerNotice)
.setCloseTimeType(createOrderDto.getCloseTimeType())
.setShouldCreateOrderDetails(true)
.addAllOrderDetails(orderDetails)
.setShouldCreateOrderDetails(true).addAllOrderDetails(orderDetails)
.build();
if (menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.IMMEDIATELY) {
......
......@@ -16,7 +16,6 @@ import com.infoloop.tianting.deliveryruleservice.SingleClientLabelRpcResponse;
import com.infoloop.tianting.exception.ClientEndExceptions;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.menuservice.CloseTimeTypeEnum;
import com.infoloop.tianting.menuservice.ModeOfPaymentEnum;
import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse;
import com.infoloop.tianting.model.common.OrderPageResult;
import com.infoloop.tianting.model.dto.ClientLabelDTO.HisAllergy;
......@@ -102,9 +101,9 @@ public class OrderServiceImpl implements OrderService {
createOrderDto.setCreatedBy(operatorLoginInfo.getId());
createOrderDto.setClientId(operator.getClientId());
createOrderDto.setAddress(record.getDepartmentName() + record.getRoomNo());
createOrderDto.setOnlinePay(createOrderDto.getOnlinePay());
createOrderDto.setPayPrice(0);
final var menu = menuServiceRpcClient.getMenuById(operator.getEnterpriseId(),
createOrderDto.getMenuId()).getResponse();
final var menu = menuServiceRpcClient.getMenuById(operator.getEnterpriseId(), createOrderDto.getMenuId()).getResponse();
final var placeOrderCount = menu.getOrderRuleJson().getPlaceOrderCount();
if (placeOrderCount != 0 && menuOrderCount >= placeOrderCount) {
throw ClientEndExceptions.OperationForbidden.build(ErrorCodeEnum.ORDER_COUNT_LIMIT.name());
......@@ -113,8 +112,7 @@ public class OrderServiceImpl implements OrderService {
createOrderDto.setRoomNo(record.getRoomNo());
createOrderDto.setCreationSource(OrderSourceEnum.STALL.getNumber());
createOrderDto.setEnterpriseId(operatorLoginInfo.getEnterpriseId());
var onlinePay = menu.getOrderRuleJson().getModeOfPayment() == ModeOfPaymentEnum.ONLINE;
createOrderDto.setOnlinePay(onlinePay);
createOrderDto.setOnlinePay(operatorCreateOrderDto.getOnlinePay());
OrderTypeEnum orderType;
if (menu.getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.RESERVATION) {
orderType = OrderTypeEnum.DELIVERY;
......@@ -123,30 +121,24 @@ public class OrderServiceImpl implements OrderService {
}
createOrderDto.setOrderType(orderType.getNumber());
createOrderDto.setShouldCreateCustomerId(true);
final var labelRefs = clientCustomerServiceRpcClient.getCustomerLabelsByCustomerId(customer.getEnterpriseId(), customer.getId()).getResponsesList();
final var labelIds = labelRefs.stream().map(SingleClientCustomerLabelRefRpcResponse::getLabelId).collect(Collectors.toList());
final var labels = deliveryRuleServiceRpcClient.GetClientLabelsByIds(customer.getEnterpriseId(), labelIds).getResponsesList();
final var avoids = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID).map(
SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
final var avoids = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID).map(SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
List<HisAllergy> hisAllergies = new ArrayList<>();
List<HisMedicalAdviceDto> origionalHisDoctors = new ArrayList<>();
List<HisMedicalAdviceDto> originalHisDoctors = new ArrayList<>();
if (!customer.getHISCustomerId().isEmpty()) {
hisAllergies = meiZhongYiHeService.getHisCustomerAllergiesByCustomerId(customer.getHISCustomerId());
origionalHisDoctors = meiZhongYiHeService.getHisCustomerMedicalAdvicesByContractNo(record.getContractNo());
originalHisDoctors = meiZhongYiHeService.getHisCustomerMedicalAdvicesByContractNo(record.getContractNo());
}
final var allergyCodes = hisAllergies.stream().map(HisAllergy::getAllergyCode).collect(Collectors.toList());
final var allLabels = deliveryRuleServiceRpcClient.getLabelsByTypes(QueryLabelsDto.builder()
.enterpriseId(operatorLoginInfo.getEnterpriseId())
.types(List.of(ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID, ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR, ClientLabelTypeEnum.CLIENT_LABEL_TYPE_ALLERGENS))
.build());
final var mappingAllergies = allLabels.getResponsesList().stream().filter(l -> allergyCodes.contains(l.getCode())).map(SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
final var dietDoctors = origionalHisDoctors.stream().filter(d -> d.getMedicalAdviceType().equals(
MedicalAdviceTypeEnum.DIET)).map(HisMedicalAdviceDto::getConnotation).collect(Collectors.toList());
final var doctors = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR).map(
SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
final var dietDoctors = originalHisDoctors.stream().filter(d -> d.getMedicalAdviceType().equals(MedicalAdviceTypeEnum.DIET)).map(HisMedicalAdviceDto::getConnotation).collect(Collectors.toList());
final var doctors = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR).map(SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
final var customerNotice = CustomerNotice.builder()
.avoids(Stream.of(avoids, mappingAllergies).flatMap(List::stream).collect(Collectors.toList()))
.doctors(Stream.of(doctors, dietDoctors).flatMap(List::stream).collect(Collectors.toList()))
......@@ -154,13 +146,11 @@ public class OrderServiceImpl implements OrderService {
createOrderDto.setCustomerNoticeJson(customerNotice);
createOrderDto.setUpdatedBy(operatorLoginInfo.getId());
createOrderDto.setUpdateSource(OrderSourceEnum.STALL.getNumber());
List<CreateOrderDetailDto> orderDetailDtoList = new ArrayList<>();
final var orderDetailDtoList = new ArrayList<CreateOrderDetailDto>();
final var menuDetails = menuServiceRpcClient.queryMenuDetailsByMenuId(menu.getEnterpriseId(), operatorCreateOrderDto.getMenuId()).getResponsesList();
final var skuIds = menuDetails.stream()
.map(SingleMenuDetailRpcResponse::getSkuId)
.collect(Collectors.toList());
final var skuIds = menuDetails.stream().map(SingleMenuDetailRpcResponse::getSkuId).collect(Collectors.toList());
final var rpcSkus = skuServiceRpcClient.getDishSkusByIds(skuIds).getResponseList();
Integer totalSkuCount = 0;
int totalSkuCount = 0;
for (OperatorCreateOrderDetailDto orderDetail : operatorCreateOrderDto.getOrderDetailDtos()) {
totalSkuCount += orderDetail.getCount();
final var optionalTargetMenuDetail = menuDetails.stream().filter(detail -> detail.getId() == orderDetail.getMenuDetailId()).findFirst();
......@@ -175,8 +165,7 @@ public class OrderServiceImpl implements OrderService {
final var skuAvoids = optionalSku.get().getAvoidsList().stream().map(SingleResponse::getName).collect(Collectors.toList());
final var tastes = optionalSku.get().getTastesList().stream().map(SingleResponse::getName).collect(Collectors.toList());
final var efficacies = optionalSku.get().getEfficaciesList().stream().map(SingleResponse::getName).collect(Collectors.toList());
final var allergies = optionalSku.get().getAllergiesList().stream().map(
SingleSpecialResponse::getName).collect(Collectors.toList());
final var allergies = optionalSku.get().getAllergiesList().stream().map(SingleSpecialResponse::getName).collect(Collectors.toList());
final var skuDoctors = optionalSku.get().getDoctorsList().stream().map(SingleSpecialResponse::getName).collect(Collectors.toList());
final var mealDetail = MealDetailDto
.builder()
......@@ -207,7 +196,6 @@ public class OrderServiceImpl implements OrderService {
}
createOrderDto.setOrderDetailDtos(orderDetailDtoList);
createOrderDto.setTotalNum(totalSkuCount);
// createOrderDto.setPayPrice();
return orderServiceRpcClient.createOrder(createOrderDto);
}
......
......@@ -81,6 +81,15 @@ enum CloseTimeType {
RESERVATION = 1;
}
enum OnlinePayEnum {
UNKNOWN = 0;
ONLINE = 1; //在线
OFFLINE = 2; //线下
LEAVE_HOSPITAL = 3;//出院
EMPLOYEE_CARD = 4; //员工卡
PAPER_VERIFICATION = 5; //纸质核销
}
enum ServeStatusEnum {
UNKNOWN_SERVE_STATUS = 0;
SERVE_NOT_START = 1;
......@@ -106,7 +115,7 @@ message SingleClientCustomerOrderRpcResponse {
CloseTimeType closeTimeType = 10;
int32 totalNum = 11;
int32 payPrice = 12;
bool onlinePay = 13;
OnlinePayEnum onlinePay = 13;
int64 payTime = 14;
PayStatusEnum payStatus = 15;
string errorMsg = 16;
......@@ -205,7 +214,7 @@ message QueryClientCustomerOrdersByConditionRpcRequest {
bool shouldFilterCloseTimeType = 16;
CloseTimeType closeTimeType = 17;
bool shouldFilterOnlinePay = 18;
bool onlinePay = 19;
OnlinePayEnum onlinePay = 19;
bool shouldFilterPayTimeStart = 20;
int64 payTimeStart = 21;
bool shouldFilterPayTimeEnd = 22;
......@@ -254,7 +263,7 @@ message ClientCustomerOrderCreation{
bool shouldCreatePayPrice = 12;
int32 payPrice = 13;
bool shouldCreateOnlinePay = 14;
bool onlinePay = 15;
OnlinePayEnum onlinePay = 15;
bool shouldCreatePayTime = 16;
int64 payTime = 17;
bool shouldCreatePayStatus = 18;
......@@ -330,7 +339,7 @@ message ClientCustomerOrderModification {
bool shouldUpdatePayPrice = 20;
int32 payPrice = 21;
bool shouldUpdateOnlinePay = 22;
bool onlinePay = 23;
OnlinePayEnum onlinePay = 23;
bool shouldUpdatePayTime = 24;
int64 payTime = 25;
bool shouldUpdatePayStatus = 26;
......
......@@ -115,6 +115,7 @@ enum ModeOfPaymentEnum {
UNKNOWN = 0;
ONLINE = 1; //在线
OFFLINE = 2; //线下
LEAVE_HOSPITAL = 3;//出院
}
enum DishTypeEnum {
......