mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-07-02 21:18:05 +08:00
希晓使用后管充值余额支付
This commit is contained in:
@@ -205,6 +205,111 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
|
|||||||
memberTransactionRecordService.insertSelective(record);
|
memberTransactionRecordService.insertSelective(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 余额支付订单逻辑
|
||||||
|
* 使用的是通过后管充值的余额
|
||||||
|
* 包括赠送金
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void balancePayOrderV2(PayOrderDTO dto) {
|
||||||
|
logger.info("【{}】-余额支付订单V2start, param:{}", this.getClass().getSimpleName(), JSON.toJSONString(dto));
|
||||||
|
// 订单编号
|
||||||
|
String orderCode = dto.getOrderCode();
|
||||||
|
// 查订单详情
|
||||||
|
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode);
|
||||||
|
// 订单所属运营商id
|
||||||
|
String merchantId = orderBasicInfo.getMerchantId();
|
||||||
|
// 支付金额
|
||||||
|
BigDecimal chargeAmount = dto.getPayAmount();
|
||||||
|
// 会员id
|
||||||
|
String memberId = dto.getMemberId();
|
||||||
|
// 查询该会员的余额 在所属运营商的余额
|
||||||
|
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId(), merchantId);
|
||||||
|
// 总余额
|
||||||
|
BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount();
|
||||||
|
if (totalAccountAmount.compareTo(chargeAmount) < 0) {
|
||||||
|
// 总余额小于充电金额
|
||||||
|
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 本金支付金额
|
||||||
|
BigDecimal principalBalancePay = BigDecimal.ZERO;
|
||||||
|
// 赠送金支付金额
|
||||||
|
BigDecimal giftBalancePay = BigDecimal.ZERO;
|
||||||
|
// 计算下发金额
|
||||||
|
Map<String, BigDecimal> stringBigDecimalMap = calculateTheAmount(memberVO);
|
||||||
|
if (stringBigDecimalMap != null) {
|
||||||
|
principalBalancePay = stringBigDecimalMap.get("principalBalancePay");
|
||||||
|
giftBalancePay = stringBigDecimalMap.get("giftBalancePay");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新会员钱包 全部金额都用于支付订单
|
||||||
|
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
|
||||||
|
.memberId(memberId)
|
||||||
|
.targetMerchantId(merchantId)
|
||||||
|
.type(MemberWalletEnum.TYPE_OUT.getValue())
|
||||||
|
.subType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue())
|
||||||
|
.updatePrincipalBalance(principalBalancePay) // 使用本金支付的金额
|
||||||
|
.updateGiftBalance(giftBalancePay) // 赠送金额支付
|
||||||
|
.relatedOrderCode(orderCode)
|
||||||
|
.build();
|
||||||
|
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||||
|
|
||||||
|
// 本金支付
|
||||||
|
OrderPayRecord principalPayRecord = null;
|
||||||
|
if (principalBalancePay.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
principalPayRecord = OrderPayRecord.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
|
||||||
|
.payAmount(principalBalancePay)
|
||||||
|
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||||
|
.createBy(memberId)
|
||||||
|
.createTime(DateUtils.getNowDate())
|
||||||
|
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 赠送金支付
|
||||||
|
OrderPayRecord giftPayRecord = null;
|
||||||
|
if (giftBalancePay.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
giftPayRecord = OrderPayRecord.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue())
|
||||||
|
.payAmount(giftBalancePay)
|
||||||
|
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||||
|
.createBy(memberId)
|
||||||
|
.createTime(DateUtils.getNowDate())
|
||||||
|
.delFlag(DelFlagEnum.NORMAL.getValue())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 记录支订单付流水 记录两条支付
|
||||||
|
List<OrderPayRecord> payRecordList = Lists.newArrayList(principalPayRecord, giftPayRecord);
|
||||||
|
orderPayRecordService.batchInsert(payRecordList);
|
||||||
|
|
||||||
|
// 余额支付可以直接调支付回调方法
|
||||||
|
PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.payAmount(chargeAmount)
|
||||||
|
.payMode(dto.getPayMode())
|
||||||
|
.startMode(dto.getStartMode())
|
||||||
|
.acquirer(AcquirerEnum.LOCAL.getValue())
|
||||||
|
.build();
|
||||||
|
payOrderSuccessCallback(callbackDTO);
|
||||||
|
|
||||||
|
// 余额支付订单 记录会员交易流水
|
||||||
|
MemberTransactionRecord record = MemberTransactionRecord.builder()
|
||||||
|
.orderCode(orderCode)
|
||||||
|
.scenarioType(ScenarioEnum.ORDER.getValue())
|
||||||
|
.memberId(memberId)
|
||||||
|
.actionType(ActionTypeEnum.FORWARD.getValue())
|
||||||
|
.payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue())
|
||||||
|
.paymentInstitutions(PaymentInstitutionsEnum.LOCAL_ACCOUNTS.getValue())
|
||||||
|
.amount(dto.getPayAmount()) // 单位元
|
||||||
|
.build();
|
||||||
|
memberTransactionRecordService.insertSelective(record);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在线支付订单
|
* 在线支付订单
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user