mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
打印日志
This commit is contained in:
@@ -86,6 +86,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void updateSpendAmount(String paymentId, BigDecimal spendAmount) {
|
||||
log.info("更新消费金额, paymentId:{}, 消费金额:{}", paymentId, spendAmount);
|
||||
commonUpdateAmountMethod(paymentId, spendAmount, null, null);
|
||||
}
|
||||
|
||||
@@ -94,6 +95,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void unfreezeAmount(String paymentId, BigDecimal unfreezeAmount) {
|
||||
log.info("解冻金额, paymentId:{}, 解冻金额:{}", paymentId, unfreezeAmount);
|
||||
commonUpdateAmountMethod(paymentId, null, null, unfreezeAmount.negate());
|
||||
}
|
||||
|
||||
@@ -104,6 +106,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void unfreezeAmountAndUpdateSpendAmount(String paymentId, BigDecimal unfreezeAmount, BigDecimal spendAmount) {
|
||||
log.info("解冻金额并更新消费金额, paymentId:{}, 解冻金额:{}, 消费金额:{}", paymentId, unfreezeAmount, spendAmount);
|
||||
commonUpdateAmountMethod(paymentId, spendAmount, null, unfreezeAmount.negate());
|
||||
}
|
||||
|
||||
@@ -113,6 +116,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void updateRefundAmountFromFreezeAmount(String paymentId, BigDecimal refundAmount) {
|
||||
log.info("部分解冻,并退款, paymentId:{}, 退款金额:{}", paymentId, refundAmount);
|
||||
commonUpdateAmountMethod(paymentId, null, refundAmount, refundAmount.negate());
|
||||
}
|
||||
|
||||
@@ -121,6 +125,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void updateRefundAmount(String paymentId, BigDecimal refundAmount) {
|
||||
log.info("更新剩余金额, paymentId:{}, 退款金额:{}", paymentId, refundAmount);
|
||||
commonUpdateAmountMethod(paymentId, null, refundAmount, null);
|
||||
}
|
||||
|
||||
@@ -129,6 +134,7 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
*/
|
||||
@Override
|
||||
public void updateFreezeAmount(String paymentId, BigDecimal freezeAmount) {
|
||||
log.info("更新冻结金额, paymentId:{}, 冻结金额:{}", paymentId, freezeAmount);
|
||||
commonUpdateAmountMethod(paymentId, null, null, freezeAmount);
|
||||
}
|
||||
|
||||
@@ -189,7 +195,5 @@ public class MemberAdapayRecordServiceImpl implements MemberAdapayRecordService
|
||||
balanceAmt = record.getPayAmt().subtract(refundAmt).subtract(spendAmt).subtract(freezeAmt);
|
||||
record.setBalanceAmt(balanceAmt);
|
||||
updateByPrimaryKeySelective(record);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.jsowell.pile.service.orderlogic;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.jsowell.adapay.response.RefundResponse;
|
||||
import com.jsowell.adapay.vo.OrderSettleResult;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||
import com.jsowell.common.enums.AcquirerEnum;
|
||||
import com.jsowell.common.enums.MemberWalletEnum;
|
||||
@@ -11,6 +13,7 @@ import com.jsowell.common.enums.ykc.*;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.*;
|
||||
import com.jsowell.pile.dto.ApplyRefundDTO;
|
||||
import com.jsowell.pile.dto.PayOrderDTO;
|
||||
import com.jsowell.pile.dto.PayOrderSuccessCallbackDTO;
|
||||
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
|
||||
@@ -24,6 +27,9 @@ import org.springframework.stereotype.Service;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 没有设置延时分账的运营商订单逻辑
|
||||
@@ -293,7 +299,49 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{
|
||||
*/
|
||||
@Override
|
||||
public void balancePaymentOrderRefund(OrderBasicInfo orderBasicInfo) {
|
||||
// 订单编号
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 订单消费金额
|
||||
BigDecimal orderAmount = orderBasicInfo.getOrderAmount();
|
||||
// 查支付记录
|
||||
List<OrderPayRecord> payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
|
||||
|
||||
Map<String, OrderPayRecord> payRecordMap = payRecordList.stream()
|
||||
.collect(Collectors.toMap(OrderPayRecord::getPayMode, Function.identity(), (k1, k2) -> k1));
|
||||
// 取出本金支付金额
|
||||
BigDecimal principalPay = null;
|
||||
|
||||
// 获取本金支付的记录
|
||||
OrderPayRecord principalPayRecord = payRecordMap.get(Constants.ONE);
|
||||
if (principalPayRecord != null) {
|
||||
principalPay = principalPayRecord.getPayAmount();
|
||||
}
|
||||
|
||||
// 计算需要退回的金额
|
||||
Map<String, BigDecimal> returnAmountMap = calculateReturnAmount(principalPay, null, orderAmount);
|
||||
logger.info("结算订单:{}, 剩余金额退回余额, 订单消费金额:{}, 本金支付金额:{}, 赠送支付金额:{}, 退回金额map:{}",
|
||||
orderCode, orderAmount, principalPay, null, JSONObject.toJSONString(returnAmountMap));
|
||||
|
||||
// 需要退回本金的金额
|
||||
BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal");
|
||||
|
||||
// 更新会员钱包/余额退回到钱包
|
||||
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
|
||||
.memberId(orderBasicInfo.getMemberId())
|
||||
.type(MemberWalletEnum.TYPE_IN.getValue()) // 进账
|
||||
.subType(MemberWalletEnum.SUBTYPE_ORDER_SETTLEMENT_REFUND.getValue()) // 订单结算退款
|
||||
.updatePrincipalBalance(returnPrincipal)
|
||||
.relatedOrderCode(orderCode)
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 更新order_pay_record, 解冻部分
|
||||
List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
for (Map<String, Object> map : list) {
|
||||
String paymentId = (String) map.get("paymentId");
|
||||
String unfreezeAmount = (String) map.get("unfreezeAmount");
|
||||
memberAdapayRecordService.unfreezeAmount(paymentId, new BigDecimal(unfreezeAmount));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -303,6 +351,58 @@ public class NotDelayMerchantOrderLogic extends AbstractOrderLogic{
|
||||
*/
|
||||
@Override
|
||||
public void onlinePaymentOrderRefund(OrderBasicInfo orderBasicInfo) {
|
||||
// 订单编号
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
|
||||
// 需要退款的金额
|
||||
BigDecimal refundAmount = orderBasicInfo.getRefundAmount();
|
||||
|
||||
// 微信退款逻辑
|
||||
ApplyRefundDTO applyRefundDTO = new ApplyRefundDTO();
|
||||
applyRefundDTO.setOrderCode(orderCode);
|
||||
applyRefundDTO.setRefundType(Constants.ONE);
|
||||
applyRefundDTO.setRefundAmount(refundAmount);
|
||||
|
||||
// 汇付退款需要一级运营商的小程序appId, 否则会退款失败
|
||||
String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId());
|
||||
if (StringUtils.isNotBlank(wechatAppId)) {
|
||||
applyRefundDTO.setWechatAppId(wechatAppId);
|
||||
}
|
||||
refundOrderWithAdapay(applyRefundDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 汇付支付-订单退款处理逻辑
|
||||
* 汇付支付订单退款
|
||||
*
|
||||
* @param dto
|
||||
*/
|
||||
public void refundOrderWithAdapay(ApplyRefundDTO dto) {
|
||||
logger.info("汇付支付订单:{}, 执行退款逻辑 param:{}", dto.getOrderCode(), JSON.toJSONString(dto));
|
||||
// 查出来原来的支付信息
|
||||
AdapayCallbackRecord callbackRecord = adapayCallbackRecordService.selectByOrderCode(dto.getOrderCode());
|
||||
if (Objects.isNull(callbackRecord)) {
|
||||
logger.error("汇付支付orderCode:{}, 订单退款处理逻辑, 查询订单微信支付记录为空!", dto.getOrderCode());
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_ORDER_CALLBACK_RECORD_ERROR);
|
||||
}
|
||||
|
||||
String paymentId = callbackRecord.getPaymentId();
|
||||
// 判断支付金额和退款金额
|
||||
BigDecimal refundAmount = dto.getRefundAmount();
|
||||
BigDecimal payAmt = callbackRecord.getPayAmt();
|
||||
if (refundAmount.compareTo(payAmt) > 0) {
|
||||
logger.error("汇付支付订单号:{}, 退款金额:{}(元),大于付款金额{}(元), 抛出异常", dto.getOrderCode(), refundAmount, payAmt);
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_ORDER_AMOUNT_ERROR);
|
||||
}
|
||||
|
||||
// 实时分账的调退款接口
|
||||
RefundResponse refundRequest = adapayService.createRefundRequest(paymentId, refundAmount,
|
||||
dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(), dto.getOrderCode());
|
||||
if (refundRequest != null && refundRequest.isNotFailed()) {
|
||||
// 交易退款金额
|
||||
BigDecimal refundAmt = new BigDecimal(refundRequest.getRefund_amt());
|
||||
// 解冻金额并更新消费金额
|
||||
memberAdapayRecordService.unfreezeAmountAndUpdateSpendAmount(paymentId, payAmt, refundAmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user