From 257d66798aa538f8737980f13d94c547bf0b51ea Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期三, 15 一月 2025 15:37:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 253 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 247 insertions(+), 6 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 0b9afb2..092ec05 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,23 +1,46 @@
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.feignClient.SysUserClient;
import com.ruoyi.system.api.model.LoginUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
+import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
/**
* <p>
@@ -38,6 +61,22 @@
private ShopService shopService;
@Resource
private TokenService tokenService;
+
+ @Resource
+ private ShopBalanceStatementService shopBalanceStatementService;
+
+ @Resource
+ private AppUserClient appUserClient;
+
+ @Resource
+ private SysUserClient sysUserClient;
+
+
+ @GetMapping("/getShopById")
+ @ApiOperation("通过门店id获取账户信息回填")
+ public R<Shop> getShopById(Integer id) {
+ return R.ok(shopService.getById(id));
+ }
/**
* 提现申请列表
@@ -47,12 +86,111 @@
public R<IPage<ShopWithdraw>> list(@ApiParam("页码") @RequestParam Integer pageNum,
@ApiParam("每一页数据大小") Integer pageSize,
ShopWithdraw shopWithdraw) {
-
+ List<Shop> list = shopService.list(new LambdaUpdateWrapper<Shop>()
+ .like(StringUtils.isNotEmpty(shopWithdraw.getShopName()), Shop::getName, shopWithdraw.getShopName())
+ .eq(Shop::getDelFlag, 0));
+ List<Integer> collect1 = list.stream().map(Shop::getId).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(collect1)){
+ return R.ok(Page.of(pageNum, pageSize));
+ }
Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>()
- .like(StringUtils.isNotEmpty(shopWithdraw.getShopName()), ShopWithdraw::getShopName, shopWithdraw.getShopName()));
- page.getRecords().forEach(item-> item.setShopName(shopService.getById(item.getShopId()).getName()));
+ .in(collect1.size() > 0, ShopWithdraw::getShopId, collect1)
+ .orderByDesc(ShopWithdraw::getCreateTime));
+ List<ShopWithdraw> records = page.getRecords();
+ List<Integer> collect = records.stream().map(ShopWithdraw::getShopId).collect(Collectors.toList());
+ List<Shop> shops = null;
+ if(collect.size() > 0){
+ shops = shopService.listByIds(collect);
+ }
+ for(ShopWithdraw item : records){
+ Optional<Shop> first = shops.stream().filter(s -> s.getId().equals(item.getShopId())).findFirst();
+ if(first.isPresent()){
+ item.setShopName(first.get().getName());
+ }
+ item.setIdStr(item.getId().toString());
+ }
return R.ok(page);
}
+
+ @GetMapping("/shop/list")
+ @ApiOperation(value = "提现申请列表", notes = "提现申请列表", tags = {"门店后台"})
+ public R<IPage<ShopWithdraw>> shoplist(@ApiParam("页码") @RequestParam Integer pageNum,
+ @ApiParam("每一页数据大小") Integer pageSize,
+ ShopWithdraw shopWithdraw) {
+ LoginUser loginUser = tokenService.getLoginUser();
+ SysUser sysUser = sysUserClient.getSysUser(loginUser.getUserid()).getData();
+ Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>()
+ .eq(sysUser!=null,ShopWithdraw::getShopId,sysUser.getObjectId())
+ .eq(shopWithdraw.getAuditStatus()!=null,ShopWithdraw::getAuditStatus,shopWithdraw.getAuditStatus())
+ .orderByDesc(ShopWithdraw::getCreateTime)
+ );
+ page.getRecords().forEach(s->s.setIdStr(s.getId().toString()));
+ return R.ok(page);
+ }
+
+ @GetMapping("/shop/info")
+ @ApiOperation(value = "提现申请列表上方数据", notes = "提现申请列表", tags = {"门店后台"})
+ public R<Shop> shopCommissionStatisticsinfo(){
+ LoginUser loginUser = tokenService.getLoginUser();
+ SysUser sysUser = sysUserClient.getSysUser(loginUser.getUserid()).getData();
+ Shop byId = shopService.getById(sysUser.getObjectId());
+ List<ShopWithdraw> list = shopWithdrawService.lambdaQuery().eq(ShopWithdraw::getShopId, sysUser.getObjectId())
+ .eq(ShopWithdraw::getAuditStatus, 0).list();
+ if (!list.isEmpty()){
+ BigDecimal bigDecimal = list.stream().map(ShopWithdraw::getMoney).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+ byId.setWithdrawAuditMoney(bigDecimal);
+ }else {
+ byId.setWithdrawAuditMoney(BigDecimal.ZERO);
+ }
+ byId.setWithdrawMoney(byId.getWithdrawMoney().subtract(byId.getWithdrawAuditMoney()));
+ return R.ok(byId);
+ }
+
+ @GetMapping("/shop/with")
+ @ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"})
+ public R shopwith(@RequestParam BigDecimal money){
+ Long userid = tokenService.getLoginUser().getUserid();
+ SysUser sysUser = sysUserClient.getSysUser(userid).getData();
+ Integer objectId = sysUser.getObjectId();
+ Shop shop = shopService.getById(objectId);
+ if (money.compareTo(BigDecimal.ZERO)==0){
+ return R.fail("提现金额必须大于零");
+ }
+ if (money.compareTo(shop.getCanWithdrawMoney())>0){
+ return R.fail("提现金额不能大于可提现金额");
+ }
+ if(StringUtils.isEmpty(shop.getReceiverAccountNoEnc())){
+ return R.fail("请完善账户信息后再申请提现!");
+ }
+ ShopWithdraw shopWithdraw = new ShopWithdraw();
+ shopWithdraw.setShopId(objectId);
+ shopWithdraw.setMoney(money);
+ shopWithdraw.setAuditStatus(0);
+ shopWithdraw.setStatus(1);
+ shopWithdraw.setCreateTime(LocalDateTime.now());
+ shopWithdrawService.save(shopWithdraw);
+ //扣除账户余额及添加变动明细
+ 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();
+ }
+
/**
* 审核
@@ -61,7 +199,62 @@
@ApiOperation("审核")
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() + 1)){
+ 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.setReceiverBankChannelNo(shop.getReceiverBankChannelNo());
+ 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());
@@ -69,9 +262,57 @@
shopWithdrawService.updateById(shopWithdraw1);
return R.ok();
}
+
+
+
+ /**
+ * 提现审核通过后转账回调通知
+ * @param singlePayCallbackResult
+ */
+ @ResponseBody
+ @PostMapping("/withdrawalCallback")
+ public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
+ Integer status = singlePayCallbackResult.getStatus();
+ String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
+ ShopWithdraw shopWithdraw = shopWithdrawService.getById(merchantOrderNo);
+ if(203 == status || 205 == status){
+ if(1 == shopWithdraw.getStatus()){
+ shopWithdraw.setStatus(2);
+ shopWithdraw.setArrivalTime(LocalDateTime.now());
+ shopWithdrawService.updateById(shopWithdraw);
+ }
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("statusCode", 2001);
+ return jsonObject;
+ }else{
+ //回退金额和添加变动明细
+ Shop shop = shopService.getById(shopWithdraw.getShopId());
+ BigDecimal balance = shop.getBalance();
+ BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();
+ BigDecimal withdrawMoney = shop.getWithdrawMoney();
+ shop.setBalance(balance.add(shopWithdraw.getMoney()).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setCanWithdrawMoney(canWithdrawMoney.add(shopWithdraw.getMoney()).setScale(2, RoundingMode.HALF_EVEN));
+ shop.setWithdrawMoney(withdrawMoney.subtract(shopWithdraw.getMoney()).setScale(2, RoundingMode.HALF_EVEN));
+ shopService.updateById(shop);
+ //添加门店变动明细
+ ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
+ shopBalanceStatement.setShopId(shop.getId());
+ shopBalanceStatement.setType(4);
+ shopBalanceStatement.setHistoricalBalance(balance);
+ shopBalanceStatement.setVariableAmount(shopWithdraw.getMoney());
+ shopBalanceStatement.setBalance(shop.getBalance());
+ shopBalanceStatement.setCreateUserId(shopWithdraw.getAuditUserId());
+ shopBalanceStatement.setCreateTime(LocalDateTime.now());
+ shopBalanceStatement.setObjectId(shopWithdraw.getId());
+ shopBalanceStatementService.save(shopBalanceStatement);
+ shopWithdraw.setStatus(3);
+ shopWithdraw.setRemark(singlePayCallbackResult.getErrorCodeDesc());
+ shopWithdrawService.updateById(shopWithdraw);
-
-
-
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("statusCode", 2001);
+ return jsonObject;
+ }
+ }
}
--
Gitblit v1.7.1