From 287d5bf51c74dc4e196406ffc9acf49d8e279b54 Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Fri, 21 Feb 2025 10:05:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=94=AF=E4=BB=98=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/account/v3/api/AccTradeApi.java | 44 ++- .../v3/mapper/AccTradeWalletDetailMapper.java | 2 +- .../service/AccTradeWalletDetailService.java | 3 + .../impl/AccTradeWalletDetailServiceImpl.java | 6 + .../business/OrderDishesAndroidBusiness.java | 11 + .../impl/OrderDishesAndroidBusinessImpl.java | 79 ++++ .../common/business/OrderPlaceBusiness.java | 15 +- .../common/business/OrderResultBusiness.java | 5 +- .../business/impl/OrderPlaceBusinessImpl.java | 348 +++++++++--------- .../impl/OrderResultBusinessImpl.java | 261 +++++++------ .../order/common/dto/OrderDidPayInfoDTO.java | 69 ++++ .../core/order/common/model/OrderInfo.java | 10 +- .../common/service/OrderDeliveryService.java | 2 + .../common/service/OrderDetailService.java | 2 +- .../common/service/OrderInfoService.java | 5 +- .../impl/OrderDeliveryServiceImpl.java | 15 + .../service/impl/OrderInfoServiceImpl.java | 69 ++-- .../custom/OrderCustomAndroidBusiness.java | 92 +++++ .../order/custom/OrderCustomBusiness.java | 36 +- .../custom/OrderCustomMobileBusiness.java | 11 +- .../custom/OrderCustomPlaceBusiness.java | 13 +- .../custom/OrderCustomRepairBusiness.java | 29 ++ .../custom/OrderCustomResultBusiness.java | 25 ++ .../controller/OrderInfoMobileController.java | 15 +- .../dto/OrderSyncPayStateMobileDTO.java | 28 ++ .../service/OrderInfoMobileBusiness.java | 4 +- .../impl/OrderInfoMobileBusinessImpl.java | 24 ++ .../bonus/core/order/mq/OrderMessageSend.java | 44 +-- .../bonus/core/order/mq/po/OrderPlacedPO.java | 82 +++++ .../repair/service/OrderRepairService.java | 54 +++ .../com/bonus/core/order/utils/LeNumUtil.java | 95 +++-- .../bonus/core/order/utils/LeOrderUtil.java | 7 +- .../bonus/core/pay/api/TradeRecordApi.java | 31 ++ .../mapper/TradeOrderRechargeMapper.java | 3 + .../pay/common/mapper/TradeRecordMapper.java | 1 + .../common/service/TradeRecordService.java | 6 + .../service/impl/TradeRecordServiceImpl.java | 26 ++ .../src/main/resources/bootstrap.yml | 3 + .../mapper/pay/TradeOrderRechargeMapper.xml | 17 + .../mapper/pay/TradeRecordMapper.xml | 40 ++ .../mapper/v3/AccTradeWalletDetailMapper.xml | 17 + 41 files changed, 1216 insertions(+), 433 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/common/dto/OrderDidPayInfoDTO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomAndroidBusiness.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomRepairBusiness.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomResultBusiness.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/dto/OrderSyncPayStateMobileDTO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/po/OrderPlacedPO.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/repair/service/OrderRepairService.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/api/AccTradeApi.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/api/AccTradeApi.java index 12ae9f8e..2586783e 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/api/AccTradeApi.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/api/AccTradeApi.java @@ -1,14 +1,27 @@ package com.bonus.core.account.v3.api; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.bonus.core.account.v3.api.dto.AccRechargeSumApiDTO; import com.bonus.core.account.v3.api.vo.AccRechargeSumApiVO; +import com.bonus.core.account.v3.api.vo.AccTradeOrderBalanceVO; +import com.bonus.core.account.v3.api.vo.AccTradeOrderWalletPayVO; +import com.bonus.core.account.v3.model.AccTrade; +import com.bonus.core.account.v3.model.AccTradeWalletDetail; import com.bonus.core.account.v3.service.AccTradeService; +import com.bonus.core.account.v3.service.AccTradeWalletDetailService; 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 javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class AccTradeApi { @@ -16,8 +29,37 @@ public class AccTradeApi { @Resource @Lazy private AccTradeService accTradeService; + @Autowired + @Lazy + private AccTradeWalletDetailService accTradeWalletDetailService; + public AccRechargeSumApiVO getAccRechargeSum(AccRechargeSumApiDTO accRechargeSumApiDTO) { return this.accTradeService.getAccRechargeSum(accRechargeSumApiDTO); } + + public Map listOrderAccPayDetail(List leOrdNos) { + //List accTradeList = this.accTradeService.list((Wrapper) Wrappers.lambdaQuery(AccTrade.class) + // .select(new SFunction[]{AccTrade::getId, AccTrade::getLeOrdNo, AccTrade::getWalletBalTotal}) + // .in(AccTrade::getLeOrdNo, leOrdNos)); + List accTradeList = this.accTradeService.list(Wrappers.lambdaQuery(AccTrade.class) + .select(AccTrade::getId, AccTrade::getLeOrdNo, AccTrade::getWalletBalTotal) + .in(AccTrade::getLeOrdNo, leOrdNos)); + if (CollUtil.isEmpty(accTradeList)) { + return MapUtil.empty(); + } else { + Map> leOrdNo_accTrade = (Map)accTradeList.stream().collect(Collectors.groupingBy(AccTrade::getLeOrdNo)); + Map> accTradeId_walletDetail = this.accTradeWalletDetailService.queryAccTradeWalletDetailByTradeIdList(accTradeList.stream().map(AccTrade::getId).collect(Collectors.toList())); + Map resultMap = MapUtil.newHashMap(); + leOrdNo_accTrade.keySet().forEach((leOrdNo) -> { + AccTrade accTrade = (AccTrade)((List)leOrdNo_accTrade.get(leOrdNo)).get(0); + List walletPayVOList = accTradeId_walletDetail.get(accTrade.getId()).stream().map((item) -> { + return (new AccTradeOrderWalletPayVO()).setWalletId(item.getWalletId()).setAmount(item.getAmount()).setWalletBal(item.getWalletBal()); + }).collect(Collectors.toList()); + resultMap.put(leOrdNo, (new AccTradeOrderBalanceVO()).setAccTradeId(accTrade.getId()).setLeOrdNo(accTrade.getLeOrdNo()).setWalletBalTotal(accTrade.getWalletBalTotal()).setWalletPayDetail(walletPayVOList)); + }); + return resultMap; + } + } + } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/mapper/AccTradeWalletDetailMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/mapper/AccTradeWalletDetailMapper.java index 97e31b71..6819d766 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/mapper/AccTradeWalletDetailMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/mapper/AccTradeWalletDetailMapper.java @@ -27,5 +27,5 @@ public interface AccTradeWalletDetailMapper extends BaseMapper queryAccTradeOrderDetailByLeOrderNo(@Param("leOrderNo") Long leOrderNo, @Param("leOrderNoList") List leOrderNoList); - + List queryAccTradeWalletDetailByTradeIdList(@Param("tradeIdList") List tradeIdList); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/AccTradeWalletDetailService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/AccTradeWalletDetailService.java index 7a78d742..927acff5 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/AccTradeWalletDetailService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/AccTradeWalletDetailService.java @@ -9,6 +9,7 @@ import com.bonus.core.account.v3.web.vo.AccOrdTradeVO; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; public interface AccTradeWalletDetailService { @@ -29,4 +30,6 @@ public interface AccTradeWalletDetailService { List queryAccTradeWalletDetailByOriginTradeId(Long originTradeId, Integer tradeType); AccOrdTradeVO queryAccTradeOrderDetailByLeOrderNo(Long leOrderNo); + + Map> queryAccTradeWalletDetailByTradeIdList(List tradeIdList); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/impl/AccTradeWalletDetailServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/impl/AccTradeWalletDetailServiceImpl.java index e245c47f..81782965 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/impl/AccTradeWalletDetailServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/account/v3/service/impl/AccTradeWalletDetailServiceImpl.java @@ -17,6 +17,7 @@ import com.bonus.core.account.v3.service.AccTradeWalletDetailService; import com.bonus.core.account.v3.web.vo.AccOrdTradeVO; import com.bonus.core.account.v3.po.AccWalletPayPO; import com.bonus.i18n.I18n; +import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -111,4 +112,9 @@ public class AccTradeWalletDetailServiceImpl extends ServiceImpl> queryAccTradeWalletDetailByTradeIdList(List tradeIdList) { + List list = ((AccTradeWalletDetailMapper)this.baseMapper).queryAccTradeWalletDetailByTradeIdList(tradeIdList); + return (Map)(ObjectUtil.isEmpty(list) ? Maps.newHashMap() : (Map)list.stream().collect(Collectors.groupingBy(AccTradeWalletDetail::getTradeId))); + } + } 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..e53f2776 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/android/business/impl/OrderDishesAndroidBusinessImpl.java @@ -0,0 +1,79 @@ +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.api.AllocStallApi; +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.api.SupermarketApi; +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; + + @Autowired + @Lazy + protected AllocStallApi allocStallApi; + @Autowired + @Lazy + protected SupermarketApi supermarketApi; + @Lazy + @Autowired + protected LeNumUtil numUtil; + + 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 0cc77f19..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,14 +2,13 @@ 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.model.OrderAmountChange; -import com.bonus.core.order.common.model.OrderDelivery; -import com.bonus.core.order.common.model.OrderDetail; -import com.bonus.core.order.common.model.OrderInfo; +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; import com.bonus.core.pay.api.dto.UnifyPayDTO; import com.bonus.core.pay.api.vo.UnifyPayVO; +import com.bonus.core.pay.common.vo.TradeChannelVO; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -26,7 +25,7 @@ public interface OrderPlaceBusiness { // void orderHandlerLock(String lockId, int lockSecond); // -// void orderHandlerUnLock(String lockId); + void orderHandlerUnLock(String lockId); // // void saveCache(OrderSavePO orderSavePO, boolean saveToDiskAsync); // @@ -64,9 +63,9 @@ public interface OrderPlaceBusiness { // // List removeDetailDishes(List orderDetailList, List removeList); // -// List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList); -// -// void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO); + List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList); + + 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/OrderResultBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java index fd5a2a3b..d781a681 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java @@ -3,12 +3,13 @@ package com.bonus.core.order.common.business; import com.bonus.core.order.common.model.OrderDetail; import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; import java.util.List; public interface OrderResultBusiness { -// UnifyPaySelectVO reSyncOrderPayResult(Long orderId); -// + UnifyPaySelectVO reSyncOrderPayResult(Long orderId); + // UnifyRefundSelectVO reSyncOrderRefundResult(Long orderRefundId); // // String asyncPayResultHandler(PayResultPO payResultPO); 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 3ea08748..e9929a5c 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 @@ -1,6 +1,5 @@ package com.bonus.core.order.common.business.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.CharSequenceUtil; @@ -8,8 +7,13 @@ 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.api.AllocStallApi; import com.bonus.core.allocation.canteen.dto.AllocCanteenDeliveryDTO; import com.bonus.core.allocation.canteen.dto.AllocCanteenDeliveryModel; +import com.bonus.core.allocation.canteen.model.AllocStall; import com.bonus.core.common.enums.DeliveryTypeEnum; import com.bonus.core.common.enums.MetadataModelTypeEnum; import com.bonus.core.common.redis.RedisUtil; @@ -30,6 +34,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; @@ -37,22 +42,24 @@ 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.model.OrderAmountChange; -import com.bonus.core.order.common.model.OrderDelivery; -import com.bonus.core.order.common.model.OrderDetail; -import com.bonus.core.order.common.model.OrderInfo; +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; import com.bonus.core.order.custom.OrderCustomBusiness; import com.bonus.core.order.mq.po.OrderSavePO; import com.bonus.core.order.utils.LeNumUtil; +import com.bonus.core.order.utils.LeOrderUtil; import com.bonus.core.pay.api.PayApi; import com.bonus.core.pay.api.dto.UnifyPayDTO; import com.bonus.core.pay.api.vo.UnifyPayVO; +import com.bonus.core.pay.channel.account.vo.AccPayResultVO; import com.bonus.core.pay.common.constants.PayChannelEnum; import com.bonus.core.pay.common.constants.PayChannelSelectEnum; +import com.bonus.core.pay.common.constants.PayStateEnum; import com.bonus.core.pay.common.constants.PayTypeEnum; import com.bonus.core.pay.common.vo.PayChannelSplitVO; +import com.bonus.core.pay.common.vo.TradeChannelVO; import com.bonus.core.supermarket.api.SupermarketApi; import com.bonus.core.supermarket.dto.SmtCheckProductLimitBuyDTO; import com.bonus.core.supermarket.dto.SmtCheckProductLimitBuyDetailDTO; @@ -84,9 +91,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; @@ -132,12 +139,12 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { // @Autowired // @Lazy // protected DeviceApi deviceApi; -// @Autowired -// @Lazy -// protected AllocStallApi allocStallApi; -// @Autowired -// @Lazy -// protected AccTradeApi accTradeApi; + @Autowired + @Lazy + protected AllocStallApi allocStallApi; + @Autowired + @Lazy + protected AccTradeApi accTradeApi; public void checkOrderSubmitted(String repeatedId) { if (!CharSequenceUtil.isEmpty(repeatedId)) { @@ -183,13 +190,13 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { log.info("[订单处理中] 加锁 {} {}", lockId, lockSecond); } } -// -// public void orderHandlerUnLock(String lockId) { -// String lockKey = OrderCacheConstants.orderHandleLockKey(lockId); -// RedisUtil.delete(lockKey); -// log.info("[订单处理中] 解锁 {}", lockKey); -// } -// + + public void orderHandlerUnLock(String lockId) { + String lockKey = OrderCacheConstants.orderHandleLockKey(lockId); + RedisUtil.delete(lockKey); + log.info("[订单处理中] 解锁 {}", lockKey); + } + // public void saveCache(OrderSavePO orderSavePO, boolean saveToDiskAsync) { // log.info("[订单缓存]保存订单缓存 {} {}", orderSavePO.getMacOrderId(), saveToDiskAsync); // RedisUtil.setString(OrderCacheConstants.orderCacheKey(orderSavePO.getMacOrderId()), JacksonUtil.writeValueAsString(orderSavePO), OrderCacheConstants.WEIGHT_CACHE_SECONDS); @@ -863,133 +870,133 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { return this.orderCustomBusiness.place().didFillOrderDeliveryAmountV2(orderInfoList, orderDetailList, orderDeliveryList, resultVO); } } -// -// public List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList) { -// List orderAmountDetailList = CollUtil.newArrayList(new OrderAmountDetail[0]); -// if (!this.orderCustomBusiness.place().willCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList)) { -// this.orderCustomBusiness.place().didCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList); -// return orderAmountDetailList; -// } else { -// LeOrderUtil.calcOrderAmount(orderInfoList, payAmount, OrderInfo::setRealAmount); -// this.fillAccChannelPayDetailIfNecessary(channelDetailList); -// Iterator var7 = channelDetailList.iterator(); -// -// while(var7.hasNext()) { -// TradeChannelVO tradeChannelVO = (TradeChannelVO)var7.next(); -// if (PayStateEnum.isPaidState(tradeChannelVO.getTradeState())) { -// LeOrderUtil.calcOrderAmount(orderInfoList, tradeChannelVO.getAmount(), (orderInfox, amount) -> { -// orderAmountDetailList.add(tradeChannelVO.convertToOrderAmountDetail(orderInfox.getOrderId(), orderInfox.getOrderDate(), (Long)null, amount, OrderAmountDetailTypeEnum.PAY)); -// if (PayChannelEnum.ACC.getKey().equals(tradeChannelVO.getPayChannel())) { -// orderInfox.setAccPayAmount(amount); -// } else if (PayChannelEnum.COUPON.getKey().equals(tradeChannelVO.getPayChannel())) { -// orderInfox.setCouponAmount(amount); -// } else { -// orderInfox.setOutPayAmount(amount); -// } -// -// }); -// tradeChannelVO.shareAccPayResult(orderAmountDetailList); -// if (PayChannelEnum.COUPON.getKey().equals(tradeChannelVO.getPayChannel())) { -// String couponId = tradeChannelVO.getParam() != null ? tradeChannelVO.getParam().path("couponId").asText() : ""; -// if (CharSequenceUtil.isNotEmpty(couponId)) { -// orderInfoList.forEach((s) -> { -// s.setCouponId(couponId); -// }); -// } -// } -// } -// } -// -// var7 = orderInfoList.iterator(); -// -// while(var7.hasNext()) { -// OrderInfo orderInfo = (OrderInfo)var7.next(); -// BigDecimal detailRealAmount = orderInfo.getRealAmount(); -// if (CollUtil.isNotEmpty(orderAmountChangeList)) { -// BigDecimal additionalFee = (BigDecimal)orderAmountChangeList.stream().filter((s) -> { -// return s.getOrderId().equals(orderInfo.getOrderId()) && ChangeDetailTypeEnum.ifAdditionalFee(s.getChangeDetailType()); -// }).map((s) -> { -// return NumberUtil.null2Zero(s.getChangeAmount()).abs(); -// }).reduce(BigDecimal.ZERO, BigDecimal::add); -// detailRealAmount = detailRealAmount.subtract(additionalFee); -// } -// -// if (detailRealAmount.compareTo(BigDecimal.ZERO) < 0) { -// detailRealAmount = BigDecimal.ZERO; -// } -// -// List detailList = (List)orderDetailList.stream().filter((s) -> { -// return s.getOrderId().equals(orderInfo.getOrderId()); -// }).collect(Collectors.toList()); -// LeNumUtil.calcShareAmount(detailList, detailRealAmount, OrderDetail::getCalcTotalAmount, OrderDetail::setRealAmount); -// } -// -// this.orderCustomBusiness.place().didCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList); -// return orderAmountDetailList; -// } -// } -// -// 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("[叫号] 今天之前的订单不叫号"); -// } else if ((OrderTypeEnum.isAndroidType(orderInfo.getOrderType()) || OrderTypeEnum.isCurrMealType(orderInfo.getOrderType())) && LeNumUtil.isValidId(orderInfo.getStallId())) { -// AllocStall allocStall = this.allocStallApi.getAllocStall(orderInfo.getStallId()); -// if (allocStall != null && LeConstants.COMMON_YES.equals(allocStall.getIfUseCallNum())) { -// log.info("[当餐点餐下单] 开启叫号"); -// return true; -// } -// } -// -// return false; -// } + + public List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList) { + List orderAmountDetailList = CollUtil.newArrayList(new OrderAmountDetail[0]); + if (!this.orderCustomBusiness.place().willCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList)) { + this.orderCustomBusiness.place().didCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList); + return orderAmountDetailList; + } else { + LeOrderUtil.calcOrderAmount(orderInfoList, payAmount, OrderInfo::setRealAmount); + this.fillAccChannelPayDetailIfNecessary(channelDetailList); + Iterator var7 = channelDetailList.iterator(); + + while(var7.hasNext()) { + TradeChannelVO tradeChannelVO = (TradeChannelVO)var7.next(); + if (PayStateEnum.isPaidState(tradeChannelVO.getTradeState())) { + LeOrderUtil.calcOrderAmount(orderInfoList, tradeChannelVO.getAmount(), (orderInfox, amount) -> { + orderAmountDetailList.add(tradeChannelVO.convertToOrderAmountDetail(orderInfox.getOrderId(), orderInfox.getOrderDate(), (Long)null, amount, OrderAmountDetailTypeEnum.PAY)); + if (PayChannelEnum.ACC.getKey().equals(tradeChannelVO.getPayChannel())) { + orderInfox.setAccPayAmount(amount); + } else if (PayChannelEnum.COUPON.getKey().equals(tradeChannelVO.getPayChannel())) { + orderInfox.setCouponAmount(amount); + } else { + orderInfox.setOutPayAmount(amount); + } + + }); + tradeChannelVO.shareAccPayResult(orderAmountDetailList); + if (PayChannelEnum.COUPON.getKey().equals(tradeChannelVO.getPayChannel())) { + String couponId = tradeChannelVO.getParam() != null ? tradeChannelVO.getParam().path("couponId").asText() : ""; + if (CharSequenceUtil.isNotEmpty(couponId)) { + orderInfoList.forEach((s) -> { + s.setCouponId(couponId); + }); + } + } + } + } + + var7 = orderInfoList.iterator(); + + while(var7.hasNext()) { + OrderInfo orderInfo = (OrderInfo)var7.next(); + BigDecimal detailRealAmount = orderInfo.getRealAmount(); + if (CollUtil.isNotEmpty(orderAmountChangeList)) { + BigDecimal additionalFee = (BigDecimal)orderAmountChangeList.stream().filter((s) -> { + return s.getOrderId().equals(orderInfo.getOrderId()) && ChangeDetailTypeEnum.ifAdditionalFee(s.getChangeDetailType()); + }).map((s) -> { + return NumberUtil.null2Zero(s.getChangeAmount()).abs(); + }).reduce(BigDecimal.ZERO, BigDecimal::add); + detailRealAmount = detailRealAmount.subtract(additionalFee); + } + + if (detailRealAmount.compareTo(BigDecimal.ZERO) < 0) { + detailRealAmount = BigDecimal.ZERO; + } + + List detailList = (List)orderDetailList.stream().filter((s) -> { + return s.getOrderId().equals(orderInfo.getOrderId()); + }).collect(Collectors.toList()); + LeNumUtil.calcShareAmount(detailList, detailRealAmount, OrderDetail::getCalcTotalAmount, OrderDetail::setRealAmount); + } + + this.orderCustomBusiness.place().didCalcOrderRealAmount(orderInfoList, orderDetailList, payAmount, channelDetailList, orderAmountDetailList); + return orderAmountDetailList; + } + } + + 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("[叫号] 今天之前的订单不叫号"); + } else if ((OrderTypeEnum.isAndroidType(orderInfo.getOrderType()) || OrderTypeEnum.isCurrMealType(orderInfo.getOrderType())) && LeNumUtil.isValidId(orderInfo.getStallId())) { + AllocStall allocStall = this.allocStallApi.getAllocStall(orderInfo.getStallId()); + if (allocStall != null && LeConstants.COMMON_YES.equals(allocStall.getIfUseCallNum())) { + log.info("[当餐点餐下单] 开启叫号"); + return true; + } + } + + return false; + } protected void calcOrderAndDetailTotalAmount(OrderInfo orderInfo, List orderDetailList) { boolean usePrefPrice = !OrderTypeEnum.isShopCategory(orderInfo.getOrderType()) || this.supermarketApi.ifSupermarketMember(orderInfo.getCustId(), orderInfo.getCanteenId()); @@ -1002,18 +1009,17 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { orderInfo.setPayableAmount((BigDecimal)orderDetailList.stream().map(OrderDetail::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add)); } -// -// protected void fillAccChannelPayDetailIfNecessary(List channelDetailList) { -// List lacksAccPayDetailChannelIds = (List)channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).map(TradeChannelVO::getTradeChannelId).collect(Collectors.toList()); -// if (CollUtil.isNotEmpty(lacksAccPayDetailChannelIds)) { -// Map accPayDetailMap = this.accTradeApi.listOrderAccPayDetail(lacksAccPayDetailChannelIds); -// channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).forEach((s) -> { -// s.setAccPayResultVO(AccPayResultVO.of((AccTradeOrderBalanceVO)accPayDetailMap.get(s.getTradeChannelId()))); -// }); -// } -// -// } -// + + protected void fillAccChannelPayDetailIfNecessary(List channelDetailList) { + List lacksAccPayDetailChannelIds = (List)channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).map(TradeChannelVO::getTradeChannelId).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(lacksAccPayDetailChannelIds)) { + Map accPayDetailMap = this.accTradeApi.listOrderAccPayDetail(lacksAccPayDetailChannelIds); + channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).forEach((s) -> { + s.setAccPayResultVO(AccPayResultVO.of((AccTradeOrderBalanceVO)accPayDetailMap.get(s.getTradeChannelId()))); + }); + } + } + // protected OrderAmountChange packageOrderAmountChange(Long orderId, LocalDate orderDate, BigDecimal changeAmount, ChangeDetailTypeEnum changeDetailType) { // return this.packageOrderAmountChange(orderId, orderDate, changeAmount, changeDetailType, (String)null); // } @@ -1041,15 +1047,15 @@ public class OrderPlaceBusinessImpl implements OrderPlaceBusiness { rulePriceDTO.setPayChannel(((OrderInfo)orderInfoList.get(0)).getPayChannel()); return rulePriceDTO; } -// -// protected boolean ifMealtimeAfterCurrent(OrderInfo orderInfo) { -// if (orderInfo.getOrderDate().isBefore(LocalDate.now())) { -// return false; -// } else if (orderInfo.getOrderDate().isAfter(LocalDate.now())) { -// return true; -// } else { -// AllocMealtimeModel currentMealtime = this.orderModuleClient.mealtimeQuery(MealtimeQueryParam.ofAssignTime(orderInfo.getOrderTime().toLocalTime(), orderInfo.getCanteenId(), orderInfo.getStallId())); -// return currentMealtime != null && currentMealtime.getMealtimeType().compareTo(orderInfo.getMealtimeType()) < 0; -// } -// } + + protected boolean ifMealtimeAfterCurrent(OrderInfo orderInfo) { + if (orderInfo.getOrderDate().isBefore(LocalDate.now())) { + return false; + } else if (orderInfo.getOrderDate().isAfter(LocalDate.now())) { + return true; + } else { + AllocMealtimeModel currentMealtime = this.orderModuleClient.mealtimeQuery(MealtimeQueryParam.ofAssignTime(orderInfo.getOrderTime().toLocalTime(), orderInfo.getCanteenId(), orderInfo.getStallId())); + return currentMealtime != null && currentMealtime.getMealtimeType().compareTo(orderInfo.getMealtimeType()) < 0; + } + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderResultBusinessImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderResultBusinessImpl.java index 1a6158f3..1afca1a1 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderResultBusinessImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderResultBusinessImpl.java @@ -7,13 +7,29 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.bonus.constant.LeConstants; +import com.bonus.core.common.utils.LogUtil; import com.bonus.core.marketing.v2.api.MarketApi; import com.bonus.core.order.common.business.OrderPlaceBusiness; import com.bonus.core.order.common.business.OrderResultBusiness; -import com.bonus.core.order.common.model.OrderDetail; -import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.order.common.dto.OrderDidPayInfoDTO; +import com.bonus.core.order.common.model.*; +import com.bonus.core.order.common.service.OrderAmountChangeService; +import com.bonus.core.order.common.service.OrderDeliveryService; +import com.bonus.core.order.common.service.OrderDetailService; import com.bonus.core.order.common.service.OrderInfoService; import com.bonus.core.order.custom.OrderCustomBusiness; +import com.bonus.core.order.mq.OrderMessageSend; +import com.bonus.core.order.mq.po.OrderSavePO; +import com.bonus.core.order.repair.service.OrderRepairService; +import com.bonus.core.pay.api.PayApi; +import com.bonus.core.pay.api.TradeRecordApi; +import com.bonus.core.pay.api.dto.UnifyPaySelectDTO; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; +import com.bonus.core.pay.api.vo.UnifyPayVO; +import com.bonus.core.pay.common.constants.PayStateEnum; +import com.bonus.core.pay.common.model.TradeOrderRecharge; +import com.bonus.core.pay.common.model.TradeRecord; +import com.bonus.core.pay.common.po.PayResultPO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -48,36 +64,36 @@ public class OrderResultBusinessImpl implements OrderResultBusiness { @Autowired @Lazy protected OrderInfoService orderInfoService; -// @Autowired -// @Lazy -// protected OrderDetailService orderDetailService; + @Autowired + @Lazy + protected OrderDetailService orderDetailService; // @Autowired // @Lazy // protected OrderRefundDetailService orderRefundDetailService; -// @Autowired -// @Lazy -// protected OrderAmountChangeService orderAmountChangeService; + @Autowired + @Lazy + protected OrderAmountChangeService orderAmountChangeService; // @Autowired // @Lazy // protected OrderAmountDetailService orderAmountDetailService; -// @Autowired -// @Lazy -// protected OrderDeliveryService orderDeliveryService; + @Autowired + @Lazy + protected OrderDeliveryService orderDeliveryService; // @Autowired // @Lazy // protected MacWeighBindService macWeighBindService; // @Autowired // @Lazy // protected OrderRefundService orderRefundService; -// @Autowired -// @Lazy -// protected OrderRepairService orderRepairService; -// @Autowired -// @Lazy -// protected PayApi payApi; -// @Autowired -// @Lazy -// protected TradeRecordApi tradeRecordApi; + @Autowired + @Lazy + protected OrderRepairService orderRepairService; + @Autowired + @Lazy + protected PayApi payApi; + @Autowired + @Lazy + protected TradeRecordApi tradeRecordApi; // @Autowired // @Lazy // protected MktCouponApi mktCouponApi; @@ -94,30 +110,31 @@ public class OrderResultBusinessImpl implements OrderResultBusiness { @Lazy protected MarketApi marketApi; -// public UnifyPaySelectVO reSyncOrderPayResult(Long orderId) { -// UnifyPaySelectVO unifyPaySelectVO = this.orderCustomBusiness.result().willReSyncOrderPayResult(orderId); -// if (unifyPaySelectVO != null) { -// return unifyPaySelectVO; -// } else { -// OrderInfo orderInfo = this.orderInfoService.checkAndGetOrderInfo(orderId); -// this.orderPlaceBusiness.orderHandlerLock(orderInfo.getMacOrderId(), 45); -// -// UnifyPaySelectVO var9; -// try { -// UnifyPaySelectVO paySelectVO = this.payApi.paySelect((new UnifyPaySelectDTO()).setOrderRechargeId(orderId)); -// if (PayStateEnum.isFinishedState(paySelectVO.getCode())) { -// TradeRecord tradeRecord = this.tradeRecordApi.getTradeRecordById(paySelectVO.getTradeId()); -// this.asyncPayResultHandler(PayResultPO.of(tradeRecord)); -// } -// -// var9 = paySelectVO; -// } finally { -// this.orderPlaceBusiness.orderHandlerUnLock(orderInfo.getMacOrderId()); -// } -// -// return var9; -// } -// } + public UnifyPaySelectVO reSyncOrderPayResult(Long orderId) { + UnifyPaySelectVO unifyPaySelectVO = this.orderCustomBusiness.result().willReSyncOrderPayResult(orderId); + if (unifyPaySelectVO != null) { + return unifyPaySelectVO; + } else { + OrderInfo orderInfo = this.orderInfoService.checkAndGetOrderInfo(orderId); + this.orderPlaceBusiness.orderHandlerLock(orderInfo.getMacOrderId(), 45); + + UnifyPaySelectVO var9; + try { + UnifyPaySelectVO paySelectVO = this.payApi.paySelect((new UnifyPaySelectDTO()).setOrderRechargeId(orderId)); + if (PayStateEnum.isFinishedState(paySelectVO.getCode())) { + TradeRecord tradeRecord = this.tradeRecordApi.getTradeRecordById(paySelectVO.getTradeId()); + this.asyncPayResultHandler(PayResultPO.of(tradeRecord)); + } + + var9 = paySelectVO; + } finally { + this.orderPlaceBusiness.orderHandlerUnLock(orderInfo.getMacOrderId()); + } + + return var9; + } + } + // // public UnifyRefundSelectVO reSyncOrderRefundResult(Long orderRefundId) { // UnifyRefundSelectVO unifyRefundSelectVO = this.orderCustomBusiness.result().willReSyncOrderRefundResult(orderRefundId); @@ -143,60 +160,60 @@ public class OrderResultBusinessImpl implements OrderResultBusiness { // return var9; // } // } -// -// public String asyncPayResultHandler(PayResultPO payResultPO) { -// LogUtil.info("订单异步支付|支付结果处理", payResultPO); -// if (!this.orderCustomBusiness.result().willHandleAsyncPayResult(payResultPO)) { -// return null; -// } else { -// List orderInfoList = this.orderInfoService.getOrderInfoListByTradeId(payResultPO.getTradeId()); -// if (CollUtil.isEmpty(orderInfoList)) { -// log.warn("订单异步支付|支付结果处理|订单不存在 tradeId={}", payResultPO.getTradeId()); -// return null; -// } else if (orderInfoList.stream().anyMatch((s) -> { -// return PayStateEnum.isPaidState(s.getPayState()); -// }) && !this.orderRepeatPayCheck(payResultPO, orderInfoList)) { -// LogUtil.info("订单异步支付|支付结果处理|订单已支付 ", orderInfoList); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } else if (((OrderInfo)orderInfoList.get(0)).getPayState().equals(payResultPO.getTradeState())) { -// LogUtil.info("订单异步支付|支付结果处理|订单支付状态已处理 ", orderInfoList); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } else if (PayStateEnum.isPayingState(payResultPO.getTradeState())) { -// LogUtil.info("订单异步支付|支付结果处理|支付中 "); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } else { -// List orderIdList = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()); -// List orderDateList = (List)orderInfoList.stream().map(OrderInfo::getOrderDate).collect(Collectors.toList()); -// List orderDetailList = this.orderDetailService.getOrderDetailList((List)orderIdList, (Collection)orderDateList); -// if (PayStateEnum.isPayingState(payResultPO.getTradeState())) { -// orderInfoList.forEach((s) -> { -// this.orderInfoService.updateOrderState(s.getOrderId(), s.getOrderDate(), payResultPO.getTradeState(), (Integer)null, (Integer)null, (String)null); -// }); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } else if (PayStateEnum.isFailedState(payResultPO.getTradeState())) { -// this.orderDidFailedHandler(orderInfoList, orderDetailList, payResultPO.getTradeState(), true); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } else { -// List amountChangeList = this.orderAmountChangeService.listByOrderIds(orderIdList, orderDateList); -// UnifyPayVO payVO = UnifyPayVO.of(this.tradeRecordApi.getTradeRecordById(payResultPO.getTradeId()), this.tradeRecordApi.listChannelDetailByTradeId(payResultPO.getTradeId())); -// List orderAmountDetails = this.orderPlaceBusiness.calcOrderRealAmount(orderInfoList, orderDetailList, amountChangeList, payVO.getRealAmount(), payVO.getDetailList()); -// Iterator var9 = orderInfoList.iterator(); -// -// while(var9.hasNext()) { -// OrderInfo orderInfo = (OrderInfo)var9.next(); -// this.orderPlaceBusiness.updateOrderFieldAfterPay(orderInfo, OrderDidPayInfoDTO.of(payVO)); -// } -// -// this.orderInfoService.initOrderCustInfo(orderInfoList, payVO.getCustId()); -// this.orderPlaceBusiness.save(OrderSavePO.byOrderInfo(orderInfoList, orderDetailList, ListUtil.empty(), orderAmountDetails), false, false); -// List orderDeliveryList = this.orderDeliveryService.listOrderDeliveryByOrderIds(orderIdList, orderDateList); -// OrderMessageSend.orderV3Placed(payResultPO.getOutTradeNo(), orderInfoList, orderDetailList, orderDeliveryList, amountChangeList, orderAmountDetails); -// return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); -// } -// } -// } -// } -// + + public String asyncPayResultHandler(PayResultPO payResultPO) { + LogUtil.info("订单异步支付|支付结果处理", payResultPO); + if (!this.orderCustomBusiness.result().willHandleAsyncPayResult(payResultPO)) { + return null; + } else { + List orderInfoList = this.orderInfoService.getOrderInfoListByTradeId(payResultPO.getTradeId()); + if (CollUtil.isEmpty(orderInfoList)) { + log.warn("订单异步支付|支付结果处理|订单不存在 tradeId={}", payResultPO.getTradeId()); + return null; + } else if (orderInfoList.stream().anyMatch((s) -> { + return PayStateEnum.isPaidState(s.getPayState()); + }) && !this.orderRepeatPayCheck(payResultPO, orderInfoList)) { + LogUtil.info("订单异步支付|支付结果处理|订单已支付 ", orderInfoList); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } else if (((OrderInfo)orderInfoList.get(0)).getPayState().equals(payResultPO.getTradeState())) { + LogUtil.info("订单异步支付|支付结果处理|订单支付状态已处理 ", orderInfoList); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } else if (PayStateEnum.isPayingState(payResultPO.getTradeState())) { + LogUtil.info("订单异步支付|支付结果处理|支付中 "); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } else { + List orderIdList = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()); + List orderDateList = (List)orderInfoList.stream().map(OrderInfo::getOrderDate).collect(Collectors.toList()); + List orderDetailList = this.orderDetailService.getOrderDetailList((List)orderIdList, (Collection)orderDateList); + if (PayStateEnum.isPayingState(payResultPO.getTradeState())) { + orderInfoList.forEach((s) -> { + this.orderInfoService.updateOrderState(s.getOrderId(), s.getOrderDate(), payResultPO.getTradeState(), (Integer)null, (Integer)null, (String)null); + }); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } else if (PayStateEnum.isFailedState(payResultPO.getTradeState())) { + this.orderDidFailedHandler(orderInfoList, orderDetailList, payResultPO.getTradeState(), true); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } else { + List amountChangeList = this.orderAmountChangeService.listByOrderIds(orderIdList, orderDateList); + UnifyPayVO payVO = UnifyPayVO.of(this.tradeRecordApi.getTradeRecordById(payResultPO.getTradeId()), this.tradeRecordApi.listChannelDetailByTradeId(payResultPO.getTradeId())); + List orderAmountDetails = this.orderPlaceBusiness.calcOrderRealAmount(orderInfoList, orderDetailList, amountChangeList, payVO.getRealAmount(), payVO.getDetailList()); + Iterator var9 = orderInfoList.iterator(); + + while(var9.hasNext()) { + OrderInfo orderInfo = (OrderInfo)var9.next(); + this.orderPlaceBusiness.updateOrderFieldAfterPay(orderInfo, OrderDidPayInfoDTO.of(payVO)); + } + + this.orderInfoService.initOrderCustInfo(orderInfoList, payVO.getCustId()); + this.orderPlaceBusiness.save(OrderSavePO.byOrderInfo(orderInfoList, orderDetailList, ListUtil.empty(), orderAmountDetails), false, false); + List orderDeliveryList = this.orderDeliveryService.listOrderDeliveryByOrderIds(orderIdList, orderDateList); + OrderMessageSend.orderV3Placed(payResultPO.getOutTradeNo(), orderInfoList, orderDetailList, orderDeliveryList, amountChangeList, orderAmountDetails); + return ((OrderInfo)orderInfoList.get(0)).getMacOrderId(); + } + } + } + } + // public void asyncRefundResultHandler(RefundResultPO refundResultPO) { // LogUtil.info("订单异步退款|支付结果处理", refundResultPO); // if (this.orderCustomBusiness.result().willHandleAsyncRefundResult(refundResultPO)) { @@ -390,30 +407,30 @@ public class OrderResultBusinessImpl implements OrderResultBusiness { } } -// public boolean orderRepeatPayCheck(PayResultPO payResultPO, List orderInfoList) { -// if (!PayStateEnum.isPaidState(payResultPO.getTradeState())) { -// log.warn("本次交易不成功,跳过重复交易检查 tradeId={}", payResultPO.getTradeId()); -// return false; -// } else { -// List orderIds = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()); -// List repeatPaidTrades = (List)this.tradeRecordApi.listSuccessByOrderIds(orderIds).stream().filter((s) -> { -// return !s.getTradeId().equals(payResultPO.getTradeId()); -// }).collect(Collectors.toList()); -// if (CollUtil.isNotEmpty(repeatPaidTrades)) { -// log.warn("订单产生多笔支付成功的交易 {}", repeatPaidTrades); -// OrderSavePO orderSavePO = this.orderRepairService.packageNewPaidOrderInfo(orderInfoList); -// this.tradeRecordApi.updateOrderRechargeId(payResultPO.getTradeId(), orderSavePO.getMacOrderId(), (List)orderSavePO.getOrderInfoList().stream().map(OrderInfo::getOrderId).collect(Collectors.toList())); -// this.orderPlaceBusiness.save(orderSavePO, false, false); -// CollUtil.clear(new Collection[]{orderInfoList}); -// orderInfoList.addAll(orderSavePO.getOrderInfoList()); -// return true; -// } else { -// log.warn("订单未产生多笔支付成功的交易,跳过 orderId={}", orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList())); -// return false; -// } -// } -// } -// + public boolean orderRepeatPayCheck(PayResultPO payResultPO, List orderInfoList) { + if (!PayStateEnum.isPaidState(payResultPO.getTradeState())) { + log.warn("本次交易不成功,跳过重复交易检查 tradeId={}", payResultPO.getTradeId()); + return false; + } else { + List orderIds = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()); + List repeatPaidTrades = (List)this.tradeRecordApi.listSuccessByOrderIds(orderIds).stream().filter((s) -> { + return !s.getTradeId().equals(payResultPO.getTradeId()); + }).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(repeatPaidTrades)) { + log.warn("订单产生多笔支付成功的交易 {}", repeatPaidTrades); + OrderSavePO orderSavePO = this.orderRepairService.packageNewPaidOrderInfo(orderInfoList); + this.tradeRecordApi.updateOrderRechargeId(payResultPO.getTradeId(), orderSavePO.getMacOrderId(), (List)orderSavePO.getOrderInfoList().stream().map(OrderInfo::getOrderId).collect(Collectors.toList())); + this.orderPlaceBusiness.save(orderSavePO, false, false); + CollUtil.clear(new Collection[]{orderInfoList}); + orderInfoList.addAll(orderSavePO.getOrderInfoList()); + return true; + } else { + log.warn("订单未产生多笔支付成功的交易,跳过 orderId={}", orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList())); + return false; + } + } + } + // public OrderRefund orderRepeatRefundCheck(RefundResultPO refundResultPO, OrderRefund orderRefund) { // List paidTradeRecords = (List)this.tradeRecordApi.listTradeRecordByOrderRechargeId(orderRefund.getOrderRefundId()).stream().filter((s) -> { // return PayStateEnum.isPaidState(s.getTradeState()); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/dto/OrderDidPayInfoDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/dto/OrderDidPayInfoDTO.java new file mode 100644 index 00000000..1dc8919c --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/dto/OrderDidPayInfoDTO.java @@ -0,0 +1,69 @@ +package com.bonus.core.order.common.dto; + + +import com.bonus.core.pay.api.vo.UnifyPayVO; +import com.bonus.core.pay.common.model.TradeRecord; + +import java.time.LocalDateTime; + +public class OrderDidPayInfoDTO { + private Integer payState; + private Integer payType; + private Integer payChannel; + private LocalDateTime payTime; + + public static OrderDidPayInfoDTO of(Integer payState, Integer payType, Integer payChannel) { + return new OrderDidPayInfoDTO(payState, payType, payChannel, LocalDateTime.now()); + } + + public static OrderDidPayInfoDTO of(UnifyPayVO payVO) { + return new OrderDidPayInfoDTO(payVO.getCode(), payVO.getPayType(), payVO.getPayChannel(), payVO.getPayTime()); + } + + public static OrderDidPayInfoDTO of(TradeRecord tradeRecord) { + return new OrderDidPayInfoDTO(tradeRecord.getTradeState(), tradeRecord.getPayType(), tradeRecord.getPayChannel(), tradeRecord.getTradeTime()); + } + + public Integer getPayState() { + return this.payState; + } + + public Integer getPayType() { + return this.payType; + } + + public Integer getPayChannel() { + return this.payChannel; + } + + public LocalDateTime getPayTime() { + return this.payTime; + } + + public void setPayState(final Integer payState) { + this.payState = payState; + } + + public void setPayType(final Integer payType) { + this.payType = payType; + } + + public void setPayChannel(final Integer payChannel) { + this.payChannel = payChannel; + } + + public void setPayTime(final LocalDateTime payTime) { + this.payTime = payTime; + } + + + public OrderDidPayInfoDTO() { + } + + public OrderDidPayInfoDTO(final Integer payState, final Integer payType, final Integer payChannel, final LocalDateTime payTime) { + this.payState = payState; + this.payType = payType; + this.payChannel = payChannel; + this.payTime = payTime; + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderInfo.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderInfo.java index 7bc278ac..cde238c1 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderInfo.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderInfo.java @@ -1,6 +1,7 @@ package com.bonus.core.order.common.model; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.annotation.TableName; import com.bonus.constant.LeConstants; @@ -10,6 +11,7 @@ import com.bonus.core.order.common.constants.DeductionTypeEnum; import com.bonus.core.order.common.constants.DishesStateEnum; import com.bonus.core.order.common.constants.OrderRefundStateEnum; import com.bonus.core.order.common.constants.OrderStateEnum; +import com.bonus.core.order.utils.LeNumUtil; import com.bonus.core.pay.api.dto.UnifyPayDTO; import com.bonus.core.pay.common.constants.PayChannelEnum; import com.bonus.core.pay.common.constants.PayStateEnum; @@ -234,10 +236,10 @@ public class OrderInfo { } } -// -// public boolean hasCustInfo(Long custId) { -// return LeNumUtil.idOrDefault(this.custId).equals(LeNumUtil.idOrDefault(custId)) && CharSequenceUtil.isNotBlank(this.orgFullName); -// } + + public boolean hasCustInfo(Long custId) { + return LeNumUtil.idOrDefault(this.custId).equals(LeNumUtil.idOrDefault(custId)) && CharSequenceUtil.isNotBlank(this.orgFullName); + } public static String[] logFields() { return new String[]{"orderId", "macOrderId", "machineSn", "custId", "sourceType", "canteenId", "stallId", "orderType", "orderDate", "orderTime", "orderState", "orderRefundState", "payType", "payChannel", "payState", "deliveryType", "dishesState", "commentState", "inventoryOutId", "ifQuickFail", "payableAmount", "discountsAmount", "couponAmount", "deliveryAmount", "packingAmount", "realAmount", "accPayAmount", "outPayAmount", "refundAmount", "payParam", "remark"}; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDeliveryService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDeliveryService.java index 1b5eee0e..020bef14 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDeliveryService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDeliveryService.java @@ -13,4 +13,6 @@ public interface OrderDeliveryService { void deleteByOrderIds(List orderIds, Collection orderDates); void insertList(Collection entityList); + + List listOrderDeliveryByOrderIds(List orderIds, Collection orderDates); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDetailService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDetailService.java index 97abb839..ebbbe77b 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDetailService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderDetailService.java @@ -21,7 +21,7 @@ public interface OrderDetailService { List getOrderDetailList(Long orderId, LocalDate orderDate); // -// List getOrderDetailList(List orderIdList, Collection orderDates); + List getOrderDetailList(List orderIdList, Collection orderDates); List getOrderDetailList(List orderIdList, Collection orderDates, List detailStateList); // diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderInfoService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderInfoService.java index d737ab5a..2308bf8f 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderInfoService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderInfoService.java @@ -7,6 +7,7 @@ import com.bonus.core.order.mobile.vo.OrderInfoMobileVO; import com.bonus.core.order.mobile.vo.OrderListMobileVO; import com.bonus.core.order.web.dto.OrderUserPermissionDTO; +import javax.validation.constraints.NotNull; import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -38,7 +39,7 @@ public interface OrderInfoService { // // long existReserveOrderUnPrint(Long canteenId, Long stallId, Integer mealtimeType); // -// String getMaxMealCodeOfDate(@NotNull LocalDate orderDate, Integer mealtimeType, Long canteenId, Long stallId); + String getMaxMealCodeOfDate(@NotNull LocalDate orderDate, Integer mealtimeType, Long canteenId, Long stallId); // // OrderInfo getById(Long id, LocalDate... orderDates); @@ -68,7 +69,7 @@ public interface OrderInfoService { // List getPlacedOrderInfoList(Long custId, LocalDate nowDate); // -// void initOrderCustInfo(List orderInfoList, Long custId); + void initOrderCustInfo(List orderInfoList, Long custId); // // void fillOrderCustName(List orderInfoList, boolean skipIfNameExists); // diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderDeliveryServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderDeliveryServiceImpl.java index e81a618e..ec9c2804 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderDeliveryServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderDeliveryServiceImpl.java @@ -61,4 +61,19 @@ public class OrderDeliveryServiceImpl extends ServiceImpl listOrderDeliveryByOrderIds(List orderIds, Collection orderDates) { + if (CollUtil.isEmpty(orderIds)) { + return CollUtil.newArrayList(new OrderDelivery[0]); + } else { + List dateRange = LeOrderUtil.queryDateRange((Collection)orderIds, (Collection)orderDates); + //return ((OrderDeliveryMapper)this.baseMapper).selectList((Wrapper)((LambdaQueryWrapper)Wrappers.lambdaQuery(OrderDelivery.class) + // .in(OrderDelivery::getOrderId, orderIds)) + // .between(OrderDelivery::getOrderDate, dateRange.get(0), dateRange.get(1))); + List result = ((OrderDeliveryMapper)this.baseMapper).selectList(Wrappers.lambdaQuery(OrderDelivery.class) + .in(OrderDelivery::getOrderId, orderIds) + .between(OrderDelivery::getOrderDate, dateRange.get(0), dateRange.get(1))); + return result; + } + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderInfoServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderInfoServiceImpl.java index 3a3a9446..ee59910d 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderInfoServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderInfoServiceImpl.java @@ -9,12 +9,18 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bonus.common.core.exception.ServiceException; import com.bonus.constant.LeConstants; import com.bonus.core.common.constant.LeRetCodeEnum; +import com.bonus.core.common.enums.AllocMealtimeTypeEnum; +import com.bonus.core.customer.vo.CustPayVO; +import com.bonus.core.order.client.OrderModuleClient; +import com.bonus.core.order.client.po.CustPayInfoQueryParam; import com.bonus.core.order.common.constants.OrderStateEnum; import com.bonus.core.order.common.constants.OrderTips; +import com.bonus.core.order.common.constants.OrderTypeEnum; import com.bonus.core.order.common.dto.OrderSearchParam; import com.bonus.core.order.common.mapper.OrderInfoMapper; import com.bonus.core.order.common.model.OrderInfo; @@ -31,6 +37,7 @@ import com.bonus.core.pay.common.model.TradeOrderRecharge; import com.bonus.i18n.I18n; 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 org.springframework.transaction.annotation.Transactional; @@ -62,9 +69,9 @@ public class OrderInfoServiceImpl extends ServiceImpl orderInfoList, Long custId) { -// if (!CollUtil.isEmpty(orderInfoList)) { -// if (orderInfoList.stream().anyMatch((s) -> { -// return !s.hasCustInfo(custId); -// })) { -// CustPayVO custInfo = this.orderModuleClient.custPayInfoQuery(CustPayInfoQueryParam.ofCustId(LeNumUtil.idOrDefault(custId))); -// orderInfoList.forEach((s) -> { -// s.fillCustInfo(custInfo); -// }); -// } -// -// } -// } -// + + public void initOrderCustInfo(List orderInfoList, Long custId) { + if (!CollUtil.isEmpty(orderInfoList)) { + if (orderInfoList.stream().anyMatch((s) -> { + return !s.hasCustInfo(custId); + })) { + CustPayVO custInfo = this.orderModuleClient.custPayInfoQuery(CustPayInfoQueryParam.ofCustId(LeNumUtil.idOrDefault(custId))); + orderInfoList.forEach((s) -> { + s.fillCustInfo(custInfo); + }); + } + } + } + // public void fillOrderCustName(List orderInfoList, boolean skipIfNameExists) { // if (!CollUtil.isEmpty(orderInfoList)) { // List custIds = (List)orderInfoList.stream().filter((orderInfox) -> { @@ -228,7 +234,7 @@ public class OrderInfoServiceImpl extends ServiceImpl orderInfoList = this.listOrderInfoByMacOrderId(macOrderId); // return (OrderInfo)orderInfoList.stream().max(Comparator.comparing(OrderInfo::getOrderId)).orElseThrow(() -> { @@ -392,11 +398,26 @@ public class OrderInfoServiceImpl extends ServiceImpl getOrderSelectWrappers() { return Wrappers.lambdaQuery(OrderInfo.class).select(OrderInfo::getOrderId, OrderInfo::getCustId, OrderInfo::getSourceType, OrderInfo::getCanteenId, OrderInfo::getStallId, OrderInfo::getMealtimeType, OrderInfo::getCanteenName, OrderInfo::getStallName, OrderInfo::getMealtimeName, OrderInfo::getOrderDate, OrderInfo::getCouponId, OrderInfo::getPayableAmount, OrderInfo::getRealAmount, OrderInfo::getAccPayAmount, OrderInfo::getOutPayAmount, OrderInfo::getOrderTime, OrderInfo::getOrderType, OrderInfo::getOrderState, OrderInfo::getPayTime, OrderInfo::getPayType, OrderInfo::getPayState, OrderInfo::getDeliveryType, OrderInfo::getDishesState, OrderInfo::getOrderRefundState); 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 75b7e224..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; @@ -30,19 +30,19 @@ public class OrderCustomBusiness { // @Autowired // @Lazy // protected OrderCustomOpenBusiness orderCustomOpenBusiness; -// @Autowired -// @Lazy -// protected OrderCustomResultBusiness orderCustomResultBusiness; -// @Autowired -// @Lazy -// protected OrderCustomRepairBusiness orderCustomRepairBusiness; + @Autowired + @Lazy + protected OrderCustomResultBusiness orderCustomResultBusiness; + @Autowired + @Lazy + protected OrderCustomRepairBusiness orderCustomRepairBusiness; // @Autowired // @Lazy // protected OrderCustomPrintBusiness orderCustomPrintBusiness; -// public OrderCustomAndroidBusiness android() { -// return this.orderCustomAndroidBusiness; -// } + public OrderCustomAndroidBusiness android() { + return this.orderCustomAndroidBusiness; + } public OrderCustomMobileBusiness mobile() { return this.orderCustomMobileBusiness; @@ -72,13 +72,13 @@ public class OrderCustomBusiness { // return this.orderCustomOpenBusiness; // } // -// public OrderCustomResultBusiness result() { -// return this.orderCustomResultBusiness; -// } + public OrderCustomResultBusiness result() { + return this.orderCustomResultBusiness; + } // -// public OrderCustomRepairBusiness repair() { -// return this.orderCustomRepairBusiness; -// } + public OrderCustomRepairBusiness repair() { + return this.orderCustomRepairBusiness; + } // // public OrderCustomPrintBusiness print() { // return this.orderCustomPrintBusiness; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomMobileBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomMobileBusiness.java index ea13e876..7b49c6d3 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomMobileBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomMobileBusiness.java @@ -14,6 +14,7 @@ import com.bonus.core.order.mobile.dto.*; import com.bonus.core.order.mobile.vo.*; import com.bonus.core.order.mq.po.OrderSavePO; import com.bonus.core.pay.api.dto.UnifyPayDTO; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; import org.springframework.stereotype.Service; import java.util.Collection; @@ -67,11 +68,11 @@ public class OrderCustomMobileBusiness implements CustomBusiness { public OrderInfoMobileVO didQueryOrderInfo(OrderInfoMobileVO orderInfoMobileVO) { return orderInfoMobileVO; } -// -// public UnifyPaySelectVO willReSyncOrderPayResult(Long orderId) { -// return null; -// } -// + + public UnifyPaySelectVO willReSyncOrderPayResult(Long orderId) { + return null; + } + public List didListShoppingCartByCust(OrderShoppingSearchDTO searchDTO, List resultList) { return resultList; } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomPlaceBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomPlaceBusiness.java index ffeeeb00..c35ff04a 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomPlaceBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomPlaceBusiness.java @@ -8,6 +8,7 @@ import com.bonus.core.marketing.coupon.model.MktCouponPayModel; import com.bonus.core.marketing.v2.rule.price.dto.RulePriceDTO; import com.bonus.core.menu.dto.MenuRecipeChangeSurplusNum; import com.bonus.core.order.common.constants.ChangeDetailTypeEnum; +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; @@ -126,10 +127,10 @@ public class OrderCustomPlaceBusiness implements CustomBusiness { public boolean willDishesInventoryRepair(OrderInfo orderInfo, List orderDetailList, List changeSurplusNumList) { return true; } -// -// public boolean willCalcOrderRealAmount(List orderInfoList, List orderDetailList, BigDecimal payAmount, List channelDetailList, List orderAmountDetailList) { -// return true; -// } + + public boolean willCalcOrderRealAmount(List orderInfoList, List orderDetailList, BigDecimal payAmount, List channelDetailList, List orderAmountDetailList) { + return true; + } public UnifyPayVO willOrderPayV2(UnifyPayDTO unifyPayDTO, List orderInfoList, List orderDetailList) { return null; @@ -138,8 +139,8 @@ public class OrderCustomPlaceBusiness implements CustomBusiness { public void didCalcOrderRealAmount(List orderInfoList, List orderDetailList, BigDecimal payAmount, List channelDetailList, List orderAmountDetailList) { } -// public void didUpdateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO) { -// } + public void didUpdateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO) { + } public boolean willHandleOrderDidFailed(List orderInfoList, List orderDetailList, Integer payState, boolean orderExists) { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomRepairBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomRepairBusiness.java new file mode 100644 index 00000000..64c4f731 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomRepairBusiness.java @@ -0,0 +1,29 @@ +package com.bonus.core.order.custom; + +import cn.hutool.core.collection.CollUtil; +import com.bonus.core.common.custom.business.CustomBusiness; +import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.order.mq.po.OrderSavePO; +import com.bonus.core.pay.common.model.TradeRecord; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class OrderCustomRepairBusiness implements CustomBusiness { + public String name() { + return "订单(数据修复)"; + } + + public List versions() { + return CollUtil.newArrayList(new CustomBusiness.Version[0]); + } + + public OrderSavePO didPackageNewPaidOrderInfo(List originalOrderInfoList, OrderSavePO newOrderSavePO) { + return newOrderSavePO; + } + +// public OrderSavePO didPackageNotExistsOrderInfo(TradeRecord tradeRecord, OrderListRepairInfoVO repairVO, OrderSavePO newOrderSavePO) { +// return newOrderSavePO; +// } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomResultBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomResultBusiness.java new file mode 100644 index 00000000..c603ec77 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/custom/OrderCustomResultBusiness.java @@ -0,0 +1,25 @@ +package com.bonus.core.order.custom; + +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; +import com.bonus.core.pay.common.po.PayResultPO; +import com.bonus.core.pay.common.po.RefundResultPO; +import org.springframework.stereotype.Service; + +@Service +public class OrderCustomResultBusiness { + public UnifyPaySelectVO willReSyncOrderPayResult(Long orderId) { + return null; + } + +// public UnifyRefundSelectVO willReSyncOrderRefundResult(Long orderRefundId) { +// return null; +// } + + public boolean willHandleAsyncPayResult(PayResultPO payResultPO) { + return true; + } + + public boolean willHandleAsyncRefundResult(RefundResultPO refundResultPO) { + return true; + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/controller/OrderInfoMobileController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/controller/OrderInfoMobileController.java index 98fc8910..e1205da7 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/controller/OrderInfoMobileController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/controller/OrderInfoMobileController.java @@ -14,6 +14,7 @@ import com.bonus.core.order.mobile.vo.OrderInfoMobileVO; import com.bonus.core.order.mobile.vo.OrderListMobileVO; import com.bonus.core.order.mobile.vo.OrderShoppingCartAddResultVO; import com.bonus.core.order.mobile.vo.OrderShoppingCartListMobileVO; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -73,13 +74,13 @@ public class OrderInfoMobileController extends BaseController { OrderInfoMobileVO orderInfo = this.orderInfoMobileBusiness.orderInfo(request.getOrderId()); return R.ok(orderInfo); } -// -// @PostMapping({"/sync-pay-state"}) -// public LeResponse orderSyncPayState(@RequestBody LeRequest request) { -// JavaxValidateUtils.validate((OrderSyncPayStateMobileDTO)request.getContent()); -// return LeResponse.succ(this.orderInfoMobileBusiness.orderSyncPayState((OrderSyncPayStateMobileDTO)request.getContent())); -// } -// + + @PostMapping({"/sync-pay-state"}) + public AjaxResult orderSyncPayState(@RequestBody OrderSyncPayStateMobileDTO dto) { + JavaxValidateUtils.validate(dto); + return AjaxResult.success(this.orderInfoMobileBusiness.orderSyncPayState(dto)); + } + // @PostMapping({"/weight-info"}) // @ApiOperation("获取自助餐订单详情") // public LeResponse weightOrderInfo(@RequestBody LeRequest request) { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/dto/OrderSyncPayStateMobileDTO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/dto/OrderSyncPayStateMobileDTO.java new file mode 100644 index 00000000..7835e2e5 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/dto/OrderSyncPayStateMobileDTO.java @@ -0,0 +1,28 @@ +package com.bonus.core.order.mobile.dto; + +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.NotNull; + +public class OrderSyncPayStateMobileDTO { + @ApiModelProperty("订单号") + private @NotNull Long orderId; + @ApiModelProperty("是否手动同步") + private Integer ifManualSync; + + public Long getOrderId() { + return this.orderId; + } + + public Integer getIfManualSync() { + return this.ifManualSync; + } + + public void setOrderId(final Long orderId) { + this.orderId = orderId; + } + + public void setIfManualSync(final Integer ifManualSync) { + this.ifManualSync = ifManualSync; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/OrderInfoMobileBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/OrderInfoMobileBusiness.java index 983a81e7..6e1d869c 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/OrderInfoMobileBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/OrderInfoMobileBusiness.java @@ -3,15 +3,17 @@ package com.bonus.core.order.mobile.service; import com.bonus.core.common.page.PageVO; import com.bonus.core.order.common.dto.RequestHeaderDTO; import com.bonus.core.order.mobile.dto.OrderListMobileDTO; +import com.bonus.core.order.mobile.dto.OrderSyncPayStateMobileDTO; import com.bonus.core.order.mobile.vo.OrderInfoMobileVO; import com.bonus.core.order.mobile.vo.OrderListMobileVO; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; import java.util.List; public interface OrderInfoMobileBusiness { // void orderPayCancel(Long orderId); // -// UnifyPaySelectVO orderSyncPayState(OrderSyncPayStateMobileDTO dto); + UnifyPaySelectVO orderSyncPayState(OrderSyncPayStateMobileDTO dto); PageVO orderList(OrderListMobileDTO orderListDTO, RequestHeaderDTO headerDTO); // diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/impl/OrderInfoMobileBusinessImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/impl/OrderInfoMobileBusinessImpl.java index 4f346b85..76ded268 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/impl/OrderInfoMobileBusinessImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mobile/service/impl/OrderInfoMobileBusinessImpl.java @@ -5,12 +5,14 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ObjectUtil; +import com.bonus.constant.LeConstants; import com.bonus.core.common.page.PageVO; import com.bonus.core.device.api.DeviceApi; import com.bonus.core.device.manage.dto.DeviceSearchDTO; import com.bonus.core.device.manage.model.DeviceInfo; import com.bonus.core.menu.api.MenuDishesApi; import com.bonus.core.menu.utils.NutritionEntity; +import com.bonus.core.order.common.business.OrderResultBusiness; import com.bonus.core.order.common.constants.CheckStateEnum; import com.bonus.core.order.common.constants.DetailTypeEnum; import com.bonus.core.order.common.constants.OrderTypeEnum; @@ -22,6 +24,7 @@ import com.bonus.core.order.common.service.*; import com.bonus.core.order.common.vo.OrderIdDateVO; import com.bonus.core.order.custom.OrderCustomBusiness; import com.bonus.core.order.mobile.dto.OrderListMobileDTO; +import com.bonus.core.order.mobile.dto.OrderSyncPayStateMobileDTO; import com.bonus.core.order.mobile.service.OrderInfoMobileBusiness; import com.bonus.core.order.mobile.vo.OrderDetailMobileVO; import com.bonus.core.order.mobile.vo.OrderInfoMobileVO; @@ -32,6 +35,9 @@ import com.bonus.core.order.web.dto.OrderUserPermissionDTO; import com.bonus.core.order.weight.service.MacPlateidBindSerialService; import com.bonus.core.order.weight.model.MacPlateidBindSerial; import com.bonus.core.order.weight.vo.RefundDetailStateVO; +import com.bonus.core.pay.api.TradeRecordApi; +import com.bonus.core.pay.api.vo.UnifyPaySelectVO; +import com.bonus.core.pay.common.model.TradeRecord; import com.bonus.utils.AesEncryptUtil; import com.bonus.core.menu.model.MenuDishesTypeModel; import com.github.pagehelper.page.PageMethod; @@ -67,6 +73,9 @@ public class OrderInfoMobileBusinessImpl implements OrderInfoMobileBusiness { protected OrderCustomBusiness orderCustomBusiness; @Lazy @Autowired + protected OrderResultBusiness orderResultBusiness; + @Lazy + @Autowired protected DeviceApi deviceApi; @Lazy @Autowired @@ -80,6 +89,9 @@ public class OrderInfoMobileBusinessImpl implements OrderInfoMobileBusiness { @Lazy @Autowired protected OrderRefundDetailService orderRefundDetailService; + @Lazy + @Autowired + protected TradeRecordApi tradeRecordApi; @Override public PageVO orderList(OrderListMobileDTO orderListDTO, RequestHeaderDTO headerDTO) { @@ -251,4 +263,16 @@ public class OrderInfoMobileBusinessImpl implements OrderInfoMobileBusiness { } + public UnifyPaySelectVO orderSyncPayState(OrderSyncPayStateMobileDTO dto) { + UnifyPaySelectVO unifyPaySelectVO = this.orderCustomBusiness.mobile().willReSyncOrderPayResult(dto.getOrderId()); + if (ObjectUtil.isNotNull(unifyPaySelectVO)) { + return unifyPaySelectVO; + } else if (LeConstants.COMMON_YES.equals(dto.getIfManualSync())) { + return this.orderResultBusiness.reSyncOrderPayResult(dto.getOrderId()); + } else { + TradeRecord tradeRecord = this.tradeRecordApi.getLastTradeRecordByOrderId(dto.getOrderId()); + return UnifyPaySelectVO.of(tradeRecord); + } + } + } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/OrderMessageSend.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/OrderMessageSend.java index 47e85db4..90ad593e 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/OrderMessageSend.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/OrderMessageSend.java @@ -6,7 +6,9 @@ import com.bonus.core.common.utils.JacksonUtil; import com.bonus.core.common.utils.LogUtil; import com.bonus.core.common.utils.TenantContextHolder; import com.bonus.core.order.android.dto.MacOrderImageSaveDTO; +import com.bonus.core.order.common.model.*; import com.bonus.core.order.mq.po.OrderCancelPO; +import com.bonus.core.order.mq.po.OrderPlacedPO; import com.bonus.core.pay.common.po.PayResultPO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -166,27 +168,27 @@ public class OrderMessageSend { // // } // } -// -// public static void orderV3Placed(String outTradeNo, List orderInfoList, List detailList, List orderDeliveryList, List amountChangeList, List amountDetailList) { -// log.info("[订单MQv3]发送订单已下单通知"); -// OrderPlacedPO orderSavePO = new OrderPlacedPO(); -// orderSavePO.setTraceId(LogUtil.getCurrentTraceId()); -// orderSavePO.setTenantId(TenantContextHolder.getTenantId()); -// orderSavePO.setOutTradeNo(outTradeNo); -// orderSavePO.setOrderInfoList(orderInfoList); -// orderSavePO.setDetailList(detailList); -// orderSavePO.setOrderDeliveryList(orderDeliveryList); -// orderSavePO.setAmountChangeList(amountChangeList); -// orderSavePO.setAmountDetailList(amountDetailList); -// -// try { -// MqUtil.sendByTxEnd(JacksonUtil.writeValueAsString(orderSavePO), LeMqConstant.Topic.ORDER_V3_PLACED); -// } catch (Exception var8) { -// log.error("发送MQ消息失败", var8); -// } -// -// } -// + + public static void orderV3Placed(String outTradeNo, List orderInfoList, List detailList, List orderDeliveryList, List amountChangeList, List amountDetailList) { + log.info("[订单MQv3]发送订单已下单通知"); + OrderPlacedPO orderSavePO = new OrderPlacedPO(); + orderSavePO.setTraceId(LogUtil.getCurrentTraceId()); + orderSavePO.setTenantId(TenantContextHolder.getTenantId()); + orderSavePO.setOutTradeNo(outTradeNo); + orderSavePO.setOrderInfoList(orderInfoList); + orderSavePO.setDetailList(detailList); + orderSavePO.setOrderDeliveryList(orderDeliveryList); + orderSavePO.setAmountChangeList(amountChangeList); + orderSavePO.setAmountDetailList(amountDetailList); + + try { + MqUtil.sendByTxEnd(JacksonUtil.writeValueAsString(orderSavePO), LeMqConstant.Topic.ORDER_V3_PLACED); + } catch (Exception var8) { + log.error("发送MQ消息失败", var8); + } + + } + // public static void orderV3Canceled(OrderInfo orderInfo, List detailList) { // log.info("[订单MQv3]发送订单已取消通知"); // OrderCanceledPO po = new OrderCanceledPO(); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/po/OrderPlacedPO.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/po/OrderPlacedPO.java new file mode 100644 index 00000000..fde11dff --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/po/OrderPlacedPO.java @@ -0,0 +1,82 @@ +package com.bonus.core.order.mq.po; + +import cn.hutool.core.collection.CollUtil; +import com.bonus.core.order.common.model.*; + +import java.util.List; + +public class OrderPlacedPO { + private String traceId; + private Long tenantId; + private String outTradeNo; + private List orderInfoList = CollUtil.newArrayList(new OrderInfo[0]); + private List detailList = CollUtil.newArrayList(new OrderDetail[0]); + private List orderDeliveryList = CollUtil.newArrayList(new OrderDelivery[0]); + private List amountChangeList = CollUtil.newArrayList(new OrderAmountChange[0]); + private List amountDetailList = CollUtil.newArrayList(new OrderAmountDetail[0]); + + public String getTraceId() { + return this.traceId; + } + + public Long getTenantId() { + return this.tenantId; + } + + public String getOutTradeNo() { + return this.outTradeNo; + } + + public List getOrderInfoList() { + return this.orderInfoList; + } + + public List getDetailList() { + return this.detailList; + } + + public List getOrderDeliveryList() { + return this.orderDeliveryList; + } + + public List getAmountChangeList() { + return this.amountChangeList; + } + + public List getAmountDetailList() { + return this.amountDetailList; + } + + public void setTraceId(final String traceId) { + this.traceId = traceId; + } + + public void setTenantId(final Long tenantId) { + this.tenantId = tenantId; + } + + public void setOutTradeNo(final String outTradeNo) { + this.outTradeNo = outTradeNo; + } + + public void setOrderInfoList(final List orderInfoList) { + this.orderInfoList = orderInfoList; + } + + public void setDetailList(final List detailList) { + this.detailList = detailList; + } + + public void setOrderDeliveryList(final List orderDeliveryList) { + this.orderDeliveryList = orderDeliveryList; + } + + public void setAmountChangeList(final List amountChangeList) { + this.amountChangeList = amountChangeList; + } + + public void setAmountDetailList(final List amountDetailList) { + this.amountDetailList = amountDetailList; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/repair/service/OrderRepairService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/repair/service/OrderRepairService.java new file mode 100644 index 00000000..7486740d --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/repair/service/OrderRepairService.java @@ -0,0 +1,54 @@ +package com.bonus.core.order.repair.service; + +import com.bonus.core.order.common.constants.*; +import com.bonus.core.order.common.model.*; +import com.bonus.core.order.custom.OrderCustomBusiness; +import com.bonus.core.order.mq.po.OrderSavePO; +import com.bonus.core.pay.common.constants.PayStateEnum; +import com.bonus.utils.id.Id; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class OrderRepairService { + @Autowired + @Lazy + protected OrderCustomBusiness orderCustomBusiness; + + + public OrderSavePO packageNewPaidOrderInfo(List orderInfoList) { + String newMacOrderId = Id.nextString(); + OrderSavePO orderSavePO = OrderSavePO.byLockKey(newMacOrderId); + Iterator var4 = orderInfoList.iterator(); + + while(var4.hasNext()) { + OrderInfo existOrderInfo = (OrderInfo)var4.next(); + OrderInfo newOrderInfo = existOrderInfo.copyInstance(); + newOrderInfo.setOrderId(Id.next()); + newOrderInfo.setMacOrderId(newMacOrderId); + newOrderInfo.resetAmountsZero(); + newOrderInfo.setOrderType(OrderTypeEnum.DEDUCT.getKey()); + newOrderInfo.setOrderState(OrderStateEnum.WAIT_PLACE.getKey()); + newOrderInfo.setPayState(PayStateEnum.UN_PAY.getKey()); + newOrderInfo.setOrderRefundState(OrderRefundStateEnum.UN_APPLY.getKey()); + newOrderInfo.setPayableAmount(existOrderInfo.calcUnRefundAmount()); + orderSavePO.getOrderInfoList().add(newOrderInfo); + OrderDetail newOrderDetail = OrderDetail.newDefaultDetail(existOrderInfo.calcUnRefundAmount(), DetailTypeEnum.DEDUCT.getKey()); + newOrderDetail.setDetailId(Id.next()); + newOrderDetail.setOrderId(newOrderInfo.getOrderId()); + newOrderDetail.setOrderDate(newOrderInfo.getOrderDate()); + orderSavePO.getOrderDetailList().add(newOrderDetail); + } + + return this.orderCustomBusiness.repair().didPackageNewPaidOrderInfo(orderInfoList, orderSavePO); + } + + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeNumUtil.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeNumUtil.java index 2f663a64..793d15cc 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeNumUtil.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeNumUtil.java @@ -1,15 +1,28 @@ package com.bonus.core.order.utils; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; import com.bonus.constant.LeConstants; +import com.bonus.core.common.utils.TenantContextHolder; +import com.bonus.core.order.common.service.OrderInfoService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.BoundValueOperations; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; - import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Function; @@ -18,6 +31,16 @@ import java.util.stream.Collectors; @Component public class LeNumUtil { private static final Logger log = LoggerFactory.getLogger(LeNumUtil.class); + + @Autowired + @Lazy + private OrderInfoService orderInfoService; + @Autowired + @Lazy + private RedisTemplate redisTemplate; + @Value("${system.order.call.max-num:}") + private Long callMaxNum; + private static final long EPOCH = LocalDateTime.of(2021, 12, 29, 9, 2).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); // @Autowired // @Lazy @@ -50,41 +73,41 @@ public class LeNumUtil { // // return differentFlag ? superNum + "-" + latestNum : superNum + latestNum; // } -// -// public String getMealCode(String prefix, Long canteenId, Long stallId, LocalDate orderDate, Integer mealtimeType) { -// if (!isValidId(canteenId) && !isValidId(stallId)) { -// return ""; -// } else if (LocalDate.now().isAfter(orderDate)) { -// return ""; -// } else { -// String callNumPrefix = CharSequenceUtil.isNotBlank(prefix) ? prefix : ""; -// Long merchantId = TenantContextHolder.getTenantId(); -// String dateStr = orderDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); -// String shopIdStr = isValidId(stallId) ? String.valueOf(stallId) : String.valueOf(canteenId); -// String mealtimeStr = isValidId(mealtimeType) ? String.valueOf(mealtimeType) : "-1"; -// String redisKey = CharSequenceUtil.format("yst:{}:meal-code:{}:{}:{}:{}", new Object[]{merchantId, shopIdStr, dateStr, mealtimeStr, callNumPrefix}); -// log.info("叫号缓存key:{}", redisKey); -// BoundValueOperations valueOperations = this.redisTemplate.boundValueOps(redisKey); -// Object s = valueOperations.get(); -// if (ObjectUtil.isNull(s)) { -// String maxMealCodeOfDate = this.orderInfoService.getMaxMealCodeOfDate(orderDate, mealtimeType, canteenId, stallId); -// log.info("当前最大叫号:{}", maxMealCodeOfDate); -// maxMealCodeOfDate = CharSequenceUtil.removePrefix(maxMealCodeOfDate, callNumPrefix); -// int currentNum = NumberUtil.isNumber(maxMealCodeOfDate) ? NumberUtil.parseInt(maxMealCodeOfDate) : 0; -// Duration expireDuration = LocalDateTimeUtil.between(LocalDateTimeUtil.now(), LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.now())); -// valueOperations.setIfAbsent(currentNum, expireDuration); -// } -// -// Long increment = valueOperations.increment(1L); -// if (this.callMaxNum != null && increment != null && increment > this.callMaxNum) { -// increment = increment % this.callMaxNum; -// } -// -// String format = String.format("%03d", increment); -// log.info("叫的多少号{}", callNumPrefix + format); -// return callNumPrefix + format; -// } -// } + + public String getMealCode(String prefix, Long canteenId, Long stallId, LocalDate orderDate, Integer mealtimeType) { + if (!isValidId(canteenId) && !isValidId(stallId)) { + return ""; + } else if (LocalDate.now().isAfter(orderDate)) { + return ""; + } else { + String callNumPrefix = CharSequenceUtil.isNotBlank(prefix) ? prefix : ""; + Long merchantId = TenantContextHolder.getTenantId(); + String dateStr = orderDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String shopIdStr = isValidId(stallId) ? String.valueOf(stallId) : String.valueOf(canteenId); + String mealtimeStr = isValidId(mealtimeType) ? String.valueOf(mealtimeType) : "-1"; + String redisKey = CharSequenceUtil.format("yst:{}:meal-code:{}:{}:{}:{}", new Object[]{merchantId, shopIdStr, dateStr, mealtimeStr, callNumPrefix}); + log.info("叫号缓存key:{}", redisKey); + BoundValueOperations valueOperations = this.redisTemplate.boundValueOps(redisKey); + Object s = valueOperations.get(); + if (ObjectUtil.isNull(s)) { + String maxMealCodeOfDate = this.orderInfoService.getMaxMealCodeOfDate(orderDate, mealtimeType, canteenId, stallId); + log.info("当前最大叫号:{}", maxMealCodeOfDate); + maxMealCodeOfDate = CharSequenceUtil.removePrefix(maxMealCodeOfDate, callNumPrefix); + int currentNum = NumberUtil.isNumber(maxMealCodeOfDate) ? NumberUtil.parseInt(maxMealCodeOfDate) : 0; + Duration expireDuration = LocalDateTimeUtil.between(LocalDateTimeUtil.now(), LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.now())); + valueOperations.setIfAbsent(currentNum, expireDuration); + } + + Long increment = valueOperations.increment(1L); + if (this.callMaxNum != null && increment != null && increment > this.callMaxNum) { + increment = increment % this.callMaxNum; + } + + String format = String.format("%03d", increment); + log.info("叫的多少号{}", callNumPrefix + format); + return callNumPrefix + format; + } + } public static boolean isValidId(Long id) { return id != null && id != -1L && id != 0L; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeOrderUtil.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeOrderUtil.java index ce8517b0..8b679194 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeOrderUtil.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/utils/LeOrderUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.NumberUtil; +import com.bonus.core.order.common.model.OrderInfo; import java.math.BigDecimal; import java.time.*; @@ -94,9 +95,9 @@ public class LeOrderUtil { // }).collect(Collectors.joining("+")); // } // -// public static void calcOrderAmount(List orderInfoList, BigDecimal totalAmount, BiConsumer saveField) { -// LeNumUtil.calcShareAmount(orderInfoList, totalAmount, OrderInfo::calcNeedPayAmount, saveField); -// } + public static void calcOrderAmount(List orderInfoList, BigDecimal totalAmount, BiConsumer saveField) { + LeNumUtil.calcShareAmount(orderInfoList, totalAmount, OrderInfo::calcNeedPayAmount, saveField); + } // // public static boolean checkNowTimeWithin(String startTimeStr, String endTimeStr) { // LocalTime startTime = null; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/api/TradeRecordApi.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/api/TradeRecordApi.java index 6a2eccd6..82f92e36 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/api/TradeRecordApi.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/api/TradeRecordApi.java @@ -46,6 +46,13 @@ public class TradeRecordApi { @Lazy @Resource protected OrderInfoService orderInfoService; + @Lazy + @Autowired + protected TradeChannelService tradeChannelService; + + public TradeRecord getTradeRecordById(Long tradeId) { + return this.tradeRecordService.getTradeRecordById(tradeId); + } public TradeRecordParamVO getParamVOByTradeId(Long tradeId) { TradeRecord tradeRecord = this.tradeRecordService.getTradeRecordById(tradeId); @@ -64,4 +71,28 @@ public class TradeRecordApi { public List listOrderRechargeByTradeId(Long tradeId) { return this.tradeRecordService.queryOrderRechargeTrade(tradeId); } + + public List listSuccessByOrderIds(List orderIds) { + return this.tradeRecordService.listSuccessByOrderIds(orderIds); + } + + public List listChannelDetailByTradeId(Long tradeId) { + return this.tradeChannelService.listChannelDetailByTradeId(tradeId); + } + + @Transactional( + rollbackFor = {Exception.class} + ) + public void updateOrderRechargeId(Long tradeId, String newMacOrderId, List newOrderRechargeIds) { + if (!CollUtil.isEmpty(newOrderRechargeIds)) { + this.tradeRecordService.deleteOrderRechargeTrade(tradeId); + this.tradeRecordService.insertOrderRechargeTrade(newOrderRechargeIds.stream().map((s) -> { + return new TradeOrderRecharge(tradeId, s, newMacOrderId, (LocalDateTime)null, (LocalDateTime)null); + }).collect(Collectors.toList())); + } + } + + public TradeRecord getLastTradeRecordByOrderId(Long orderId) { + return (TradeRecord)this.tradeRecordService.queryTradeRecordInfoList((String)null, orderId, (Integer)null, (Integer)null).stream().sorted(Comparator.comparing(TradeRecord::getId).reversed()).findFirst().orElse((TradeRecord) null); + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeOrderRechargeMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeOrderRechargeMapper.java index ab099286..8bdf44b9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeOrderRechargeMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeOrderRechargeMapper.java @@ -6,10 +6,13 @@ import com.bonus.core.pay.common.model.TradeOrderRecharge; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; @Mapper @InterceptorIgnore public interface TradeOrderRechargeMapper extends BaseMapper { void batchInsert(@Param("tradeOrderRechargeList") List tradeOrderRechargeList); + + List listSuccessByOrderIds(@Param("orderIds") List orderIds, @Param("stratTime") LocalDateTime stratTime, @Param("endTime") LocalDateTime endTime); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeRecordMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeRecordMapper.java index 95bf67cc..686395c9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeRecordMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/mapper/TradeRecordMapper.java @@ -13,5 +13,6 @@ import java.util.List; @InterceptorIgnore public interface TradeRecordMapper extends BaseMapper { + List queryTradeRecordInfo(@Param("macOrderId") String macOrderId, @Param("orderRechargeId") Long orderRechargeId, @Param("tradeState") Integer tradeState, @Param("tradeType") Integer tradeType, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime); List listTradeRecordByOrderRechargeId(@Param("orderRechargeId") Long orderRechargeId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("tradeState") Integer... tradeState); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/TradeRecordService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/TradeRecordService.java index 87f1437e..019eae2c 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/TradeRecordService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/TradeRecordService.java @@ -21,9 +21,15 @@ public interface TradeRecordService { List queryOrderRechargeTrade(Long tradeId); + List listSuccessByOrderIds(List orderIds); + TradeRecord getTradeRecordByOrderRechargeId(Long orderRechargeId, Integer... tradeState); void insertTradeRecord(TradeRecord tradeRecord); void insertOrderRechargeTrade(List tradeOrderRechargeList); + + void deleteOrderRechargeTrade(Long tradeId); + + List queryTradeRecordInfoList(String macOrderId, Long orderRechargeId, Integer tradeState, Integer tradeType); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/impl/TradeRecordServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/impl/TradeRecordServiceImpl.java index 6bfad9fb..07098d23 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/impl/TradeRecordServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/pay/common/service/impl/TradeRecordServiceImpl.java @@ -97,6 +97,15 @@ public class TradeRecordServiceImpl extends ServiceImpl listSuccessByOrderIds(List orderIds) { + if (CollUtil.isEmpty(orderIds)) { + return CollUtil.newArrayList(new TradeOrderRecharge[0]); + } else { + List timeRange = LeOrderUtil.queryCreateTimeRange(); + return this.tradeOrderRechargeMapper.listSuccessByOrderIds(orderIds, (LocalDateTime)timeRange.get(0), (LocalDateTime)timeRange.get(1)); + } + } + @Override public TradeRecord getTradeRecordByOrderRechargeId(Long orderRechargeId, Integer... tradeState) { log.info("[交易记录] getTradeRecordByOrderRechargeId 开始"); @@ -110,4 +119,21 @@ public class TradeRecordServiceImpl extends ServiceImpl queryTradeRecordInfoList(String macOrderId, Long orderRechargeId, Integer tradeState, Integer tradeType) { + if (CharSequenceUtil.isEmpty(macOrderId) && !LeNumUtil.isValidId(orderRechargeId)) { + return CollUtil.newArrayList(new TradeRecord[0]); + } else { + log.info("[交易记录] queryTradeRecordInfoList 开始"); + List timeRange = LeOrderUtil.queryCreateTimeRange(); + List tradeRecordList = ((TradeRecordMapper)this.baseMapper).queryTradeRecordInfo(macOrderId, orderRechargeId, tradeState, tradeType, (LocalDateTime)timeRange.get(0), (LocalDateTime)timeRange.get(1)); + log.info("[交易记录] queryTradeRecordInfoList 结束"); + return tradeRecordList; + } + } + } diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/bootstrap.yml b/bonus-modules/bonus-smart-canteen/src/main/resources/bootstrap.yml index 149c891c..80f501d6 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/bootstrap.yml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/bootstrap.yml @@ -92,6 +92,9 @@ system: sqbqrapi: ${SQB_QR_API:https://qr.shouqianba.com/gateway} #收钱吧网关地址 alismsdomain: ${API_ALI_SMS_DOMAIN:dysmsapi.aliyuncs.com} #阿里云短信请求地址 feieapi: ${API_FEI_E:http://api.feieyun.cn} #飞鹅api + order: + call: + max-num: ${ORDER_CALL_MAX_NUM:999} data-config: sm4-key: ${SENSITIVE_SM4KEY:jY7bZz6Pjml+H/WZYfNSNA==} diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeOrderRechargeMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeOrderRechargeMapper.xml index dbf72ef9..65c67d92 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeOrderRechargeMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeOrderRechargeMapper.xml @@ -12,4 +12,21 @@ + + diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeRecordMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeRecordMapper.xml index a6e10359..5e9ea549 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeRecordMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/pay/TradeRecordMapper.xml @@ -4,6 +4,46 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + +