From c72910d2b90f74d23e770717d80921b4fd064d48 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 16 九月 2025 16:24:08 +0800 Subject: [PATCH] 新增用户提现 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 88 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 88 insertions(+), 0 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java index 24dab3c..b4ceb83 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java @@ -14,11 +14,13 @@ import com.ruoyi.account.mapper.AppUserMapper; import com.ruoyi.account.service.*; import com.ruoyi.account.util.ObsUploadUtil; +import com.ruoyi.account.util.UUIDUtil; import com.ruoyi.account.util.weChat.EnvVersion; import com.ruoyi.account.util.weChat.WeChatUtil; import com.ruoyi.account.vo.*; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; @@ -29,6 +31,8 @@ import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; import com.ruoyi.order.model.Order; import com.ruoyi.other.api.domain.Shop; +import com.ruoyi.other.api.domain.ShopBalanceStatement; +import com.ruoyi.other.api.domain.ShopWithdraw; import com.ruoyi.other.api.feignClient.ShopClient; import com.ruoyi.system.api.domain.SysConfig; import com.ruoyi.system.api.domain.SysUser; @@ -53,8 +57,10 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.net.URLDecoder; import java.net.URLEncoder; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -81,6 +87,12 @@ @Resource private AppUserService appUserService; @Resource + private IUserWithdrawService userWithdrawService; + @Resource + private UserPointService userPointService; + @Resource + private AppUserBankService appUserBankService; + @Resource private AppUserMapper appUserMapper; @Resource private ShopClient shopClient; @@ -106,6 +118,82 @@ @Value("${file.upload.location}") private String filePath; + @PostMapping("/verifyBankInfo") + @ApiOperation(value = "用户提现前校验银行卡信息") + public R<Boolean> mobileLogin() { + LoginUser loginUserApplet = tokenService.getLoginUserApplet(); + AppUser appUser = appUserService.getById(loginUserApplet.getUserid()); + AppUserBank bank = appUserBankService.lambdaQuery().eq(AppUserBank::getAppUserId, appUser.getId()).last("limit 1") + .one(); + if (bank == null){ + return R.ok(false); + }else{ + return R.ok(true); + } + } + @ApiOperation(value = "提现申请") + @GetMapping("/withdrawalApplication") + @ResponseBody + public R withdrawalApplication(@ApiParam("提现金额") @RequestParam BigDecimal money) { + LoginUser loginUser = tokenService.getLoginUserApplet(); + SysConfig data = sysConfigClient.getInfo(8L).getData(); + AppUser appUser = appUserService.getById(loginUser.getUserid()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + money=money.setScale(2, BigDecimal.ROUND_HALF_DOWN); + if (money.compareTo(BigDecimal.ZERO)==0){ + throw new ServiceException("提现金额必须大于零"); + } + Integer rate = Integer.valueOf(data.getConfigValue()); + BigDecimal availablePoint = new BigDecimal(appUser.getAvailablePoint()); + BigDecimal unMoney = availablePoint.divide(BigDecimal.valueOf(rate), 2, RoundingMode.HALF_DOWN); + if (unMoney.compareTo( money)<0){ + throw new ServiceException("提现金额不能大于可提现金额,当前可提现金额为:"+unMoney); + } + AppUserBank bank = appUserBankService.lambdaQuery().eq(AppUserBank::getAppUserId, appUser.getId()).last("limit 1") + .one(); + if(bank==null){ + throw new ServiceException("请完善账户信息后再申请提现!"); + } + if(!org.springframework.util.StringUtils.hasLength(bank.getBankNumber())){ + throw new ServiceException("请完善银行卡后再申请提现!"); + } + // 增加用户提现积分变动记录 + UserPoint one = userPointService.lambdaQuery().eq(UserPoint::getAppUserId, appUser.getId()) + .orderByDesc(UserPoint::getCreateTime).last("limit 1").one(); + UserWithdraw userWithdraw = new UserWithdraw(); + userWithdraw.setAppUserId(appUser.getId()); + userWithdraw.setMoney(money); + BigDecimal multiply = money.multiply(BigDecimal.valueOf(rate)); + appUser.setAvailablePoint(appUser.getAvailablePoint()-multiply.setScale(0, RoundingMode.HALF_UP).intValue()); + if (multiply.compareTo(new BigDecimal(appUser.getAvailablePoint()))>0){ + throw new ServiceException("积分不足!"); + } + userWithdraw.setIntegral(Integer.valueOf(multiply.setScale(0, RoundingMode.HALF_UP).toString())); + userWithdraw.setAuditStatus(0); + userWithdraw.setStatus(1); + userWithdraw.setCode(code); + userWithdraw.setCreateTime(LocalDateTime.now()); + if (one.getBalance() - Integer.valueOf(multiply.setScale(0, RoundingMode.HALF_UP).toString())<0){ + throw new ServiceException("积分不足!"); + } + userWithdraw.setReceiverAccountNoEnc(bank.getBankNumber()); + userWithdraw.setReceiverNameEnc(bank.getUserName()); + userWithdraw.setReceiverBankChannelNo(bank.getReceiverBankChannelNo()); + userWithdraw.setReceiverAccountType(201); + userWithdrawService.save(userWithdraw); + UserPoint userPoint = new UserPoint(); + userPoint.setType(18); + userPoint.setVariablePoint(Integer.valueOf(multiply.setScale(0, RoundingMode.HALF_UP).toString())); + userPoint.setHistoricalPoint(one.getBalance()); + userPoint.setBalance(one.getBalance() - Integer.valueOf(multiply.setScale(0, RoundingMode.HALF_UP).toString())); + userPoint.setCreateTime(LocalDateTime.now()); + userPoint.setAppUserId(appUser.getId()); + userPoint.setObjectId(userWithdraw.getId()); + userPointService.save(userPoint); + appUserService.updateById(appUser); + return R.ok(); + } @ResponseBody @PostMapping("/mobileLogin") -- Gitblit v1.7.1