| | |
| | | package com.ruoyi.other.controller; |
| | | |
| | | |
| | | 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.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.other.util.BankCode; |
| | | import com.ruoyi.other.util.withdraw.HttpUtilWithdraw; |
| | | import com.ruoyi.other.util.pay.HttpRequester; |
| | | import com.ruoyi.other.util.pay.HttpRespons; |
| | | import com.ruoyi.other.util.payment.wx.WechatPayService; |
| | | import com.ruoyi.other.util.withdraw.WithdrawCallBackDTO; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | |
| | | 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.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @PostMapping("/audit") |
| | | @ApiOperation("提现审核") |
| | | public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) { |
| | | public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) throws IOException { |
| | | LoginUser loginUser = tokenService.getLoginUser(); |
| | | |
| | | ShopWithdraw shopWithdraw1 = shopWithdrawService.getById(shopWithdraw.getId()); |
| | |
| | | Shop shop = shopService.getById(shopWithdraw1.getShopId()); |
| | | BigDecimal money = shopWithdraw1.getMoney(); |
| | | if(1 == shopWithdraw.getAuditStatus()){ |
| | | //取消商户转账,线下转账 |
| | | /* |
| | | 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); |
| | | }*/ |
| | | //到账 |
| | | // 打款 |
| | | String url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&" + |
| | | "cardNo="+shopWithdraw1.getReceiverAccountNoEnc()+"&cardBinCheck=true"; |
| | | HashMap<String, String> hashMap = new HashMap<>(); |
| | | HttpRequester hr = new HttpRequester(); |
| | | HttpRespons HP = hr.sendPost(url, hashMap); |
| | | System.out.println("接收返回参数:" + HP.getContent()); |
| | | com.alibaba.fastjson.JSONObject resPay = com.alibaba.fastjson.JSONObject.parseObject(HP.getContent()); |
| | | System.err.println(resPay); |
| | | if (resPay.getString("validated")==null){ |
| | | System.err.println("不合法的银行卡号"); |
| | | } |
| | | String bankCode = resPay.getString("bank"); |
| | | String bankName = BankCode.getBankNameByCode(bankCode); // 返回ABC枚举实例 |
| | | System.err.println(bankName); |
| | | String withdraw = HttpUtilWithdraw.withdraw(shopWithdraw1, bankName); |
| | | if (!withdraw.equals("success")){ |
| | | return R.fail("打款失败,原因:"+withdraw); |
| | | } |
| | | |
| | | shopWithdraw1.setStatus(2); |
| | | shopWithdraw1.setArrivalTime(LocalDateTime.now()); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 提现审核通过后转账回调通知 |
| | | * @param singlePayCallbackResult |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/withdrawalCallback") |
| | | public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){ |
| | | public Object withdrawalCallback(@RequestBody WithdrawCallBackDTO singlePayCallbackResult){ |
| | | String sign = singlePayCallbackResult.getSign(); |
| | | String orderCode = singlePayCallbackResult.getOrderCode(); |
| | | String tradeNo = singlePayCallbackResult.getTradeNo(); |
| | | BigDecimal money = singlePayCallbackResult.getMoney(); |
| | | Integer status = singlePayCallbackResult.getStatus(); |
| | | String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo(); |
| | | ShopWithdraw shopWithdraw = shopWithdrawService.getById(merchantOrderNo); |
| | | if(203 == status || 205 == status){ |
| | | LocalDateTime time = singlePayCallbackResult.getTime(); |
| | | String message = singlePayCallbackResult.getMessage(); |
| | | ShopWithdraw shopWithdraw = shopWithdrawService.lambdaQuery().eq(ShopWithdraw::getCode, orderCode).one(); |
| | | if (shopWithdraw == null){ |
| | | return R.ok(); |
| | | } |
| | | if (shopWithdraw.getStatus()==2 || 3 == shopWithdraw.getStatus()){ |
| | | return R.ok(); |
| | | } |
| | | if(1 == status && Objects.equals(money, shopWithdraw.getMoney())){ |
| | | //到账 |
| | | if(1 == shopWithdraw.getStatus()){ |
| | | shopWithdraw.setStatus(2); |
| | | shopWithdraw.setArrivalTime(LocalDateTime.now()); |
| | | shopWithdraw.setOrderNumber(tradeNo); |
| | | shopWithdrawService.updateById(shopWithdraw); |
| | | } |
| | | //更新店铺审核中的金额,和提现金额 |
| | |
| | | shop.setWithdrawMoney(shop.getWithdrawMoney().add(shopWithdraw.getMoney()));//提现金额 |
| | | shopService.updateById(shop); |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("statusCode", 2001); |
| | | return jsonObject; |
| | | }else{ |
| | | return R.ok(); |
| | | }else if (4 == status){ |
| | | //回退金额和添加变动明细 |
| | | BigDecimal money = shopWithdraw.getMoney().setScale(2, RoundingMode.HALF_EVEN); |
| | | BigDecimal withdrawMoney = shopWithdraw.getMoney().setScale(2, RoundingMode.HALF_EVEN); |
| | | Shop shop = shopService.getById(shopWithdraw.getShopId()); |
| | | BigDecimal balance = shop.getBalance(); |
| | | BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney(); |
| | | 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.setBalance(balance.add(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN)); |
| | | shop.setCanWithdrawMoney(canWithdrawMoney.add(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN)); |
| | | //审核中的金额减少 |
| | | shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN)); |
| | | shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN)); |
| | | shopService.updateById(shop); |
| | | //添加门店变动明细 |
| | | ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement(); |
| | | shopBalanceStatement.setShopId(shop.getId()); |
| | | shopBalanceStatement.setType(7); |
| | | shopBalanceStatement.setHistoricalBalance(balance); |
| | | shopBalanceStatement.setVariableAmount(money); |
| | | shopBalanceStatement.setVariableAmount(withdrawMoney); |
| | | shopBalanceStatement.setBalance(shop.getBalance()); |
| | | shopBalanceStatement.setCreateUserId(shopWithdraw.getAuditUserId()); |
| | | shopBalanceStatement.setCreateTime(LocalDateTime.now()); |
| | |
| | | |
| | | |
| | | shopWithdraw.setStatus(3); |
| | | shopWithdraw.setRemark(singlePayCallbackResult.getErrorCodeDesc()); |
| | | shopWithdraw.setRemark(singlePayCallbackResult.getMessage()); |
| | | shopWithdrawService.updateById(shopWithdraw); |
| | | |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("statusCode", 2001); |
| | | return jsonObject; |
| | | return R.ok(); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | } |
| | | |