mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 19:15:35 +08:00
交易分账 重构
This commit is contained in:
@@ -38,9 +38,9 @@ public interface OrderPayRecordMapper {
|
||||
|
||||
int insertOrUpdateSelective(OrderPayRecord record);
|
||||
|
||||
int deleteByPrimaryKey(Integer id);
|
||||
// int deleteByPrimaryKey(Integer id);
|
||||
|
||||
int updateByPrimaryKey(OrderPayRecord record);
|
||||
// int updateByPrimaryKey(OrderPayRecord record);
|
||||
|
||||
List<OrderPayRecord> getOrderPayRecordList(@Param("orderCode") String orderCode);
|
||||
}
|
||||
@@ -20,6 +20,12 @@ public interface MemberAdapayRecordService{
|
||||
|
||||
int insertOrUpdateSelective(MemberAdapayRecord record);
|
||||
|
||||
/**
|
||||
* 查询会员的汇付支付记录
|
||||
* @param memberId 会员id
|
||||
* @param scenarioType 场景类型 订单/余额
|
||||
* @return
|
||||
*/
|
||||
List<MemberAdapayRecord> selectAdapayRecordList(String memberId, String scenarioType);
|
||||
|
||||
MemberAdapayRecord selectByPaymentId(String paymentId);
|
||||
|
||||
@@ -818,12 +818,22 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
private void freezeAmount(OrderBasicInfo orderBasicInfo) {
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 查询这笔订单的支付id/查询该笔订单的支付交易回调
|
||||
AdapayCallbackRecord adapayCallbackRecord = selectAdapayCallbackRecord(orderCode);
|
||||
String paymentId = adapayCallbackRecord.getPaymentId();
|
||||
memberAdapayRecordService.updateFreezeAmount(paymentId, orderBasicInfo.getSettleAmount());
|
||||
|
||||
// 根据订单编号,查询订单支付记录,一般在线支付只有1条,余额支付可能有多条
|
||||
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||
|
||||
// 需要根据订单消费的金额,计算一下每个paymentId需要冻结多少钱
|
||||
|
||||
for (OrderPayRecord record : orderPayRecordList) {
|
||||
// 支付的信息,json字符串包含,paymentId和支付金额
|
||||
String deductionRecord = record.getDeductionRecord();
|
||||
JSONObject jsonObject = JSON.parseObject(deductionRecord);
|
||||
String paymentId = jsonObject.getString("paymentId");
|
||||
// 更新member_adapay_record 中的冻结金额
|
||||
memberAdapayRecordService.updateFreezeAmount(paymentId, orderBasicInfo.getSettleAmount());
|
||||
}
|
||||
|
||||
// 订单支付记录,保存一下消费记录 deduction_record
|
||||
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||
if (CollectionUtils.isNotEmpty(orderPayRecordList)) {
|
||||
//
|
||||
}
|
||||
@@ -1335,33 +1345,25 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
BigDecimal balanceAmt = memberAdapayRecord.getBalanceAmt();
|
||||
// 该笔支付扣除金额
|
||||
BigDecimal deductionAmount;
|
||||
// 获取延时分账模式 延时分账的使用撤销方法退款,实时分账的使用退款方法
|
||||
AdapayCallbackRecord callbackRecord = adapayCallbackRecordService.selectByPaymentId(memberAdapayRecord.getPaymentId());
|
||||
String payMode = null;
|
||||
if (callbackRecord != null) {
|
||||
JSONObject expendJsonObject = JSON.parseObject(callbackRecord.getExpend());
|
||||
payMode = expendJsonObject.getString("payMode");
|
||||
}
|
||||
// 消费金额 - 剩余金额
|
||||
|
||||
// 临时消费金额 = 临时消费金额 - 该笔交易的剩余金额
|
||||
tempAmount = tempAmount.subtract(balanceAmt);
|
||||
if (tempAmount.compareTo(BigDecimal.ZERO) >= 0) {
|
||||
// 计算以后,大于等于0,说明这笔支付剩余金额需要扣完
|
||||
// 计算以后,大于等于0,说明这笔支付剩余金额需要扣完,还要继续扣下一笔
|
||||
deductionAmount = balanceAmt;
|
||||
BalanceDeductionAmountVO build = BalanceDeductionAmountVO.builder()
|
||||
.memberId(memberId)
|
||||
.paymentId(memberAdapayRecord.getPaymentId())
|
||||
.deductionAmount(deductionAmount)
|
||||
.delayMode(payMode)
|
||||
.build();
|
||||
resultList.add(build);
|
||||
} else {
|
||||
// 如果小于0,则说明剩余的钱用不完,扣除金额等于消费金额,并结束循环
|
||||
deductionAmount = balanceAmt.add(tempAmount);
|
||||
// 如果小于0,则说明该笔交易的剩余金额用不完,扣除金额等于临时消费金额,并结束循环
|
||||
deductionAmount = balanceAmt.add(tempAmount); // 该笔交易的剩余金额加上一个负数临时消费金额,就是该笔交易扣除金额
|
||||
BalanceDeductionAmountVO build = BalanceDeductionAmountVO.builder()
|
||||
.memberId(memberId)
|
||||
.paymentId(memberAdapayRecord.getPaymentId())
|
||||
.deductionAmount(deductionAmount)
|
||||
.delayMode(payMode)
|
||||
.build();
|
||||
resultList.add(build);
|
||||
break;
|
||||
@@ -3036,6 +3038,11 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 查询余额充值有剩余的记录
|
||||
List<BalanceDeductionAmountVO> list = calculateTheBalanceDeductionAmount(dto.getMemberId(), chargeAmount);
|
||||
|
||||
|
||||
|
||||
// 记录流水
|
||||
if (principalPay != null) {
|
||||
payRecordList.add(OrderPayRecord.builder()
|
||||
|
||||
@@ -24,10 +24,4 @@ public class BalanceDeductionAmountVO {
|
||||
* 扣除金额
|
||||
*/
|
||||
private BigDecimal deductionAmount;
|
||||
|
||||
/**
|
||||
* 该笔支付单的分账方式
|
||||
* delay表示延时分账,其他情况表示实时分账
|
||||
*/
|
||||
private String delayMode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user