Commit 1bd57386 by 查志伟

Merge branch 'feature/退款支持优化' into develop

parents ae4e50c3 62ca6839
......@@ -15,7 +15,6 @@ package com.freemud.sdk.api.assortment.order.request.order;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.sdk.api.assortment.order.config.BaseConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -59,7 +58,7 @@ public class CancelOrderRequest extends BaseConfig {
若为2,默认做【创建】+【审核通过】,售后单状态为【退货中】
若为5,默认做【创建】+【同意并退货完成】,售后单状态【已退货】
若为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
*
* cn.freemud.enums.AfterSalesOrderCreateEventEnum
*/
private Integer createEvent;
......
......@@ -34,8 +34,6 @@ public class CancelOrderRequestAdapter {
req.setOperator("admin");
req.setOperationClient(OperationClientEnum.STATE_6.getIndex());
}
//若为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
req.setCreateEvent(4);
// 这里给默认值,外面调用者 自己的根据业务判断退款 状态
req.setRefundState(AfterSalesRefunStateEnum.STATE_1.getIndex());
req.setReqRemark(reason);
......
......@@ -7,6 +7,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import lombok.SneakyThrows;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
......@@ -32,7 +33,7 @@ public class PaymentSdkAdapter {
private String refundNotifyCallback;
public PayRefundRequestDto getOrderRefundRequest(String partnerId, String storeCode, String orderCode,
BigDecimal refundAmount, String payNo, String extInfoStr) {
BigDecimal refundAmount, String payNo, String extInfoStr, String reason) {
PayRefundRequestDto refundRequestDTO = new PayRefundRequestDto();
refundRequestDTO.setPartnerId(partnerId);
refundRequestDTO.setStoreId(storeCode);
......@@ -44,6 +45,7 @@ public class PaymentSdkAdapter {
refundRequestDTO.setOrgPayFmId(payNo);
refundRequestDTO.setOpenid(orderExtInfoDto.getOpenid());
refundRequestDTO.setRefundId(getRefundSerialNo().toString());
refundRequestDTO.setRefundDesc(StringUtils.isNotBlank(reason) ? reason : "商家退款");
return refundRequestDTO;
}
......
......@@ -18,6 +18,7 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
......@@ -36,7 +37,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
......@@ -95,7 +98,17 @@ public class PaymentHandle {
refundResponse = this.agentPayRefund(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), getRefundAmount(orderBean), ext.getPayTransId());
} else {
//正常订单现金退款 paymentcenter/refund
refundResponse = this.payRefund(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), getRefundAmount(orderBean), orderBean.getPayVoucher(), orderBean.getExtInfo(), request.getReason());
PayRefundRequestDto req = paymentSdkAdapter.getOrderRefundRequest(orderBean.getCompanyId(), orderBean.getShopId(),
orderBean.getOid(), getRefundAmount(orderBean), orderBean.getPayVoucher(), orderBean.getExtInfo(), request.getReason());
// 抖音订单,退款时需要传递商品信息
if (OrderClientType.TIKTOKPAY.getIndex().toString().equals(orderBean.getOrderClient())) {
Map<String, String> extParam = new HashMap<>();
OrderExtInfoDto ext = JSON.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
extParam.put("tt_goods", ext.getTtCouponIds());
extParam.put("tt_oid", orderBean.getOid());
req.setExtendParams(extParam);
}
refundResponse = this.payRefund(req);
}
}
} catch (OrderServiceException orderEx) {
......@@ -137,7 +150,17 @@ public class PaymentHandle {
refundResponse = this.agentPayRefund(order.getPartnerId(), order.getStoreId(), order.getOrderCode(), order.getActualPayAmount(), ext.getPayTransId());
} else {
//正常订单现金退款 paymentcenter/refund
refundResponse = this.payRefund(order.getPartnerId(), order.getStoreId(), order.getOrderCode(), order.getActualPayAmount(), order.getPayRequestNo(), order.getExtInfo(), reason);
PayRefundRequestDto req = paymentSdkAdapter.getOrderRefundRequest(order.getPartnerId(), order.getStoreId(),
order.getOrderCode(), order.getActualPayAmount(), order.getPayRequestNo(), order.getExtInfo(), reason);
// 抖音订单,退款时需要传递商品信息
if (OrderClientType.TIKTOKPAY.getIndex().equals(order.getOrderClient())) {
OrderExtInfoDto ext = JSON.parseObject(order.getExtInfo(), OrderExtInfoDto.class);
Map<String, String> extParam = new HashMap<>();
extParam.put("tt_goods", ext.getTtCouponIds());
extParam.put("tt_oid", order.getOrderCode());
req.setExtendParams(extParam);
}
refundResponse = this.payRefund(req);
}
}
} catch (OrderServiceException orderEx) {
......@@ -160,19 +183,15 @@ public class PaymentHandle {
/**
* 纯现金支付退款,非代付和混合支付退款
*
* @param reason 退款原因
* @return
* @param refundReq 退款请求
* @return 退款结果
*/
private PayRefundResponse payRefund(String partnerId, String storeCode, String orderCode,
BigDecimal refundAmount, String payNo, String extInfoStr, String reason) {
private PayRefundResponse payRefund(PayRefundRequestDto refundReq) {
PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
PayRefundRequestDto req = paymentSdkAdapter.getOrderRefundRequest(partnerId, storeCode, orderCode, refundAmount, payNo, extInfoStr);
//抖音支付必传
req.setRefundDesc(reason == null ? "商家退款" : reason);
if (refundAmount.longValue() <= 0) {
return handlePayRefundResponse(refundStatus, req.getRefundId());
if (refundReq.getRefundAmount() <= 0) {
return handlePayRefundResponse(refundStatus, refundReq.getRefundId());
}
BaseResponse<OrderRefundResponse> orderRefundResponse = this.orderPayRefund(req);
BaseResponse<OrderRefundResponse> orderRefundResponse = this.orderPayRefund(refundReq);
String message = null;
if (orderRefundResponse == null) {
refundStatus = PayRefundStatus.RUNNING;
......@@ -180,7 +199,7 @@ public class PaymentHandle {
refundStatus = this.getFinalRefundStatus(Integer.valueOf(orderRefundResponse.getCode()));
message = orderRefundResponse.getMessage();
}
PayRefundResponse payRefundResponse = handlePayRefundResponse(refundStatus, req.getRefundId());
PayRefundResponse payRefundResponse = handlePayRefundResponse(refundStatus, refundReq.getRefundId());
if (message != null) {
payRefundResponse.setMessage(message);
}
......@@ -334,9 +353,7 @@ public class PaymentHandle {
PayRefundStatus refundStatus = PayRefundStatus.SUCCESS;
PayRefundRequestDto orderRefundRequest = paymentSdkAdapter
.getOrderRefundRequest(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), getRefundAmount(orderBean), orderBean.getPayVoucher(), orderBean.getExtInfo());
//抖音支付必传
orderRefundRequest.setRefundDesc(reason);
.getOrderRefundRequest(orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getOid(), getRefundAmount(orderBean), orderBean.getPayVoucher(), orderBean.getExtInfo(), reason);
if (ObjectUtils.equals(orderBean.getAmount(), 0L)) {
return handlePayRefundResponse(refundStatus, orderRefundRequest.getRefundId());
}
......
......@@ -226,4 +226,12 @@ public class OrderExtInfoDto {
* svc卡支付时使用的 cardCode
*/
private String cardCode;
/**
* 抖音订单商品对应的券id,多个id用 , 分隔
* 用户下单的单个订单里券的数量可能是 N 张,对应这 N 张券,
* 交易模板会为每一张券生成一个内部的虚拟券 ID,
* 这个券 ID 在核销和退款流程里会被用到。
*/
private String ttCouponIds;
}
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