From 41bc089a838c108a945706096a2b874cbcdd8486 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 30 May 2025 12:01:33 +0800
Subject: [PATCH] 1

---
 src/main/java/project/project/web/api/ContractOrderController.java |   70 ++++++++++++++++++----------------
 1 files changed, 37 insertions(+), 33 deletions(-)

diff --git a/src/main/java/project/project/web/api/ContractOrderController.java b/src/main/java/project/project/web/api/ContractOrderController.java
index 029f37b..d5170d7 100644
--- a/src/main/java/project/project/web/api/ContractOrderController.java
+++ b/src/main/java/project/project/web/api/ContractOrderController.java
@@ -41,10 +41,10 @@
 
 	@Autowired
 	private DataService dataService;
-	
+
 	@Autowired
 	private ContractLockService contractLockService;
-	
+
 	@Autowired
 	private ContractOrderService contractOrderService;
 
@@ -52,12 +52,12 @@
 	private WalletService walletService;
 
 	private final String action = "/api/contractOrder!";
-	
+
 	private static final Logger logger = LoggerFactory.getLogger(ContractOrderController.class);
 
 	/**
 	 * 平仓
-	 * 
+	 *
 	 * order_no 订单号
 	 */
 	@RequestMapping(action + "close.action")
@@ -69,7 +69,7 @@
 		if (!"0".equals(resultObject.getCode())) {
 			return resultObject;
 		}
-		
+
 		try {
 
 			CloseDelayThread lockDelayThread = new CloseDelayThread(this.getLoginPartyId(), order_no, this.contractOrderService, false);
@@ -99,7 +99,7 @@
 		if (!"0".equals(resultObject.getCode())) {
 			return resultObject;
 		}
-		
+
 		try {
 
 			CloseDelayThread lockDelayThread = new CloseDelayThread(this.getLoginPartyId(), "", this.contractOrderService, true);
@@ -120,7 +120,7 @@
 
 	/**
 	 * 订单列表
-	 * 
+	 *
 	 * page_no 页码
 	 * symbol 币种
 	 * type 查询类型:orders 当前持仓单;hisorders 历史持仓单;
@@ -153,7 +153,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);
@@ -161,7 +161,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++) {
@@ -173,20 +173,20 @@
 					} 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);
 
@@ -216,25 +216,29 @@
 				if (map.get("direction") != null) {
 					String direction = map.get("direction").toString();
 					double liquidationPrice;
-					double deposit = depositOpen + profit;
+					double deposit =  profit;
+
 					if(leverRate == 1){
 						liquidationPrice = 0;
 					}else {
 						if ("sell".equals(direction)) {
-							liquidationPrice = tradeAvgPrice + (deposit / div);
+							double lossPercentage = deposit / Double.parseDouble(map.get("amount").toString());
+							double priceIncrease = lossPercentage * tradeAvgPrice;
+							liquidationPrice = tradeAvgPrice + priceIncrease;
 						} else {
-							liquidationPrice = (mul * tradeAvgPrice) / (deposit + mul);
+							double lossPercentage = deposit / Double.parseDouble(map.get("amount").toString());
+							double priceDrop = lossPercentage * tradeAvgPrice;
+							liquidationPrice = tradeAvgPrice - priceDrop;
 						}
 					}
-
 					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) {
@@ -243,9 +247,9 @@
 					map.put("mark_price", realtime.getClose());
 				}
 			}
-			
+
 			resultObject.setData(data);
-			
+
 		} catch (BusinessException e) {
 			resultObject.setCode("1");
 			resultObject.setMsg(e.getMessage());
@@ -260,7 +264,7 @@
 
 	/**
 	 * 订单详情
-	 * 
+	 *
 	 * order_no 订单号
 	 */
 	@RequestMapping(action + "get.action")
@@ -274,21 +278,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());
@@ -311,9 +315,9 @@
 		private boolean all = false;
 
 		public void run() {
-			
+
 			try {
-				
+
 				while (true) {
 					if (true == all) {
 						// 一键平仓
@@ -323,7 +327,7 @@
 							// 处理完退出
 							break;
 						}
-						ThreadUtils.sleep(500);	
+						ThreadUtils.sleep(500);
 					} else {
 						// if (ContractLock.add(order_no)) {
 						if (contractLockService.getContractLock(order_no)) {
@@ -331,7 +335,7 @@
 							// 处理完退出
 							break;
 						}
-						ThreadUtils.sleep(500);						
+						ThreadUtils.sleep(500);
 					}
 				}
 
@@ -355,5 +359,5 @@
 			this.all = all;
 		}
 	}
-	
+
 }

--
Gitblit v1.9.3