From 28a6f85579234c72a99e4020a7f6449f119780b9 Mon Sep 17 00:00:00 2001 From: sxu <602087911@qq.com> Date: Thu, 20 Feb 2025 18:17:27 +0800 Subject: [PATCH] sync_pay_state --- .../common/business/OrderPlaceBusiness.java | 10 +- .../business/impl/OrderPlaceBusinessImpl.java | 162 +++++++++--------- .../custom/OrderCustomPlaceBusiness.java | 8 +- 3 files changed, 89 insertions(+), 91 deletions(-) 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 0d11f0ca..3ed1099a 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,12 @@ 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.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; @@ -64,8 +62,8 @@ public interface OrderPlaceBusiness { // // List removeDetailDishes(List orderDetailList, List removeList); // -// List calcOrderRealAmount(List orderInfoList, List orderDetailList, List orderAmountChangeList, BigDecimal payAmount, List channelDetailList); -// + 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/impl/OrderPlaceBusinessImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/impl/OrderPlaceBusinessImpl.java index e719fdf4..d683c4e5 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,6 +7,7 @@ import cn.hutool.core.util.NumberUtil; import com.bonus.common.core.exception.ServiceException; import com.bonus.constant.LeConstants; import com.bonus.constant.RetCodeEnum; +import com.bonus.core.account.v3.api.vo.AccTradeOrderBalanceVO; import com.bonus.core.allocation.canteen.dto.AllocCanteenDeliveryDTO; import com.bonus.core.allocation.canteen.dto.AllocCanteenDeliveryModel; import com.bonus.core.common.enums.DeliveryTypeEnum; @@ -37,10 +37,7 @@ import com.bonus.core.order.client.po.MetaDataValueParam; import com.bonus.core.order.client.po.OrderConfigQueryParam; import com.bonus.core.order.common.business.OrderPlaceBusiness; import com.bonus.core.order.common.constants.*; -import com.bonus.core.order.common.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.model.*; import com.bonus.core.order.common.service.*; import com.bonus.core.order.common.vo.OrderDeliveryResultVO; import com.bonus.core.order.custom.OrderCustomBusiness; @@ -49,10 +46,13 @@ import com.bonus.core.order.utils.LeNumUtil; 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; @@ -863,72 +863,72 @@ 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 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()); @@ -1002,16 +1002,16 @@ 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) { 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..89bafb44 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 @@ -126,10 +126,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;