diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java index 8b7a38e..352ce60 100644 --- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java @@ -47,6 +47,7 @@ public interface ErrorCodeConstants { ErrorCode WALLET_REFUND_EXIST = new ErrorCode(1_007_007_003, "已经存在钱包退款"); ErrorCode WALLET_FREEZE_PRICE_NOT_ENOUGH = new ErrorCode(1_007_007_004, "钱包冻结余额不足"); + // ========== 钱包充值模块 1-007-008-000 ========== ErrorCode WALLET_RECHARGE_NOT_FOUND = new ErrorCode(1_007_008_000, "钱包充值记录不存在"); ErrorCode WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID = new ErrorCode(1_007_008_001, "钱包充值更新支付状态失败,钱包充值记录不是【未支付】状态"); @@ -62,6 +63,8 @@ public interface ErrorCodeConstants { ErrorCode WALLET_RECHARGE_PACKAGE_NOT_FOUND = new ErrorCode(1_007_008_011, "钱包充值套餐不存在"); ErrorCode WALLET_RECHARGE_PACKAGE_IS_DISABLE = new ErrorCode(1_007_008_012, "钱包充值套餐已禁用"); ErrorCode WALLET_RECHARGE_PACKAGE_NAME_EXISTS = new ErrorCode(1_007_008_013, "钱包充值套餐名称已存在"); + ErrorCode WALLET_RECHARGE_RANGE_EXCEPTION = new ErrorCode(1_007_007_004, "充值后余额异常"); + // ========== 转账模块 1-007-009-000 ========== ErrorCode PAY_TRANSFER_SUBMIT_CHANNEL_ERROR = new ErrorCode(1_007_009_000, "发起转账报错,错误码:{},错误提示:{}"); diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/wallet/PayWalletBizTypeEnum.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/wallet/PayWalletBizTypeEnum.java index 20e0a8b..a8937fb 100644 --- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/wallet/PayWalletBizTypeEnum.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/wallet/PayWalletBizTypeEnum.java @@ -18,7 +18,8 @@ public enum PayWalletBizTypeEnum implements IntArrayValuable { RECHARGE(1, "充值"), RECHARGE_REFUND(2, "充值退款"), PAYMENT(3, "支付"), - PAYMENT_REFUND(4, "支付退款"); + PAYMENT_REFUND(4, "支付退款"), + ADMIN_MODIFY(5, "管理员修改"); // TODO 后续增加 diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletController.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletController.java index e83d994..cf08e42 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletController.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletController.java @@ -42,7 +42,7 @@ public class PayWalletController { @PostMapping("/update") @PreAuthorize("@ss.hasPermission('pay:wallet:update')") - @Operation(summary = "修改用户钱包余额") + @Operation(summary = "修改用户钱包余额(后台操作)") public CommonResult updateWallet(@Valid @RequestBody PayWalletUserBalanceVo reqVo){ payWalletService.updateWallet(reqVo); return success(true); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java index b75d8f9..db5b784 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java @@ -99,7 +99,7 @@ public interface PayWalletService { void unfreezePrice(Long id, Integer price); /** - * 修改钱包余额 + * 修改钱包余额(后台操作) * @param reqVo * @return void */ diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index 43366f4..1a011fb 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -35,7 +35,7 @@ import static cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum.PAYM */ @Service @Slf4j -public class PayWalletServiceImpl implements PayWalletService { +public class PayWalletServiceImpl implements PayWalletService { @Resource private PayWalletMapper walletMapper; @@ -105,7 +105,7 @@ public class PayWalletServiceImpl implements PayWalletService { /** * 校验是否能退款 * - * @param refundId 支付退款单 id + * @param refundId 支付退款单 id * @param walletPayNo 钱包支付 no */ private Long validateWalletCanRefund(Long refundId, String walletPayNo) { @@ -210,17 +210,35 @@ public class PayWalletServiceImpl implements PayWalletService { @Override public void updateWallet(PayWalletUserBalanceVo reqVo) { - if(reqVo.getBalance().compareTo(BigDecimal.ZERO) == 0){ + // 如果 + if (reqVo.getBalance().compareTo(BigDecimal.ZERO) == 0) { return; } + // 把单位从元转为分 BigDecimal change = new BigDecimal("100"); + // 查出对应钱包信息 PayWalletDO walletDO = walletMapper.selectById(reqVo.getId()); - int changeBalance = (reqVo.getBalance().multiply(change)).intValue(); - int totalBalance = walletDO.getBalance() + changeBalance; - int totalRecharge = walletDO.getTotalRecharge() + changeBalance; - walletDO.setBalance(totalBalance); - walletDO.setTotalRecharge(totalRecharge); + if (reqVo.getBalance().compareTo(new BigDecimal("21474836.47")) > 0) { + throw exception(WALLET_RECHARGE_RANGE_EXCEPTION); + } + // 总共改变的金额 + long changeBalance = (reqVo.getBalance().multiply(change)).longValue(); + // 总余额 + long totalBalance = walletDO.getBalance() + changeBalance; + // 总充值 + long totalRecharge = walletDO.getTotalRecharge() + changeBalance; + if (totalBalance > 2147483647 || totalRecharge > 2147483647 || totalBalance < 0 || totalRecharge < 0) { + throw exception(WALLET_RECHARGE_RANGE_EXCEPTION); + } + walletDO.setBalance((int) totalBalance); + walletDO.setTotalRecharge((int) totalRecharge); walletMapper.updateById(walletDO); + String title = "后台操作给用户" + (totalBalance > 0 ? "增加" : "减少") + "余额" + Math.abs(changeBalance)/100.0 + "元"; + WalletTransactionCreateReqBO transactionCreateReqBO = new WalletTransactionCreateReqBO() + .setWalletId(reqVo.getId()).setPrice((int) changeBalance).setBalance((int) totalBalance) + .setBizType(PayWalletBizTypeEnum.ADMIN_MODIFY.getType()).setBizId("0").setTitle(title); + walletTransactionService.createWalletTransaction(transactionCreateReqBO); + } }