From c8ea2d96f5b0522a09f3203ae98fe796084d2d15 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期六, 04 一月 2025 09:34:21 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/qijisheng --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 193 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 186 insertions(+), 7 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..3e68440 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,15 +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; @@ -17,7 +33,12 @@ 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 +59,15 @@ private ShopService shopService; @Resource private TokenService tokenService; + + @Resource + private ShopBalanceStatementService shopBalanceStatementService; + + @Resource + private AppUserClient appUserClient; + + + /** * 提现申请列表 @@ -47,12 +77,87 @@ 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()); 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)); + 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.getId())).findFirst(); + if(first.isPresent()){ + item.setShopName(first.get().getName()); + } + } 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) { + Integer objectId = tokenService.getLoginUser().getSysUser().getObjectId(); + Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>() + .eq(ShopWithdraw::getShopId,objectId) + .eq(shopWithdraw.getAuditStatus()!=null,ShopWithdraw::getAuditStatus,shopWithdraw.getAuditStatus()) + .orderByDesc(ShopWithdraw::getCreateTime) + ); + return R.ok(page); + } + + @GetMapping("/shop/info") + @ApiOperation(value = "提现申请列表上方数据", notes = "提现申请列表", tags = {"门店后台"}) + public R<Shop> shopCommissionStatisticsinfo(){ + Integer objectId = tokenService.getLoginUser().getSysUser().getObjectId(); + Shop byId = shopService.getById(objectId); + return R.ok(byId); + } + + @GetMapping("/shop/with") + @ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"}) + 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); + shopWithdraw.setMoney(money); + shopWithdraw.setAuditStatus(0); + shopWithdraw.setStatus(1); + 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(); + } + /** * 审核 @@ -62,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(""); + 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()); @@ -69,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