查询退款对象

This commit is contained in:
2023-12-27 16:27:14 +08:00
parent 26be291014
commit dff6ddffae
7 changed files with 195 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
package com.jsowell.adapay.common;
import lombok.*;
/**
* 退款对象
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RefundInfo {
/**
* Adapay生成的退款对象id
*/
private String refund_id;
/**
* 退款状态I-初始P-处理中F-失败S-成功
*/
private String trans_status;
/**
* Adapay生成的支付对象id
*/
private String payment_id;
/**
* 退款金额
*/
private String refund_amt;
/**
* 退款手续费,退款成功时有值
*/
private String fee_amt;
/**
* 退款订单号
*/
private String refund_order_no;
}

View File

@@ -0,0 +1,31 @@
package com.jsowell.adapay.response;
import com.jsowell.adapay.common.RefundInfo;
import lombok.*;
import java.util.List;
/**
* 查询退款对象response
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PaymentRefundResponse extends AdapayBaseResponse{
/**
* 是否 prod模式true 是 prod模式false 是 mock模式
*/
private String prod_mode;
/**
* 退款对象列表,若未查询到结果时,字段为空
*/
private List<RefundInfo> refunds;
/**
* 当发生参数错误时返回具体的参数名,便于定位错误原因,详见 错误
*/
private String invalid_param;
}

View File

@@ -12,6 +12,7 @@ import com.huifu.adapay.model.*;
import com.jsowell.adapay.common.AdaPayment;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.common.RefundInfo;
import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.dto.*;
import com.jsowell.adapay.factory.AdapayConfigFactory;
@@ -1030,6 +1031,23 @@ public class AdapayService {
return payment_reverses;
}
/**
* 查询支付退款对象
*/
public List<RefundInfo> queryPaymentRefund(String paymentId, String wechatAppId) throws BaseAdaPayException {
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(wechatAppId);
if (config == null) {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
}
Map<String, Object> refundParams = Maps.newHashMap();
refundParams.put("payment_id", paymentId);
refundParams.put("app_id", config.getAdapayAppId());
Map<String, Object> response = Refund.query(refundParams, config.getWechatAppId());
PaymentRefundResponse paymentRefundResponse = JSON.parseObject(JSON.toJSONString(response), PaymentRefundResponse.class);
List<RefundInfo> refunds = paymentRefundResponse.getRefunds();
return refunds;
}
/**
* 查询支付确认对象列表
*/

View File

@@ -25,6 +25,7 @@ import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.uniapp.PileConnectorDetailVO;
import com.jsowell.pile.vo.web.BalanceDeductionAmountVO;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.OrderDetailInfoVO;
import com.jsowell.pile.vo.web.PileStationVO;
import com.jsowell.wxpay.service.WxAppletRemoteService;
import org.apache.commons.collections4.CollectionUtils;
@@ -156,6 +157,11 @@ public abstract class AbstractProgramLogic implements InitializingBean {
*/
public abstract void refundBalance(ApplyRefundDTO dto);
/**
* 查询退款信息
*/
public abstract List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo);
/**
* 订单支付成功 支付回调
* 支付成功后掉用这个方法

View File

@@ -31,14 +31,17 @@ import com.jsowell.pile.dto.*;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.web.BalanceDeductionAmountVO;
import com.jsowell.pile.vo.web.OrderDetailInfoVO;
import com.jsowell.pile.vo.web.UpdateMemberBalanceDTO;
import com.jsowell.wxpay.dto.WechatSendMsgDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -618,6 +621,46 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
}
}
@Override
public List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo) {
List<OrderDetailInfoVO.OrderRefundInfo> resultList = Lists.newArrayList();
// 查到原汇付支付id
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderBasicInfo.getOrderCode());
if (adapayCallbackRecord == null) {
return resultList;
}
// 获取appId
String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId());
// 通过支付id查询退款记录
String paymentId = adapayCallbackRecord.getPaymentId();
List<PaymentReverseResponse> paymentReverseResponses = null;
try {
paymentReverseResponses = adapayService.queryPaymentReverse(paymentId, wechatAppId);
} catch (BaseAdaPayException e) {
logger.error("查询支付撤销对象发生异常", e);
}
OrderDetailInfoVO.OrderRefundInfo refundInfo;
if (CollectionUtils.isNotEmpty(paymentReverseResponses)) {
for (PaymentReverseResponse reverseResponse : paymentReverseResponses) {
refundInfo = new OrderDetailInfoVO.OrderRefundInfo();
refundInfo.setReverseId(reverseResponse.getId());
refundInfo.setPaymentId(reverseResponse.getPayment_id());
refundInfo.setReverseAmt(reverseResponse.getReverse_amt());
LocalDateTime createdTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getCreated_time()));
refundInfo.setCreatedTime(DateUtils.formatDateTime(createdTime));
LocalDateTime succeedTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getSucceed_time()));
refundInfo.setSucceedTime(DateUtils.formatDateTime(succeedTime));
resultList.add(refundInfo);
}
}
return resultList;
}
/**
* 余额支付订单退款
*/

View File

@@ -11,6 +11,7 @@ import com.huifu.adapay.model.Payment;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.factory.AdapayConfigFactory;
import com.jsowell.adapay.response.PaymentReverseResponse;
import com.jsowell.adapay.response.RefundResponse;
import com.jsowell.adapay.vo.PaymentInfo;
import com.jsowell.common.constant.CacheConstants;
@@ -23,6 +24,7 @@ import com.jsowell.common.enums.adapay.MerchantDelayModeEnum;
import com.jsowell.common.enums.ykc.*;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.id.SnowflakeIdWorker;
import com.jsowell.pile.domain.*;
@@ -30,14 +32,17 @@ import com.jsowell.pile.dto.*;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.web.BalanceDeductionAmountVO;
import com.jsowell.pile.vo.web.OrderDetailInfoVO;
import com.jsowell.pile.vo.web.UpdateMemberBalanceDTO;
import com.jsowell.wxpay.dto.WechatSendMsgDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -522,6 +527,45 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
}
}
@Override
public List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo) {
List<OrderDetailInfoVO.OrderRefundInfo> resultList = Lists.newArrayList();
// 查到原汇付支付id
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderBasicInfo.getOrderCode());
if (adapayCallbackRecord == null) {
return resultList;
}
// 获取appId
String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId());
// 通过支付id查询退款记录
String paymentId = adapayCallbackRecord.getPaymentId();
List<PaymentReverseResponse> paymentReverseResponses = null;
try {
paymentReverseResponses = adapayService.queryPaymentReverse(paymentId, wechatAppId);
} catch (BaseAdaPayException e) {
logger.error("查询支付撤销对象发生异常", e);
}
OrderDetailInfoVO.OrderRefundInfo refundInfo;
if (CollectionUtils.isNotEmpty(paymentReverseResponses)) {
for (PaymentReverseResponse reverseResponse : paymentReverseResponses) {
refundInfo = new OrderDetailInfoVO.OrderRefundInfo();
refundInfo.setReverseId(reverseResponse.getId());
refundInfo.setPaymentId(reverseResponse.getPayment_id());
refundInfo.setReverseAmt(reverseResponse.getReverse_amt());
LocalDateTime createdTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getCreated_time()));
refundInfo.setCreatedTime(DateUtils.formatDateTime(createdTime));
LocalDateTime succeedTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getSucceed_time()));
refundInfo.setSucceedTime(DateUtils.formatDateTime(succeedTime));
resultList.add(refundInfo);
}
}
return resultList;
}
// uniApp 发送停止充电订阅消息
private void sendMsg(OrderBasicInfo orderBasicInfo) {
try {