From 01e664e79f39091408570625f538898683658b92 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 21 Jan 2026 22:02:49 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiExchangeApplyOrderController.java | 129 ++++++++++++++++++++++++++++++++++++++----
1 files changed, 116 insertions(+), 13 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 40696f0..56a58b9 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
@@ -3,10 +3,12 @@
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.admin.dto.PurchaseRecordDto;
import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.bean.exchange.ExchangeApplyOrder;
import com.yami.trading.bean.exchange.dto.ExchangeSymbolDto;
import com.yami.trading.bean.exchange.dto.SumEtfDto;
+import com.yami.trading.bean.ico.domain.Ico;
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.bean.model.*;
import com.yami.trading.bean.purchasing.dto.ExchangeLock;
@@ -14,10 +16,7 @@
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;
-import com.yami.trading.common.util.StringUtils;
-import com.yami.trading.common.util.ThreadUtils;
+import com.yami.trading.common.util.*;
import com.yami.trading.security.common.util.SecurityUtils;
import com.yami.trading.service.CapitaltWalletService;
import com.yami.trading.service.RealNameAuthRecordService;
@@ -27,10 +26,13 @@
import com.yami.trading.service.exchange.ExchangeApplyOrderService;
import com.yami.trading.service.item.ItemService;
import com.yami.trading.service.syspara.SysparaService;
+import com.yami.trading.service.user.PurchaseRecordService;
import com.yami.trading.service.user.UserService;
import com.yami.trading.service.user.WalletExtendService;
+import com.yami.trading.util.ConverterUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -40,6 +42,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
+import java.time.LocalDate;
import java.util.*;
/**
@@ -72,6 +75,96 @@
CapitaltWalletService capitaltWalletService;
@Autowired
WalletExtendService walletExtendService;
+ @Autowired
+ PurchaseRecordService purchaseRecordService;
+
+
+ /**
+ * 12.29定制ico购买
+ */
+ @RequestMapping(action + "ico_buy.action")
+ public Object ico_buy(HttpServletRequest request) {
+
+ // 委托数量
+ String volume = request.getParameter("volume");
+ String session_token = request.getParameter("session_token");
+ String symbol = request.getParameter("symbol");
+ // limit order的交易价格
+ String price = request.getParameter("price");
+ // 计划委托 是之前火币那边拷贝学过来的一个功能 只是只有一个盘在用,暂时注释不用
+ // 是否计划委托
+ String is_trigger_order = request.getParameter("is_trigger_order");
+ // 计划委托的触发价
+ String trigger_price = request.getParameter("trigger_price");
+ // 订单报价类型。 "limit":限价 "opponent":对手价(市价)
+ String order_price_type = request.getParameter("order_price_type");
+
+ Result<Object> result = getObjectResult(volume, session_token, symbol, price, is_trigger_order, trigger_price, order_price_type);
+ if(!result.isSucceed()){
+ return result;
+ }
+
+ String partyId = SecurityUtils.getUser().getUserId();
+ User user = userService.getById(partyId);
+
+ PurchaseRecord purchaseRecord = purchaseRecordService.getOne(new LambdaQueryWrapper<>(PurchaseRecord.class)
+ .eq(PurchaseRecord::getUserId, user.getUserId()));
+
+ BigDecimal amount = new BigDecimal(volume).divide(new BigDecimal(price)).setScale(4,RoundingMode.HALF_UP);
+ if(ObjectUtil.isEmpty(purchaseRecord)){
+ PurchaseRecord record = new PurchaseRecord();
+ record.setUserId(user.getUserId());
+ record.setPurchaseQuantity(amount);
+ record.setPurchasePrice(new BigDecimal(price));
+ record.setTotalAmount(new BigDecimal(volume));
+ purchaseRecordService.save(record);
+ return Result.succeed();
+ }
+ purchaseRecord.setPurchaseQuantity(purchaseRecord.getPurchaseQuantity().add(amount));
+ purchaseRecord.setTotalAmount(purchaseRecord.getTotalAmount().add(new BigDecimal(volume)));
+ purchaseRecord.setPurchasePrice(purchaseRecord.getTotalAmount().divide(purchaseRecord.getPurchaseQuantity(), 4,RoundingMode.HALF_UP));
+ purchaseRecordService.updateById(purchaseRecord);
+ return Result.succeed();
+ }
+
+ /**
+ * 12.29定制ico购买
+ */
+ @RequestMapping(action + "get_ico_position.action")
+ public Object get_ico_position(HttpServletRequest request) {
+ String partyId = SecurityUtils.getUser().getUserId();
+ User user = userService.getById(partyId);
+ List<Realtime> realtime_list = this.dataService.realtime("pendleusdt");
+ Realtime realtime = null;
+ if (realtime_list.size() > 0) {
+ realtime = realtime_list.get(0);
+ }
+ BigDecimal close = BigDecimal.ZERO;
+ if (null != realtime) {
+ close = realtime.getClose();
+ }
+
+
+
+ PurchaseRecord purchaseRecord = purchaseRecordService.getOne(new LambdaQueryWrapper<>(PurchaseRecord.class)
+ .eq(PurchaseRecord::getUserId, user.getUserId()));
+ if(ObjectUtil.isNotEmpty(purchaseRecord)){
+ PurchaseRecordDto purchaseRecordDto = ConverterUtil.convert(purchaseRecord, PurchaseRecordDto.class);
+ purchaseRecordDto.setCurrentPrice(close);
+ //持仓市值
+ purchaseRecordDto.setPositionvalue(close.multiply(purchaseRecordDto.getPurchaseQuantity()));
+ //均价总额
+ BigDecimal currentTotalPrice = purchaseRecordDto.getPurchaseQuantity().multiply(purchaseRecord.getPurchasePrice());
+ BigDecimal profit = purchaseRecordDto.getPositionvalue().subtract(currentTotalPrice);
+ purchaseRecordDto.setProfit(profit.setScale(4, RoundingMode.HALF_UP));
+ BigDecimal profitPercent = (purchaseRecordDto.getPositionvalue().subtract(currentTotalPrice)).divide(currentTotalPrice,4,RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP);
+ purchaseRecordDto.setProfitPercent(profitPercent);
+ purchaseRecordDto.setLockingTime(LocalDate.of(2026, 2, 9));
+ return Result.succeed(purchaseRecordDto);
+ }
+ return Result.succeed(new PurchaseRecordDto());
+ }
+
/**
* 兑换币 如果是使用usdt兑换其他币种,则直接执行正常买币open流程 如果是其他币种--》usdt 则是直接卖币流程
* 如果是其他币种到另一个币种,则需要先卖出,然后再买入
@@ -418,14 +511,6 @@
String volume = request.getParameter("volume");
String session_token = request.getParameter("session_token");
String symbol = request.getParameter("symbol");
-// Item bySymbol = itemService.findBySymbol(symbol);
-// if(bySymbol == null){
-// throw new YamiShopBindException("当前币对不存在");
-// }
-// boolean isOpen = MarketOpenChecker.isMarketOpenByItemCloseType(bySymbol.getOpenCloseType());
-// if(!isOpen){
-// throw new YamiShopBindException("当前已经休市");
-// }
// limit order的交易价格
String price = request.getParameter("price");
// 计划委托 是之前火币那边拷贝学过来的一个功能 只是只有一个盘在用,暂时注释不用
@@ -435,6 +520,11 @@
String trigger_price = request.getParameter("trigger_price");
// 订单报价类型。 "limit":限价 "opponent":对手价(市价)
String order_price_type = request.getParameter("order_price_type");
+ return getObjectResult(volume, session_token, symbol, price, is_trigger_order, trigger_price, order_price_type);
+ }
+
+ @NotNull
+ private Result<Object> getObjectResult(String volume, String session_token, String symbol, String price, String is_trigger_order, String trigger_price, String order_price_type) {
String partyId = SecurityUtils.getUser().getUserId();
if (StringUtils.isNullOrEmpty(volume)
|| !StringUtils.isDouble(volume)
@@ -465,7 +555,6 @@
throw new YamiShopBindException("无网络");
}
}
-
RealNameAuthRecord party_kyc = realNameAuthRecordService.getByUserId(partyId);
@@ -500,6 +589,13 @@
return Result.succeed();
}
+ public static boolean isAfterFebruary9th2026() {
+ LocalDate today = LocalDate.now();
+ LocalDate targetDate = LocalDate.of(2026, 2, 9);
+
+ return today.isAfter(targetDate);
+ }
+
/**
* 币币交易-卖出
*/
@@ -520,6 +616,13 @@
String order_price_type = request.getParameter("order_price_type");
String partyId = SecurityUtils.getUser().getUserId();
boolean lock = false;
+
+//
+// if(symbol.equals("pendleusdt") && !isAfterFebruary9th2026()){
+// throw new YamiShopBindException("此币还没有发行时间");
+// }
+
+
if (StringUtils.isNullOrEmpty(volume)
|| !StringUtils.isDouble(volume)
|| Double.valueOf(volume) <= 0) {
--
Gitblit v1.9.3