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