Commit e0ba0a12 by 周晓航

修改 虚拟全申请退款逻辑

Signed-off-by: 周晓航 <xiaohang.zhou@freemud.com>
parent b8837d93
......@@ -15,7 +15,11 @@ package com.freemud.sdk.api.assortment.order.enums;
public enum PayRefundStatus {
SUCCESS(1,"退款成功"),
FAIL(2,"退款失败"),
RUNNING(4,"退款中");
RUNNING(4,"退款中"),
/**
* 额外状态码 用于判断逻辑,
*/
NOT_SUFFICIENT_FUNDS(8200201,"余额不足");
private Integer code;
private String desc;
......
......@@ -15,7 +15,11 @@ package cn.freemud.enums;
public enum PayRefundStatus {
SUCCESS(1,"退款成功"),
FAIL(2,"退款失败"),
RUNNING(4,"退款中");
RUNNING(4,"退款中"),
/**
* 额外状态码 用于判断逻辑,
*/
NOT_SUFFICIENT_FUNDS(8200201,"余额不足");
private Integer code;
private String desc;
......
......@@ -57,8 +57,12 @@ import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse;
import cn.freemud.management.entities.dto.response.pay.OrderRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.SettlementTypeEnum;
import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.service.handle.ActivityHandle;
import cn.freemud.management.service.handle.OrderVerifyHandle;
import cn.freemud.management.service.handle.PaymentHandle;
import cn.freemud.manager.OrderManager;
import cn.freemud.manager.OrderTackCodeManager;
import cn.freemud.manager.SpellGroupOrderDataManager;
......@@ -280,6 +284,11 @@ public class OrderServiceImpl implements Orderservice {
private CouponOnlineClient couponOnlineClient;
@Autowired
private CustomerExtendClient customerExtendClient;
@Autowired
private OrderVerifyHandle orderVerifyHandle;
@Autowired
private PaymentHandle paymentHandle;
// @Override
// public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
// String trackingNo = LogThreadLocal.getTrackingNo();
......@@ -3602,27 +3611,44 @@ public class OrderServiceImpl implements Orderservice {
// 支付金额 大于0 调用支付 进行退款
Long refundId = System.currentTimeMillis();
int state = PayRefundStatus.SUCCESS.getCode();
if (orderBean.getActualPayAmount().compareTo(0L) > 0) {
//调用支付退款
PayRefundRequestDto orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, orderBean.getOid());
//抖音支付退款必传
orderPayRefundRequest.setRefundDesc(orderRefundVo.getReason() == null ? "用户退款" : orderRefundVo.getReason());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> response = payServiceImpl.orderRefund(orderPayRefundRequest);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
String failMsg = Objects.isNull(response) ? "支付退款失败" : JSON.toJSONString(response);
//TODO 退款失败则记录到世昌的表里
// fisherman ----> 支付校验 begin
BigDecimal refundAmount = orderVerifyHandle.getRefundAmount(orderBean, false);
orderBean.setAmount(refundAmount.longValue());
//支付退款
PayRefundResponse refundResponse;
try {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund("用户买券订单-申请退款", orderBean);
}
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.SUCCESS.getCode()) != 0) {
int failureType = 0;
if (refundResponse.getPayRefundStatus().getCode().compareTo(PayRefundStatus.NOT_SUFFICIENT_FUNDS.getCode()) == 0) {
failureType = RefundFailureRequestDTO.FAILURETYPE_NOT_SUFFICIENT_FUNDS;
}
RefundFailureRequestDTO requestDTO = RefundFailureRequestDTO.builder().orderCode(orderBean.getOid())
.failureType(RefundFailureRequestDTO.FAILURETYPE_NOT_SUFFICIENT_FUNDS)
.reason(failMsg)
.failureType(failureType)
.reason("退款失败")
.partnerId(orderBean.getCompanyId())
.operator("")
.ver(0).build();
orderServiceClient.refundFailures(requestDTO);
}
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
state = refundResponse.getPayRefundStatus().getCode();
} catch (OrderServiceException orderEx){
// 系统异常
RefundFailureRequestDTO requestDTO = RefundFailureRequestDTO.builder().orderCode(orderBean.getOid())
.failureType(RefundFailureRequestDTO.FAILURETYPE_SYSTEM_ERROR)
.reason(orderEx.getMessage())
.partnerId(orderBean.getCompanyId())
.operator("")
.ver(0).build();
orderServiceClient.refundFailures(requestDTO);
}
// fisherman ----> 支付校验 end
// 调用基础服务, 进行订单状态变更
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
orderBean.getCompanyId(), AfterSalesType.USER_CANCEL, orderRefundVo.getReason(), LogThreadLocal.getTrackingNo(), refundId.toString());
......
......@@ -629,7 +629,7 @@ public class OrderVerifyHandle {
/**
* 获取已完成订单退款金额
*/
private BigDecimal getRefundAmount(OrderBeanV1 data,boolean isRefundDeliveryFee) {
public BigDecimal getRefundAmount(OrderBeanV1 data,boolean isRefundDeliveryFee) {
//是否配置已完成订单可退款
BigDecimal refundAmount = new BigDecimal(data.getAmount());
if (isRefundDeliveryFee || isPayBySVC(data)){
......
......@@ -118,6 +118,38 @@ public class PaymentHandle {
}
/**
* 卖券调用退款
* @param reason
* @param orderBean
* @return -2正常 -1 不需要退款 0其他异常 1账户余额不足 2 系统异常
*/
public PayRefundResponse refund(String reason, OrderBeanV1 orderBean) {
PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
PayRefundRequestDto orderRefundRequest = paymentSdkAdapter.getOrderRefundRequest(orderBean, getRefundAmount(orderBean));
//抖音支付必传
orderRefundRequest.setRefundDesc(reason);
if (ObjectUtils.equals(orderBean.getAmount(), 0L)) {
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
}
BaseResponse<OrderRefundResponse> orderRefundResponse;
orderRefundResponse = this.orderPayRefund(orderRefundRequest);
if (orderRefundResponse == null) {
// 退款失败
refundStatus = PayRefundStatus.FAIL;
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
}
if (ObjectUtils.notEqual(orderRefundResponse.getCode(), SUCCESS)) {
//商户余额不足的情况下,返回异常特殊处理.
refundStatus = PayRefundStatus.FAIL;
if (ResponseResult.NOT_SUFFICIENT_FUNDS.getCode().equals(orderRefundResponse.getCode())) {
refundStatus = PayRefundStatus.NOT_SUFFICIENT_FUNDS;
}
}
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
}
/**
* 退款
*
* @param orderBean
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment