From e6fa0149e0c8690efc9c444650c6ef82f04ba54b Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 14 一月 2025 19:38:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 157 insertions(+), 12 deletions(-)
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
index a1d0963..c792884 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -1,22 +1,33 @@
package com.ruoyi.account.controller;
+import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.WithdrawalRequests;
import com.ruoyi.account.dto.WithQuery;
import com.ruoyi.account.dto.WithdrawalRequestsDTO;
+import com.ruoyi.account.service.AppUserService;
+import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.service.WithdrawalRequestsService;
+import com.ruoyi.account.util.payment.TransferUtil;
+import com.ruoyi.account.util.payment.model.AccountBalanceQueryResult;
+import com.ruoyi.account.util.payment.model.SinglePay;
+import com.ruoyi.account.util.payment.model.SinglePayCallbackResult;
+import com.ruoyi.account.util.payment.model.SinglePayResult;
+import com.ruoyi.account.vo.WithdrawalAuth;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiParam;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
/**
* <p>
@@ -33,6 +44,11 @@
@Resource
private WithdrawalRequestsService withdrawalRequestsService;
+ @Resource
+ private AppUserService appUserService;
+
+ @Resource
+ private BalanceChangeRecordService balanceChangeRecordService;
/**
* 提现申请
@@ -44,19 +60,148 @@
return AjaxResult.success();
}
+
+
+
@PostMapping("/page")
@ApiOperation(value = "提现申请列表", tags = {"后台"})
public R<IPage<WithdrawalRequests>> page(@RequestBody WithQuery withQuery){
- return R.ok(withdrawalRequestsService.pageList(withQuery));
-
+ IPage<WithdrawalRequests> withdrawalRequestsIPage = withdrawalRequestsService.pageList(withQuery);
+ for (WithdrawalRequests record : withdrawalRequestsIPage.getRecords()) {
+ record.setIdStr(record.getId().toString());
+ }
+ return R.ok(withdrawalRequestsIPage);
}
-// @PostMapping("/auth")
-// @ApiOperation(value = "提现申请", tags = {"后台"})
-// public R<IPage<WithdrawalRequests>> page(@RequestBody WithQuery withQuery){
-// return R.ok(withdrawalRequestsService.pageList(withQuery));
-//
-// }
+
+
+
+
+
+ @PostMapping("/auth")
+ @ApiOperation(value = "提现申请审批", tags = {"后台"})
+ public R auth(@RequestBody WithdrawalAuth withdrawalAuth){
+ WithdrawalRequests withdrawal = withdrawalRequestsService.getById(withdrawalAuth.getId());
+ BigDecimal withdrawalAmount = withdrawal.getWithdrawalAmount();
+ if(withdrawal.getAuditStatus() != 1){
+ return R.fail("不能重复审核");
+ }
+ Integer auditStatus = withdrawalAuth.getAuditStatus();
+ if (auditStatus==2){
+ //执行转账操作
+ if(withdrawal.getWithdrawalMethod() == 2){
+ //先检查账户余额是否充足
+ AccountBalanceQueryResult accountBalanceQueryResult = TransferUtil.accountBalanceQuery();
+ if(null == accountBalanceQueryResult){
+ return R.fail("查询账户余额出错");
+ }
+ Double useAbleSettAmount = accountBalanceQueryResult.getUseAbleSettAmount();
+ //计算代付手续费
+ if(useAbleSettAmount < (withdrawal.getArrivalAmount().doubleValue() + 1)){
+ return R.fail("账户可用余额不足,请先补充账户余额");
+ }
+ //银行卡转账
+ SinglePay singlePay = new SinglePay();
+ singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo);
+ singlePay.setMerchantOrderNo(withdrawal.getId().toString());
+ singlePay.setReceiverAccountNoEnc(withdrawal.getBankCardNumber());
+ singlePay.setReceiverNameEnc(withdrawal.getAccountHolder());
+ singlePay.setReceiverAccountType(201);
+ singlePay.setPaidAmount(withdrawal.getArrivalAmount().doubleValue());
+ singlePay.setPaidDesc("账户余额提现");
+ singlePay.setPaidUse("205");
+ singlePay.setCallbackUrl("/account/withdrawal-requests/withdrawalCallback");
+ SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay);
+ if(null == singlePayResult){
+ return R.fail("转账失败");
+ }
+ withdrawal.setStatus(1);
+ }else{
+ //微信转账
+ return R.fail("微信转账开发中");
+ }
+ }
+ if(3 == auditStatus){
+ //回退扣除的金额,添加明细记录
+ //修改用户的可提现金额
+ AppUser appUser = appUserService.getById(withdrawal.getAppUserId());
+ BigDecimal withdrawableAmount = appUser.getWithdrawableAmount();
+ BigDecimal withdrawnAmount = appUser.getWithdrawnAmount();
+ BigDecimal balance = appUser.getBalance();
+ appUser.setWithdrawableAmount(withdrawableAmount.add(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUser.setWithdrawnAmount(withdrawnAmount.subtract(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUser.setBalance(appUser.getBalance().add(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUserService.updateById(appUser);
+ //添加变动明细
+ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
+ balanceChangeRecord.setAppUserId(appUser.getId());
+ balanceChangeRecord.setVipId(appUser.getVipId());
+ balanceChangeRecord.setOrderId(withdrawal.getId());
+ balanceChangeRecord.setChangeType(2);
+ balanceChangeRecord.setBeforeAmount(balance);
+ balanceChangeRecord.setChangeAmount(withdrawalAmount);
+ balanceChangeRecord.setAfterAmount(appUser.getBalance());
+ balanceChangeRecord.setDelFlag(0);
+ balanceChangeRecord.setCreateTime(LocalDateTime.now());
+ balanceChangeRecordService.save(balanceChangeRecord);
+ }
+ withdrawal.setAuditStatus(auditStatus);
+ withdrawalRequestsService.updateById(withdrawal);
+ return R.ok();
+ }
+
+
+ /**
+ * 提现审核通过后转账回调通知
+ * @param singlePayCallbackResult
+ */
+ @ResponseBody
+ @PostMapping("/withdrawalCallback")
+ public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
+ Integer status = singlePayCallbackResult.getStatus();
+ String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
+ WithdrawalRequests withdrawalRequests = withdrawalRequestsService.getById(merchantOrderNo);
+ if(203 == status || 205 == status){
+ if(1 == withdrawalRequests.getStatus()){
+ withdrawalRequests.setStatus(2);
+ withdrawalRequests.setArrivalTime(LocalDateTime.now());
+ withdrawalRequestsService.updateById(withdrawalRequests);
+ }
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("statusCode", 2001);
+ return jsonObject;
+ }else{
+ //回退扣除的金额,添加明细记录
+ //修改用户的可提现金额
+ BigDecimal withdrawalAmount = withdrawalRequests.getWithdrawalAmount();
+ AppUser appUser = appUserService.getById(withdrawalRequests.getAppUserId());
+ BigDecimal withdrawableAmount = appUser.getWithdrawableAmount();
+ BigDecimal withdrawnAmount = appUser.getWithdrawnAmount();
+ BigDecimal balance = appUser.getBalance();
+ appUser.setWithdrawableAmount(withdrawableAmount.add(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUser.setWithdrawnAmount(withdrawnAmount.subtract(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUser.setBalance(appUser.getBalance().add(withdrawalAmount).setScale(2, RoundingMode.HALF_EVEN));
+ appUserService.updateById(appUser);
+ //添加变动明细
+ BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
+ balanceChangeRecord.setAppUserId(appUser.getId());
+ balanceChangeRecord.setVipId(appUser.getVipId());
+ balanceChangeRecord.setOrderId(withdrawalRequests.getId());
+ balanceChangeRecord.setChangeType(2);
+ balanceChangeRecord.setBeforeAmount(balance);
+ balanceChangeRecord.setChangeAmount(withdrawalAmount);
+ balanceChangeRecord.setAfterAmount(appUser.getBalance());
+ balanceChangeRecord.setDelFlag(0);
+ balanceChangeRecord.setCreateTime(LocalDateTime.now());
+ balanceChangeRecordService.save(balanceChangeRecord);
+ withdrawalRequests.setStatus(3);
+ withdrawalRequests.setRemark(singlePayCallbackResult.getErrorCodeDesc());
+ withdrawalRequestsService.updateById(withdrawalRequests);
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("statusCode", 2001);
+ return jsonObject;
+ }
+ }
}
--
Gitblit v1.7.1