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 |   94 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 91 insertions(+), 3 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 1254c44..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")
@@ -571,7 +659,7 @@
         if (result == null || result.get("total_points") == null) {
             userStatistics.setTotalScore(0L);
         }else {
-            userStatistics.setTotalScore(((BigDecimal) result.get("total_points")).longValue());
+            userStatistics.setTotalScore(Long.valueOf(result.get("total_points").toString()));
         }
         //条件构造  消费积分现金支付金额
         queryWrapper.clear();
@@ -647,7 +735,7 @@
         return R.ok(s);
     }*/
 
-    private static final String FILE_DIRECTORY = "/var/files/ldf_files"; // Linux路径
+    private static final String FILE_DIRECTORY = "/dev/xvdb/project/upload_files"; // Linux路径
 //    private static final String FILE_DIRECTORY = "E://ldf_files"; // Linux路径
 
     @PostMapping("/upload")
@@ -675,7 +763,7 @@
             File targetFile = new File(filePath);
             file.transferTo(targetFile);
             // 5. 返回可访问的URL(修正路径分隔符为Web格式)
-            return R.ok("http://zjrqxny.com/account/app-user/download" + datePath + "/" + UUID+file.getOriginalFilename());
+            return R.ok("https://zjrqxny.com/images" + datePath + "/" + UUID+file.getOriginalFilename());
         } catch (IOException e) {
             e.printStackTrace();
             return R.fail("上传文件失败");

--
Gitblit v1.7.1