|
@@ -44,7 +44,7 @@ import static cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum.*;
|
|
|
public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
|
|
|
/**
|
|
|
- * TODO 放到 配置文件中
|
|
|
+ * TODO 芋艿:放到 payconfig
|
|
|
*/
|
|
|
private static final Long WALLET_PAY_APP_ID = 8L;
|
|
|
|
|
@@ -65,13 +65,14 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public PayWalletRechargeDO createWalletRecharge(Long userId, Integer userType,
|
|
|
AppPayWalletRechargeCreateReqVO reqVO) {
|
|
|
- // 1.1 校验参数
|
|
|
+ // 1.1 校验参数 TODO @jason:AppPayWalletRechargeCreateReqVO 看下校验;
|
|
|
if (Objects.isNull(reqVO.getPayPrice()) && Objects.isNull(reqVO.getPackageId())) {
|
|
|
throw exception(WALLET_RECHARGE_PACKAGE_AND_PRICE_IS_EMPTY);
|
|
|
}
|
|
|
- // 1.2 新增钱包充值记录
|
|
|
- int payPrice ;
|
|
|
- int bonusPrice = 0 ;
|
|
|
+
|
|
|
+ // 1.1 计算充值金额
|
|
|
+ int payPrice;
|
|
|
+ int bonusPrice = 0;
|
|
|
if (Objects.nonNull(reqVO.getPackageId())) {
|
|
|
PayWalletRechargePackageDO rechargePackage = payWalletRechargePackageService.validWalletRechargePackage(reqVO.getPackageId());
|
|
|
payPrice = rechargePackage.getPayPrice();
|
|
@@ -79,23 +80,22 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
} else {
|
|
|
payPrice = reqVO.getPayPrice();
|
|
|
}
|
|
|
-
|
|
|
+ // 1.2 插入充值记录
|
|
|
PayWalletDO wallet = payWalletService.getOrCreateWallet(userId, userType);
|
|
|
- PayWalletRechargeDO walletRecharge = INSTANCE.convert(wallet.getId(), payPrice, bonusPrice, reqVO.getPackageId());
|
|
|
- walletRechargeMapper.insert(walletRecharge);
|
|
|
+ PayWalletRechargeDO recharge = INSTANCE.convert(wallet.getId(), payPrice, bonusPrice, reqVO.getPackageId());
|
|
|
+ walletRechargeMapper.insert(recharge);
|
|
|
|
|
|
// 2.1 创建支付单
|
|
|
Long payOrderId = payOrderService.createOrder(new PayOrderCreateReqDTO()
|
|
|
- .setAppId(WALLET_PAY_APP_ID).setUserIp(getClientIP())
|
|
|
- .setMerchantOrderId(walletRecharge.getId().toString()) // 业务的订单编号
|
|
|
- .setSubject(WALLET_RECHARGE_ORDER_SUBJECT).setBody("").setPrice(walletRecharge.getPayPrice())
|
|
|
- .setExpireTime(addTime(Duration.ofHours(2L))));
|
|
|
+ .setAppId(WALLET_PAY_APP_ID).setUserIp(getClientIP()) // TODO @jason:clientIp 从 controller 传递进来噢
|
|
|
+ .setMerchantOrderId(recharge.getId().toString()) // 业务的订单编号
|
|
|
+ .setSubject(WALLET_RECHARGE_ORDER_SUBJECT).setBody("")
|
|
|
+ .setPrice(recharge.getPayPrice())
|
|
|
+ .setExpireTime(addTime(Duration.ofHours(2L)))); // TODO @芋艿:支付超时时间
|
|
|
// 2.2 更新钱包充值记录中支付订单
|
|
|
- walletRechargeMapper.updateById(new PayWalletRechargeDO().setPayOrderId(payOrderId)
|
|
|
- .setId(walletRecharge.getId()));
|
|
|
-
|
|
|
- walletRecharge.setPayOrderId(payOrderId);
|
|
|
- return walletRecharge;
|
|
|
+ walletRechargeMapper.updateById(new PayWalletRechargeDO().setId(recharge.getId()).setPayOrderId(payOrderId));
|
|
|
+ recharge.setPayOrderId(payOrderId);
|
|
|
+ return recharge;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -136,9 +136,11 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
}
|
|
|
// 1.2 校验钱包充值是否可以发起退款
|
|
|
PayWalletDO wallet = validateWalletRechargeCanRefund(walletRecharge);
|
|
|
- // 2 冻结退款的余额, 暂时只处理赠送的余额也全部退回
|
|
|
+
|
|
|
+ // 2. 冻结退款的余额,暂时只处理赠送的余额也全部退回
|
|
|
payWalletService.freezePrice(wallet.getId(), walletRecharge.getTotalPrice());
|
|
|
- // 3 创建退款单
|
|
|
+
|
|
|
+ // 3. 创建退款单
|
|
|
String walletRechargeId = String.valueOf(id);
|
|
|
String refundId = walletRechargeId + "-refund";
|
|
|
Long payRefundId = payRefundService.createPayRefund(new PayRefundCreateReqDTO()
|
|
@@ -146,7 +148,9 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
.setMerchantOrderId(walletRechargeId)
|
|
|
.setMerchantRefundId(refundId)
|
|
|
.setReason("想退钱").setPrice(walletRecharge.getPayPrice()));
|
|
|
- // 4 更新充值记录退款单号
|
|
|
+
|
|
|
+ // 4. 更新充值记录退款单号
|
|
|
+ // TODO @jaosn:一般新建这种 update 对象,建议是,第一个 set id 属性,容易知道以它为更新
|
|
|
walletRechargeMapper.updateById(new PayWalletRechargeDO().setPayRefundId(payRefundId)
|
|
|
.setRefundStatus(WAITING.getStatus()).setId(walletRecharge.getId()));
|
|
|
}
|
|
@@ -229,6 +233,7 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
|
|
if (wallet.getBalance() < walletRecharge.getTotalPrice()) {
|
|
|
throw exception(WALLET_RECHARGE_REFUND_BALANCE_NOT_ENOUGH);
|
|
|
}
|
|
|
+ // TODO @芋艿:需要考虑下,赠送的金额,会不会导致提现超过;
|
|
|
return wallet;
|
|
|
}
|
|
|
|