mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
update
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
package com.jsowell.adapay.vo;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 支付信息对象
|
||||
* order_pay_record表中的deduction_record
|
||||
* json数组 字符串
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class DeductionRecord {
|
||||
List<PaymentInfo> list;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.jsowell.adapay.vo;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class PaymentInfo {
|
||||
// 支付id
|
||||
private String paymentId;
|
||||
|
||||
// 金额
|
||||
private String amount;
|
||||
}
|
||||
@@ -149,8 +149,6 @@ public interface IOrderBasicInfoService {
|
||||
|
||||
List<OrderVO> getListByMemberIdAndOrderStatus(String memberId, List<String> orderStatusList, LocalDateTime dateTime, String stationId);
|
||||
|
||||
List<Map<String, Object>> calculateUnfreezeAmount(BigDecimal orderAmount, List<OrderPayRecord> payRecordList);
|
||||
|
||||
void orderSplittingOperations(AdapayMemberAccount adapayMemberAccount, List<SettleOrderReport> stationReportList);
|
||||
|
||||
void orderSplittingOperations(String merchantId, String tradeDate);
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.jsowell.pile.dto.*;
|
||||
import com.jsowell.pile.mapper.OrderBasicInfoMapper;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.service.orderlogic.AbstractOrderLogic;
|
||||
import com.jsowell.pile.service.orderlogic.DelayMerchantOrderLogic;
|
||||
import com.jsowell.pile.service.orderlogic.OrderLogicFactory;
|
||||
import com.jsowell.pile.transaction.dto.ClearingBillTransactionDTO;
|
||||
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
|
||||
@@ -773,63 +774,10 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
*/
|
||||
notDelayMerchantOrderRefundLogic(orderBasicInfo, adapayMemberAccount, merchantInfo.getAppId());
|
||||
}
|
||||
|
||||
// OrderSettleResult orderSettleResult = null;
|
||||
|
||||
// 退款逻辑/需要退款的情况
|
||||
// BigDecimal residue = orderBasicInfo.getRefundAmount();
|
||||
// if (residue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
// // 执行退款逻辑
|
||||
// try {
|
||||
// String payMode = orderBasicInfo.getPayMode();
|
||||
// if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {
|
||||
// // 余额支付
|
||||
// balancePaymentOrderRefundV2(orderBasicInfo);
|
||||
// } else if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
|
||||
// // 微信支付
|
||||
// onlinePaymentOrderRefund(orderBasicInfo);
|
||||
// } else {
|
||||
// // 白名单支付
|
||||
// logger.info("订单:{}使用白名单支付,不进行退款处理", orderBasicInfo.getOrderCode());
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// logger.error("订单退款逻辑异常orderCode:{}", orderBasicInfo.getOrderCode(), e);
|
||||
// }
|
||||
// }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 冻结订单金额
|
||||
* delay模式的运营商需要用到
|
||||
* 记一笔账,还没有到分账时间,把订单消费金额在支付单里冻结,退款的时候不能动这些钱
|
||||
*/
|
||||
private void freezeAmount(OrderBasicInfo orderBasicInfo) {
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 查询这笔订单的支付id/查询该笔订单的支付交易回调
|
||||
|
||||
// 根据订单编号,查询订单支付记录,一般在线支付只有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");
|
||||
|
||||
}
|
||||
|
||||
// 订单支付记录,保存一下消费记录 deduction_record
|
||||
if (CollectionUtils.isNotEmpty(orderPayRecordList)) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
private AdapayCallbackRecord selectAdapayCallbackRecord(String orderCode) {
|
||||
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode);
|
||||
if (adapayCallbackRecord == null) {
|
||||
@@ -1146,7 +1094,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 更新order_pay_record, 解冻部分
|
||||
List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
AbstractOrderLogic orderLogic = new DelayMerchantOrderLogic();
|
||||
List<Map<String, Object>> list = orderLogic.calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
for (Map<String, Object> map : list) {
|
||||
String paymentId = (String) map.get("paymentId");
|
||||
BigDecimal unfreezeAmount = (BigDecimal) map.get("unfreezeAmount");
|
||||
@@ -1154,54 +1103,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算解冻金额
|
||||
* @param orderAmount 订单消费金额
|
||||
* @param payRecordList 订单支付记录
|
||||
*/
|
||||
@Override
|
||||
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) {
|
||||
JSONObject jsonObject = JSON.parseObject(record.getDeductionRecord());
|
||||
String paymentId = jsonObject.getString("paymentId"); // 交易流水号
|
||||
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 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单分账逻辑
|
||||
* orderSplittingOperations
|
||||
|
||||
@@ -454,7 +454,7 @@ public abstract class AbstractOrderLogic implements InitializingBean {
|
||||
* 解析deductionRecord
|
||||
* 【公共方法】
|
||||
*/
|
||||
protected List<JSONObject> parseDeductionRecord(String deductionRecord) {
|
||||
public List<JSONObject> parseDeductionRecord(String deductionRecord) {
|
||||
List<JSONObject> resultList = Lists.newArrayList();
|
||||
if (StringUtils.isBlank(deductionRecord)) {
|
||||
return resultList;
|
||||
|
||||
@@ -279,17 +279,6 @@ public class DelayMerchantOrderLogic extends AbstractOrderLogic {
|
||||
|
||||
// 把消费金额冻结
|
||||
for (OrderPayRecord record : payRecordList) {
|
||||
// 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<JSONObject> arr = parseDeductionRecord(record.getDeductionRecord());
|
||||
|
||||
// 循环冻结金额
|
||||
|
||||
Reference in New Issue
Block a user