sync_pay_state

This commit is contained in:
sxu 2025-02-20 18:17:27 +08:00
parent ed1c1aca5f
commit 28a6f85579
3 changed files with 89 additions and 91 deletions

View File

@ -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<OrderDetail> removeDetailDishes(List<OrderDetail> orderDetailList, List<OrderDetailRefundDTO> removeList);
//
// List<OrderAmountDetail> calcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, List<OrderAmountChange> orderAmountChangeList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList);
//
List<OrderAmountDetail> calcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, List<OrderAmountChange> orderAmountChangeList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList);
// void updateOrderFieldAfterPay(OrderInfo orderInfo, OrderDidPayInfoDTO didPayInfoDTO);
//
// boolean ifUseCall(OrderInfo orderInfo);

View File

@ -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<OrderAmountDetail> calcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, List<OrderAmountChange> orderAmountChangeList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList) {
// List<OrderAmountDetail> 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<OrderDetail> 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<OrderAmountDetail> calcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, List<OrderAmountChange> orderAmountChangeList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList) {
List<OrderAmountDetail> 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<OrderDetail> 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<TradeChannelVO> channelDetailList) {
// List<Long> lacksAccPayDetailChannelIds = (List)channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).map(TradeChannelVO::getTradeChannelId).collect(Collectors.toList());
// if (CollUtil.isNotEmpty(lacksAccPayDetailChannelIds)) {
// Map<Long, AccTradeOrderBalanceVO> 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<TradeChannelVO> channelDetailList) {
List<Long> lacksAccPayDetailChannelIds = (List)channelDetailList.stream().filter(TradeChannelVO::ifLacksAccPayDetail).map(TradeChannelVO::getTradeChannelId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(lacksAccPayDetailChannelIds)) {
Map<Long, AccTradeOrderBalanceVO> 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) {

View File

@ -126,10 +126,10 @@ public class OrderCustomPlaceBusiness implements CustomBusiness {
public boolean willDishesInventoryRepair(OrderInfo orderInfo, List<OrderDetail> orderDetailList, List<MenuRecipeChangeSurplusNum> changeSurplusNumList) {
return true;
}
//
// public boolean willCalcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList, List<OrderAmountDetail> orderAmountDetailList) {
// return true;
// }
public boolean willCalcOrderRealAmount(List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList, BigDecimal payAmount, List<TradeChannelVO> channelDetailList, List<OrderAmountDetail> orderAmountDetailList) {
return true;
}
public UnifyPayVO willOrderPayV2(UnifyPayDTO unifyPayDTO, List<OrderInfo> orderInfoList, List<OrderDetail> orderDetailList) {
return null;