From fc68aa452e2fd56441128d1d5a4b32f254c6191d Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 05 Oct 2025 00:45:32 +0800
Subject: [PATCH] 修改地址
---
src/main/java/project/project/web/api/ContractOrderController.java | 115 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 88 insertions(+), 27 deletions(-)
diff --git a/src/main/java/project/project/web/api/ContractOrderController.java b/src/main/java/project/project/web/api/ContractOrderController.java
index da02779..bfdd291 100644
--- a/src/main/java/project/project/web/api/ContractOrderController.java
+++ b/src/main/java/project/project/web/api/ContractOrderController.java
@@ -1,6 +1,7 @@
-package project.project.web.api;
+package project.web.api;
import java.io.IOException;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -10,6 +11,7 @@
import javax.servlet.http.HttpServletRequest;
+import kernel.util.Arith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +29,8 @@
import project.contract.ContractOrderService;
import project.data.DataService;
import project.data.model.Realtime;
+import project.wallet.Wallet;
+import project.wallet.WalletService;
/**
* 永续合约持仓单
@@ -37,20 +41,23 @@
@Autowired
private DataService dataService;
-
+
@Autowired
private ContractLockService contractLockService;
-
+
@Autowired
private ContractOrderService contractOrderService;
+ @Autowired
+ private WalletService walletService;
+
private final String action = "/api/contractOrder!";
-
+
private static final Logger logger = LoggerFactory.getLogger(ContractOrderController.class);
/**
* 平仓
- *
+ *
* order_no 订单号
*/
@RequestMapping(action + "close.action")
@@ -62,7 +69,7 @@
if (!"0".equals(resultObject.getCode())) {
return resultObject;
}
-
+
try {
CloseDelayThread lockDelayThread = new CloseDelayThread(this.getLoginPartyId(), order_no, this.contractOrderService, false);
@@ -72,7 +79,8 @@
} catch (BusinessException e) {
resultObject.setCode("1");
resultObject.setMsg(e.getMessage());
- } catch (Throwable t) {
+ } catch (Exception t) {
+ t.printStackTrace();
resultObject.setCode("1");
resultObject.setMsg("程序错误");
logger.error("error:", t);
@@ -92,7 +100,7 @@
if (!"0".equals(resultObject.getCode())) {
return resultObject;
}
-
+
try {
CloseDelayThread lockDelayThread = new CloseDelayThread(this.getLoginPartyId(), "", this.contractOrderService, true);
@@ -113,7 +121,7 @@
/**
* 订单列表
- *
+ *
* page_no 页码
* symbol 币种
* type 查询类型:orders 当前持仓单;hisorders 历史持仓单;
@@ -146,7 +154,7 @@
}
int page_no_int = Integer.valueOf(page_no).intValue();
-
+
if ("orders".equals(type)) {
// // 页条数配成1000达到不分页的效果
// data = this.contractOrderService.getPaged(page_no_int, 1000, this.getLoginPartyId(), symbol, type);
@@ -154,7 +162,7 @@
} else if ("hisorders".equals(type)) {
data = this.contractOrderService.getPaged(page_no_int, 10, this.getLoginPartyId(), symbol, type,startTime,endTime);
}
-
+
String symbolsStr = "";
Set<String> symbols = new HashSet<String>();
for (int i = 0; i < data.size(); i++) {
@@ -166,23 +174,76 @@
} else {
symbolsStr = sym;
}
- }
+ }
}
-
+
List<Realtime> realtime_all = this.dataService.realtime(symbolsStr);
if (realtime_all.size() <= 0) {
realtime_all = new ArrayList<Realtime>();
// throw new BusinessException("系统错误,请稍后重试");
}
-
+
Map<String, Realtime> realtimeMap = new HashMap<String, Realtime>();
for (int i = 0; i < realtime_all.size(); i++) {
realtimeMap.put(realtime_all.get(i).getSymbol(), realtime_all.get(i));
}
-
+
for (int i = 0; i < data.size(); i++) {
Map<String, Object> map = data.get(i);
+ double depositOpen = Double.parseDouble(map.get("deposit_open").toString());
+ double leverRate = Double.parseDouble(map.get("lever_rate").toString());
+ double tradeAvgPrice = Double.parseDouble(map.get("trade_avg_price").toString());
+
+ double mul = Arith.mul(depositOpen, leverRate);//仓位
+ double div = Arith.div(mul, tradeAvgPrice);//持有币的数量
+ /**
+ * 计算全仓收益 保证金
+ */
+ double profit = 0;
+ List<ContractOrder> list = contractOrderService.findSubmitted(this.getLoginPartyId(), null, null);
+ for (int f = 0; f < list.size(); f++) {
+ ContractOrder close_line = list.get(f);
+ if(close_line.getProfit() > 0){
+ profit = Arith.add(profit, Arith.add(close_line.getProfit(), close_line.getDeposit()));
+ }else{
+ profit = Arith.add(profit, close_line.getDeposit());
+ } }
+ Wallet wallet = this.walletService.saveWalletByPartyId(this.getLoginPartyId());
+ double totleMoney = wallet.getMoney();
+ profit = Arith.add(profit,totleMoney);
+
+
+ if (map.get("direction") != null && map.get("state").equals("submitted")) {
+ String direction = map.get("direction").toString();
+ double liquidationPrice;
+ double deposit = profit;
+
+ if(leverRate == 1){
+ liquidationPrice = 0;
+ }else {
+ if ("sell".equals(direction)) {
+ double lossPercentage = deposit / Double.parseDouble(map.get("amount").toString());
+ double priceIncrease = lossPercentage * tradeAvgPrice;
+ liquidationPrice = tradeAvgPrice + priceIncrease;
+ } else {
+ double lossPercentage = deposit / Double.parseDouble(map.get("amount").toString());
+ double priceDrop = lossPercentage * tradeAvgPrice;
+ liquidationPrice = tradeAvgPrice - priceDrop;
+ }
+ }
+ // 检查 liquidationPrice 是否为有效数字
+ if (Double.isInfinite(liquidationPrice) || Double.isNaN(liquidationPrice)) {
+ liquidationPrice = 0; // 如果是无效结果,回退为 0
+ }
+ DecimalFormat dfs = new DecimalFormat("#.#####");
+ String formattedPrice = dfs.format(liquidationPrice);
+ // 检查是否为负数
+ if (Double.parseDouble(formattedPrice) < 0) {
+ formattedPrice = "0";
+ }
+ map.put("qiangPing", formattedPrice);
+ }
// 标记价格
Realtime realtime = realtimeMap.get(map.get("symbol"));
if (null == realtime) {
@@ -191,9 +252,9 @@
map.put("mark_price", realtime.getClose());
}
}
-
+
resultObject.setData(data);
-
+
} catch (BusinessException e) {
resultObject.setCode("1");
resultObject.setMsg(e.getMessage());
@@ -208,7 +269,7 @@
/**
* 订单详情
- *
+ *
* order_no 订单号
*/
@RequestMapping(action + "get.action")
@@ -222,21 +283,21 @@
}
try {
-
+
if (StringUtils.isNullOrEmpty(order_no)) {
logger.info("contractOrder!get order_no null");
throw new BusinessException("订单不存在");
}
ContractOrder order = this.contractOrderService.findByOrderNo(order_no);
-
+
if (null == order) {
logger.info("contractOrder!get order_no:" + order_no + ", order null");
throw new BusinessException("订单不存在");
}
-
+
resultObject.setData(this.contractOrderService.bulidOne(order));
-
+
} catch (BusinessException e) {
resultObject.setCode("1");
resultObject.setMsg(e.getMessage());
@@ -259,9 +320,9 @@
private boolean all = false;
public void run() {
-
+
try {
-
+
while (true) {
if (true == all) {
// 一键平仓
@@ -271,7 +332,7 @@
// 处理完退出
break;
}
- ThreadUtils.sleep(500);
+ ThreadUtils.sleep(500);
} else {
// if (ContractLock.add(order_no)) {
if (contractLockService.getContractLock(order_no)) {
@@ -279,7 +340,7 @@
// 处理完退出
break;
}
- ThreadUtils.sleep(500);
+ ThreadUtils.sleep(500);
}
}
@@ -303,5 +364,5 @@
this.all = all;
}
}
-
+
}
--
Gitblit v1.9.3