mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 03:25:12 +08:00
update 更新支付的消费退款
This commit is contained in:
@@ -153,8 +153,6 @@ public interface IOrderBasicInfoService {
|
||||
|
||||
void tempOrderSplittingOperations(String merchantId, String tradeDate);
|
||||
|
||||
OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
|
||||
|
||||
List<BalanceDeductionAmountVO> calculateTheBalanceDeductionAmount(String memberId, BigDecimal amount);
|
||||
|
||||
/**
|
||||
@@ -164,7 +162,9 @@ public interface IOrderBasicInfoService {
|
||||
* @return
|
||||
* @throws BaseAdaPayException
|
||||
*/
|
||||
OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
|
||||
OrderSettleResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
|
||||
|
||||
OrderSettleResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
|
||||
|
||||
/**
|
||||
* 批量查询订单
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.jsowell.pile.service;
|
||||
|
||||
import com.jsowell.pile.domain.MemberAdapayRecord;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
public interface MemberAdapayRecordService{
|
||||
|
||||
@@ -28,4 +29,8 @@ public interface MemberAdapayRecordService{
|
||||
* @param memberId 会员id
|
||||
*/
|
||||
List<MemberAdapayRecord> selectAvailableBalance(String memberId);
|
||||
|
||||
void updateSpendAmount(String paymentId, BigDecimal amount);
|
||||
|
||||
void updateRefundAmount(String paymentId, BigDecimal amount);
|
||||
}
|
||||
|
||||
@@ -3,12 +3,16 @@ package com.jsowell.pile.service.impl;
|
||||
import com.jsowell.pile.domain.MemberAdapayRecord;
|
||||
import com.jsowell.pile.mapper.MemberAdapayRecordMapper;
|
||||
import com.jsowell.pile.service.MemberAdapayRecordService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService{
|
||||
public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService {
|
||||
|
||||
@Resource
|
||||
private MemberAdapayRecordMapper memberAdapayRecordMapper;
|
||||
@@ -50,7 +54,8 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService{
|
||||
|
||||
/**
|
||||
* 查询会员的支付记录,按照支付成功时间正序
|
||||
* @param memberId 会员id
|
||||
*
|
||||
* @param memberId 会员id
|
||||
* @param scenarioType 支付订单/充值余额
|
||||
* @return 支付记录列表
|
||||
*/
|
||||
@@ -66,6 +71,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService{
|
||||
|
||||
/**
|
||||
* 查询会员可用余额充值记录
|
||||
*
|
||||
* @param memberId 会员id
|
||||
* @return
|
||||
*/
|
||||
@@ -74,4 +80,50 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService{
|
||||
return memberAdapayRecordMapper.selectAvailableBalance(memberId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新消费金额
|
||||
*
|
||||
* @param paymentId
|
||||
* @param amount
|
||||
*/
|
||||
@Override
|
||||
public void updateSpendAmount(String paymentId, BigDecimal amount) {
|
||||
updateSpendAmountAndRefundAmount(paymentId, amount, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新剩余金额
|
||||
*
|
||||
* @param paymentId
|
||||
* @param amount
|
||||
*/
|
||||
@Override
|
||||
public void updateRefundAmount(String paymentId, BigDecimal amount) {
|
||||
updateSpendAmountAndRefundAmount(paymentId, null, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新交易记录的消费金额和退款金额
|
||||
*
|
||||
* @param paymentId 支付id
|
||||
* @param SpendAmount 消费金额
|
||||
* @param RefundAmount 退款金额
|
||||
*/
|
||||
private void updateSpendAmountAndRefundAmount(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount) {
|
||||
MemberAdapayRecord record = selectByPaymentId(paymentId);
|
||||
if (record == null) {
|
||||
log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId);
|
||||
return;
|
||||
}
|
||||
if (RefundAmount != null) {
|
||||
record.setRefundAmt(record.getRefundAmt().add(RefundAmount));
|
||||
}
|
||||
if (SpendAmount != null) {
|
||||
record.setSpendAmt(record.getSpendAmt().add(SpendAmount));
|
||||
}
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
updateByPrimaryKeySelective(record);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -694,19 +694,11 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
dto.setOrderDetail(orderDetail);
|
||||
transactionService.doUpdateOrder(dto);
|
||||
|
||||
// 订单支付结算
|
||||
OrderSettleResult orderSettleResult = orderPaymentSettlement(orderBasicInfo);
|
||||
// 订单支付结算and退款
|
||||
OrderSettleResult orderSettleResult = orderPaymentSettlementAndRefund(orderBasicInfo);
|
||||
|
||||
// 退款逻辑/需要退款的情况
|
||||
BigDecimal residue = orderBasicInfo.getRefundAmount();
|
||||
if (residue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
// 执行退款逻辑
|
||||
try {
|
||||
refundOrder(orderBasicInfo, residue);
|
||||
} catch (Exception e) {
|
||||
logger.error("订单退款逻辑异常orderCode:{}", orderBasicInfo.getOrderCode(), e);
|
||||
}
|
||||
}
|
||||
// 记账
|
||||
doUpdateClearingBill(orderSettleResult);
|
||||
|
||||
// 将卡/vin状态解锁
|
||||
if (!StringUtils.equals("0000000000000000", data.getLogicCard())) {
|
||||
@@ -729,12 +721,19 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
logger.info("结算订单end:{} OrderTransactionDTO:{}", orderBasicInfo.getOrderCode(), JSONObject.toJSONString(dto));
|
||||
}
|
||||
|
||||
/**
|
||||
* 记账
|
||||
*/
|
||||
private void doUpdateClearingBill(OrderSettleResult orderSettleResult) {
|
||||
logger.info("orderSettleResult:{}", JSON.toJSONString(orderSettleResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单分账逻辑
|
||||
* 订单结算完成,就执行分账
|
||||
* 订单结算完成,就执行清分and退款
|
||||
* 清分账单生成逻辑改为当天第一笔结算后就新建,后面的产生的订单,追加更新
|
||||
*/
|
||||
private OrderSettleResult orderPaymentSettlement(OrderBasicInfo orderBasicInfo) {
|
||||
private OrderSettleResult orderPaymentSettlementAndRefund(OrderBasicInfo orderBasicInfo) {
|
||||
String merchantId = orderBasicInfo.getMerchantId();
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 获取一级运营商信息
|
||||
@@ -764,20 +763,42 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// 延时分账的处理逻辑
|
||||
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 余额支付的订单
|
||||
orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount, appId);
|
||||
orderSettleResult = doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
||||
} else {
|
||||
// 在线支付,进行支付确认分账
|
||||
orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount, appId);
|
||||
orderSettleResult = doPaymentConfirmWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
||||
}
|
||||
} else {
|
||||
|
||||
// 不使用延时分账的汇付商户,钱已经到基本账户中了,只需要退款就可以
|
||||
orderSettleResult = notDelayOrder(orderBasicInfo, adapayMemberAccount, appId);
|
||||
}
|
||||
|
||||
|
||||
// 退款逻辑/需要退款的情况
|
||||
BigDecimal residue = orderBasicInfo.getRefundAmount();
|
||||
if (residue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
// 执行退款逻辑
|
||||
try {
|
||||
refundOrder(orderBasicInfo, residue);
|
||||
} catch (Exception e) {
|
||||
logger.error("订单退款逻辑异常orderCode:{}", orderBasicInfo.getOrderCode(), e);
|
||||
}
|
||||
}
|
||||
|
||||
return orderSettleResult;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param orderBasicInfo
|
||||
* @param adapayMemberAccount
|
||||
* @param wechatAppId
|
||||
* @return
|
||||
*/
|
||||
private OrderSettleResult notDelayOrder(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回更新后的OrderBasicInfo对象
|
||||
* 专用方法,其他地方如果要用请仔细检查
|
||||
@@ -1104,10 +1125,10 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
OrderSettleResult orderSettleResult;
|
||||
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 余额支付的订单
|
||||
orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount, appId);
|
||||
orderSettleResult = doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
||||
} else {
|
||||
// 在线支付,进行支付确认分账
|
||||
orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount, appId);
|
||||
orderSettleResult = doPaymentConfirmWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
||||
}
|
||||
if (orderSettleResult != null && AdapayStatusEnum.SUCCEEDED.getValue().equals(orderSettleResult.getStatus())) {
|
||||
// 应收金额 = 订单结算金额汇总
|
||||
@@ -1210,7 +1231,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount);
|
||||
} else {
|
||||
// 在线支付,进行支付确认分账
|
||||
orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount, appId);
|
||||
orderSettleResult = doPaymentConfirmWithDelay(orderBasicInfo, adapayMemberAccount, appId);
|
||||
}
|
||||
// if (orderSettleResult != null && AdapayStatusEnum.SUCCEEDED.getValue().equals(orderSettleResult.getStatus())) {
|
||||
// JSONObject jsonObject = JSON.parseObject(orderSettleResult.getDescription());
|
||||
@@ -1231,7 +1252,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
public OrderSettleResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
|
||||
@@ -1253,14 +1274,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
|
||||
status = paymentConfirmResponse.getStatus();
|
||||
description = paymentConfirmResponse.getDescription();
|
||||
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额
|
||||
record.setSpendAmt(record.getSpendAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
memberAdapayRecordService.updateSpendAmount(paymentId, deductionAmount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1332,8 +1346,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
* @param orderBasicInfo 订单
|
||||
* @param adapayMemberAccount 结算账户
|
||||
*/
|
||||
@Override
|
||||
public OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
public OrderSettleResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
// 查询订单的交易id
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode);
|
||||
@@ -2533,13 +2546,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
|
||||
|
||||
if (paymentReverseRequest != null && paymentReverseRequest.isNotFailed()) {
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的退款金额 = 历史退款金额 + 退款金额
|
||||
record.setRefundAmt(record.getRefundAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
memberAdapayRecordService.updateRefundAmount(paymentId, deductionAmount);
|
||||
|
||||
// 放缓存
|
||||
redisCache.setCacheObject(redisKey, paymentReverseRequest, CacheConstants.cache_expire_time_30m);
|
||||
@@ -3004,7 +3011,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// 分账金额为0,表示该订单没有执行过分账,再次执行分账
|
||||
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 余额支付的订单
|
||||
doBalancePayment(orderBasicInfo, adapayMemberAccount, wechatAppId);
|
||||
doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, wechatAppId);
|
||||
}
|
||||
|
||||
// 再次查询分账
|
||||
|
||||
Reference in New Issue
Block a user