新版仿ok交易所-后端
1
zj
yesterday f31fc9f42f78de0808e7f4bdc797c5e622df09e3
trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
@@ -1,9 +1,12 @@
package com.yami.trading.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -65,6 +68,8 @@
    WalletLogService walletLogService;
    @Autowired
    LogService logService;
    @Autowired
    CapitaltWalletService capitaltWalletService;
    @Override
    public Page listRecord(Page page, String status, String roleName,
@@ -90,6 +95,8 @@
                symbol = "btc";
            } else if (withdraw.getMethod().indexOf("ETH") != -1) {
                symbol = "eth";
            } else if (withdraw.getMethod().indexOf("USDC") != -1) {
                symbol = "usdc";
            } else {
                symbol = "usdt";
            }
@@ -119,7 +126,7 @@
        Withdraw withdraw = getById(id);
        if (withdraw.getStatus() == 2 ) {// 通过后不可驳回
            return;
            throw new YamiShopBindException("Order already processed, please do not repeat!");
        }
        Date date = new Date();
        withdraw.setReviewTime(date);
@@ -130,19 +137,33 @@
        String symbol = "";
        if (withdraw.getMethod().indexOf("BTC") != -1) {
            symbol = "btc";
            symbol = "btcusdt";
        } else if (withdraw.getMethod().indexOf("ETH") != -1) {
            symbol = "eth";
        } else {
            symbol = "ethusdt";
        } else if (withdraw.getMethod().indexOf("USDC") != -1) {
            symbol = "usdcusdt";
        } else if (withdraw.getMethod().indexOf("USDT") != -1) {
            symbol = "usdt";
        } else {
            return;
        }
        if ("usdt".equals(symbol)) {
            Wallet wallet = walletService.saveWalletByPartyId(withdraw.getUserId());
            double amount_before = wallet.getMoney().doubleValue();
            walletService.update(wallet.getUserId().toString(),
                    Arith.add(withdraw.getAmount(), withdraw.getAmountFee()));
//            walletService.update(wallet.getUserId().toString(),
//                    Arith.add(withdraw.getAmount(), withdraw.getAmountFee()));
            CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
                    .eq(CapitaltWallet::getUserId, wallet.getUserId().toString()).last(" limit 1 "));
            if(ObjectUtil.isEmpty(capitaltWallet)){
                throw new YamiShopBindException("User fund account does not exist!");
            }
            capitaltWalletService.update(new LambdaUpdateWrapper<CapitaltWallet>()
                    .set(CapitaltWallet::getMoney,new BigDecimal(Arith.add(capitaltWallet.getMoney(), withdraw.getVolume())))
                    .eq(CapitaltWallet::getUserId,wallet.getUserId()));
            /*
             * 保存资金日志
@@ -204,7 +225,7 @@
    public void saveApplyOtherChannel(Withdraw withdraw, String symbol) {
        User party = userService.getById(withdraw.getUserId());
        if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
            throw new YamiShopBindException("无权限");
            throw new YamiShopBindException("no access");
        }
        RealNameAuthRecord party_kyc = realNameAuthRecordService.getByUserId(withdraw.getUserId());
        HighLevelAuthRecord party_kycHighLevel = highLevelAuthRecordService.findByUserId(withdraw.getUserId());
@@ -215,30 +236,30 @@
            party_kyc=new  RealNameAuthRecord();
        }
        if (!(party_kyc.getStatus() == 2) && "true".equals(sysparaService.find("withdraw_by_kyc").getSvalue())) {
            throw new YamiShopBindException("未基础认证");
            throw new YamiShopBindException("Not yet certified at the basic level");
        }
        double withdraw_by_high_kyc = Double.valueOf(sysparaService.find("withdraw_by_high_kyc").getSvalue());
        if (withdraw_by_high_kyc > 0 && withdraw.getVolume().doubleValue() > withdraw_by_high_kyc
                && !(party_kycHighLevel.getStatus() == 2)) {
            throw new YamiShopBindException("请先通过高级认证");
            throw new YamiShopBindException("Please go through the advanced certification process first.");
        }
//        if (!party.isWithdrawAuthority()) {
//            throw new YamiShopBindException("无权限");
//            throw new YamiShopBindException("Permission denied");
//        }
        if (party.getStatus() != 1) {
            throw new YamiShopBindException("Your account has been frozen");
        }
        WalletExtend walletExtend = walletService.saveExtendByPara(party.getUserId(), symbol);
        if (walletExtend.getAmount() < withdraw.getVolume().doubleValue()) {
            throw new YamiShopBindException("余额不足");
            throw new YamiShopBindException("not sufficient funds");
        }
        String withdraw_limit = sysparaService.find("withdraw_limit_" + symbol).getSvalue();
        if (withdraw.getVolume().doubleValue() < Double.valueOf(withdraw_limit)) {
            throw new YamiShopBindException("提现不得小于限额");
            throw new YamiShopBindException("Withdrawal amount must not be less than the limit.");
        }
        String withdraw_limit_max = sysparaService.find("withdraw_limit_max").getSvalue();
        if (withdraw.getVolume().doubleValue() > Double.valueOf(withdraw_limit_max)) {
            throw new YamiShopBindException("提现不得大于限额");
            throw new YamiShopBindException("Withdrawal amount cannot exceed the limit.");
        }
        /**
         * 当日提现次数是否超过
@@ -247,7 +268,7 @@
        List<Withdraw> withdraw_days = findAllByDate(withdraw.getUserId().toString());
        if (withdraw_limit_num > 0 && withdraw_days != null) {
            if (withdraw_days.size() >= withdraw_limit_num) {
                throw new YamiShopBindException("当日可提现次数不足");
                throw new YamiShopBindException("The number of times funds can be withdrawn on the same day is insufficient.");
            }
        }
        /**
@@ -262,7 +283,7 @@
            //
            String dateString = sdf.format(date);
            if (dateString.compareTo(withdraw_time[0]) < 0 || dateString.compareTo(withdraw_time[1]) > 0) {
                throw new YamiShopBindException("不在可提现时间内");
                throw new YamiShopBindException("Not within the available withdrawal period");
            }
        }
        /**
@@ -416,15 +437,18 @@
    public void saveApply(Withdraw withdraw, String channel, String method_id) {
        withdraw.setMethod(channel);
        if (channel.indexOf("BTC") != -1) {
            saveApplyOtherChannel(withdraw, "btc");
            saveApplyOtherChannel(withdraw, "btcusdt");
            return;
        } else if (channel.indexOf("ETH") != -1) {
            saveApplyOtherChannel(withdraw, "eth");
            saveApplyOtherChannel(withdraw, "ethusdt");
            return;
        } else if (channel.indexOf("USDC") != -1) {
            saveApplyOtherChannel(withdraw, "usdcusdt");
            return;
        }
        User party = userService.getById(withdraw.getUserId());
        if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) {
            throw new YamiShopBindException("无权限");
            throw new YamiShopBindException("Permission denied");
        }
        Syspara syspara = sysparaService.find("stop_user_internet");
@@ -436,7 +460,7 @@
            System.out.println("stopUserInternet = " + stopUserInternet);
            if(Arrays.asList(stopUsers).contains(party.getUserName())){
                throw new YamiShopBindException("无网络");
                throw new YamiShopBindException("No network connection");
            }
        }
@@ -446,7 +470,7 @@
            party_kyc=new RealNameAuthRecord();
        }
        if (!(party_kyc.getStatus() == 2) && "true".equals(sysparaService.find("withdraw_by_kyc").getSvalue())) {
            throw new YamiShopBindException("未基础认证");
            throw new YamiShopBindException("Basic verification not completed");
        }
        if (party_kycHighLevel==null){
            party_kycHighLevel=new HighLevelAuthRecord();
@@ -454,17 +478,21 @@
        double withdraw_by_high_kyc = Double.valueOf(sysparaService.find("withdraw_by_high_kyc").getSvalue());
        if (withdraw_by_high_kyc > 0 && withdraw.getVolume().doubleValue() > withdraw_by_high_kyc
                && !(party_kycHighLevel.getStatus() == 2)) {
            throw new YamiShopBindException(1001,"请先通过高级认证");
            throw new YamiShopBindException(1001,"Please complete advanced verification first");
        }
//        if (!party.isWithdrawAuthority()) {
//            throw new YamiShopBindException(1, "无权限");
//            throw new YamiShopBindException(1, "Permission denied");
//        }
        if (party.getStatus() != 1) {
            throw new YamiShopBindException("Your account has been frozen");
        }
        Wallet wallet = walletService.saveWalletByPartyId(withdraw.getUserId());
        if (wallet.getMoney().doubleValue() < withdraw.getVolume().doubleValue()) {
            throw new YamiShopBindException("余额不足");
//        Wallet wallet = walletService.saveWalletByPartyId(withdraw.getUserId());
        CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
                .eq(CapitaltWallet::getUserId, withdraw.getUserId()).last(" limit 1 "));
        if (capitaltWallet.getMoney().doubleValue() < withdraw.getVolume().doubleValue()) {
            throw new YamiShopBindException("not sufficient funds");
        }
        // 手续费(USDT)
        /**
@@ -501,11 +529,11 @@
        }
        String withdraw_limit = sysparaService.find("withdraw_limit").getSvalue();
        if (withdraw.getVolume().doubleValue() < Double.valueOf(withdraw_limit)) {
            throw new YamiShopBindException("提现不得小于限额");
            throw new YamiShopBindException("Withdrawal amount must not be less than the limit.");
        }
        String withdraw_limit_max = sysparaService.find("withdraw_limit_max").getSvalue();
        if (withdraw.getVolume().doubleValue() > Double.valueOf(withdraw_limit_max)) {
            throw new YamiShopBindException("提现不得大于限额");
            throw new YamiShopBindException("Withdrawal amount must not be less than the withdrawal limit and must not exceed the withdrawal limit.");
        }
        /**
         * 当日提现次数是否超过
@@ -514,7 +542,7 @@
        List<Withdraw> withdraw_days = findAllByDate(withdraw.getUserId().toString());
        if (withdraw_limit_num > 0 && withdraw_days != null) {
            if (withdraw_days.size() >= withdraw_limit_num) {
                throw new YamiShopBindException("当日可提现次数不足");
                throw new YamiShopBindException("The number of times funds can be withdrawn on the same day is insufficient.");
            }
        }
        /**
@@ -529,7 +557,7 @@
            //
            String dateString = sdf.format(date);
            if (dateString.compareTo(withdraw_time[0]) < 0 || dateString.compareTo(withdraw_time[1]) > 0) {
                throw new YamiShopBindException("不在可提现时间内");
                throw new YamiShopBindException("Not within the available withdrawal period");
            }
        }
        /**
@@ -558,7 +586,7 @@
                /**
                 * 用户Party表里可提现金额参数 -----可为负数
                 */
                double party_withdraw = party.getWithdrawLimitAmount().doubleValue();
