feat(pay): 添加提现手续费
parent
ed6a00a312
commit
ce879336fa
|
@ -31,7 +31,7 @@ public class CommissionRatio extends BaseEntity {
|
||||||
*/
|
*/
|
||||||
private Double ratio;
|
private Double ratio;
|
||||||
/**
|
/**
|
||||||
* 类型 0邀请人-被邀请人 1公司-商家
|
* 类型 0邀请人-被邀请人 1公司-商家 2星球手续费 3提现手续费
|
||||||
*/
|
*/
|
||||||
private Integer type;
|
private Integer type;
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -50,6 +50,7 @@ public class CommissionRatioServiceImpl extends ServiceImpl<CommissionRatioMappe
|
||||||
redisCache.deleteObject("CommissionRationInviterUser");
|
redisCache.deleteObject("CommissionRationInviterUser");
|
||||||
redisCache.deleteObject("CommissionRationMerchant");
|
redisCache.deleteObject("CommissionRationMerchant");
|
||||||
redisCache.deleteObject("CommissionRationCommunity");
|
redisCache.deleteObject("CommissionRationCommunity");
|
||||||
|
redisCache.deleteObject("CommissionRationFetch");
|
||||||
|
|
||||||
return this.getCommissionRatioVo(commissionRatio);
|
return this.getCommissionRatioVo(commissionRatio);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,11 +34,14 @@ import com.mcwl.common.utils.ShareCodeUtils;
|
||||||
import com.mcwl.common.utils.StringUtils;
|
import com.mcwl.common.utils.StringUtils;
|
||||||
import com.mcwl.memberCenter.domain.MemberLevel;
|
import com.mcwl.memberCenter.domain.MemberLevel;
|
||||||
import com.mcwl.memberCenter.service.MemberLevelService;
|
import com.mcwl.memberCenter.service.MemberLevelService;
|
||||||
|
import com.mcwl.myInvitation.domain.CommissionRatio;
|
||||||
import com.mcwl.myInvitation.domain.Consume;
|
import com.mcwl.myInvitation.domain.Consume;
|
||||||
import com.mcwl.myInvitation.mapper.ConsumeMapper;
|
import com.mcwl.myInvitation.mapper.ConsumeMapper;
|
||||||
|
import com.mcwl.myInvitation.service.CommissionRatioService;
|
||||||
import com.mcwl.pay.config.AliConfig;
|
import com.mcwl.pay.config.AliConfig;
|
||||||
import com.mcwl.pay.domain.OrderTrade;
|
import com.mcwl.pay.domain.OrderTrade;
|
||||||
import com.mcwl.pay.domain.OrderTradeDto;
|
import com.mcwl.pay.domain.OrderTradeDto;
|
||||||
|
import com.mcwl.pay.domain.enums.CommissionRationEnum;
|
||||||
import com.mcwl.pay.domain.vo.PayVo;
|
import com.mcwl.pay.domain.vo.PayVo;
|
||||||
import com.mcwl.pay.service.AliPayService;
|
import com.mcwl.pay.service.AliPayService;
|
||||||
import com.mcwl.pay.service.OrderTradeService;
|
import com.mcwl.pay.service.OrderTradeService;
|
||||||
|
@ -104,6 +107,9 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysEmailService sysEmailService;
|
private ISysEmailService sysEmailService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CommissionRatioService commissionRatioService;
|
||||||
|
|
||||||
private final int MAX_RETRY = 3; // 最大重试次数
|
private final int MAX_RETRY = 3; // 最大重试次数
|
||||||
|
|
||||||
|
|
||||||
|
@ -312,26 +318,19 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "钱包余额不足");
|
return R.fail(HttpStatus.SHOW_ERROR_MSG, "钱包余额不足");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化SDK
|
// 提现抽取比例
|
||||||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
|
String CommissionRationMerchant = redisCache.getCacheObject("CommissionRationFetch");
|
||||||
|
if (Objects.isNull(CommissionRationMerchant)) {
|
||||||
// 构造请求参数以调用接口
|
CommissionRatio commissionRatio = commissionRatioService.lambdaQuery()
|
||||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
.eq(CommissionRatio::getType, 3)
|
||||||
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
.one();
|
||||||
// 设置商家侧唯一订单号
|
CommissionRationMerchant = commissionRatio.getRatio().toString();
|
||||||
model.setOutBizNo(UUID.fastUUID().toString(true));
|
redisCache.setCacheObject("CommissionRationFetch", CommissionRationMerchant);
|
||||||
|
}
|
||||||
// 设置订单总金额
|
BigDecimal amountBigDecimal = new BigDecimal(amount);
|
||||||
model.setTransAmount(amount);
|
BigDecimal fetchBigDecimal = amountBigDecimal
|
||||||
|
.multiply(new BigDecimal("1").subtract(new BigDecimal(CommissionRationMerchant)));
|
||||||
// 设置描述特定的业务场景
|
amount = fetchBigDecimal.setScale(2, RoundingMode.HALF_UP).toString();
|
||||||
model.setBizScene("DIRECT_TRANSFER");
|
|
||||||
|
|
||||||
// 设置业务产品码
|
|
||||||
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
|
||||||
|
|
||||||
// 设置转账业务的标题
|
|
||||||
model.setOrderTitle("提现");
|
|
||||||
|
|
||||||
// 查询用户支付宝账户
|
// 查询用户支付宝账户
|
||||||
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService
|
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService
|
||||||
|
@ -343,20 +342,11 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "请先绑定支付宝账号");
|
return R.fail(HttpStatus.SHOW_ERROR_MSG, "请先绑定支付宝账号");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 收款方信息
|
|
||||||
Participant payeeInfo = new Participant();
|
|
||||||
|
|
||||||
payeeInfo.setIdentity(sysUserPayAccount.getOpenId());
|
|
||||||
payeeInfo.setIdentityType(aliConfig.getIdentityType());
|
|
||||||
model.setPayeeInfo(payeeInfo);
|
|
||||||
|
|
||||||
request.setBizModel(model);
|
|
||||||
|
|
||||||
// 添加提现记录和修改用户钱包
|
// 添加提现记录和修改用户钱包
|
||||||
this.addLogAndUpdateUserWallet(sysUser, amount);
|
this.addLogAndUpdateUserWallet(sysUser, amount);
|
||||||
|
|
||||||
// 证书用:certificateExecute(request),密钥用:execute(request)
|
// 证书用:certificateExecute(request),密钥用:execute(request)
|
||||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
AlipayFundTransUniTransferResponse response = getAlipayFundTransUniTransferResponse(amount, sysUserPayAccount.getOpenId());
|
||||||
System.out.println(response.getBody());
|
System.out.println(response.getBody());
|
||||||
|
|
||||||
if (response.isSuccess()) {
|
if (response.isSuccess()) {
|
||||||
|
@ -504,6 +494,41 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AlipayFundTransUniTransferResponse getAlipayFundTransUniTransferResponse(String amount, String identity) throws FileNotFoundException, AlipayApiException {
|
||||||
|
// 初始化SDK
|
||||||
|
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
|
||||||
|
|
||||||
|
// 构造请求参数以调用接口
|
||||||
|
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||||
|
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
||||||
|
// 设置商家侧唯一订单号
|
||||||
|
model.setOutBizNo(UUID.fastUUID().toString(true));
|
||||||
|
|
||||||
|
// 设置订单总金额
|
||||||
|
model.setTransAmount(amount);
|
||||||
|
|
||||||
|
// 设置描述特定的业务场景
|
||||||
|
model.setBizScene("DIRECT_TRANSFER");
|
||||||
|
|
||||||
|
// 设置业务产品码
|
||||||
|
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||||
|
|
||||||
|
// 设置转账业务的标题
|
||||||
|
model.setOrderTitle("提现");
|
||||||
|
|
||||||
|
// 收款方信息
|
||||||
|
Participant payeeInfo = new Participant();
|
||||||
|
|
||||||
|
payeeInfo.setIdentity(identity);
|
||||||
|
payeeInfo.setIdentityType(aliConfig.getIdentityType());
|
||||||
|
model.setPayeeInfo(payeeInfo);
|
||||||
|
|
||||||
|
request.setBizModel(model);
|
||||||
|
|
||||||
|
// 证书用:certificateExecute(request),密钥用:execute(request)
|
||||||
|
return alipayClient.certificateExecute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void cancelTrade(OrderTrade orderTrade) throws Exception {
|
private void cancelTrade(OrderTrade orderTrade) throws Exception {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue