From bf458de8ef614af11b6cde192a9330345535336f Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Thu, 20 Feb 2025 18:35:41 +0800 Subject: [PATCH] sync_pay_state --- .../business/OrderDishesAndroidBusiness.java | 11 ++ .../impl/OrderDishesAndroidBusinessImpl.java | 67 +++++++++++ .../common/business/OrderPlaceBusiness.java | 3 +- .../business/impl/OrderPlaceBusinessImpl.java | 105 +++++++++--------- .../custom/OrderCustomAndroidBusiness.java | 92 +++++++++++++++ .../order/custom/OrderCustomBusiness.java | 12 +- 6 files changed, 232 insertions(+), 58 deletions(-) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/OrderDishesAndroidBusiness.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/impl/OrderDishesAndroidBusinessImpl.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomAndroidBusiness.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/OrderDishesAndroidBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/OrderDishesAndroidBusiness.java new file mode 100644 index 00000000..caaa12b5 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/OrderDishesAndroidBusiness.java @@ -0,0 +1,11 @@ +package com.bonus.core.order.android.business; + +import com.bonus.core.order.common.model.OrderInfo; +import java.time.LocalDate; +import java.util.List; + +public interface OrderDishesAndroidBusiness { + + void initOrderMealCode(OrderInfo orderInfo); + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/impl/OrderDishesAndroidBusinessImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/impl/OrderDishesAndroidBusinessImpl.java new file mode 100644 index 00000000..94597cef --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/impl/OrderDishesAndroidBusinessImpl.java @@ -0,0 +1,67 @@ +package com.bonus.core.order.android.business.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; +import com.bonus.core.allocation.canteen.model.AllocStall; +import com.bonus.core.customer.constants.OrderTypeEnum; +import com.bonus.core.order.android.business.OrderDishesAndroidBusiness; +import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.order.custom.OrderCustomBusiness; +import com.bonus.core.order.utils.LeNumUtil; +import com.bonus.core.supermarket.model.SupermarketInfo; +import org.redisson.api.RLock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class OrderDishesAndroidBusinessImpl implements OrderDishesAndroidBusiness { + private static final Logger log = LoggerFactory.getLogger(OrderDishesAndroidBusinessImpl.class); + + @Autowired + @Lazy + protected OrderCustomBusiness orderCustomBusiness; + + public void initOrderMealCode(OrderInfo orderInfo) { + if (!CharSequenceUtil.isNotEmpty(orderInfo.getMealCode())) { + String mealCode = this.createMealCode(orderInfo.getOrderType(), orderInfo.getCanteenId(), orderInfo.getStallId(), orderInfo.getOrderDate(), orderInfo.getMealtimeType()); + orderInfo.setMealCode(mealCode); + } + } + + public String createMealCode(Integer orderType, Long canteenId, Long stallId, LocalDate orderDate, Integer mealtimeType) { + String mealCode = this.orderCustomBusiness.android().willCreateOrderMealCode(canteenId, stallId, orderDate, mealtimeType); + if (CharSequenceUtil.isNotEmpty(mealCode)) { + return this.orderCustomBusiness.android().didCreateOrderMealCode(canteenId, stallId, orderDate, mealtimeType, mealCode); + } else { + String prefix = null; + if (OrderTypeEnum.isShopCategory(orderType)) { + SupermarketInfo supermarketInfoById = this.supermarketApi.getSupermarketInfoById(canteenId); + prefix = supermarketInfoById != null ? supermarketInfoById.getMealCode() : ""; + } else if (OrderTypeEnum.isCanteenCategory(orderType) && LeNumUtil.isValidId(stallId)) { + AllocStall allocStall = this.allocStallApi.getAllocStall(stallId); + if (allocStall != null) { + prefix = OrderTypeEnum.isAndroidCategory(orderType) ? allocStall.getOffLineMealCodePrefix() : allocStall.getOnLineMealCodePrefix(); + } + } + + mealCode = this.numUtil.getMealCode(prefix, canteenId, stallId, orderDate, mealtimeType); + log.info("创建叫号码:{}", mealCode); + return this.orderCustomBusiness.android().didCreateOrderMealCode(canteenId, stallId, orderDate, mealtimeType, mealCode); + } + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderPlaceBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderPlaceBusiness.java index 3ed1099a..955c0e75 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderPlaceBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderPlaceBusiness.java @@ -2,6 +2,7 @@ package com.bonus.core.order.common.business; import com.bonus.core.marketing.coupon.model.MktCouponPayModel; import com.bonus.core.menu.model.AllocMealtimeModel; +import com.bonus.core.order.common.dto.OrderDidPayInfoDTO; import com.bonus.core.order.common.model.*; import com.bonus.core.order.common.vo.OrderDeliveryResultVO; import com.bonus.core.order.mq.po.OrderSavePO; @@ -64,7 +65,7 @@ public interface OrderPlaceBusiness { // List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList); -// void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO); + void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO); // // boolean ifUseCall(OrderInfo orderInfo); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderPlaceBusinessImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderPlaceBusinessImpl.java index 5e1fd0e5..ea78c7d5 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderPlaceBusinessImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderPlaceBusinessImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.NumberUtil; import com.bonus.common.core.exception.ServiceException; import com.bonus.constant.LeConstants; import com.bonus.constant.RetCodeEnum; +import com.bonus.constant.SourceTypeEnum; import com.bonus.core.account.v3.api.AccTradeApi; import com.bonus.core.account.v3.api.vo.AccTradeOrderBalanceVO; import com.bonus.core.allocation.canteen.dto.AllocCanteenDeliveryDTO; @@ -31,6 +32,7 @@ import com.bonus.core.menu.api.MenuRecipeApi; import com.bonus.core.menu.dto.MenuRecipeChangeSurplusNum; import com.bonus.core.menu.dto.OrderRecipeDishesDto; import com.bonus.core.menu.model.AllocMealtimeModel; +import com.bonus.core.order.android.business.OrderDishesAndroidBusiness; import com.bonus.core.order.client.OrderModuleClient; import com.bonus.core.order.client.po.MealtimeCheckNowParam; import com.bonus.core.order.client.po.MealtimeQueryParam; @@ -38,6 +40,7 @@ import com.bonus.core.order.client.po.MetaDataValueParam; import com.bonus.core.order.client.po.OrderConfigQueryParam; import com.bonus.core.order.common.business.OrderPlaceBusiness; import com.bonus.core.order.common.constants.*; +import com.bonus.core.order.common.dto.OrderDidPayInfoDTO; import com.bonus.core.order.common.model.*; import com.bonus.core.order.common.service.*; import com.bonus.core.order.common.vo.OrderDeliveryResultVO; @@ -86,9 +89,9 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { @Autowired @Lazy protected OrderCustomBusiness orderCustomBusiness; -// @Autowired -// @Lazy -// protected OrderDishesAndroidBusiness orderDishesAndroidBusiness; + @Autowired + @Lazy + protected OrderDishesAndroidBusiness orderDishesAndroidBusiness; @Autowired @Lazy protected OrderInfoService orderInfoService; @@ -931,54 +934,54 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { } } -// public void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO) { -// orderInfo.setPayState(didPayInfoDTO.getPayState()); -// orderInfo.setPayTime(didPayInfoDTO.getPayTime() != null ? didPayInfoDTO.getPayTime() : LocalDateTime.now()); -// orderInfo.setPayType(didPayInfoDTO.getPayType()); -// orderInfo.setPayChannel(didPayInfoDTO.getPayChannel()); -// this.orderDishesAndroidBusiness.initOrderMealCode(orderInfo); -// boolean callFlag = this.ifUseCall(orderInfo); -// OrderStateEnum orderStateEnum = OrderStateEnum.PLACE; -// DishesStateEnum dishesStateEnum = DishesStateEnum.UN_MAKE; -// if (OrderTypeEnum.isAndroidType(orderInfo.getOrderType())) { -// if (this.ifMealtimeAfterCurrent(orderInfo)) { -// log.info("[当餐点餐下单] 当前餐次之后的订单"); -// } else if (callFlag) { -// dishesStateEnum = DishesStateEnum.MAKING; -// } else if (DeliveryTypeEnum.isNeedDeliveryType(orderInfo.getDeliveryType())) { -// dishesStateEnum = DishesStateEnum.WAIT_DELIVERY; -// } else { -// dishesStateEnum = DishesStateEnum.ALREADY_TAKE; -// orderStateEnum = OrderStateEnum.FINISH; -// } -// } else if (OrderTypeEnum.isCurrMealType(orderInfo.getOrderType())) { -// if (callFlag) { -// dishesStateEnum = DishesStateEnum.MAKING; -// } else if (DeliveryTypeEnum.isNeedDeliveryType(orderInfo.getDeliveryType())) { -// dishesStateEnum = DishesStateEnum.WAIT_DELIVERY; -// } else { -// dishesStateEnum = DishesStateEnum.WAIT_TAKE; -// } -// } else if (OrderTypeEnum.isShopType(orderInfo.getOrderType())) { -// if (SourceTypeEnum.getAppTypeList().contains(orderInfo.getSourceType())) { -// dishesStateEnum = DishesStateEnum.WAIT_TAKE; -// } else { -// orderStateEnum = OrderStateEnum.FINISH; -// dishesStateEnum = DishesStateEnum.ALREADY_TAKE; -// } -// } else if (OrderTypeEnum.isBuffetType(orderInfo.getOrderType()) || OrderTypeEnum.isRoomCategory(orderInfo.getOrderType()) || OrderTypeEnum.isMobileScanCategory(orderInfo.getOrderType())) { -// orderStateEnum = OrderStateEnum.FINISH; -// dishesStateEnum = DishesStateEnum.ALREADY_TAKE; -// } -// -// if (!OrderStateEnum.isFinishState(orderInfo.getOrderState())) { -// orderInfo.setOrderState(orderStateEnum.getKey()); -// orderInfo.setDishesState(dishesStateEnum.getKey()); -// } -// -// this.orderCustomBusiness.place().didUpdateOrderFieldAfterPay(orderInfo, didPayInfoDTO); -// } -// + public void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO) { + orderInfo.setPayState(didPayInfoDTO.getPayState()); + orderInfo.setPayTime(didPayInfoDTO.getPayTime() != null ? didPayInfoDTO.getPayTime() : LocalDateTime.now()); + orderInfo.setPayType(didPayInfoDTO.getPayType()); + orderInfo.setPayChannel(didPayInfoDTO.getPayChannel()); + this.orderDishesAndroidBusiness.initOrderMealCode(orderInfo); + boolean callFlag = this.ifUseCall(orderInfo); + OrderStateEnum orderStateEnum = OrderStateEnum.PLACE; + DishesStateEnum dishesStateEnum = DishesStateEnum.UN_MAKE; + if (OrderTypeEnum.isAndroidType(orderInfo.getOrderType())) { + if (this.ifMealtimeAfterCurrent(orderInfo)) { + log.info("[当餐点餐下单] 当前餐次之后的订单"); + } else if (callFlag) { + dishesStateEnum = DishesStateEnum.MAKING; + } else if (DeliveryTypeEnum.isNeedDeliveryType(orderInfo.getDeliveryType())) { + dishesStateEnum = DishesStateEnum.WAIT_DELIVERY; + } else { + dishesStateEnum = DishesStateEnum.ALREADY_TAKE; + orderStateEnum = OrderStateEnum.FINISH; + } + } else if (OrderTypeEnum.isCurrMealType(orderInfo.getOrderType())) { + if (callFlag) { + dishesStateEnum = DishesStateEnum.MAKING; + } else if (DeliveryTypeEnum.isNeedDeliveryType(orderInfo.getDeliveryType())) { + dishesStateEnum = DishesStateEnum.WAIT_DELIVERY; + } else { + dishesStateEnum = DishesStateEnum.WAIT_TAKE; + } + } else if (OrderTypeEnum.isShopType(orderInfo.getOrderType())) { + if (SourceTypeEnum.getAppTypeList().contains(orderInfo.getSourceType())) { + dishesStateEnum = DishesStateEnum.WAIT_TAKE; + } else { + orderStateEnum = OrderStateEnum.FINISH; + dishesStateEnum = DishesStateEnum.ALREADY_TAKE; + } + } else if (OrderTypeEnum.isBuffetType(orderInfo.getOrderType()) || OrderTypeEnum.isRoomCategory(orderInfo.getOrderType()) || OrderTypeEnum.isMobileScanCategory(orderInfo.getOrderType())) { + orderStateEnum = OrderStateEnum.FINISH; + dishesStateEnum = DishesStateEnum.ALREADY_TAKE; + } + + if (!OrderStateEnum.isFinishState(orderInfo.getOrderState())) { + orderInfo.setOrderState(orderStateEnum.getKey()); + orderInfo.setDishesState(dishesStateEnum.getKey()); + } + + this.orderCustomBusiness.place().didUpdateOrderFieldAfterPay(orderInfo, didPayInfoDTO); + } + // public boolean ifUseCall(OrderInfo orderInfo) { // if (LocalDate.now().isAfter(orderInfo.getOrderDate())) { // log.warn("[叫号] 今天之前的订单不叫号"); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomAndroidBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomAndroidBusiness.java new file mode 100644 index 00000000..c93579e6 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomAndroidBusiness.java @@ -0,0 +1,92 @@ +package com.bonus.core.order.custom; + +import cn.hutool.core.collection.CollUtil; +import com.bonus.core.common.custom.business.CustomBusiness; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.List; + +@Service +public class OrderCustomAndroidBusiness implements CustomBusiness { + public String name() { + return "订单(设备)"; + } + + public List versions() { + return CollUtil.newArrayList(new CustomBusiness.Version[]{CustomBusiness.Version.of("3.7.0", "初版"), CustomBusiness.Version.of("3.11.2", "叫号添加日期入参"), CustomBusiness.Version.of("3.11.4", "添加试算埋点"), CustomBusiness.Version.of("3.11.5", "叫号码改造")}); + } + +// public boolean willPlaceParamCheck(OrderPayAndroidTotalDTO androidTotalDTO) { +// return true; +// } +// +// public void didPlaceParamCheck(OrderPayAndroidTotalDTO androidTotalDTO) { +// } +// +// public void didCreatePay(OrderPayAndroidTotalDTO androidTotalDTO, UnifyPayDTO unifyPayDTO) { +// } +// +// public void didPackageOrderInfo(OrderPayAndroidTotalDTO androidTotalDTO, DeviceInfoVO deviceInfoVO, UnifyPayDTO unifyPayDTO, List orderInfoList, List orderDetailList, List orderDeliveryList) { +// } +// +// public OrderPayAndroidVO didPayResultHandler(UnifyPayDTO payDTO, UnifyPayVO payVO, List orderInfoList, List orderDetailList, OrderPayAndroidVO orderPayAndroidVO) { +// return orderPayAndroidVO; +// } +// +// public OrderPayAndroidVO didTrialResultHandler(OrderSavePO orderSavePO, OrderPayAndroidVO orderPayAndroidVO) { +// return orderPayAndroidVO; +// } +// +// public OrderPayAndroidVO willOrderPay(OrderSavePO orderSavePO) { +// return null; +// } + + public String willCreateOrderMealCode(Long canteenId, Long stallId, LocalDate orderDate, Integer mealtimeType) { + return null; + } + + public String didCreateOrderMealCode(Long canteenId, Long stallId, LocalDate orderDate, Integer mealtimeType, String mealCode) { + return mealCode; + } + +// public OrderAndroidSignInVO willSignIn(OrderInfo orderInfo, OrderSignInAndroidDTO param) { +// return null; +// } +// +// public OrderAndroidSignInVO didSignIn(OrderInfo orderInfo, OrderSignInAndroidDTO param, OrderAndroidSignInVO result) { +// return result; +// } +// +// public boolean willUpdateOrderDishesStateV2(OrderInfo orderInfo, OrderDishesUpdateDTO dishesUpdateDTO) { +// return true; +// } +// +// public void didUpdateOrderDishesStateV2(OrderInfo orderInfo, Integer dishesStateBeforeUpdated) { +// } +// +// public OrderTakeAndroidVO willCustTakeMeal(OrderTakeAndroidDTO takeAndroidDTO) { +// return null; +// } +// +// public OrderTakeAndroidVO didCustTakeMeal(OrderTakeAndroidDTO takeAndroidDTO, OrderTakeAndroidVO takeAndroidVO) { +// return takeAndroidVO; +// } +// +// public void didQueryOrderCallPage(OrderCallQueryDTO queryDTO, PageVO pageVO) { +// } +// +// public void didQueryOrderPage(OrderListAndroidQueryDTO queryDTO, PageVO pageVO) { +// } +// +// public void didSaveOrderPhotoV2(List orderPhotoList) { +// } +// +// public OrderPayAndroidVO willQueryPayResult(String macOrderId) { +// return null; +// } +// +// public OrderPayAndroidVO didQueryPayResult(String macOrderId, OrderPayAndroidVO orderPayAndroidVO) { +// return orderPayAndroidVO; +// } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomBusiness.java index 7f4856c6..cd9705be 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomBusiness.java @@ -6,9 +6,9 @@ import org.springframework.stereotype.Service; @Service public class OrderCustomBusiness { -// @Autowired -// @Lazy -// protected OrderCustomAndroidBusiness orderCustomAndroidBusiness; + @Autowired + @Lazy + protected OrderCustomAndroidBusiness orderCustomAndroidBusiness; @Autowired @Lazy protected OrderCustomMobileBusiness orderCustomMobileBusiness; @@ -40,9 +40,9 @@ public class OrderCustomBusiness { // @Lazy // protected OrderCustomPrintBusiness orderCustomPrintBusiness; -// public OrderCustomAndroidBusiness android() { -// return this.orderCustomAndroidBusiness; -// } + public OrderCustomAndroidBusiness android() { + return this.orderCustomAndroidBusiness; + } public OrderCustomMobileBusiness mobile() { return this.orderCustomMobileBusiness;