| | |
| | | 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; |
| | |
| | | @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(); |
| | |
| | | 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 ("true".equals(exchange_withdraw_need_safeword)) { |
| | | // 资金密码验证 |
| | | if (StringUtils.isEmptyString(safeword)) { |
| | | throw new YamiShopBindException("Fund password is required"); |
| | | } |
| | | if (safeword.length() < 6 || safeword.length() > 12) { |
| | | throw new YamiShopBindException("Fund password must be 6-12 characters"); |
| | | } |
| | | if (!userService.checkLoginSafeword(SecurityUtils.getUser().getUserId(), safeword)) { |
| | | throw new YamiShopBindException("Incorrect fund password"); |
| | | } |
| | | } |
| | | |
| | | 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!"); |
| | | } |
| | | |
| | | this.sessionTokenService.del(session_token); |
| | | Withdraw withdraw = new Withdraw(); |
| | | withdraw.setUserId(partyId); |
| | |
| | | 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) { |
| | |
| | | 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); |
| | | } |
| | |
| | | public Result get(@RequestParam String order_no) throws IOException { |
| | | Withdraw withdraw = this.withdrawService.findByOrderNo(order_no); |
| | | if (withdraw==null){ |
| | | throw new YamiShopBindException("订单不存在!"); |
| | | throw new YamiShopBindException("Order does not exist"); |
| | | } |
| | | Map<String, Object> map = new HashMap<String, Object>(); |
| | | map.put("order_no", withdraw.getOrderNo()); |
| | |
| | | page_no = "1"; |
| | | } |
| | | if (!StringUtils.isInteger(page_no)) { |
| | | throw new YamiShopBindException("页码不是整数"); |
| | | throw new YamiShopBindException("Page number must be an integer"); |
| | | } |
| | | if (Integer.valueOf(page_no).intValue() <= 0) { |
| | | throw new YamiShopBindException("页码不能小于等于0"); |
| | | throw new YamiShopBindException("Page number must be greater than 0"); |
| | | } |
| | | int page_no_int = Integer.valueOf(page_no).intValue(); |
| | | List<Map<String, Object>> data = this.walletLogService.pagedQueryWithdraw(page_no_int, 10, SecurityUtils.getUser().getUserId(), "1").getRecords(); |
| | |
| | | |
| | | private String verif(String amount) { |
| | | if (StringUtils.isNullOrEmpty(amount)) { |
| | | return "提币数量必填"; |
| | | return "Withdrawal amount is required"; |
| | | } |
| | | if (!StringUtils.isDouble(amount)) { |
| | | return "提币数量输入错误,请输入浮点数"; |
| | | return "Invalid withdrawal amount, please enter a number"; |
| | | } |
| | | if (Double.valueOf(amount).doubleValue() <= 0) { |
| | | return "提币数量不能小于等于0"; |
| | | return "Withdrawal amount must be greater than 0"; |
| | | } |
| | | return null; |
| | | } |