diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java index c0c4bd25b..5845b9213 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/AbstractOrderLogic.java @@ -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 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 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 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 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 map = Maps.newHashMap(); + map.put("paymentId", paymentId); + map.put("unfreezeAmount", unfreezeAmount); + resultList.add(map); + break; + } } + + } + return resultList; + } + + /** + * 解析deductionRecord + * 【公共方法】 + */ + protected List parseDeductionRecord(String deductionRecord) { + List 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; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java index dd3ab1227..466b89541 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/orderlogic/DelayMerchantOrderLogic.java @@ -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 arr = Lists.newArrayList(); + // if (object instanceof JSONArray) { + // arr.addAll(((JSONArray) object).toList(JSONObject.class)); + // } else { + // arr.add((JSONObject) object); + // } - // 都放入list里 - List arr = Lists.newArrayList(); - if (object instanceof JSONArray) { - arr.addAll(((JSONArray) object).toList(JSONObject.class)); - } else { - arr.add((JSONObject) object); - } + List arr = parseDeductionRecord(record.getDeductionRecord()); // 循环冻结金额 for (JSONObject jsonObject : arr) {