...
|
...
|
@@ -47,12 +47,12 @@ import com.yohoufo.order.service.pay.unionpay.JsUnionpayService; |
|
|
import com.yohoufo.order.service.pay.wallet.WalletPayService;
|
|
|
import com.yohoufo.order.service.pay.weixin.WeixinMiniappPayService;
|
|
|
import com.yohoufo.order.service.pay.weixin.WeixinPayUFORealAppService;
|
|
|
import com.yohoufo.order.service.proxy.WalletTransferService;
|
|
|
import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator;
|
|
|
import com.yohoufo.order.service.support.codegenerator.bean.CodeMeta;
|
|
|
import com.yohoufo.order.service.transfer.TransferResult;
|
|
|
import com.yohoufo.order.utils.LoggerUtils;
|
|
|
import com.yohoufo.order.utils.PaymentHelper;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
...
|
...
|
@@ -62,8 +62,8 @@ import java.math.BigDecimal; |
|
|
import java.util.*;
|
|
|
import java.util.function.BiFunction;
|
|
|
import java.util.function.Consumer;
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
import static com.yohoufo.dal.order.model.OrdersPayTransfer.*;
|
|
|
import static com.yohoufo.order.common.BillTradeStatus.HK_AMOUNT_WAIT_PAYMENT;
|
|
|
import static com.yohoufo.order.common.BillTradeStatus.YOHO_STORE_AMOUNT_WAIT_PAYMENT;
|
|
|
import static com.yohoufo.order.common.TransferCase.EARNEST_MONEY_TO_BUYER;
|
...
|
...
|
@@ -168,6 +168,8 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
|
|
|
@Autowired
|
|
|
OrderCodeGenerator orderCodeGenerator;
|
|
|
@Autowired
|
|
|
private WalletTransferService walletTransferService;
|
|
|
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -519,12 +521,17 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
// 转账
|
|
|
try {
|
|
|
logger.info("{}, transfer alipayAccount={}, transferAmount={}", logTag, alipayAccount, transferAmount);
|
|
|
if (alipayTransferChancelSelector.isTransferWithAlipayExceedMillionTransfer()) {
|
|
|
transfer.setInterfaceType(OrdersPayTransfer.INTERFACE_TYPE_TRANSFER_WHEN_EXCEED_MILLION);
|
|
|
|
|
|
if (alipayTransferChancelSelector.isTransferWithWallet()) {
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_WALLET);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
transferWithWallet(logTag, record, buyerOrderCode, account, transferAmount, transfer);
|
|
|
} else if (alipayTransferChancelSelector.isTransferWithAlipayExceedMillionTransfer()) {
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_WHEN_EXCEED_MILLION);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
transferWithAlipayExceedMillionTransfer(logTag, record, buyerOrderCode, account, transferAmount, transfer);
|
|
|
} else {
|
|
|
transfer.setInterfaceType(OrdersPayTransfer.INTERFACE_TYPE_TRANSFER_NON_EXCEED_MILLION);
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_NON_EXCEED_MILLION);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
transferWithAlipayTransfer(logTag, record, buyerOrderCode, account, transferAmount, transfer);
|
|
|
}
|
...
|
...
|
@@ -602,11 +609,24 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
boolean exceedMillionAndSuccess = false;
|
|
|
transfer.setUpdateTime(now);
|
|
|
try {
|
|
|
if (alipayTransferChancelSelector.isTransferWithWallet()) {
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_WALLET);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
TransferResult transferResult = walletTransferService.transfer(logTag, transfer.getUid(), orderCode, record.getTradeType(), amount);
|
|
|
if (transferResult.getCode() == 200) {
|
|
|
transfer.setStatus(1);
|
|
|
return true;
|
|
|
} else {
|
|
|
throwServiceException(transferResult.getCode(), transferResult.getMsg());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
logger.info("{}, transfer start", logTag);
|
|
|
shoppingRiskWatchDog.checkAlipayBlackUser(aliPayAccount.getUid(), aliPayAccount);
|
|
|
shoppingRiskWatchDog.checkManualStopAlipayTransfer();
|
|
|
if (alipayTransferChancelSelector.isTransferWithAlipayExceedMillionTransfer()) {
|
|
|
transfer.setInterfaceType(2);
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_WHEN_EXCEED_MILLION);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
Map<String, String> mapResult = transferWhenExceedMillion(transfer.getId(), record, orderCode, aliPayAccount, amount, now);
|
|
|
String resultStr = JSON.toJSONString(mapResult);
|
...
|
...
|
@@ -619,7 +639,7 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
}
|
|
|
}
|
|
|
|
|
|
transfer.setInterfaceType(1);
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_NON_EXCEED_MILLION);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
jsonObject = alipayService.transferMoney(Long.toString(orderCode), aliPayAccount.getAlipayId(), aliPayAccount.getAlipayAccount(), amount);
|
|
|
if (jsonObject == null) {
|
...
|
...
|
@@ -640,7 +660,7 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
transfer.setStatus(1);
|
|
|
return true;
|
|
|
} else if (alipayTransferChancelSelector.isExceedMillion(jsonObject)) {
|
|
|
transfer.setInterfaceType(2);
|
|
|
transfer.setInterfaceType(INTERFACE_TYPE_TRANSFER_WHEN_EXCEED_MILLION);
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transfer);
|
|
|
Map<String, String> mapResult = transferWhenExceedMillion(transfer.getId(), record, orderCode, aliPayAccount, amount, now);
|
|
|
String resultStr = JSON.toJSONString(mapResult);
|
...
|
...
|
@@ -896,7 +916,9 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
400, "转账记录已成功转账,请不要重复操作。");
|
|
|
Integer interfaceType = transfer.getInterfaceType();
|
|
|
logger.info("{}, transfer channel router {}", logTag, interfaceType);
|
|
|
if (alipayTransferChancelSelector.isTransferWithAlipayExceedMillionTransfer(interfaceType)) {
|
|
|
if (alipayTransferChancelSelector.isTransferWithWallet(interfaceType)) {
|
|
|
transferWithWalletAndAddSuccessTradeBills(logTag, tradeBills, orderCode, account, amount, transfer);
|
|
|
} else if (alipayTransferChancelSelector.isTransferWithAlipayExceedMillionTransfer(interfaceType)) {
|
|
|
transferWithAlipayExceedMillionTransfer(logTag, tradeBills, orderCode, account, amount, transfer);
|
|
|
} else {
|
|
|
transferWithAlipayTransferAndAddSuccessTradeBills(logTag, tradeBills, orderCode, account, amount, transfer);
|
...
|
...
|
@@ -947,6 +969,36 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
.riskWatcher(Arrays.asList((uid, aliRsp) -> shoppingRiskWatchDog.checkAlipayBlackUser(uid, aliRsp),
|
|
|
(uid, aliRsp) -> shoppingRiskWatchDog.checkManualStopAlipayTransfer()))
|
|
|
.transfer();
|
|
|
parseTransferResultAndAddSuccessTradeBills(logTag, tradeBills, orderCode, transfer, transferResult);
|
|
|
}
|
|
|
|
|
|
private void transferWithWalletAndAddSuccessTradeBills(String logTag, TradeBills tradeBills, long orderCode, AuthorizeResultRespVO account, BigDecimal amount, OrdersPayTransfer transfer) {
|
|
|
TransferResult transferResult = walletTransferService.transfer(logTag,account.getUid(),orderCode,tradeBills.getTradeType(),amount);
|
|
|
parseTransferResultAndAddSuccessTradeBills(logTag, tradeBills, orderCode, transfer, transferResult);
|
|
|
}
|
|
|
|
|
|
private void transferWithWallet(String logTag, TradeBills tradeBills, long orderCode, AuthorizeResultRespVO account, BigDecimal amount, OrdersPayTransfer transfer) {
|
|
|
TransferResult transferResult = walletTransferService.transfer(logTag,account.getUid(),orderCode,tradeBills.getTradeType(),amount);
|
|
|
parseTransferResultAndUpdateTradeBillToSuccess(logTag, tradeBills, orderCode, transfer, transferResult);
|
|
|
}
|
|
|
|
|
|
|
|
|
private void transferWithAlipayTransfer(String logTag, TradeBills tradeBills, long orderCode, AuthorizeResultRespVO account, BigDecimal amount, OrdersPayTransfer transfer) {
|
|
|
|
|
|
TransferResult transferResult = alipayService.newAlipayTransfer(account.getUid())
|
|
|
.transferOrderCode(Long.toString(orderCode))
|
|
|
.alipayUid(account.getAlipayId())
|
|
|
.alipayAccount(account.getAlipayAccount())
|
|
|
.transferAmount(amount)
|
|
|
.riskWatcher(Arrays.asList((uid, alipayUid) -> shoppingRiskWatchDog.checkAlipayBlackUser(uid, alipayUid),
|
|
|
(uid, alipayUid) -> shoppingRiskWatchDog.checkManualStopAlipayTransfer() ))
|
|
|
.transfer();
|
|
|
parseTransferResultAndUpdateTradeBillToSuccess(logTag, tradeBills, orderCode, transfer, transferResult);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void parseTransferResultAndAddSuccessTradeBills(String logTag, TradeBills tradeBills, long orderCode, OrdersPayTransfer transfer, TransferResult transferResult) {
|
|
|
if (transferResult.getCode() == 200) {
|
|
|
logger.info("{}, transfer success and out trade no is {}", logTag, orderCode);
|
|
|
// 加新流水
|
...
|
...
|
@@ -960,21 +1012,12 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transferSuccess);
|
|
|
} else {
|
|
|
logger.warn("{}, transfer fail {}", logTag, transferResult);
|
|
|
recordTransferFailResult(transfer, transferResult);
|
|
|
throwServiceException(transferResult.getCode(), transferResult.getMsg());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void transferWithAlipayTransfer(String logTag, TradeBills tradeBills, long orderCode, AuthorizeResultRespVO account, BigDecimal amount, OrdersPayTransfer transfer) {
|
|
|
|
|
|
TransferResult transferResult = alipayService.newAlipayTransfer(account.getUid())
|
|
|
.transferOrderCode(Long.toString(orderCode))
|
|
|
.alipayUid(account.getAlipayId())
|
|
|
.alipayAccount(account.getAlipayAccount())
|
|
|
.transferAmount(amount)
|
|
|
.riskWatcher(Arrays.asList((uid, alipayUid) -> shoppingRiskWatchDog.checkAlipayBlackUser(uid, alipayUid),
|
|
|
(uid, alipayUid) -> shoppingRiskWatchDog.checkManualStopAlipayTransfer() ))
|
|
|
.transfer();
|
|
|
private void parseTransferResultAndUpdateTradeBillToSuccess(String logTag, TradeBills tradeBills, long orderCode, OrdersPayTransfer transfer, TransferResult transferResult) {
|
|
|
if (transferResult.getCode() == 200) {
|
|
|
logger.info("{}, transfer success and out trade no is {}", logTag, orderCode);
|
|
|
// 更新流水
|
...
|
...
|
@@ -990,10 +1033,19 @@ public class PaymentServiceImpl implements IPaymentService { |
|
|
} else {
|
|
|
alipayTransferChancelSelector.isExceedMillion(transferResult);
|
|
|
logger.warn("{}, transfer fail {}", logTag, transferResult);
|
|
|
recordTransferFailResult(transfer, transferResult);
|
|
|
throwServiceException(transferResult.getCode(), transferResult.getMsg());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void recordTransferFailResult(OrdersPayTransfer transfer, TransferResult transferResult) {
|
|
|
OrdersPayTransfer transferFail = new OrdersPayTransfer();
|
|
|
transferFail.setId(transfer.getId());
|
|
|
transferFail.setAlipayTradeResult(JSONObject.toJSONString(transferResult));
|
|
|
transferFail.setUpdateTime(DateUtil.getCurrentTimeSecond());
|
|
|
ordersPayTransferMapper.updateByPrimaryKeySelective(transferFail);
|
|
|
}
|
|
|
|
|
|
private void transferWithAlipayExceedMillionTransfer(String logTag,
|
|
|
TradeBills tradeBills,
|
|
|
long orderCode,
|
...
|
...
|
|