update 操作member_adapay_record

This commit is contained in:
2023-08-28 19:01:25 +08:00
parent d31531b09b
commit 2551a9844b
4 changed files with 83 additions and 24 deletions

View File

@@ -209,6 +209,20 @@ public class SpringBootTestController {
@Autowired @Autowired
private IPileMerchantInfoService pileMerchantInfoService; private IPileMerchantInfoService pileMerchantInfoService;
@Autowired
private MemberAdapayRecordService memberAdapayRecordService;
@Test
public void unfreezeAmountAndUpdateSpendAmountTest() {
String paymentId = "123";
memberAdapayRecordService.updateRefundAmount(paymentId, new BigDecimal("5"));
// memberAdapayRecordService.updateRefundAmountFromFreezeAmount(paymentId, new BigDecimal("20"));
// BigDecimal unfreezeAmount = new BigDecimal("32");
// BigDecimal spendAmount = new BigDecimal("10");
// memberAdapayRecordService.unfreezeAmountAndUpdateSpendAmount(paymentId, unfreezeAmount, spendAmount);
// memberAdapayRecordService.updateRefundAmountFromFreezeAmount(paymentId, new BigDecimal("2"));
}
@Test @Test
public void getFirstLevelMerchantByMerchantIdTest() { public void getFirstLevelMerchantByMerchantIdTest() {
String merchantId = "13"; String merchantId = "13";

View File

@@ -38,9 +38,13 @@ public interface MemberAdapayRecordService{
void updateSpendAmount(String paymentId, BigDecimal amount); void updateSpendAmount(String paymentId, BigDecimal amount);
void unfreezeAmountAndUpdateSpendAmount(String paymentId, BigDecimal unfreezeAmount, BigDecimal spendAmount);
void updateRefundAmountFromFreezeAmount(String paymentId, BigDecimal refundAmount);
void updateRefundAmount(String paymentId, BigDecimal amount); void updateRefundAmount(String paymentId, BigDecimal amount);
void updateFreezeAmount(String paymentId, BigDecimal amount); void updateFreezeAmount(String paymentId, BigDecimal amount);
void updateSpendAmountAndRefundAmountAndFreezeAmount(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount); void commonUpdateAmountMethod(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount);
} }

View File

@@ -1,5 +1,6 @@
package com.jsowell.pile.service.impl; package com.jsowell.pile.service.impl;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.pile.domain.MemberAdapayRecord; import com.jsowell.pile.domain.MemberAdapayRecord;
import com.jsowell.pile.mapper.MemberAdapayRecordMapper; import com.jsowell.pile.mapper.MemberAdapayRecordMapper;
import com.jsowell.pile.service.MemberAdapayRecordService; import com.jsowell.pile.service.MemberAdapayRecordService;
@@ -84,24 +85,42 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
* 更新消费金额 * 更新消费金额
*/ */
@Override @Override
public void updateSpendAmount(String paymentId, BigDecimal amount) { public void updateSpendAmount(String paymentId, BigDecimal spendAmount) {
updateSpendAmountAndRefundAmountAndFreezeAmount(paymentId, amount, null, null); commonUpdateAmountMethod(paymentId, spendAmount, null, null);
}
/**
* 解冻金额并更新消费金额
* unfreezeAmount
*/
@Override
public void unfreezeAmountAndUpdateSpendAmount(String paymentId, BigDecimal unfreezeAmount, BigDecimal spendAmount) {
commonUpdateAmountMethod(paymentId, spendAmount, null, unfreezeAmount.negate());
}
/**
* 从冻结金额中退款
* 不解冻,退款
*/
@Override
public void updateRefundAmountFromFreezeAmount(String paymentId, BigDecimal refundAmount) {
commonUpdateAmountMethod(paymentId, null, refundAmount, refundAmount.negate());
} }
/** /**
* 更新剩余金额 * 更新剩余金额
*/ */
@Override @Override
public void updateRefundAmount(String paymentId, BigDecimal amount) { public void updateRefundAmount(String paymentId, BigDecimal refundAmount) {
updateSpendAmountAndRefundAmountAndFreezeAmount(paymentId, null, amount, null); commonUpdateAmountMethod(paymentId, null, refundAmount, null);
} }
/** /**
* 更新冻结金额 * 更新冻结金额
*/ */
@Override @Override
public void updateFreezeAmount(String paymentId, BigDecimal amount) { public void updateFreezeAmount(String paymentId, BigDecimal freezeAmount) {
updateSpendAmountAndRefundAmountAndFreezeAmount(paymentId, null, null, amount); commonUpdateAmountMethod(paymentId, null, null, freezeAmount);
} }
/** /**
@@ -113,32 +132,55 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
* @param freezeAmount 冻结金额 * @param freezeAmount 冻结金额
*/ */
@Override @Override
public void updateSpendAmountAndRefundAmountAndFreezeAmount(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount) { public void commonUpdateAmountMethod(String paymentId, BigDecimal SpendAmount, BigDecimal RefundAmount, BigDecimal freezeAmount) {
MemberAdapayRecord record = selectByPaymentId(paymentId); MemberAdapayRecord record = selectByPaymentId(paymentId);
if (record == null) { if (record == null) {
log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId); log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId);
return; return;
} }
// 此时数据库中的值
BigDecimal spendAmt = record.getSpendAmt();
BigDecimal refundAmt = record.getRefundAmt();
BigDecimal freezeAmt = record.getFreezeAmt();
BigDecimal balanceAmt = record.getBalanceAmt();
if (freezeAmount != null) {
if (BigDecimal.ZERO.compareTo(freezeAmount) > 0) {
// 如果冻结金额传过来是负数,说明是解冻
if (freezeAmount.negate().compareTo(freezeAmt) > 0) {
throw new BusinessException("", "解冻金额大于冻结金额");
}
balanceAmt = balanceAmt.add(freezeAmount.negate()); // 剩余金额增加
} else {
if (freezeAmount.compareTo(balanceAmt) > 0) {
throw new BusinessException("", "冻结金额大于剩余金额");
}
}
freezeAmt = freezeAmt.add(freezeAmount); // 冻结金额减少
// 设置冻结金额 = 历史冻结金额 + 本次冻结金额
record.setFreezeAmt(freezeAmt);
}
if (RefundAmount != null) { if (RefundAmount != null) {
if (RefundAmount.compareTo(balanceAmt) > 0) {
throw new BusinessException("", "退款金额大于剩余金额");
}
// 设置退款金额 = 历史退款金额 + 本次退款金额 // 设置退款金额 = 历史退款金额 + 本次退款金额
record.setRefundAmt(record.getRefundAmt().add(RefundAmount)); refundAmt = refundAmt.add(RefundAmount);
record.setRefundAmt(refundAmt);
} }
if (SpendAmount != null) { if (SpendAmount != null) {
if (SpendAmount.compareTo(balanceAmt) > 0) {
throw new BusinessException("", "消费金额大于剩余金额");
}
// 设置消费金额 = 历史消费金额 + 本次消费金额 // 设置消费金额 = 历史消费金额 + 本次消费金额
record.setSpendAmt(record.getSpendAmt().add(SpendAmount)); spendAmt = spendAmt.add(SpendAmount);
} record.setSpendAmt(spendAmt);
if (freezeAmount != null) {
// 设置冻结金额 = 历史冻结金额 + 本次冻结金额
record.setFreezeAmt(record.getFreezeAmt().add(freezeAmount));
} }
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额 // 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()).subtract(record.getFreezeAmt())); balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt);
record.setBalanceAmt(balanceAmt);
updateByPrimaryKeySelective(record); updateByPrimaryKeySelective(record);
// if (BigDecimal.ZERO.compareTo(record.getBalanceAmt()) != 0) {
// log.error("订单分账结束后账不平paymentId:{}, 支付金额:{}, 消费金额:{}, 退款金额:{}",
// paymentId, record.getPayAmt(), SpendAmount, RefundAmount);
// }
} }
} }

