余额支付订单

This commit is contained in:
2023-11-28 14:34:24 +08:00
parent 6b04517edd
commit 3a18ffec35

View File

@@ -311,7 +311,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
}
/**
* 余额支付订单
* 万车充小程序-余额支付订单逻辑
* 使用的是通过后管充值的余额
* 包括赠送金
*/
@@ -350,7 +350,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
.build();
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
// 本金支付
OrderPayRecord principalPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
@@ -361,6 +361,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
// 赠送金支付
OrderPayRecord giftPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue())
@@ -371,7 +372,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
// 记录支订单付流水
// 记录支订单付流水 记录两条支付
List<OrderPayRecord> payRecordList = Lists.newArrayList(principalPayRecord, giftPayRecord);
orderPayRecordService.batchInsert(payRecordList);
@@ -619,7 +620,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
logger.info("【{}】-余额支付订单退款start orderBasicInfo:{}", this.getClass().getSimpleName(), JSON.toJSONString(orderBasicInfo));
// 订单编号
String orderCode = orderBasicInfo.getOrderCode();
// 运营商id
String merchantId = orderBasicInfo.getMerchantId();
// 订单消费金额
BigDecimal orderAmount = orderBasicInfo.getOrderAmount();
@@ -628,16 +629,21 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
// 根据payMode分组
Map<String, List<OrderPayRecord>> payRecordMap = payRecordList.stream().collect(Collectors.groupingBy(OrderPayRecord::getPayMode));
// 获取本金支付的记录
List<OrderPayRecord> orderPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue());
BigDecimal principalPay = orderPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
List<OrderPayRecord> principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue());
BigDecimal principalPay = principalPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
// 获取赠送金支付的记录
List<OrderPayRecord> giftPayRecordList = payRecordMap.get(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue());
BigDecimal giftPay = giftPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
// 计算需要退回的金额
Map<String, BigDecimal> returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount);
Map<String, BigDecimal> returnAmountMap = calculateReturnAmount(principalPay, giftPay, orderAmount);
logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}",
orderCode, orderAmount, principalPay, null, JSONObject.toJSONString(returnAmountMap));
// 需要退回本金的金额
BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal");
// 需要退回赠送金的金额
BigDecimal returnGift = returnAmountMap.get("returnGift");
// 更新会员钱包/余额退回到钱包
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
@@ -646,6 +652,7 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
.type(MemberWalletEnum.TYPE_IN.getValue()) // 进账
.subType(MemberWalletEnum.SUBTYPE_ORDER_SETTLEMENT_REFUND.getValue()) // 订单结算退款
.updatePrincipalBalance(returnPrincipal)
.updateGiftBalance(returnGift)
.relatedOrderCode(orderCode)
.build();
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);