mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-13 11:49:49 +08:00
update 计算解冻金额逻辑
This commit is contained in:
@@ -374,37 +374,37 @@ public class SpringBootTestController {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void calculateUnfreezeAmountTest() {
|
public void calculateUnfreezeAmountTest() {
|
||||||
BigDecimal orderAmount = new BigDecimal("28");
|
BigDecimal orderAmount = new BigDecimal("0.99");
|
||||||
List<OrderPayRecord> payRecordList = Lists.newArrayList();
|
List<OrderPayRecord> payRecordList = Lists.newArrayList();
|
||||||
// 第一笔支付记录
|
// 第一笔支付记录
|
||||||
JSONObject jsonObject = new JSONObject();
|
JSONObject jsonObject = new JSONObject();
|
||||||
jsonObject.put("paymentId", "1");
|
jsonObject.put("paymentId", "002212023083114213410543206907226374144");
|
||||||
jsonObject.put("amount", "10");
|
jsonObject.put("amount", "0.98");
|
||||||
OrderPayRecord build = OrderPayRecord.builder()
|
OrderPayRecord build = OrderPayRecord.builder()
|
||||||
.payAmount(new BigDecimal("10"))
|
.payAmount(new BigDecimal("0.98"))
|
||||||
.deductionRecord(jsonObject.toJSONString())
|
.deductionRecord(jsonObject.toJSONString())
|
||||||
.build();
|
.build();
|
||||||
payRecordList.add(build);
|
payRecordList.add(build);
|
||||||
|
|
||||||
// 第二笔支付记录
|
// 第二笔支付记录
|
||||||
JSONObject jsonObject2 = new JSONObject();
|
JSONObject jsonObject2 = new JSONObject();
|
||||||
jsonObject2.put("paymentId", "2");
|
jsonObject2.put("paymentId", "002212023083114410510543211818773135360");
|
||||||
jsonObject2.put("amount", "10");
|
jsonObject2.put("amount", "1.00");
|
||||||
OrderPayRecord build2 = OrderPayRecord.builder()
|
OrderPayRecord build2 = OrderPayRecord.builder()
|
||||||
.payAmount(new BigDecimal("10"))
|
.payAmount(new BigDecimal("1.00"))
|
||||||
.deductionRecord(jsonObject2.toJSONString())
|
.deductionRecord(jsonObject2.toJSONString())
|
||||||
.build();
|
.build();
|
||||||
payRecordList.add(build2);
|
payRecordList.add(build2);
|
||||||
|
|
||||||
// 第三笔支付记录
|
// 第三笔支付记录
|
||||||
JSONObject jsonObject3 = new JSONObject();
|
// JSONObject jsonObject3 = new JSONObject();
|
||||||
jsonObject3.put("paymentId", "3");
|
// jsonObject3.put("paymentId", "3");
|
||||||
jsonObject3.put("amount", "10");
|
// jsonObject3.put("amount", "10");
|
||||||
OrderPayRecord build3 = OrderPayRecord.builder()
|
// OrderPayRecord build3 = OrderPayRecord.builder()
|
||||||
.payAmount(new BigDecimal("10"))
|
// .payAmount(new BigDecimal("10"))
|
||||||
.deductionRecord(jsonObject3.toJSONString())
|
// .deductionRecord(jsonObject3.toJSONString())
|
||||||
.build();
|
// .build();
|
||||||
payRecordList.add(build3);
|
// payRecordList.add(build3);
|
||||||
List<Map<String, Object>> maps = orderBasicInfoService.calculateUnfreezeAmount(orderAmount, payRecordList);
|
List<Map<String, Object>> maps = orderBasicInfoService.calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||||
System.out.println(maps);
|
System.out.println(maps);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,22 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
|||||||
@Override
|
@Override
|
||||||
public void unfreezeAmount(String paymentId, BigDecimal unfreezeAmount) {
|
public void unfreezeAmount(String paymentId, BigDecimal unfreezeAmount) {
|
||||||
log.info("解冻金额, paymentId:{}, 解冻金额:{}", paymentId, unfreezeAmount);
|
log.info("解冻金额, paymentId:{}, 解冻金额:{}", paymentId, unfreezeAmount);
|
||||||
commonUpdateAmountMethod(paymentId, null, null, unfreezeAmount.negate());
|
// commonUpdateAmountMethod(paymentId, null, null, unfreezeAmount.negate());
|
||||||
|
MemberAdapayRecord record = selectByPaymentId(paymentId);
|
||||||
|
if (record == null) {
|
||||||
|
log.info("更新交易记录的消费金额和退款金额paymentId:{}, 查询为空", paymentId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 此时数据库中的值
|
||||||
|
BigDecimal spendAmt = record.getSpendAmt();
|
||||||
|
BigDecimal refundAmt = record.getRefundAmt();
|
||||||
|
BigDecimal freezeAmt = record.getFreezeAmt();
|
||||||
|
BigDecimal balanceAmt = record.getBalanceAmt();
|
||||||
|
// 更新解冻金额 = 目前冻结的金额 - 需要解冻的金额
|
||||||
|
record.setFreezeAmt(record.getFreezeAmt().subtract(unfreezeAmount));
|
||||||
|
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额 - 累计冻结金额
|
||||||
|
balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt);
|
||||||
|
record.setBalanceAmt(balanceAmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -65,7 +65,6 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1156,16 +1155,19 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
// 查支付记录
|
// 查支付记录
|
||||||
List<OrderPayRecord> payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
List<OrderPayRecord> payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||||
|
|
||||||
Map<String, OrderPayRecord> payRecordMap = payRecordList.stream()
|
// Map<String, OrderPayRecord> payRecordMap = payRecordList.stream()
|
||||||
.collect(Collectors.toMap(OrderPayRecord::getPayMode, Function.identity(), (k1, k2) -> k1));
|
// .collect(Collectors.toMap(OrderPayRecord::getPayMode, Function.identity(), (k1, k2) -> k1));
|
||||||
// 取出本金支付金额
|
Map<String, List<OrderPayRecord>> payRecordMap = payRecordList.stream().collect(Collectors.groupingBy(OrderPayRecord::getPayMode));
|
||||||
BigDecimal principalPay = null;
|
|
||||||
|
|
||||||
// 获取本金支付的记录
|
// 获取本金支付的记录
|
||||||
OrderPayRecord principalPayRecord = payRecordMap.get(Constants.ONE);
|
List<OrderPayRecord> orderPayRecordList = payRecordMap.get(Constants.ONE);
|
||||||
if (principalPayRecord != null) {
|
BigDecimal principalPay = orderPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
principalPay = principalPayRecord.getPayAmount();
|
|
||||||
}
|
// 取出本金支付金额
|
||||||
|
// BigDecimal principalPay = null;
|
||||||
|
|
||||||
|
// if (principalPayRecord != null) {
|
||||||
|
// principalPay = principalPayRecord.getPayAmount();
|
||||||
|
// }
|
||||||
|
|
||||||
// 计算需要退回的金额
|
// 计算需要退回的金额
|
||||||
Map<String, BigDecimal> returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount);
|
Map<String, BigDecimal> returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount);
|
||||||
@@ -1194,6 +1196,43 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public List<Map<String, Object>> calculateUnfreezeAmountOld(BigDecimal orderAmount, List<OrderPayRecord> payRecordList) {
|
||||||
|
// List<Map<String, Object>> resultList = Lists.newArrayList();
|
||||||
|
//
|
||||||
|
// BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
|
||||||
|
// for (OrderPayRecord record : payRecordList) {
|
||||||
|
// JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord());
|
||||||
|
// String paymentId = jsonObject.getString("paymentId");
|
||||||
|
// // BigDecimal amount = jsonObject.getBigDecimal("amount");
|
||||||
|
// BigDecimal payAmount = record.getPayAmount(); // 此交易单支付的金额
|
||||||
|
// // 该笔支付扣除金额
|
||||||
|
// BigDecimal deductionAmount;
|
||||||
|
// // 该笔支付解冻金额
|
||||||
|
// BigDecimal unfreezeAmount = null;
|
||||||
|
// // 临时消费金额 = 临时消费金额 - 该笔交易的剩余金额
|
||||||
|
// tempAmount = tempAmount.subtract(payAmount);
|
||||||
|
// if (tempAmount.compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
// // 计算以后,大于等于0,说明这笔支付剩余金额需要扣完,还要继续扣下一笔
|
||||||
|
// deductionAmount = payAmount;
|
||||||
|
// unfreezeAmount = payAmount.subtract(deductionAmount); // 支付金额 - 扣除金额 = 需要退回的金额
|
||||||
|
// Map<String, Object> map = Maps.newHashMap();
|
||||||
|
// map.put("paymentId", paymentId);
|
||||||
|
// map.put("unfreezeAmount", unfreezeAmount);
|
||||||
|
// resultList.add(map);
|
||||||
|
// } else {
|
||||||
|
// // 如果小于0,则说明该笔交易的剩余金额用不完,扣除金额等于临时消费金额,并结束循环
|
||||||
|
// deductionAmount = payAmount.add(tempAmount); // 该笔交易的剩余金额加上一个负数临时消费金额,就是该笔交易扣除金额
|
||||||
|
// unfreezeAmount = payAmount.subtract(deductionAmount); // 支付金额 - 扣除金额 = 需要退回的金额
|
||||||
|
// Map<String, Object> map = Maps.newHashMap();
|
||||||
|
// map.put("paymentId", paymentId);
|
||||||
|
// map.put("unfreezeAmount", unfreezeAmount);
|
||||||
|
// resultList.add(map);
|
||||||
|
// // break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return resultList;
|
||||||
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算解冻金额
|
* 计算解冻金额
|
||||||
* @param orderAmount 订单消费金额
|
* @param orderAmount 订单消费金额
|
||||||
@@ -1202,13 +1241,18 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
@Override
|
@Override
|
||||||
public List<Map<String, Object>> calculateUnfreezeAmount(BigDecimal orderAmount, List<OrderPayRecord> payRecordList) {
|
public List<Map<String, Object>> calculateUnfreezeAmount(BigDecimal orderAmount, List<OrderPayRecord> payRecordList) {
|
||||||
List<Map<String, Object>> resultList = Lists.newArrayList();
|
List<Map<String, Object>> resultList = Lists.newArrayList();
|
||||||
|
|
||||||
BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
|
BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
|
||||||
for (OrderPayRecord record : payRecordList) {
|
for (OrderPayRecord record : payRecordList) {
|
||||||
JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord());
|
JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord());
|
||||||
String paymentId = jsonObject.getString("paymentId");
|
String paymentId = jsonObject.getString("paymentId"); // 交易流水号
|
||||||
// BigDecimal amount = jsonObject.getBigDecimal("amount");
|
|
||||||
BigDecimal payAmount = record.getPayAmount(); // 此交易单支付的金额
|
BigDecimal payAmount = record.getPayAmount(); // 此交易单支付的金额
|
||||||
|
|
||||||
|
if (BigDecimal.ZERO.compareTo(tempAmount) >= 0) {
|
||||||
|
Map<String, Object> map = Maps.newHashMap();
|
||||||
|
map.put("paymentId", paymentId);
|
||||||
|
map.put("unfreezeAmount", payAmount);
|
||||||
|
resultList.add(map);
|
||||||
|
} else {
|
||||||
// 该笔支付扣除金额
|
// 该笔支付扣除金额
|
||||||
BigDecimal deductionAmount;
|
BigDecimal deductionAmount;
|
||||||
// 该笔支付解冻金额
|
// 该笔支付解冻金额
|
||||||
@@ -1231,7 +1275,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
map.put("paymentId", paymentId);
|
map.put("paymentId", paymentId);
|
||||||
map.put("unfreezeAmount", unfreezeAmount);
|
map.put("unfreezeAmount", unfreezeAmount);
|
||||||
resultList.add(map);
|
resultList.add(map);
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultList;
|
return resultList;
|
||||||
|
|||||||
Reference in New Issue
Block a user