Commit e0c68566 by 查志伟

代付退款支持

parent e4f15ceb
...@@ -1423,6 +1423,8 @@ public class OrderSdkAdapter { ...@@ -1423,6 +1423,8 @@ public class OrderSdkAdapter {
.spellGroupCode(orderExtended.getSpellGroupCode()) .spellGroupCode(orderExtended.getSpellGroupCode())
.userPhone(orderExtended.getUserPhone()) .userPhone(orderExtended.getUserPhone())
.sendWord(orderExtended.getSendWord()) .sendWord(orderExtended.getSendWord())
.agentPayerId(orderExtended.getAgentPayerId())
.agentPayerName(orderExtended.getAgentPayerName())
.build(); .build();
} }
......
package cn.freemud.management.entities.dto.request.pay;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Clover.z
* @version 1.0.0
* @since 1.0.0
*/
@NoArgsConstructor
@Data
public class AgentPayQueryReq {
private String outOrderNo;
private String partnerId;
private String storeId;
private String fmTradeNo;
private String platformTradeNo;
private String endTransTradeNo;
private String ver;
}
package cn.freemud.management.entities.dto.request.pay;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Clover.z
* @version 1.0.0
* @since 1.0.0
*/
@NoArgsConstructor
@Data
public class AgentPayRefundReq {
private String refundTradeNo;
private String partnerId;
private String storeId;
private String fmTradeNo;
private String outOrderNo;
private String endTransTradeNo;
private String platformTradeNo;
private Long refundAmount;
private String refundDesc;
private String notifyUrl;
private String ver;
}
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Objects;
/**
* @author Clover.z
* @version 1.0.0
* @since 1.0.0
*/
@NoArgsConstructor
@Data
public class AgentPayQueryResp {
private Integer code;
private DataDTO data;
private String msg;
@NoArgsConstructor
@Data
public static class DataDTO {
private String ebCode;
private String fmTradeNo;
private String transId;
private String platformTradeNo;
private String outOrderNo;
private Integer payAmount;
private String endTransTradeNo;
private Integer mcouponAmount;
private Integer pcouponAmount;
private String status;
private String ver;
private String openId;
private String transCurrency;
private String tradeTime;
private String platformMchId;
}
public boolean isOk() {
return Objects.equals(code, 100);
}
}
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Objects;
/**
* @author Clover.z
* @version 1.0.0
* @since 1.0.0
*/
@NoArgsConstructor
@Data
public class AgentPayRefundResp {
private Integer code;
private DataDTO data;
private String msg;
@NoArgsConstructor
@Data
public static class DataDTO {
private String fmTradeNo;
private String endTransTradeNo;
private String platformTradeNo;
private String fmRefundNo;
private String refundEndTransTradeNo;
private Integer refundAmount;
private Integer settleRefundAmount;
private Integer mcouponAmount;
private Integer pcouponAmount;
private Integer totalAmount;
private String refundCurrency;
private String refundDesc;
private String refundTime;
private String transId;
private String ebcode;
}
public boolean isOk() {
return Objects.equals(code, 100);
}
}
...@@ -2,6 +2,7 @@ package cn.freemud.management.service.handle; ...@@ -2,6 +2,7 @@ package cn.freemud.management.service.handle;
import cn.freemud.management.adapter.PaymentSdkAdapter; import cn.freemud.management.adapter.PaymentSdkAdapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto; import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.request.pay.PaymentQueryOrderRequestDto; import cn.freemud.management.entities.dto.request.pay.PaymentQueryOrderRequestDto;
import cn.freemud.management.entities.dto.response.pay.*; import cn.freemud.management.entities.dto.response.pay.*;
...@@ -12,6 +13,7 @@ import cn.freemud.management.thirdparty.MulitiPaymentClient; ...@@ -12,6 +13,7 @@ import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.thirdparty.OMSPaymentClient; import cn.freemud.management.thirdparty.OMSPaymentClient;
import cn.freemud.management.util.RedisUtil; import cn.freemud.management.util.RedisUtil;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager; import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager;
...@@ -118,6 +120,34 @@ public class PaymentHandle { ...@@ -118,6 +120,34 @@ public class PaymentHandle {
} }
/** /**
* 代付订单退款
*
* @param request
* @param orderBean
* @return
*/
public PayRefundResponse agentPayRefund(OrderManagerRequest request, OrderBeanV1 orderBean) {
PayRefundResponse ret = new PayRefundResponse();
try {
OrderExtInfoDto ext = JSON.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
AgentPayRefundReq req = new AgentPayRefundReq();
req.setPartnerId(orderBean.getCompanyId());
req.setStoreId(orderBean.getShopId());
req.setFmTradeNo(ext.getPayTransId());
req.setOutOrderNo(orderBean.getOid());
req.setVer("V1");
AgentPayRefundResp resp = mulitiPaymentClient.agentPayRefund(req);
if (!resp.isOk()) throw new Exception("退款失败");
ret.setRefundId(resp.getData().getFmRefundNo());
ret.setPayRefundStatus(PayRefundStatus.SUCCESS);
} catch (Throwable e) {
ret.setPayRefundStatus(PayRefundStatus.FAIL);
}
return ret;
}
/**
* 卖券调用退款 * 卖券调用退款
* @param reason * @param reason
* @param orderBean * @param orderBean
......
...@@ -6,8 +6,8 @@ import cn.freemud.management.entities.dto.request.console.*; ...@@ -6,8 +6,8 @@ import cn.freemud.management.entities.dto.request.console.*;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.*;
import cn.freemud.management.enums.OperateType; import cn.freemud.management.enums.OperateType;
import cn.freemud.management.enums.*;
import cn.freemud.management.intercept.OrderServiceException; import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.service.OrderBaseService; import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService; import cn.freemud.management.service.OrderManagerService;
...@@ -15,7 +15,6 @@ import cn.freemud.management.service.handle.*; ...@@ -15,7 +15,6 @@ import cn.freemud.management.service.handle.*;
import cn.freemud.management.thirdparty.ConsoleApiClient; import cn.freemud.management.thirdparty.ConsoleApiClient;
import cn.freemud.management.thirdparty.OrderCallbackClient; import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.ApiLog; import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
...@@ -28,14 +27,13 @@ import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1; ...@@ -28,14 +27,13 @@ import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq; import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExpressReq;
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.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.ordercenter.util.LogUtil;
import com.freemud.application.sdk.api.service.EmailAlertService; import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.ByteOrderMark;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -246,8 +244,15 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -246,8 +244,15 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){ if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
refundResponse = paymentHandle.multiRefund(orderBean); refundResponse = paymentHandle.multiRefund(orderBean);
}else{ }else{
OrderExtendedReq ext = orderBean.getOrderExtended();
if (StringUtils.isNotBlank(ext.getAgentPayerId()) && !Objects.equals(ext.getAgentPayerId(), orderBean.getUserId())) {
//代付人信息不为空 并且和订单创建人不一样,表示代付单
refundResponse = paymentHandle.agentPayRefund(request, orderBean);
} else {
//正常订单现金退款
refundResponse = paymentHandle.refund(request, orderBean); refundResponse = paymentHandle.refund(request, orderBean);
} }
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错 } catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult()); return ResponseUtil.error(orderEx.getResult());
} }
......
...@@ -17,6 +17,10 @@ import cn.freemud.management.annotations.LogIgnoreFeign; ...@@ -17,6 +17,10 @@ import cn.freemud.management.annotations.LogIgnoreFeign;
import cn.freemud.management.constant.ResponseCodeConstant; import cn.freemud.management.constant.ResponseCodeConstant;
import cn.freemud.management.constant.ResponseCodeKeyConstant; import cn.freemud.management.constant.ResponseCodeKeyConstant;
import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request; import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.request.pay.AgentPayQueryReq;
import cn.freemud.management.entities.dto.request.pay.AgentPayRefundReq;
import cn.freemud.management.entities.dto.response.pay.AgentPayQueryResp;
import cn.freemud.management.entities.dto.response.pay.AgentPayRefundResp;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest; import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse; import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
...@@ -42,4 +46,19 @@ public interface MulitiPaymentClient { ...@@ -42,4 +46,19 @@ public interface MulitiPaymentClient {
@PostMapping("/payment/application/batch/refund") @PostMapping("/payment/application/batch/refund")
@LogIgnoreFeign(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR}, messageFieldName = ResponseCodeKeyConstant.MSG, printLog = true) @LogIgnoreFeign(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR}, messageFieldName = ResponseCodeKeyConstant.MSG, printLog = true)
PayBatchRefundResponse batchRefund(BatchOrderRefundV2Request batchOrderRefundV2Request); PayBatchRefundResponse batchRefund(BatchOrderRefundV2Request batchOrderRefundV2Request);
/**
* 代付退款
*/
@PostMapping("/payment/application/agentRefund")
@LogIgnoreFeign(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR}, messageFieldName = ResponseCodeKeyConstant.MSG, printLog = true)
AgentPayRefundResp agentPayRefund(AgentPayRefundReq req);
/**
* 代付查询
*/
@PostMapping("/payment/application/agentQuery")
@LogIgnoreFeign(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR}, messageFieldName = ResponseCodeKeyConstant.MSG, printLog = true)
AgentPayQueryResp agentPayQuery(AgentPayQueryReq req);
} }
...@@ -696,6 +696,8 @@ public class OrderCenterSdkAdapter { ...@@ -696,6 +696,8 @@ public class OrderCenterSdkAdapter {
.spellGroupCode(orderExtended.getSpellGroupCode()) .spellGroupCode(orderExtended.getSpellGroupCode())
.userPhone(orderExtended.getUserPhone()) .userPhone(orderExtended.getUserPhone())
.sendWord(orderExtended.getSendWord()) .sendWord(orderExtended.getSendWord())
.agentPayerId(orderExtended.getAgentPayerId())
.agentPayerName(orderExtended.getAgentPayerName())
.build(); .build();
} }
......
...@@ -48,15 +48,18 @@ public class OrderExtendedReq { ...@@ -48,15 +48,18 @@ public class OrderExtendedReq {
*/ */
private String sendWord; private String sendWord;
/**
* 代付人userId
*/
private String agentPayerId;
/**
* 代付人用户名称
*/
private String agentPayerName;
public OrderExtendedReq() { public OrderExtendedReq() {
}
public OrderExtendedReq(String orderClientGroup, String orderClientGroupCode, String storeNameEn, String spellGroupCode, String userPhone, String sendWord) {
this.orderClientGroup = orderClientGroup;
this.orderClientGroupCode = orderClientGroupCode;
this.storeNameEn = storeNameEn;
this.spellGroupCode = spellGroupCode;
this.userPhone = userPhone;
this.sendWord = sendWord;
} }
} }
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