| | |
| | | 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; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | |
| | | private ShopService shopService; |
| | | @Resource |
| | | private TokenService tokenService; |
| | | |
| | | @Resource |
| | | private ShopBalanceStatementService shopBalanceStatementService; |
| | | |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 提现申请列表 |
| | |
| | | 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); |
| | |
| | | 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(); |
| | | } |
| | | |
| | | |
| | |
| | | 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()); |
| | |
| | | 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(); |
| | | } |
| | | } |
| | | |