From f94d845814d209b7b5cda0ea70a2e8cb6cda5b39 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期一, 13 一月 2025 15:22:50 +0800
Subject: [PATCH] 12.18
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 140 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 130 insertions(+), 10 deletions(-)
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
index eeeea29..e7e7757 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -1,18 +1,31 @@
package com.ruoyi.other.controller;
+import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.AppUser;
+import com.ruoyi.account.api.model.BalanceChangeRecord;
+import com.ruoyi.account.api.model.WithdrawalRequests;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
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.dto.ShopBalanceDto;
+import com.ruoyi.other.service.ShopBalanceStatementService;
import com.ruoyi.other.service.ShopService;
import com.ruoyi.other.service.ShopWithdrawService;
+import com.ruoyi.other.util.payment.TransferUtil;
+import com.ruoyi.other.util.payment.model.AccountBalanceQueryResult;
+import com.ruoyi.other.util.payment.model.SinglePay;
+import com.ruoyi.other.util.payment.model.SinglePayCallbackResult;
+import com.ruoyi.other.util.payment.model.SinglePayResult;
+import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -21,6 +34,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@@ -45,6 +59,15 @@
private ShopService shopService;
@Resource
private TokenService tokenService;
+
+ @Resource
+ private ShopBalanceStatementService shopBalanceStatementService;
+
+ @Resource
+ private AppUserClient appUserClient;
+
+
+
/**
* 提现申请列表
@@ -94,13 +117,18 @@
Shop byId = shopService.getById(objectId);
return R.ok(byId);
}
+
@GetMapping("/shop/with")
@ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"})
- public R<Shop> shopwith(@RequestParam BigDecimal money){
- Integer objectId = tokenService.getLoginUser().getSysUser().getObjectId();
- Shop byId = shopService.getById(objectId);
- if (money.compareTo(byId.getCanWithdrawMoney())>0){
+ public R shopwith(@RequestParam BigDecimal money){
+ SysUser sysUser = tokenService.getLoginUser().getSysUser();
+ Integer objectId = sysUser.getObjectId();
+ Shop shop = shopService.getById(objectId);
+ if (money.compareTo(shop.getCanWithdrawMoney())>0){
return R.fail("提现金额不能大于可提现金额");
+ }
+ if(StringUtils.isEmpty(shop.getReceiverAccountNoEnc())){
+ return R.fail("请完善账户信息后再申请提现!");
}
ShopWithdraw shopWithdraw = new ShopWithdraw();
shopWithdraw.setShopId(objectId);
@@ -108,8 +136,26 @@
shopWithdraw.setAuditStatus(0);
shopWithdraw.setStatus(1);
shopWithdrawService.save(shopWithdraw);
-
- return R.ok(byId);
+ //扣除账户余额及添加变动明细
+ BigDecimal balance = shop.getBalance();
+ BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();
+ BigDecimal withdrawMoney = shop.getWithdrawMoney();
+ shop.setBalance(balance.subtract(money).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setCanWithdrawMoney(canWithdrawMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setWithdrawMoney(withdrawMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));
+ shopService.updateById(shop);
+ //添加门店变动明细
+ ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
+ shopBalanceStatement.setShopId(shop.getId());
+ shopBalanceStatement.setType(4);
+ shopBalanceStatement.setHistoricalBalance(balance);
+ shopBalanceStatement.setVariableAmount(money);
+ shopBalanceStatement.setBalance(shop.getBalance());
+ shopBalanceStatement.setCreateUserId(sysUser.getUserId());
+ shopBalanceStatement.setCreateTime(LocalDateTime.now());
+ shopBalanceStatement.setObjectId(shopWithdraw.getId());
+ shopBalanceStatementService.save(shopBalanceStatement);
+ return R.ok();
}
@@ -121,6 +167,59 @@
public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) {
LoginUser loginUser = tokenService.getLoginUser();
ShopWithdraw shopWithdraw1 = shopWithdrawService.getById(shopWithdraw.getId());
+ if(0 != shopWithdraw1.getAuditStatus()){
+ return R.fail("不能重复审核");
+ }
+ Shop shop = shopService.getById(shopWithdraw1.getShopId());
+ BigDecimal money = shopWithdraw1.getMoney();
+ if(1 == shopWithdraw.getAuditStatus()){
+ //先检查账户余额是否充足
+ AccountBalanceQueryResult accountBalanceQueryResult = TransferUtil.accountBalanceQuery();
+ if(null == accountBalanceQueryResult){
+ return R.fail("查询账户余额出错");
+ }
+ Double useAbleSettAmount = accountBalanceQueryResult.getUseAbleSettAmount();
+ if(useAbleSettAmount < shopWithdraw1.getMoney().doubleValue()){
+ return R.fail("账户可用余额不足,请先补充账户余额");
+ }
+ //银行卡转账
+ SinglePay singlePay = new SinglePay();
+ singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo);
+ singlePay.setMerchantOrderNo(shopWithdraw1.getId().toString());
+ singlePay.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc());
+ singlePay.setReceiverNameEnc(shop.getReceiverNameEnc());
+ singlePay.setReceiverAccountType(shop.getReceiverAccountType());
+ singlePay.setPaidAmount(shopWithdraw1.getMoney().doubleValue());
+ singlePay.setPaidDesc("账户余额提现");
+ singlePay.setPaidUse("208");
+ singlePay.setCallbackUrl("/other/shop-withdraw/withdrawalCallback");
+ SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay);
+ if(null == singlePayResult){
+ return R.fail("转账失败");
+ }
+ shopWithdraw1.setStatus(1);
+ }
+ if(2 == shopWithdraw.getAuditStatus()){
+ //回退金额和添加变动明细
+ BigDecimal balance = shop.getBalance();
+ BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();
+ BigDecimal withdrawMoney = shop.getWithdrawMoney();
+ shop.setBalance(balance.add(money).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setCanWithdrawMoney(canWithdrawMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setWithdrawMoney(withdrawMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN));
+ shopService.updateById(shop);
+ //添加门店变动明细
+ ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
+ shopBalanceStatement.setShopId(shop.getId());
+ shopBalanceStatement.setType(4);
+ shopBalanceStatement.setHistoricalBalance(balance);
+ shopBalanceStatement.setVariableAmount(money);
+ shopBalanceStatement.setBalance(shop.getBalance());
+ shopBalanceStatement.setCreateUserId(loginUser.getUserid());
+ shopBalanceStatement.setCreateTime(LocalDateTime.now());
+ shopBalanceStatement.setObjectId(shopWithdraw.getId());
+ shopBalanceStatementService.save(shopBalanceStatement);
+ }
shopWithdraw1.setAuditStatus(shopWithdraw.getAuditStatus());
shopWithdraw1.setAuditUserId(loginUser.getUserid());
shopWithdraw1.setAuditTime(LocalDateTime.now());
@@ -128,9 +227,30 @@
shopWithdrawService.updateById(shopWithdraw1);
return R.ok();
}
-
-
-
-
+
+
+
+ /**
+ * 提现审核通过后转账回调通知
+ * @param singlePayCallbackResult
+ */
+ @ResponseBody
+ @PostMapping("/withdrawalCallback")
+ public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
+ Integer status = singlePayCallbackResult.getStatus();
+ if(203 == status){
+ String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
+ ShopWithdraw shopWithdraw = shopWithdrawService.getById(merchantOrderNo);
+ if(1 == shopWithdraw.getStatus()){
+ shopWithdraw.setStatus(2);
+ shopWithdraw.setArrivalTime(LocalDateTime.now());
+ shopWithdrawService.updateById(shopWithdraw);
+ }
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("statusCode", 2001);
+ return jsonObject;
+ }
+ return new JSONObject();
+ }
}
--
Gitblit v1.7.1