This commit is contained in:
2023-08-23 16:26:02 +08:00
parent 930486c5ff
commit c5a8b808c6
5 changed files with 63 additions and 26 deletions

View File

@@ -27,4 +27,12 @@ public class AdapayBaseResponse {
public boolean isNotSuccess() {
return !isSuccess();
}
public boolean isFailed() {
return StringUtils.equals(status, AdapayStatusEnum.FAILED.getValue());
}
public boolean isNotFailed() {
return !isFailed();
}
}

View File

@@ -2349,7 +2349,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
dto.getOrderCode());
if (response != null) {
if (response != null && response.isFailed()) {
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
BigDecimal reverseAmt = new BigDecimal(response.getReverse_amt());
// 更新此笔交易单的消费金额 = 支付金额 - 撤销金额
@@ -2370,6 +2370,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
@Override
public void refundBalanceWithAdapay(ApplyRefundDTO dto) {
String redisKey = CacheConstants.MEMBER_BALANCE_REFUNDS_ARE_IN_PROGRESS + dto.getMemberId();
String redisResult = redisCache.getCacheObject(redisKey);
if (StringUtils.isNotBlank(redisResult)) {
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_REFUNDS_ARE_IN_PROGRESS_ERROR);
}
// 查会员余额
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId());
if (memberVO == null) {
@@ -2383,14 +2389,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_MEMBER_BALANCE_ERROR);
}
// 扣余额
UpdateMemberBalanceDTO updateMemberBalanceDTO = new UpdateMemberBalanceDTO();
updateMemberBalanceDTO.setMemberId(dto.getMemberId());
updateMemberBalanceDTO.setUpdatePrincipalBalance(refundAmount); // 更新会员本金金额,单位元
updateMemberBalanceDTO.setType(MemberWalletEnum.TYPE_OUT.getValue());
updateMemberBalanceDTO.setSubType(MemberWalletEnum.SUBTYPE_USER_REFUND.getValue());
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
// 查询用户充值余额订单 过滤掉已经退款的充值订单
List<BalanceDeductionAmountVO> list = calculateTheBalanceDeductionAmount(dto.getMemberId(), refundAmount);
for (BalanceDeductionAmountVO vo : list) {
@@ -2398,16 +2396,21 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
BigDecimal deductionAmount = vo.getDeductionAmount();
// 调汇付的交易撤销接口
adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
PaymentReverseResponse paymentReverseRequest = adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
// 更新这笔交易的剩余金额
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
// 更新此笔交易单的退款金额 = 历史退款金额 + 退款金额
record.setRefundAmt(record.getRefundAmt().add(deductionAmount));
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
memberAdapayRecordService.updateByPrimaryKeySelective(record);
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);
// 放缓存
redisCache.setCacheObject(redisKey, paymentReverseRequest, CacheConstants.cache_expire_time_30m);
}
}
}