From b38469269d05b02cd67afbbbae65f0ae28f87b4e Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 12 Aug 2025 01:00:22 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java | 214 +++++++++++++++++++++++++++++++----------------------
1 files changed, 125 insertions(+), 89 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
index 0c3eb29..bd8f0ac 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java
@@ -1,5 +1,8 @@
package com.yami.trading.api.controller.exchange;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.bean.exchange.ExchangeApplyOrder;
import com.yami.trading.bean.exchange.dto.ExchangeSymbolDto;
@@ -8,6 +11,7 @@
import com.yami.trading.bean.purchasing.dto.ExchangeLock;
import com.yami.trading.bean.syspara.domain.Syspara;
import com.yami.trading.common.domain.Result;
+import com.yami.trading.common.domain.UUIDEntity;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.Arith;
import com.yami.trading.common.util.DateUtils;
@@ -23,6 +27,7 @@
import com.yami.trading.service.item.ItemService;
import com.yami.trading.service.syspara.SysparaService;
import com.yami.trading.service.user.UserService;
+import com.yami.trading.service.user.WalletExtendService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -64,7 +69,8 @@
ItemService itemService;
@Autowired
CapitaltWalletService capitaltWalletService;
-
+ @Autowired
+ WalletExtendService walletExtendService;
/**
* 兑换币 如果是使用usdt兑换其他币种,则直接执行正常买币open流程 如果是其他币种--》usdt 则是直接卖币流程
* 如果是其他币种到另一个币种,则需要先卖出,然后再买入
@@ -99,98 +105,82 @@
}
symbol = symbol.toLowerCase();
symbol_to = symbol_to.toLowerCase();
- String relation_order_no = UUID.randomUUID().toString();
- // 如果是使用usdt兑换其他币种,则直接执行正常买币open流程
- if ("usdt".equals(symbol) || "usdt".equals(symbol_to)) {
- ExchangeApplyOrder order = new ExchangeApplyOrder();
- order.setPartyId(partyId);
- order.setVolume(volume);
- order.setOrderPriceType("opponent");
- order.setRelationOrderNo(relation_order_no);
- if ("usdt".equals(symbol)) {
- order.setSymbol(symbol_to);
- double openPrice = getRealtimePrice(symbol_to);
- order.setPrice(openPrice);
- order.setOffset(ExchangeApplyOrder.OFFSET_OPEN);
- } else if ("usdt".equals(symbol_to)) {
- order.setSymbol(symbol);
- double closePrice = getRealtimePrice(symbol);
- order.setPrice(closePrice);
- order.setOffset(ExchangeApplyOrder.OFFSET_CLOSE);
+
+ Map<String, Object> parities = parities(symbol, symbol_to, volume_temp);
+ Object getVolume = parities.get("get_volume");
+ if(symbol.equals("usdt")){
+ CapitaltWallet userIdWallet = capitaltWalletService.getUserIdWallet(partyId);
+ if(userIdWallet.getMoney().compareTo(new BigDecimal(volume_temp)) < 0){
+ throw new YamiShopBindException("not sufficient funds");
}
- exchangeApplyOrderService.saveCreate(order);
- } else {
- // 非usdt则需要进行一次卖出
- ExchangeApplyOrder order_sell = new ExchangeApplyOrder();
- order_sell.setPartyId(partyId);
- order_sell.setSymbol(symbol);
- order_sell.setOffset(ExchangeApplyOrder.OFFSET_CLOSE);
- order_sell.setVolume(volume);
- order_sell.setOrderPriceType("opponent");
- order_sell.setRelationOrderNo(relation_order_no);
- double sellClose = getRealtimePrice(symbol);
- order_sell.setPrice(sellClose);
- this.exchangeApplyOrderService.saveCreate(order_sell);
- double close = getRealtimePrice(symbol);
- double sub = Arith.sub(volume,
- Arith.mul(volume, sysparaService.find("exchange_apply_order_sell_fee").getDouble()));
- double amount = Arith.mul(sub, close);
- // 再买入币种
- ExchangeApplyOrder order_buy = new ExchangeApplyOrder();
- order_buy.setPartyId(partyId);
- order_buy.setSymbol(symbol_to);
- order_buy.setOffset(ExchangeApplyOrder.OFFSET_OPEN);
- order_buy.setVolume(amount);
- order_buy.setRelationOrderNo(relation_order_no);
- order_buy.setOrderPriceType("opponent");
- double buyClose = getRealtimePrice(symbol_to);
- order_buy.setPrice(buyClose);
- exchangeApplyOrderService.saveCreate(order_buy);
+ Double value = Double.valueOf(volume_temp);
+ capitaltWalletService.update(userIdWallet, -value);
+
+ WalletExtend walletExtend = walletExtendService.getOne(new LambdaQueryWrapper<>(WalletExtend.class)
+ .eq(WalletExtend::getWallettype, symbol_to)
+ .eq(WalletExtend::getPartyId,partyId)
+ .last(" limit 1"));
+ if(ObjectUtil.isNotEmpty(walletExtend)){
+ Double valueOf = Double.valueOf(getVolume.toString());
+ walletExtend.setAmount(walletExtend.getAmount() + valueOf);
+ System.out.println("-----------------------:"+walletExtend.toString());
+ walletExtendService.update(walletExtend,new LambdaUpdateWrapper<WalletExtend>().eq(UUIDEntity::getUuid,walletExtend.getUuid()));
+ }else{
+ WalletExtend extend = new WalletExtend();
+ extend.setPartyId(partyId);
+ extend.setWallettype(symbol_to);
+ extend.setAmount(Double.valueOf(getVolume.toString()));
+ walletExtendService.save(extend);
+ }
+ }else if(symbol_to.equals("usdt")){
+
+
+ WalletExtend walletExtend = walletExtendService.getOne(new LambdaQueryWrapper<>(WalletExtend.class)
+ .eq(WalletExtend::getWallettype, symbol)
+ .eq(WalletExtend::getPartyId,partyId)
+ .last(" limit 1"));
+ if(ObjectUtil.isEmpty(walletExtend) || walletExtend.getAmount() < Double.valueOf(volume_temp)){
+ throw new YamiShopBindException("not sufficient funds");
+ }
+ Double valueOf = Double.valueOf(volume_temp);
+ walletExtend.setAmount(walletExtend.getAmount() - valueOf);
+ walletExtendService.update(walletExtend,new LambdaUpdateWrapper<WalletExtend>().eq(UUIDEntity::getUuid,walletExtend.getUuid()));
+
+
+ CapitaltWallet userIdWallet = capitaltWalletService.getUserIdWallet(partyId);
+ capitaltWalletService.update(userIdWallet,Double.valueOf(getVolume.toString()));
+ }else{
+ WalletExtend walletExtend = walletExtendService.getOne(new LambdaQueryWrapper<>(WalletExtend.class)
+ .eq(WalletExtend::getWallettype, symbol)
+ .eq(WalletExtend::getPartyId,partyId)
+ .last(" limit 1"));
+ if(ObjectUtil.isEmpty(walletExtend) || walletExtend.getAmount() < Double.valueOf(volume_temp)){
+ throw new YamiShopBindException("not sufficient funds");
+ }
+ Double valueOf = Double.valueOf(volume_temp);
+ walletExtend.setAmount(walletExtend.getAmount() - valueOf);
+ walletExtendService.update(walletExtend,new LambdaUpdateWrapper<WalletExtend>().eq(UUIDEntity::getUuid,walletExtend.getUuid()));
+
+ WalletExtend toWalletExtend = walletExtendService.getOne(new LambdaQueryWrapper<>(WalletExtend.class)
+ .eq(WalletExtend::getWallettype, symbol_to)
+ .eq(WalletExtend::getPartyId,partyId)
+ .last(" limit 1"));
+ Double value = Double.valueOf(getVolume.toString());
+ if(ObjectUtil.isNotEmpty(toWalletExtend)){
+ toWalletExtend.setAmount(toWalletExtend.getAmount() + value);
+ walletExtendService.update(toWalletExtend,new LambdaUpdateWrapper<WalletExtend>().eq(UUIDEntity::getUuid,toWalletExtend.getUuid()));
+ }else{
+ WalletExtend extend = new WalletExtend();
+ extend.setPartyId(partyId);
+ extend.setWallettype(symbol_to);
+ extend.setAmount(value);
+ walletExtendService.save(extend);
+ }
}
return Result.succeed();
}
- private double getRealtimePrice(String symbol) {
- List<Realtime> realtimes = dataService.realtime(symbol);
- double close = 1;
- if (realtimes != null && realtimes.size() > 0) {
- close = realtimes.get(0).getClose().doubleValue();
- } else {
- throw new YamiShopBindException("参数错误");
- }
- return close;
- }
-
- /**
- * 首次进入页面,传递session_token
- */
- @RequestMapping(action + "view.action")
- public Result view() {
- String partyId = SecurityUtils.getUser().getUserId();
- Map<String, Object> session = new HashMap<String, Object>();
- String session_token = sessionTokenService.savePut(partyId);
- session.put("session_token", session_token);
- return Result.succeed(session);
- }
-
- /**
- * 兑换汇率
- */
- @RequestMapping(action + "buy_and_sell_fee.action")
- public Object buy_and_sell_fee(HttpServletRequest request) {
- // 需兑换币种
- String symbol = request.getParameter("symbol");
- // 兑换后的币种
- String symbol_to = request.getParameter("symbol_to");
- if (symbol.equals(symbol_to)) {
- throw new YamiShopBindException("请选择正确的币种");
- }
- // 委托数量
- String volume_temp = request.getParameter("volume");
- if (StringUtils.isNullOrEmpty(volume_temp)
- || !StringUtils.isDouble(volume_temp) || Double.valueOf(volume_temp) < 0) {
- throw new YamiShopBindException("请输入正确的兑换数量");
- }
+ public Map<String,Object> parities(String symbol,String symbol_to,String volume_temp){
Map<String, Object> data = new HashMap<String, Object>();
symbol = symbol.toLowerCase();
symbol_to = symbol_to.toLowerCase();
@@ -275,7 +265,53 @@
// 实际获取数量 = 实际价值 / 将要兑换的品种的价值
data.put("get_volume", Arith.div(fact_price, symbol_to_price, 5));
}
- return Result.succeed(data);
+ return data;
+ }
+
+
+ private double getRealtimePrice(String symbol) {
+ List<Realtime> realtimes = dataService.realtime(symbol);
+ double close = 1;
+ if (realtimes != null && realtimes.size() > 0) {
+ close = realtimes.get(0).getClose().doubleValue();
+ } else {
+ throw new YamiShopBindException("参数错误");
+ }
+ return close;
+ }
+
+ /**
+ * 首次进入页面,传递session_token
+ */
+ @RequestMapping(action + "view.action")
+ public Result view() {
+ String partyId = SecurityUtils.getUser().getUserId();
+ Map<String, Object> session = new HashMap<String, Object>();
+ String session_token = sessionTokenService.savePut(partyId);
+ session.put("session_token", session_token);
+ return Result.succeed(session);
+ }
+
+ /**
+ * 兑换汇率
+ */
+ @RequestMapping(action + "buy_and_sell_fee.action")
+ public Object buy_and_sell_fee(HttpServletRequest request) {
+ // 需兑换币种
+ String symbol = request.getParameter("symbol");
+ // 兑换后的币种
+ String symbol_to = request.getParameter("symbol_to");
+ if (symbol.equals(symbol_to)) {
+ throw new YamiShopBindException("请选择正确的币种");
+ }
+ // 委托数量
+ String volume_temp = request.getParameter("volume");
+ if (StringUtils.isNullOrEmpty(volume_temp)
+ || !StringUtils.isDouble(volume_temp) || Double.valueOf(volume_temp) < 0) {
+ throw new YamiShopBindException("请输入正确的兑换数量");
+ }
+ Map<String, Object> parities = parities(symbol, symbol_to, volume_temp);
+ return Result.succeed(parities);
}
/**
--
Gitblit v1.9.3