Commit caccbb3a by ping.wu

重复支付退款101 code判断

parent 4e0b0065
...@@ -1324,13 +1324,13 @@ public class PayServiceImpl { ...@@ -1324,13 +1324,13 @@ public class PayServiceImpl {
if (!Objects.equals(checkParam.getCode(), "100")) { if (!Objects.equals(checkParam.getCode(), "100")) {
return checkParam; return checkParam;
} else { } else {
String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false); // String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false);
if (!StringUtils.isEmpty(receiveJsonStr)) { // if (!StringUtils.isEmpty(receiveJsonStr)) {
request.setAccountDivided(receiveJsonStr); // request.setAccountDivided(receiveJsonStr);
} // }
com.freemud.application.sdk.api.base.BaseResponse<PayRefundResponseDto> refundNewResponse = paymentNewClient.payRefund(request); com.freemud.application.sdk.api.base.BaseResponse<PayRefundResponseDto> refundNewResponse = paymentNewClient.payRefund(request);
if (Objects.equals(refundNewResponse.getCode(), "100")) { if (Objects.equals(refundNewResponse.getCode(), "100") || Objects.equals(refundNewResponse.getCode(), "101")) {
PayRefundResponseDto res = refundNewResponse.getData(); PayRefundResponseDto res = refundNewResponse.getData();
if (null != res && null != res.getData()) { if (null != res && null != res.getData()) {
PayRefundData refunData = res.getData(); PayRefundData refunData = res.getData();
...@@ -1367,23 +1367,23 @@ public class PayServiceImpl { ...@@ -1367,23 +1367,23 @@ public class PayServiceImpl {
} }
} }
private String setPayValueFromSDKByManager(String partnerId, String storeId, Long totalAmount, Long vipAmount, Long indirectId, boolean isPay) { // private String setPayValueFromSDKByManager(String partnerId, String storeId, Long totalAmount, Long vipAmount, Long indirectId, boolean isPay) {
if (indirectId == null) { // if (indirectId == null) {
return null; // return null;
} else { // } else {
AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant = openPlatformPartnerMerchantManager.selectMerchantDetail(indirectId); // AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant = openPlatformPartnerMerchantManager.selectMerchantDetail(indirectId);
List<ReceiverBiz> dtoReceivers = this.calcReceiverNew(openPlatformPartnerMerchant, partnerId, storeId, totalAmount, vipAmount, isPay); // List<ReceiverBiz> dtoReceivers = this.calcReceiverNew(openPlatformPartnerMerchant, partnerId, storeId, totalAmount, vipAmount, isPay);
return this.convertOrderPayRequestToReceivers(dtoReceivers); // return this.convertOrderPayRequestToReceivers(dtoReceivers);
} // }
} // }
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) { public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) {
if (StringUtils.isBlank(partnerId)) { if (StringUtils.isBlank(partnerId)) {
return ResponseUtils.error("500", "商户号不能为空"); return ResponseUtils.error("501", "商户号不能为空");
} else if (StringUtils.isBlank(storeId)) { } else if (StringUtils.isBlank(storeId)) {
return ResponseUtils.error("500", "门店号不能为空"); return ResponseUtils.error("501", "门店号不能为空");
} else if (amount == null) { } else if (amount == null) {
return ResponseUtils.error("500", "金额不能为空"); return ResponseUtils.error("501", "金额不能为空");
} else { } else {
return wxAppStore == null ? ResponseUtils.error("500", "支付信息没有配置") : ResponseUtils.success(); return wxAppStore == null ? ResponseUtils.error("500", "支付信息没有配置") : ResponseUtils.success();
} }
...@@ -1399,32 +1399,32 @@ public class PayServiceImpl { ...@@ -1399,32 +1399,32 @@ public class PayServiceImpl {
* @param totalAmount * @param totalAmount
* @return * @return
*/ */
public List<ReceiverBiz> calcReceiverNew(AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant, String partnerId, String storeId, Long totalAmount, Long vipAmount, boolean isPay) { // public List<ReceiverBiz> calcReceiverNew(AssortmentOpenPlatformPartnerMerchant openPlatformPartnerMerchant, String partnerId, String storeId, Long totalAmount, Long vipAmount, boolean isPay) {
String platform = openPlatformPartnerMerchant != null ? openPlatformPartnerMerchant.getPlatform() : ""; // String platform = openPlatformPartnerMerchant != null ? openPlatformPartnerMerchant.getPlatform() : "";
if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform) && !PlatformType.YF_PAYMENT.getCode().equals(platform)) { // if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform) && !PlatformType.YF_PAYMENT.getCode().equals(platform)) {
return null; // return null;
} // }
AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager = ApplicationBeanManager.getBean(AssortmentOpenPlatformPartnerMerchantAccountManager.class); // AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager = ApplicationBeanManager.getBean(AssortmentOpenPlatformPartnerMerchantAccountManager.class);
Long orderAmount; // Long orderAmount;
List<ReceiverBiz> result = Lists.newArrayList(); // List<ReceiverBiz> result = Lists.newArrayList();
List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts; // List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts;
if (vipAmount == null || vipAmount == 0L) { // if (vipAmount == null || vipAmount == 0L) {
// 不走会员分账 // // 不走会员分账
openPlatformPartnerMerchantAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, PayRuleIdEnum.DEFAULT.getCode()); // openPlatformPartnerMerchantAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, PayRuleIdEnum.DEFAULT.getCode());
orderAmount = totalAmount; // orderAmount = totalAmount;
} else { // } else {
// 走会员分账 // // 走会员分账
openPlatformPartnerMerchantAccounts = vipSubAccount(partnerId, storeId, vipAmount, platform, openPlatformPartnerMerchantAccountManager, result, isPay); // openPlatformPartnerMerchantAccounts = vipSubAccount(partnerId, storeId, vipAmount, platform, openPlatformPartnerMerchantAccountManager, result, isPay);
orderAmount = totalAmount - vipAmount; // orderAmount = totalAmount - vipAmount;
} // }
ReceiverService receiverService = ApplicationBeanManager.getBean(platform, ReceiverService.class); // ReceiverService receiverService = ApplicationBeanManager.getBean(platform, ReceiverService.class);
if (receiverService == null) { // if (receiverService == null) {
return null; // return null;
} // }
List<ReceiverBiz> list = receiverService.getReceivers(openPlatformPartnerMerchant, openPlatformPartnerMerchantAccounts, orderAmount, isPay); // List<ReceiverBiz> list = receiverService.getReceivers(openPlatformPartnerMerchant, openPlatformPartnerMerchantAccounts, orderAmount, isPay);
result.addAll(list); // result.addAll(list);
return result; // return result;
} // }
/** /**
* 易宝会员分账计算 * 易宝会员分账计算
...@@ -1437,49 +1437,49 @@ public class PayServiceImpl { ...@@ -1437,49 +1437,49 @@ public class PayServiceImpl {
* @param result * @param result
* @return * @return
*/ */
private List<AssortmentOpenPlatformPartnerMerchantAccount> vipSubAccount(String partnerId, String storeId, Long vipAmount, String platform, AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager // private List<AssortmentOpenPlatformPartnerMerchantAccount> vipSubAccount(String partnerId, String storeId, Long vipAmount, String platform, AssortmentOpenPlatformPartnerMerchantAccountManager openPlatformPartnerMerchantAccountManager
, List<ReceiverBiz> result, boolean isPay) { // , List<ReceiverBiz> result, boolean isPay) {
// 退款不需要计算会员分账 // // 退款不需要计算会员分账
if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform)) { // if (!PlatformType.YI_BAO_PAYMENT.getCode().equals(platform)) {
return Collections.emptyList(); // return Collections.emptyList();
} // }
// 查询固定金额得分账记录 // // 查询固定金额得分账记录
List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts = null; // List<AssortmentOpenPlatformPartnerMerchantAccount> openPlatformPartnerMerchantAccounts = null;
List<AssortmentOpenPlatformPartnerMerchantAccount> payRates = openPlatformPartnerMerchantAccountManager.selectPayRate(partnerId, storeId, vipAmount + "", PayRuleTypeEnum.FIXED_AMOUNT.getCode()); // List<AssortmentOpenPlatformPartnerMerchantAccount> payRates = openPlatformPartnerMerchantAccountManager.selectPayRate(partnerId, storeId, vipAmount + "", PayRuleTypeEnum.FIXED_AMOUNT.getCode());
if (CollectionUtils.isNotEmpty(payRates)) { // if (CollectionUtils.isNotEmpty(payRates)) {
AssortmentOpenPlatformPartnerMerchantAccount account = payRates.get(0); // AssortmentOpenPlatformPartnerMerchantAccount account = payRates.get(0);
if (isPay) { // if (isPay) {
ReceiverBiz receiver = new ReceiverBiz(); // ReceiverBiz receiver = new ReceiverBiz();
receiver.setAccount(account.getAccountCard()); // receiver.setAccount(account.getAccountCard());
//传整数,直接去除小数点后面的数字 // //传整数,直接去除小数点后面的数字
receiver.setPrice(vipAmount); // receiver.setPrice(vipAmount);
receiver.setName(account.getAccountName()); // receiver.setName(account.getAccountName());
result.add(receiver); // result.add(receiver);
} // }
List<AssortmentOpenPlatformPartnerMerchantAccount> subAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, account.getRuleId()); // List<AssortmentOpenPlatformPartnerMerchantAccount> subAccounts = openPlatformPartnerMerchantAccountManager.selectByRuleId(partnerId, storeId, account.getRuleId());
// 剔除固定金额 // // 剔除固定金额
openPlatformPartnerMerchantAccounts = subAccounts.stream().filter(a -> Objects.equals(a.getRuleType(), PayRuleTypeEnum.FIXED_PROPORTION.getCode())).collect(Collectors.toList()); // openPlatformPartnerMerchantAccounts = subAccounts.stream().filter(a -> Objects.equals(a.getRuleType(), PayRuleTypeEnum.FIXED_PROPORTION.getCode())).collect(Collectors.toList());
} // }
return openPlatformPartnerMerchantAccounts; // return openPlatformPartnerMerchantAccounts;
} // }
public String convertOrderPayRequestToReceivers(List<ReceiverBiz> receiverBizs) { // public String convertOrderPayRequestToReceivers(List<ReceiverBiz> receiverBizs) {
if (CollectionUtils.isEmpty(receiverBizs)) { // if (CollectionUtils.isEmpty(receiverBizs)) {
return null; // return null;
} // }
//分账 // //分账
List<ReceiverBiz> receivers = receiverBizs; // List<ReceiverBiz> receivers = receiverBizs;
List<AccountDivideVo> divideVos = new ArrayList<>(); // List<AccountDivideVo> divideVos = new ArrayList<>();
for (ReceiverBiz receiver : receivers) { // for (ReceiverBiz receiver : receivers) {
AccountDivideVo divideVo = new AccountDivideVo(); // AccountDivideVo divideVo = new AccountDivideVo();
divideVo.setLedgerNo(receiver.getAccount()); // divideVo.setLedgerNo(receiver.getAccount());
divideVo.setLedgerName(receiver.getName()); // divideVo.setLedgerName(receiver.getName());
Double amount = receiver.getPrice() / 100d; // Double amount = receiver.getPrice() / 100d;
divideVo.setAmount(amount + ""); // divideVo.setAmount(amount + "");
divideVos.add(divideVo); // divideVos.add(divideVo);
} // }
return JSONObject.toJSONString(divideVos); // return JSONObject.toJSONString(divideVos);
} // }
} }
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<dependency> <dependency>
<artifactId>assortment-data-manager</artifactId> <artifactId>assortment-data-manager</artifactId>
<groupId>com.freemud.sdk.api.assortment</groupId> <groupId>com.freemud.sdk.api.assortment</groupId>
<version>4.3.0.RELEASE</version> <version>5.5.31-RELEASE</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
package cn.freemud.management.adapter; package cn.freemud.management.adapter;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
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.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.paymentcenter.client.request.OrderRefundNewRequest;
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.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -45,8 +45,8 @@ public class PaymentSdkAdapter { ...@@ -45,8 +45,8 @@ public class PaymentSdkAdapter {
return refundRequestDTO; return refundRequestDTO;
} }
public OrderRefundNewRequest convert2OrderRefundNewRequest(OrderBeanV1 order, OrderExtInfoDto orderExtInfoDto) { public PayRefundRequestDto convert2OrderRefundNewRequest(OrderBeanV1 order, OrderExtInfoDto orderExtInfoDto) {
OrderRefundNewRequest refundRequest = new OrderRefundNewRequest(); PayRefundRequestDto refundRequest = new PayRefundRequestDto();
refundRequest.setPartnerId(order.getCompanyId()); refundRequest.setPartnerId(order.getCompanyId());
refundRequest.setVer(2); refundRequest.setVer(2);
refundRequest.setStoreId(order.getShopId()); refundRequest.setStoreId(order.getShopId());
......
...@@ -15,6 +15,8 @@ public @interface LogIgnoreFeign { ...@@ -15,6 +15,8 @@ public @interface LogIgnoreFeign {
*/ */
boolean printLog() default false; boolean printLog() default false;
String logMessage() default ""; // 输出方法名称,用以识别:Apollo临时开关temp-print-body-log-methods
/** /**
* printLog 设置成true的时候,可以排除哪些状态码的响应不用打印响应报文,只会打印状态码 * printLog 设置成true的时候,可以排除哪些状态码的响应不用打印响应报文,只会打印状态码
* *
......
package cn.freemud.management.entities.dto.request.pay;
import lombok.Data;
import java.util.Map;
@Data
public class PayRefundRequestDto {
/**
* 接口版本,必须为2
*/
private Integer ver;
/**
* 商户编号(由非码提供)
*/
private String partnerId;
/**
* 退款交易序号
*/
private String refundId;
/**
* 营业员编号(可以使用固定值)
*/
private String operatorId;
/**
* 商家POS机编号(可以使用固定值)
*/
private String stationId;
/**
* 商家门店号(在线支付需要提前定义)
*/
private String storeId;
/**
* 终端交易序号
*/
private String transId;
/**
* 业务日期
*/
private String businessDate;
/**
* 客户端code
*/
private Long clientCode;
/**
* 非码交易流水号
*/
private String fmId;
/**
* 总金额
*/
private Long totalAmount;
/**
* 退款金额
*/
private Long refundAmount;
/**
* 退款原因描述
*/
private String refundDesc;
/**
* 退款回调地址
*/
private String notifyUrl;
/**
* 退款时分账规则
*/
private String accountDivided;
/**
* 扩展字段,存放扩展信息
*/
private Map<String, String> extendParams;
}
package cn.freemud.management.entities.dto.request.pay;
import lombok.Data;
@Data
public class PaymentQueryOrderRequestDto {
private String transactionCode;
private String ver;
private String partnerId;
private String storeId;
private String frontTransId;
private String stationId;
private String operatorId;
private String transId;
private String businessDate;
private String clientCode;
private String fmId;
private String thirdPartTradeNo;
}
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
@Data
public class PayRefundData {
private Integer resultCode;
private String resultMsg;
private String thirdPartTradeNo;
private String tradeNo;
private String refundTradeNo;
private String thirdPartRefundTradeNo;
private Long refundAmount;
private Long totalAmount;
private Integer refundStatus;
}
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
@Data
public class PayRefundResponseDto {
private Integer code;
private String message;
private PayRefundData data;
}
package cn.freemud.management.entities.dto.response.pay;
import lombok.Data;
@Data
public class PaymentQueryOrderResponseDto {
private String userId;
private Integer merchantCoupon;
private Integer platformCoupon;
private Integer vipAmount;
private Long amount;
private String transactionCode;
private String status;
private String payCode;
}
...@@ -2,40 +2,46 @@ package cn.freemud.management.service.handle; ...@@ -2,40 +2,46 @@ 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.PayRefundRequestDto;
import cn.freemud.management.entities.dto.request.pay.PaymentQueryOrderRequestDto;
import cn.freemud.management.entities.dto.response.pay.PayRefundData;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponseDto;
import cn.freemud.management.entities.dto.response.pay.PaymentQueryOrderResponseDto;
import cn.freemud.management.enums.ResponseResult; import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.intercept.OrderServiceException; import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.thirdparty.MulitiPaymentClient; import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.thirdparty.PaymentNewClient;
import cn.freemud.management.util.RedisUtil; import cn.freemud.management.util.RedisUtil;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager;
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.log.LogThreadLocal;
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.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
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.response.orderInfo.AfterSalesOrderResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.paymentcenter.client.request.OrderRefundNewRequest; import com.freemud.application.sdk.api.util.ResponseUtils;
import com.freemud.application.sdk.api.paymentcenter.client.response.RefundNewResponse;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.sdk.api.assortment.order.enums.OldOrderType; import com.freemud.sdk.api.assortment.order.enums.OldOrderType;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
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;
import com.freemud.sdk.api.assortment.payment.constant.ConstantPaymentReqType;
import com.freemud.sdk.api.assortment.payment.constant.ResponseConstant;
import com.freemud.sdk.api.assortment.payment.enums.PaymentRefundStatus;
import com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest; import com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest;
import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse; import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse;
import com.freemud.sdk.api.assortment.payment.service.StandardPaymentService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
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.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -58,8 +64,8 @@ public class PaymentHandle { ...@@ -58,8 +64,8 @@ public class PaymentHandle {
@Value("${mccafe.partner.id}") @Value("${mccafe.partner.id}")
private String macCafePartnerId; private String macCafePartnerId;
@Autowired // @Autowired
private StandardPaymentService standardPaymentService; // private StandardPaymentService standardPaymentService;
@Autowired @Autowired
private PaymentSdkAdapter paymentSdkAdapter; private PaymentSdkAdapter paymentSdkAdapter;
@Autowired @Autowired
...@@ -68,8 +74,14 @@ public class PaymentHandle { ...@@ -68,8 +74,14 @@ public class PaymentHandle {
private MulitiPaymentClient mulitiPaymentClient; private MulitiPaymentClient mulitiPaymentClient;
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
// @Autowired
// private PaymentNewService paymentNewService;
@Autowired @Autowired
private PaymentNewService paymentNewService; private PaymentNewClient paymentNewClient;
@Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
/** /**
* 退款 * 退款
...@@ -86,7 +98,8 @@ public class PaymentHandle { ...@@ -86,7 +98,8 @@ public class PaymentHandle {
return handlePayRefundResponse(refundStatus,orderRefundRequest.getRefundId()); return handlePayRefundResponse(refundStatus,orderRefundRequest.getRefundId());
} }
BaseResponse<OrderRefundResponse> orderRefundResponse; BaseResponse<OrderRefundResponse> orderRefundResponse;
orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, LogThreadLocal.getTrackingNo()); // orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, LogThreadLocal.getTrackingNo());
orderRefundResponse = this.orderRefundNew(orderRefundRequest);
if (orderRefundResponse==null){ if (orderRefundResponse==null){
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION); throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
} }
...@@ -109,13 +122,15 @@ public class PaymentHandle { ...@@ -109,13 +122,15 @@ public class PaymentHandle {
*/ */
public PayRefundResponse newOrderRefund(OrderBeanV1 orderBean, OrderExtInfoDto orderExtInfoDto){ public PayRefundResponse newOrderRefund(OrderBeanV1 orderBean, OrderExtInfoDto orderExtInfoDto){
PayRefundStatus refundStatus=PayRefundStatus.SUCCESS; PayRefundStatus refundStatus=PayRefundStatus.SUCCESS;
OrderRefundNewRequest refundRequest = paymentSdkAdapter.convert2OrderRefundNewRequest(orderBean, orderExtInfoDto); PayRefundRequestDto refundRequest = paymentSdkAdapter.convert2OrderRefundNewRequest(orderBean, orderExtInfoDto);
if (ObjectUtils.equals(orderBean.getAmount(), 0L)) { if (ObjectUtils.equals(orderBean.getAmount(), 0L)) {
return handlePayRefundResponse(refundStatus,refundRequest.getRefundId()); return handlePayRefundResponse(refundStatus,refundRequest.getRefundId());
} }
com.freemud.application.sdk.api.base.BaseResponse<RefundNewResponse> orderRefundResponse; // com.freemud.application.sdk.api.base.BaseResponse<RefundNewResponse> orderRefundResponse;
BaseResponse<PayRefundResponseDto> orderRefundResponse;
try { try {
orderRefundResponse = paymentNewService.newOrderRefund(refundRequest, LogThreadLocal.getTrackingNo()); // orderRefundResponse = paymentNewService.newOrderRefund(refundRequest, LogThreadLocal.getTrackingNo());
orderRefundResponse = paymentNewClient.payRefund(refundRequest);
}catch (Exception ex){ }catch (Exception ex){
ErrorLog.errorConvertJson(this.getClass(), "paymentNewService.newOrderRefundError", ex); ErrorLog.errorConvertJson(this.getClass(), "paymentNewService.newOrderRefundError", ex);
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION); throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
...@@ -123,7 +138,11 @@ public class PaymentHandle { ...@@ -123,7 +138,11 @@ public class PaymentHandle {
if (orderRefundResponse==null){ if (orderRefundResponse==null){
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION); throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
} }
if (ObjectUtils.notEqual(orderRefundResponse.getCode(),SUCCESS)){ if(ObjectUtils.equals(orderRefundResponse.getCode(),"101")){
refundStatus=ObjectUtils.equals( PayRefundStatus.SUCCESS.getCode(), orderRefundResponse.getData().getCode())?PayRefundStatus.SUCCESS:PayRefundStatus.FAIL;
return handlePayRefundResponse(refundStatus,refundRequest.getRefundId());
}
if ( ObjectUtils.notEqual(orderRefundResponse.getCode(),SUCCESS)){
throw new OrderServiceException(ResponseResult.REFUND_FAIL,orderRefundResponse.getMessage()); throw new OrderServiceException(ResponseResult.REFUND_FAIL,orderRefundResponse.getMessage());
} }
refundStatus=ObjectUtils.equals( PayRefundStatus.SUCCESS.getCode(), orderRefundResponse.getData().getCode())?PayRefundStatus.SUCCESS:PayRefundStatus.FAIL; refundStatus=ObjectUtils.equals( PayRefundStatus.SUCCESS.getCode(), orderRefundResponse.getData().getCode())?PayRefundStatus.SUCCESS:PayRefundStatus.FAIL;
...@@ -153,7 +172,8 @@ public class PaymentHandle { ...@@ -153,7 +172,8 @@ public class PaymentHandle {
} }
BaseResponse<OrderRefundResponse> orderRefundResponse; BaseResponse<OrderRefundResponse> orderRefundResponse;
try { try {
orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, ""); // orderRefundResponse = standardPaymentService.orderRefund(orderRefundRequest, "");
orderRefundResponse = this.orderRefundNew(orderRefundRequest);
}catch (Exception ex){ }catch (Exception ex){
ErrorLog.errorConvertJson(this.getClass(), "refundError", ex); ErrorLog.errorConvertJson(this.getClass(), "refundError", ex);
return handlePayRefundResponse(PayRefundStatus.FAIL,orderRefundRequest.getRefundId()); return handlePayRefundResponse(PayRefundStatus.FAIL,orderRefundRequest.getRefundId());
...@@ -207,4 +227,105 @@ public class PaymentHandle { ...@@ -207,4 +227,105 @@ public class PaymentHandle {
} }
return handlePayRefundResponse(refundStatus,multiOrderRefundRequest.getRefundTradeNo()); return handlePayRefundResponse(refundStatus,multiOrderRefundRequest.getRefundTradeNo());
} }
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> orderRefundNew(OrderRefundRequest refundRequest) {
PaymentQueryOrderRequestDto paymentQueryOrderRequest = new PaymentQueryOrderRequestDto();
paymentQueryOrderRequest.setPartnerId(refundRequest.getPartnerId());
paymentQueryOrderRequest.setStoreId(refundRequest.getStoreId());
paymentQueryOrderRequest.setFrontTransId(refundRequest.getOrgTransId());
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryOrderResponseDto> payQueryOrderResponse = paymentNewClient.payQueryOrder(paymentQueryOrderRequest);
Long vipAmount = 0L;
String payCode = null;
if (Objects.equals(payQueryOrderResponse.getCode(), "100") && payQueryOrderResponse.getData() != null) {
if ((payQueryOrderResponse.getData()).getVipAmount() != null && (payQueryOrderResponse.getData()).getVipAmount() != 0) {
vipAmount = (long) (payQueryOrderResponse.getData()).getVipAmount();
}
refundRequest.setTotalAmount((payQueryOrderResponse.getData()).getAmount());
payCode = payQueryOrderResponse.getCode();
}
if (refundRequest.getTotalAmount() == null || refundRequest.getTotalAmount() == 0L) {
refundRequest.setTotalAmount(refundRequest.getRefundAmount());
}
AssortmentOpenPlatformIappWxappStore wxAppStore = this.assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(refundRequest.getAppId(), refundRequest.getStoreId(), payCode);
PayRefundRequestDto request = new PayRefundRequestDto();
request.setStoreId(refundRequest.getStoreId());
request.setStationId(refundRequest.getStationId());
request.setOperatorId(refundRequest.getOperatorId());
request.setTransId(refundRequest.getOrgTransId());
request.setBusinessDate(refundRequest.getBusinessDate());
request.setFmId(refundRequest.getOrgPayFmId());
request.setTotalAmount(refundRequest.getTotalAmount());
request.setRefundAmount(refundRequest.getRefundAmount());
request.setRefundId(refundRequest.getRefundId().toString());
request.setRefundDesc(refundRequest.getRefundDesc());
request.setNotifyUrl(refundRequest.getNotifyUrl());
request.setPartnerId(refundRequest.getPartnerId());
request.setVer(Integer.valueOf(ConstantPaymentReqType.version));
request.setExtendParams(refundRequest.getExtendParams());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam = this.checkParam(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount(), wxAppStore);
if (!Objects.equals(checkParam.getCode(), "100")) {
return checkParam;
} else {
// String receiveJsonStr = this.setPayValueFromSDKByManager(refundRequest.getPartnerId(), refundRequest.getStoreId(), refundRequest.getRefundAmount() + vipAmount, vipAmount, wxAppStore.getIndirectId(), false);
// if (!StringUtils.isEmpty(receiveJsonStr)) {
// request.setAccountDivided(receiveJsonStr);
// }
com.freemud.application.sdk.api.base.BaseResponse<PayRefundResponseDto> refundNewResponse = paymentNewClient.payRefund(request);
if (Objects.equals(refundNewResponse.getCode(), "100") || Objects.equals(refundNewResponse.getCode(), "101")) {
PayRefundResponseDto res = refundNewResponse.getData();
if (null != res && null != res.getData()) {
PayRefundData refunData = res.getData();
OrderRefundResponse refundResponse = new OrderRefundResponse();
refundResponse.setStatusCode(refunData.getResultCode());
refundResponse.setMsg(refunData.getResultMsg());
refundResponse.setRefundAmount(refunData.getRefundAmount());
refundResponse.setTotalAmount(refunData.getTotalAmount());
refundResponse.setRefundStatus(this.getRefundStatus(refunData.getResultCode()));
refundResponse.setRefundTradeNo(refunData.getRefundTradeNo());
refundResponse.setTradeNo(refunData.getRefundTradeNo());
refundResponse.setThirdPartRefundTradeNo(refunData.getThirdPartRefundTradeNo());
refundResponse.setThirdPartTradeNo(refunData.getThirdPartTradeNo());
refundResponse.setTotalAmount(refunData.getTotalAmount());
return ResponseUtils.success(refundResponse);
}
}
if (!Arrays.asList("8200201", "8200202", "8200203", "8200204", "8200205").contains(refundNewResponse.getCode())) {
// this.emailAlertService.sendEmailAlert("支付退款失败", "请求json:" + JSONObject.toJSONString(request) + "返回msg:" + refundNewResponse.getMessage());
}
return ResponseUtils.error(refundNewResponse.getCode(), refundNewResponse.getMessage());
}
}
public com.freemud.application.sdk.api.base.BaseResponse<OrderRefundResponse> checkParam(String partnerId, String storeId, Long amount, AssortmentOpenPlatformIappWxappStore wxAppStore) {
if (StringUtils.isBlank(partnerId)) {
return ResponseUtils.error("501", "商户号不能为空");
} else if (StringUtils.isBlank(storeId)) {
return ResponseUtils.error("501", "门店号不能为空");
} else if (amount == null) {
return ResponseUtils.error("501", "金额不能为空");
} else {
return wxAppStore == null ? ResponseUtils.error("500", "支付信息没有配置") : ResponseUtils.success();
}
}
public Integer getRefundStatus(Integer resultCode) {
if (Objects.equals(resultCode, ResponseConstant.SUCCESS_RESPONSE_CODE_INT)) {
return PaymentRefundStatus.PAYMENT_REFUND_STATUS_1.getCode();
} else {
return Objects.equals(resultCode, ResponseConstant.REFUND_RESPONSE_CODE) ? PaymentRefundStatus.PAYMENT_REFUND_STATUS_4.getCode() : PaymentRefundStatus.PAYMENT_REFUND_STATUS_2.getCode();
}
}
} }
package cn.freemud.management.thirdparty;
import cn.freemud.management.annotations.LogIgnoreFeign;
import cn.freemud.management.entities.dto.request.pay.PayRefundRequestDto;
import cn.freemud.management.entities.dto.request.pay.PaymentQueryOrderRequestDto;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponseDto;
import cn.freemud.management.entities.dto.response.pay.PaymentQueryOrderResponseDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: PaymentNewClient
* @Package cn.freemud.service.thirdparty
* @Description:
* @author: ping1.wu
* @date: 2019/12/25 19:09
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@FeignClient(name = "payment-center-api",url="${payment.new.baseUrl:}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface PaymentNewClient {
/**
* 关闭预支付订单
*/
// @LogIgnoreFeign(logMessage="payClose")
// @PostMapping("paymentcenter/close")
// com.freemud.application.sdk.api.base.BaseResponse<PaymentCloseUnifiedOrderResponse> cancelNewUnifiedOrder(@RequestBody PaymentCloseUnifiedOrderRequest request);
/**
* 支付查询
*/
// @LogIgnoreFeign(logMessage="payQuery")
// @PostMapping("paymentcenter/query")
// com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryResponseDto> payQuery(@RequestBody PaymentQueryRequestDto request);
/**
* 支付退款查询
*/
@LogIgnoreFeign(logMessage="payQueryOrder")
@PostMapping("paymentcenter/queryOrder")
com.freemud.application.sdk.api.base.BaseResponse<PaymentQueryOrderResponseDto> payQueryOrder(@RequestBody PaymentQueryOrderRequestDto request);
/**
* 现金支付退款接口
*/
@LogIgnoreFeign(logMessage="payRefund")
@PostMapping("paymentcenter/refund")
com.freemud.application.sdk.api.base.BaseResponse<PayRefundResponseDto> payRefund(@RequestBody PayRefundRequestDto request);
}
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