Commit 1bd57386 by 查志伟

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

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