From 6acf6357094588946b5528f1ef1ed84a0f1037fd Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期五, 13 六月 2025 19:45:27 +0800 Subject: [PATCH] 小程序收付款 --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java | 153 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 103 insertions(+), 50 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 d102de0..e98cf90 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 @@ -3,17 +3,21 @@ import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.web.page.PageInfo; 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.mapper.ShopWithdrawMapper; import com.ruoyi.other.service.ShopBalanceStatementService; import com.ruoyi.other.service.ShopService; import com.ruoyi.other.service.ShopWithdrawService; @@ -22,20 +26,25 @@ 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.other.util.payment.wx.WechatPayService; 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.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -67,6 +76,11 @@ @Resource private SysUserClient sysUserClient; + @Autowired + private ShopWithdrawMapper shopWithdrawMapper; + + @Autowired + private WechatPayService wechatPayService; @GetMapping("/getShopById") @@ -79,7 +93,7 @@ * 提现申请列表 */ @GetMapping("/list") - @ApiOperation("提现申请列表") + @ApiOperation(value = "提现申请列表" ) public R<IPage<ShopWithdraw>> list(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, ShopWithdraw shopWithdraw) { @@ -110,20 +124,36 @@ } @GetMapping("/shop/list") - @ApiOperation(value = "提现申请列表", notes = "提现申请列表", tags = {"门店后台"}) + @ApiOperation(value = "提现申请列表", notes = "提现申请列表", tags = {"门店后台","后台"}) public R<IPage<ShopWithdraw>> shoplist(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, @ApiParam("门店id")Integer shopId, + @ApiParam("手机号") String phone, @ApiParam("审核状态(0=待审核,1=审核通过,2=审核失败)")Integer auditStatus) { - Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>() - .eq(ShopWithdraw::getShopId,shopId) - .eq(auditStatus!=null,ShopWithdraw::getAuditStatus,auditStatus) - .orderByDesc(ShopWithdraw::getCreateTime) - ); - page.getRecords().forEach(s->s.setIdStr(s.getId().toString())); + //模糊查询手机号 + List<Integer> shopIds=new ArrayList<>(); + if (StringUtils.isNotEmpty(phone)) { + QueryWrapper<Shop> queryWrapper=new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotEmpty(phone),"phone", phone); + shopIds=shopService.list(queryWrapper).stream().map(Shop::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(shopIds)) { + return R.ok(new PageInfo<>()); + } + } + if (shopId!=null && !shopIds.contains(shopId)){ + shopIds.add(shopId); + } + + PageInfo<ShopWithdraw> page=new PageInfo<>(pageNum,pageSize); + List<ShopWithdraw> list =shopWithdrawMapper.page(page,shopIds,auditStatus); + list.forEach(x->{ + x.setIdStr(x.getId().toString()); + }); + page.setRecords(list); return R.ok(page); } +/* @GetMapping("/shop/info") @ApiOperation(value = "提现申请列表上方数据", notes = "提现申请列表", tags = {"门店后台"}) public R<Shop> shopCommissionStatisticsinfo(){ @@ -155,9 +185,10 @@ } return R.ok(byId); } +*/ @GetMapping("/shop/with") - @ApiOperation(value = "提现申请", notes = "提现申请列表", tags = {"门店后台"}) + @ApiOperation(value = "提现申请", notes = "提现申请", tags = {"门店后台"}) public R shopwith(@RequestParam BigDecimal money){ LoginUser loginUser = tokenService.getLoginUser(); SysUser sysUser = sysUserClient.getSysUser(loginUser.getUserid()).getData(); @@ -179,6 +210,7 @@ } private void baseWithdrawalApplication(BigDecimal money, Long userId, Integer shopId) { + money=money.setScale(2, BigDecimal.ROUND_HALF_DOWN); Shop shop = shopService.getById(shopId); if (money.compareTo(BigDecimal.ZERO)==0){ throw new ServiceException("提现金额必须大于零"); @@ -191,18 +223,27 @@ } ShopWithdraw shopWithdraw = new ShopWithdraw(); shopWithdraw.setShopId(shopId); + shopWithdraw.setShopName(shop.getName()); + shopWithdraw.setCreateUserId(userId); shopWithdraw.setMoney(money); shopWithdraw.setAuditStatus(0);//待审核 shopWithdraw.setStatus(1);//申请中 shopWithdraw.setCreateTime(LocalDateTime.now()); + + shopWithdraw.setTradeMerchantNo(shop.getTradeMerchantNo()); + shopWithdraw.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc()); + shopWithdraw.setReceiverNameEnc(shop.getReceiverNameEnc()); + shopWithdraw.setReceiverBankChannelNo(shop.getReceiverBankChannelNo()); + shopWithdraw.setReceiverAccountType(shop.getReceiverAccountType()); + shopWithdrawService.save(shopWithdraw); //扣除账户余额及添加变动明细 BigDecimal balance = shop.getBalance();//余额 BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();//可提现金额 - BigDecimal withdrawMoney = shop.getWithdrawMoney();//审核中金额 + BigDecimal withdrawAuditMoney = shop.getWithdrawAuditMoney();//审核中金额 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));//审核中金额增加 + shop.setWithdrawAuditMoney(withdrawAuditMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));//审核中金额增加 shopService.updateById(shop); //添加余额变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); @@ -223,7 +264,7 @@ * 审核 */ @PostMapping("/audit") - @ApiOperation("审核") + @ApiOperation("提现审核") public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) { LoginUser loginUser = tokenService.getLoginUser(); @@ -234,46 +275,46 @@ 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); + //取消商户转账,线下转账 + /* + try { + Map<String, String> map = wechatPayService.payToBankCard(shopWithdraw1.getId().toString(), + shopWithdraw1.getReceiverAccountNoEnc(),shopWithdraw1.getReceiverNameEnc(),shopWithdraw1.getReceiverBankChannelNo(),shopWithdraw1.getMoney(),shopWithdraw.getRemark()); + if (map.get("return_code").equals("SUCCESS")) { + System.out.println("转账申请成功"); + shopWithdraw1.setStatus(1); + }else { + return R.fail("转账申请失败"); + } + } catch (Exception e) { + throw new RuntimeException(e); + }*/ + //到账 + + shopWithdraw1.setStatus(2); + shopWithdraw1.setArrivalTime(LocalDateTime.now()); + shopWithdrawService.updateById(shopWithdraw); + //更新店铺审核中的金额,和提现金额 + shop.setWithdrawAuditMoney(shop.getWithdrawAuditMoney().subtract(shopWithdraw1.getMoney()));//审核中金额 + shop.setWithdrawMoney(shop.getWithdrawMoney().add(shopWithdraw1.getMoney()));//提现金额 + shopService.updateById(shop); + } if(2 == shopWithdraw.getAuditStatus()){ + //审核不通过 //回退金额和添加变动明细 BigDecimal balance = shop.getBalance(); BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney(); - BigDecimal withdrawMoney = shop.getWithdrawMoney(); + BigDecimal withdrawAuditMoney = shop.getWithdrawAuditMoney(); 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)); + //审核中的金额减少 + shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN)); shopService.updateById(shop); //添加门店变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); shopBalanceStatement.setShopId(shop.getId()); - shopBalanceStatement.setType(4); + shopBalanceStatement.setType(7); shopBalanceStatement.setHistoricalBalance(balance); shopBalanceStatement.setVariableAmount(money); shopBalanceStatement.setBalance(shop.getBalance()); @@ -282,6 +323,8 @@ shopBalanceStatement.setObjectId(shopWithdraw.getId()); shopBalanceStatementService.save(shopBalanceStatement); } + + shopWithdraw1.setAuditStatus(shopWithdraw.getAuditStatus()); shopWithdraw1.setAuditUserId(loginUser.getUserid()); shopWithdraw1.setAuditTime(LocalDateTime.now()); @@ -289,9 +332,8 @@ shopWithdrawService.updateById(shopWithdraw1); return R.ok(); } - - - + + /** * 提现审核通过后转账回调通知 * @param singlePayCallbackResult @@ -303,35 +345,46 @@ 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); } + //更新店铺审核中的金额,和提现金额 + Shop shop = shopService.getById(shopWithdraw.getShopId()); + shop.setWithdrawAuditMoney(shop.getWithdrawAuditMoney().subtract(shopWithdraw.getMoney()));//审核中金额 + shop.setWithdrawMoney(shop.getWithdrawMoney().add(shopWithdraw.getMoney()));//提现金额 + shopService.updateById(shop); + JSONObject jsonObject = new JSONObject(); jsonObject.put("statusCode", 2001); return jsonObject; }else{ //回退金额和添加变动明细 + BigDecimal money = shopWithdraw.getMoney().setScale(2, RoundingMode.HALF_EVEN); 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)); + BigDecimal withdrawAuditMoney = shop.getWithdrawAuditMoney(); + shop.setBalance(balance.add(money).setScale(2, RoundingMode.HALF_EVEN)); + shop.setCanWithdrawMoney(canWithdrawMoney.add(money).setScale(2, RoundingMode.HALF_EVEN)); + //审核中的金额减少 + shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN)); shopService.updateById(shop); //添加门店变动明细 ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); shopBalanceStatement.setShopId(shop.getId()); - shopBalanceStatement.setType(4); + shopBalanceStatement.setType(7); shopBalanceStatement.setHistoricalBalance(balance); - shopBalanceStatement.setVariableAmount(shopWithdraw.getMoney()); + shopBalanceStatement.setVariableAmount(money); 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); -- Gitblit v1.7.1