update 计算退款金额

This commit is contained in:
2023-09-14 17:36:45 +08:00
parent ed031749e6
commit 74cf20b8a5
2 changed files with 63 additions and 43 deletions

View File

@@ -405,41 +405,41 @@ public abstract class AbstractOrderLogic implements InitializingBean {
return resultMap;
}
public static void main(String[] args) {
BigDecimal orderAmount= new BigDecimal("0.06");
List<OrderPayRecord> payRecordList = Lists.newArrayList();
payRecordList.add(OrderPayRecord.builder().deductionRecord("[{\"paymentId\":\"002212023091416010010548305359259512832\",\"amount\":0.97},{\"paymentId\":\"002212023091416110010548307874223849472\",\"amount\":1.00}]").build());
}
/**
* 计算解冻金额
* @param orderAmount 订单消费金额
* @param payRecordList 订单支付记录
*/
protected 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();
BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
for (OrderPayRecord record : payRecordList) {
// String deductionRecord = record.getDeductionRecord();
// JSONObject jsonObject = JSON.parseObject(deductionRecord);
List<JSONObject> jsonObjects = parseDeductionRecord(record.getDeductionRecord());
for (JSONObject object : jsonObjects) {
String paymentId = object.getString("paymentId");
BigDecimal payAmount = object.getBigDecimal("amount"); // 此交易单支付的金额
// 该笔支付扣除金额
BigDecimal deductionAmount;
// 该笔支付解冻金额
BigDecimal unfreezeAmount = null;
// 临时消费金额 = 临时消费金额 - 该笔交易的剩余金额
tempAmount = tempAmount.subtract(payAmount);
if (tempAmount.compareTo(BigDecimal.ZERO) >= 0) {
// 计算以后大于等于0说明这笔支付剩余金额需要扣完还要继续扣下一笔
deductionAmount = payAmount;
unfreezeAmount = payAmount.subtract(deductionAmount); // 支付金额 - 扣除金额 = 需要退回的金额
BigDecimal unfreezeAmount;
if (tempAmount.compareTo(BigDecimal.ZERO) <= 0) {
unfreezeAmount = payAmount;
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); // 支付金额 - 扣除金额 = 需要退回的金额
BigDecimal refundPerPayment = tempAmount.min(payAmount);
unfreezeAmount = payAmount.subtract(refundPerPayment);
tempAmount = tempAmount.subtract(refundPerPayment);
Map<String, Object> map = Maps.newHashMap();
map.put("paymentId", paymentId);
map.put("unfreezeAmount", unfreezeAmount);