update 解析扣款记录bug

This commit is contained in:
2023-09-12 15:35:45 +08:00
parent 7fd344f194
commit e921406d95
2 changed files with 64 additions and 35 deletions

View File

@@ -1,6 +1,7 @@
package com.jsowell.pile.service.orderlogic;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -414,33 +415,59 @@ public abstract class AbstractOrderLogic implements InitializingBean {
BigDecimal tempAmount = new BigDecimal(orderAmount.toString()); // 临时金额
for (OrderPayRecord record : payRecordList) {
JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord());
String paymentId = jsonObject.getString("paymentId");
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;
// 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); // 支付金额 - 扣除金额 = 需要退回的金额
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;
}
/**
* 解析deductionRecord
* 【公共方法】
*/
protected List<JSONObject> parseDeductionRecord(String deductionRecord) {
List<JSONObject> resultList = Lists.newArrayList();
if (StringUtils.isBlank(deductionRecord)) {
return resultList;
}
Object object = JSON.parse(deductionRecord);
// 都放入list里
if (object instanceof JSONArray) {
resultList.addAll(((JSONArray) object).toList(JSONObject.class));
} else {
resultList.add((JSONObject) object);
}
return resultList;
}

View File

@@ -280,16 +280,18 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
// 把消费金额冻结
for (OrderPayRecord record : payRecordList) {
String deductionRecord = record.getDeductionRecord();
Object object = JSON.parse(deductionRecord);
// String deductionRecord = record.getDeductionRecord();
// Object object = JSON.parse(deductionRecord);
//
// // 都放入list里
// List<JSONObject> arr = Lists.newArrayList();
// if (object instanceof JSONArray) {
// arr.addAll(((JSONArray) object).toList(JSONObject.class));
// } else {
// arr.add((JSONObject) object);
// }
// 都放入list里
List<JSONObject> arr = Lists.newArrayList();
if (object instanceof JSONArray) {
arr.addAll(((JSONArray) object).toList(JSONObject.class));
} else {
arr.add((JSONObject) object);
}
List<JSONObject> arr = parseDeductionRecord(record.getDeductionRecord());
// 循环冻结金额
for (JSONObject jsonObject : arr) {