View File

@@ -678,7 +678,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
} }
/** /**
* 结算订单逻辑 * 结算订单逻辑/订单结算逻辑
* *
* @param data 交易记录数据 * @param data 交易记录数据
* @param orderBasicInfo 订单主表信息,由调用方传过来 * @param orderBasicInfo 订单主表信息,由调用方传过来
@@ -829,8 +829,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String deductionRecord = record.getDeductionRecord(); String deductionRecord = record.getDeductionRecord();
JSONObject jsonObject = JSON.parseObject(deductionRecord); JSONObject jsonObject = JSON.parseObject(deductionRecord);
String paymentId = jsonObject.getString("paymentId"); String paymentId = jsonObject.getString("paymentId");
// 更新member_adapay_record 中的冻结金额
memberAdapayRecordService.updateFreezeAmount(paymentId, orderBasicInfo.getSettleAmount());
} }
// 订单支付记录,保存一下消费记录 deduction_record // 订单支付记录,保存一下消费记录 deduction_record
@@ -2449,7 +2448,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
// record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt())); // record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
// memberAdapayRecordService.updateByPrimaryKeySelective(record); // memberAdapayRecordService.updateByPrimaryKeySelective(record);
memberAdapayRecordService.updateSpendAmountAndRefundAmountAndFreezeAmount(paymentId, spendAmt, reverseAmt, null); memberAdapayRecordService.commonUpdateAmountMethod(paymentId, spendAmt, reverseAmt, null);
// if (BigDecimal.ZERO.compareTo(record.getBalanceAmt()) != 0) { // if (BigDecimal.ZERO.compareTo(record.getBalanceAmt()) != 0) {
// logger.error("订单分账结束后账不平paymentId:{}, orderCode:{}, 支付金额:{}, 消费金额:{}, 退款金额:{}", // logger.error("订单分账结束后账不平paymentId:{}, orderCode:{}, 支付金额:{}, 消费金额:{}, 退款金额:{}",
// paymentId, dto.getOrderCode(), payAmt, spendAmt, reverseAmt); // paymentId, dto.getOrderCode(), payAmt, spendAmt, reverseAmt);
@@ -2475,7 +2474,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
// } // }
// memberAdapayRecordService.updateByPrimaryKeySelective(record); // memberAdapayRecordService.updateByPrimaryKeySelective(record);
memberAdapayRecordService.updateSpendAmountAndRefundAmountAndFreezeAmount(paymentId, spendAmt, refundAmt, null); memberAdapayRecordService.commonUpdateAmountMethod(paymentId, spendAmt, refundAmt, null);
} }
} }
// if (StringUtils.equals("", payMode)) { // if (StringUtils.equals("", payMode)) {