新版仿ok交易所-后端
1
zj
2026-05-15 7d9f0356f7f68caf08aa93a51a31fe9d6d480f42
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiWithdrawController.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yami.trading.api.UD.*;
import com.yami.trading.api.util.ServletUtil;
import com.yami.trading.bean.model.CapitaltWallet;
import com.yami.trading.bean.model.RechargeBlockchainOrder;
import com.yami.trading.bean.model.Withdraw;
@@ -89,8 +90,8 @@
    @ApiOperation("提现申请")
    @PostMapping("apply")
    public Result apply(String session_token, String safeword,
                                String amount, String from, String currency,
                                String channel){
                        String amount, String from, String currency,
                        String channel, String language) {
        Result resultObject=new Result();
        try {
            String partyId = SecurityUtils.getUser().getUserId();
@@ -99,34 +100,24 @@
                throw new YamiShopBindException(error);
            }
            double amount_double = Double.valueOf(amount).doubleValue();
            // 交易所提现是否需要资金密码
            String exchange_withdraw_need_safeword = this.sysparaService.find("exchange_withdraw_need_safeword").getSvalue();
            if(StringUtils.isEmptyString(exchange_withdraw_need_safeword)) {
                throw new YamiShopBindException("系统参数错误");
            if (StringUtils.isEmptyString(exchange_withdraw_need_safeword)) {
                throw new YamiShopBindException("System parameter error");
            }
//        if ("true".equals(exchange_withdraw_need_safeword)) {
//
//            if (StringUtils.isEmptyString(safeword)) {
//                throw new YamiShopBindException("资金密码不能为空");
//            }
//
//            if (safeword.length() < 6 || safeword.length() > 12) {
//                throw new YamiShopBindException("资金密码必须6-12位");
//            }
//            if (!userService.checkLoginSafeword(SecurityUtils.getUser().getUserId(),safeword)){
//                throw new YamiShopBindException("资金密码错误");
//            }
//        }
            // 获取资金账户(capital)
            CapitaltWallet capitaltWallet = capitaltWalletService.getOne(new LambdaQueryWrapper<>(CapitaltWallet.class)
                    .eq(CapitaltWallet::getUserId, partyId).last(" limit 1 "));
            if(capitaltWallet.getMoney().compareTo(new BigDecimal(amount)) < 0){
                throw new YamiShopBindException("Insufficient available balance for withdrawal!");
            // 开关打开,则验证
            if ("true".equals(exchange_withdraw_need_safeword)) {
                // 资金密码验证
                if (StringUtils.isEmptyString(safeword)) {
                    throw new YamiShopBindException("资金密码不能为空");
                }
                if (safeword.length() < 6 || safeword.length() > 12) {
                    throw new YamiShopBindException("资金密码必须6-12位");
                }
                if (!userService.checkLoginSafeword(SecurityUtils.getUser().getUserId(), safeword)) {
                    throw new YamiShopBindException("资金密码错误");
                }
            }
            this.sessionTokenService.del(session_token);
            Withdraw withdraw = new Withdraw();
            withdraw.setUserId(partyId);
@@ -135,15 +126,25 @@
            withdraw.setCurrency(currency);
            withdraw.setTx("");
            //获取商户支持币种
            List<Coin> coinList = udunClient.listSupportCoin(false);
            String channelName = channel.replace("_", "");
            String channelName ;
            if (channel.toUpperCase().contains("USDC")) {
                channelName = "USDC";
            } else {
                channelName = channel.replace("_", "");
            }
            Coin coin = coinList.stream().filter(x -> x.getName().replace("-","").equals(channelName)).findFirst().orElse(null);
            if (coin == null) {
                throw new YamiShopBindException("不支持的提现币种");
                throw new YamiShopBindException("Unsupported withdrawal currency");
            }
            if (!udunClient.checkAddress(coin.getMainCoinType(), from)) {
                throw new YamiShopBindException("The withdrawal address is abnormal.");
            }
            // 保存
            this.withdrawService.saveApply(withdraw, channel, null);
            this.withdrawService.saveApply(withdraw, channel,  language);
            ResultMsg resultMsg = udunClient.withdraw(from, withdraw.getVolume(), coin.getMainCoinType(),
                    coin.getCoinType(), withdraw.getOrderNo(), null);
            if (resultMsg.getCode() != HttpStatus.HTTP_OK) {
@@ -153,17 +154,17 @@
            resultObject.setCode(0);
        } catch (YamiShopBindException e) { // 1. 显式捕获业务异常,优先处理
            resultObject.setCode(1);
            resultObject.setMsg(e.getMessage()); // 直接获取纯业务消息
            resultObject.setMsg("失败");
            log.error("业务异常: {}", e.getMessage());
            throw e;
        } catch (UdunException e) {
            resultObject.setCode(1);
            resultObject.setMsg(e.getMessage());
            log.error("error:" + e.getMessage());
            resultObject.setMsg("失败");
            log.error("Withdraw ud error:{}", e.getMessage());
            throw e;
        } catch (Throwable t) {
            resultObject.setCode(1);
            resultObject.setMsg(t.getMessage());
            resultObject.setMsg("失败");
            log.error("error: {}", t.getMessage());
            throw new RuntimeException(t);
        }