//                double party_withdraw = party.getWithdrawLimitAmount().doubleValue();
                /**
                 * usdt剩余余额
                 */
@@ -593,15 +621,15 @@
                        }
                    }
                }
                double withdraw_limit_turnover_percent = Double
                        .valueOf(sysparaService.find("withdraw_limit_turnover_percent").getSvalue());
                party_withdraw = Arith.mul(party_withdraw, withdraw_limit_turnover_percent);
                // 流水小于限额
                if (userdata_turnover < party_withdraw) {
                    fact_withdraw_amount = Arith.sub(party_withdraw, userdata_turnover);
                    throw new YamiShopBindException(fact_withdraw_amount + "");
//               throw new BusinessException(1, "当前还需交易" + fact_withdraw_amount + ",才可提币");
                }
//                double withdraw_limit_turnover_percent = Double
//                        .valueOf(sysparaService.find("withdraw_limit_turnover_percent").getSvalue());
//                party_withdraw = Arith.mul(party_withdraw, withdraw_limit_turnover_percent);
//                // 流水小于限额
//                if (userdata_turnover < party_withdraw) {
//                    fact_withdraw_amount = Arith.sub(party_withdraw, userdata_turnover);
//                    throw new YamiShopBindException(fact_withdraw_amount + "");
////               throw new BusinessException(1, "当前还需交易" + fact_withdraw_amount + ",才可提币");
//                }
            }
            if ("2".equals(withdraw_limit_open_use_type)) {
                /**
@@ -626,47 +654,15 @@
                }
            }
        }
//      String withdraw_fee_type = sysparaService.find("withdraw_fee_type").getValue();
//      double withdraw_fee = Double.valueOf(((Syspara) sysparaService.find("withdraw_fee")).getValue());
//      DecimalFormat df = new DecimalFormat("#.##");
//      if ("fixed".equals(withdraw_fee_type)) {
//         fee = withdraw_fee;
//      } else {
//         fee = Double.valueOf(df.format(Arith.mul(withdraw.getVolume(), withdraw_fee)));
//
//      }
        withdraw.setAmountFee(new BigDecimal(fee));
//      ExchangeRate exchangeRate = exchangeRateService.findBy(ExchangeRate.OUT, withdraw.getCurrency());
//
//      if (exchangeRate == null) {
//         throw new BusinessException("Parameter Error");
//      }
//
//      withdraw.setAmount(Double.valueOf(df.format(Arith.mul(withdraw.getVolume(), exchangeRate.getRata()))));
        withdraw.setAmount(new BigDecimal(Arith.sub(withdraw.getVolume().doubleValue(), fee)));
        if (channel.indexOf("USDT") != -1) {
            withdraw.setMethod(channel);
        }
//      if ("USDT".equals(channel)) {
//         withdraw.setMethod("USDT");
//      }
        else if ("OTC".equals(channel)) {
            throw new YamiShopBindException("渠道未开通");
//         if (StringUtils.isNullOrEmpty(method_id)) {
//            throw new BusinessException("请选择付款账号");
//         }
//         PaymentMethod paymentMethod = paymentMethodService.get(method_id);
//         if (paymentMethod == null) {
//            throw new BusinessException("请选择付款账号");
//         }
//         withdraw.setMethod(paymentMethod.getMethod());
//         withdraw.setAccount(paymentMethod.getAccount());
//         withdraw.setBank(paymentMethod.getBank());
//         withdraw.setDeposit_bank(paymentMethod.getDeposit_bank());
//         withdraw.setQdcode(paymentMethod.getQdcode());
//         withdraw.setUsername(withdraw.getUsername());
            throw new YamiShopBindException("Channel not activated");
        } else {
            throw new YamiShopBindException("渠道未开通");
            throw new YamiShopBindException("Channel not activated");
        }
        log.info("========================getOrderNo=======11111111=============================================");
@@ -680,8 +676,18 @@
         */
        String withdraw_qr = qRGenerateService.generateWithdraw(withdraw.getOrderNo(), withdraw.getAddress());
        withdraw.setQdcode(withdraw_qr);
        double amount_before = wallet.getMoney().doubleValue();
        walletService.update(wallet.getUserId().toString(), Arith.sub(0, withdraw.getVolume().doubleValue()));
        double amount_before = capitaltWallet.getMoney().doubleValue();
//        walletService.update(wallet.getUserId().toString(), Arith.sub(0, withdraw.getVolume().doubleValue()));
        if(ObjectUtil.isEmpty(capitaltWallet)){
            throw new YamiShopBindException("The user's funds account does not exist!");
        }
        capitaltWalletService.update(capitaltWallet,-withdraw.getVolume().doubleValue());
        save(withdraw);
        /*
@@ -691,7 +697,7 @@
        moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_COIN);
        moneyLog.setAmountBefore(new BigDecimal(amount_before));
        moneyLog.setAmount(new BigDecimal(Arith.sub(0, withdraw.getVolume().doubleValue())));
        moneyLog.setAmountAfter(wallet.getMoney());
        moneyLog.setAmountAfter(capitaltWallet.getMoney());
        moneyLog.setLog("提现订单[" + withdraw.getOrderNo() + "]");
        // moneyLog.setExtra(withdraw.getOrder_no());
        moneyLog.setUserId(withdraw.getUserId());
@@ -732,7 +738,7 @@
    public void updateAddress(String id, String userName, Long adminuserId, String newAddress) {
        Withdraw withdraw = getById(id);
        if (withdraw == null) {
            throw new YamiShopBindException("参数错误!");
            throw new YamiShopBindException("Invalid parameters!");
        }
        String oldaddres = withdraw.getAddress();
        withdraw.setAddress(newAddress);
@@ -763,31 +769,31 @@
        BigDecimal amount = withdraw.getAmount();
        String symbol = "btc";
        if (!UserConstants.SECURITY_ROLE_MEMBER.equals(user.getRoleName())) {
            throw new YamiShopBindException("无权限");
            throw new YamiShopBindException("Permission denied");
        }
        RealNameAuthRecord realNameAuthRecord = realNameAuthRecordService.getByUserId(user.getUserId());
        if (!(realNameAuthRecord.getStatus() == 2) && "true".equals(sysparaService.find("withdraw_by_kyc").getSvalue())) {
            throw new YamiShopBindException("未安全认证,无提现权限");
            throw new YamiShopBindException("Security verification not completed, no withdrawal permission");
        }
        HighLevelAuthRecord highLevelAuthRecord = highLevelAuthRecordService.findByUserId(withdraw.getUserId());
        BigDecimal withdrawByHighKyc = new BigDecimal(sysparaService.find("withdraw_by_high_kyc").getSvalue());
        if (withdrawByHighKyc.doubleValue() > 0 && amount.doubleValue() > withdrawByHighKyc.doubleValue()
                && !(highLevelAuthRecord.getStatus() == 2)) {
            throw new YamiShopBindException("请先通过高级认证");
            throw new YamiShopBindException("Please complete advanced verification first");
        }
        if (!user.isWithdrawAuthority()) {
            throw new YamiShopBindException("无提现权限");
            throw new YamiShopBindException("No withdrawal permission");
        }
        if (user.getStatus() == 0) {
            throw new YamiShopBindException("Your account has been frozen");
        }
        String withdraw_limit = sysparaService.find("withdraw_limit_" + symbol).getSvalue();
        if (amount.doubleValue() < Double.valueOf(withdraw_limit)) {
            throw new YamiShopBindException("提现不得小于限额");
            throw new YamiShopBindException("Withdrawal amount must not be less than the limit.");
        }
        String withdraw_limit_max = sysparaService.find("withdraw_limit_max").getSvalue();
        if (amount.doubleValue() > Double.valueOf(withdraw_limit_max)) {
            throw new YamiShopBindException("提现不得大于限额");
            throw new YamiShopBindException("Withdrawal amount cannot exceed the limit.");
        }
        /**
         * 当日提现次数是否超过
@@ -796,7 +802,7 @@
        List<Withdraw> withdraw_days = findAllByDate(withdraw.getUserId().toString());
        if (withdraw_limit_num > 0 && withdraw_days != null) {
            if (withdraw_days.size() >= withdraw_limit_num) {
                throw new YamiShopBindException("当日可提现次数不足");
                throw new YamiShopBindException("The number of times funds can be withdrawn on the same day is insufficient.");
            }
        }
        /**
@@ -811,7 +817,7 @@
            //
            String dateString = sdf.format(date);
            if (dateString.compareTo(withdraw_time[0]) < 0 || dateString.compareTo(withdraw_time[1]) > 0) {
                throw new YamiShopBindException("不在可提现时间内");
                throw new YamiShopBindException("Not within the available withdrawal periodNot within the available withdrawal period");
            }
        }
        WithdrawFeeVo withdrawFeeVo = getFee(withdraw.getMethod(), withdraw.getAmount().doubleValue());
@@ -920,7 +926,7 @@
             */
            double weekWithdraw = weekWithdraw(party.getUserId());
            if (Arith.add(weekWithdraw, withdrawVolumn) > limit) {
                throw new YamiShopBindException("提现不得大于限额");
                throw new YamiShopBindException("Withdrawal amount cannot exceed the limit");
            }
        }
    }