feat(pay): 添加提现手续费
parent
ed6a00a312
commit
ce879336fa
|
@ -31,7 +31,7 @@ public class CommissionRatio extends BaseEntity {
|
|||
*/
|
||||
private Double ratio;
|
||||
/**
|
||||
* 类型 0邀请人-被邀请人 1公司-商家
|
||||
* 类型 0邀请人-被邀请人 1公司-商家 2星球手续费 3提现手续费
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
|
|
|
@ -50,6 +50,7 @@ public class CommissionRatioServiceImpl extends ServiceImpl<CommissionRatioMappe
|
|||
redisCache.deleteObject("CommissionRationInviterUser");
|
||||
redisCache.deleteObject("CommissionRationMerchant");
|
||||
redisCache.deleteObject("CommissionRationCommunity");
|
||||
redisCache.deleteObject("CommissionRationFetch");
|
||||
|
||||
return this.getCommissionRatioVo(commissionRatio);
|
||||
}
|
||||
|
|
|
@ -34,11 +34,14 @@ import com.mcwl.common.utils.ShareCodeUtils;
|
|||
import com.mcwl.common.utils.StringUtils;
|
||||
import com.mcwl.memberCenter.domain.MemberLevel;
|
||||
import com.mcwl.memberCenter.service.MemberLevelService;
|
||||
import com.mcwl.myInvitation.domain.CommissionRatio;
|
||||
import com.mcwl.myInvitation.domain.Consume;
|
||||
import com.mcwl.myInvitation.mapper.ConsumeMapper;
|
||||
import com.mcwl.myInvitation.service.CommissionRatioService;
|
||||
import com.mcwl.pay.config.AliConfig;
|
||||
import com.mcwl.pay.domain.OrderTrade;
|
||||
import com.mcwl.pay.domain.OrderTradeDto;
|
||||
import com.mcwl.pay.domain.enums.CommissionRationEnum;
|
||||
import com.mcwl.pay.domain.vo.PayVo;
|
||||
import com.mcwl.pay.service.AliPayService;
|
||||
import com.mcwl.pay.service.OrderTradeService;
|
||||
|
@ -104,6 +107,9 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
@Autowired
|
||||
private ISysEmailService sysEmailService;
|
||||
|
||||
@Autowired
|
||||
private CommissionRatioService commissionRatioService;
|
||||
|
||||
private final int MAX_RETRY = 3; // 最大重试次数
|
||||
|
||||
|
||||
|
@ -312,26 +318,19 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
return R.fail(HttpStatus.SHOW_ERROR_MSG, "钱包余额不足");
|
||||
}
|
||||
|
||||
// 初始化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("提现");
|
||||
// 提现抽取比例
|
||||
String CommissionRationMerchant = redisCache.getCacheObject("CommissionRationFetch");
|
||||
if (Objects.isNull(CommissionRationMerchant)) {
|
||||
CommissionRatio commissionRatio = commissionRatioService.lambdaQuery()
|
||||
.eq(CommissionRatio::getType, 3)
|
||||
.one();
|
||||
CommissionRationMerchant = commissionRatio.getRatio().toString();
|
||||
redisCache.setCacheObject("CommissionRationFetch", CommissionRationMerchant);
|
||||
}
|
||||
BigDecimal amountBigDecimal = new BigDecimal(amount);
|
||||
BigDecimal fetchBigDecimal = amountBigDecimal
|
||||
.multiply(new BigDecimal("1").subtract(new BigDecimal(CommissionRationMerchant)));
|
||||
amount = fetchBigDecimal.setScale(2, RoundingMode.HALF_UP).toString();
|
||||
|
||||
// 查询用户支付宝账户
|
||||
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService
|
||||
|
@ -343,20 +342,11 @@ public class AliPayServiceImpl implements AliPayService {
|
|||
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);
|
||||
|
||||
// 证书用:certificateExecute(request),密钥用:execute(request)
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
AlipayFundTransUniTransferResponse response = getAlipayFundTransUniTransferResponse(amount, sysUserPayAccount.getOpenId());
|
||||
System.out.println(response.getBody());
|
||||
|
||||
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 {
|
||||
|
||||
|
|
Loading…
Reference in New Issue