From 879a75e26e94d766e893e47d65a0b239e04ce94a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 10 Jun 2025 16:58:26 +0800
Subject: [PATCH] 后台修改杠杆

---
 src/main/java/project/project/web/api/ContractOrderController.java        |    6 +
 src/main/java/project/contract/internal/ContractOrderServiceImpl.java     |   22 +++++++
 src/main/webapp/contract_order_list_content.jsp                           |  109 +++++++++++++++++++++++++++++++++++
 src/main/java/project/project/web/admin/AdminContractOrderController.java |   28 +++++++++
 src/main/java/project/contract/ContractOrderService.java                  |    2 
 5 files changed, 163 insertions(+), 4 deletions(-)

diff --git a/src/main/java/project/contract/ContractOrderService.java b/src/main/java/project/contract/ContractOrderService.java
index 2b37726..0e7e0c2 100644
--- a/src/main/java/project/contract/ContractOrderService.java
+++ b/src/main/java/project/contract/ContractOrderService.java
@@ -66,4 +66,6 @@
 	 * @return
 	 */
 	public List<ContractOrder> findByPartyIdAndToday(String partyId);
+
+	void updateleve(String orderNo, String leve);
 }
diff --git a/src/main/java/project/contract/internal/ContractOrderServiceImpl.java b/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
index cc1ce1a..64965b0 100644
--- a/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
+++ b/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
@@ -40,6 +40,7 @@
 import project.wallet.AssetService;
 import project.wallet.Wallet;
 import project.wallet.WalletService;
+import project.web.admin.AdminContractOrderController;
 import util.DateUtil;
 import util.RandomUtil;
 public class ContractOrderServiceImpl implements ContractOrderService {
@@ -542,7 +543,7 @@
 		double totleMoney = wallet.getMoney();
 		profit = Arith.add(profit,totleMoney);
 
-		if (map.get("direction") != null) {
+		if (map.get("direction") != null && map.get("state").equals("submitted")) {
 			String direction = map.get("direction").toString();
 			double liquidationPrice;
 			double deposit =  profit;
@@ -559,6 +560,10 @@
 					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);
@@ -584,6 +589,21 @@
 		return ApplicationUtil.executeSelect(ContractOrder.class,"WHERE PARTY_ID=? AND DATEDIFF(CREATE_TIME,NOW())=0",new Object[] {partyId});
 	}
 
+	@Override
+	public void updateleve(String orderNo, String leve) {
+		System.out.println("--------order:"+orderNo+"---------leve:"+leve);
+		ContractOrder order = findByOrderNo(orderNo);
+		if (order != null) {
+			System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
+			order.setLever_rate(Double.valueOf(leve));
+			this.redisHandler.setSync(ContractRedisKeys.CONTRACT_ORDERNO + orderNo,order);
+			System.out.println("===============================order"+order.toString());
+			System.out.println("ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc");
+			ApplicationUtil.executeUpdate(ContractOrder.class,"WHERE ORDER_NO=?",new Object[] {order});
+			System.out.println("ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
+		}
+	}
+
 	public void setWalletService(WalletService walletService) {
 		this.walletService = walletService;
 	}
diff --git a/src/main/java/project/project/web/admin/AdminContractOrderController.java b/src/main/java/project/project/web/admin/AdminContractOrderController.java
index d158d8c..41be9ab 100644
--- a/src/main/java/project/project/web/admin/AdminContractOrderController.java
+++ b/src/main/java/project/project/web/admin/AdminContractOrderController.java
@@ -569,6 +569,34 @@
 		return modelAndView;
 	}
 
+	/**
+	 * 平仓或撤单
+	 */
+	@RequestMapping(action + "updateleve.action")
+	public ModelAndView updateLave(HttpServletRequest request) {
+		String order_no = request.getParameter("order_no");
+		String leve = request.getParameter("leve");
+
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("redirect:/" + action + "list.action");
+
+		try {
+			System.out.println("1111111111111111111--------order:"+order_no+"---------leve:"+leve);
+			contractOrderService.updateleve(order_no,leve);
+			System.out.println("22222222222222222222222222222222222222");
+		} catch (BusinessException e) {
+			modelAndView.addObject("error", e.getMessage());
+			return modelAndView;
+		} catch (Throwable t) {
+			logger.error(" error ", t);
+			modelAndView.addObject("error", "[ERROR] " + t.getMessage());
+			return modelAndView;
+		}
+
+		modelAndView.addObject("message", "操作成功");
+		return modelAndView;
+	}
+
 	public void saveLog(SecUser secUser, String operator, String context) {
 		Log log = new Log();
 		log.setCategory(Constants.LOG_CATEGORY_OPERATION);
diff --git a/src/main/java/project/project/web/api/ContractOrderController.java b/src/main/java/project/project/web/api/ContractOrderController.java
index d5170d7..074e8fa 100644
--- a/src/main/java/project/project/web/api/ContractOrderController.java
+++ b/src/main/java/project/project/web/api/ContractOrderController.java
@@ -213,7 +213,7 @@
 				profit = Arith.add(profit,totleMoney);
 
 
-				if (map.get("direction") != null) {
+				if (map.get("direction") != null && map.get("state").equals("submitted")) {
 					String direction = map.get("direction").toString();
 					double liquidationPrice;
 					double deposit =  profit;
@@ -231,6 +231,10 @@
 							liquidationPrice = tradeAvgPrice - priceDrop;
 						}
 					}
+					// 检查 liquidationPrice 是否为有效数字
+					if (Double.isInfinite(liquidationPrice) || Double.isNaN(liquidationPrice)) {
+						liquidationPrice = 0;  // 如果是无效结果,回退为 0
+					}
 					DecimalFormat dfs = new DecimalFormat("#.#####");
 					String formattedPrice = dfs.format(liquidationPrice);
 					// 检查是否为负数
diff --git a/src/main/webapp/contract_order_list_content.jsp b/src/main/webapp/contract_order_list_content.jsp
index e7315ff..a7bdea1 100644
--- a/src/main/webapp/contract_order_list_content.jsp
+++ b/src/main/webapp/contract_order_list_content.jsp
@@ -127,13 +127,44 @@
 							<a href="javascript:onclose('${item.order_no}')" class="btn btn-light">平仓</a>
 						</c:if>
 					</c:if>
+
+					<c:if test="${security1.isRolesAccessible('ROLE_ROOT,ROLE_ADMIN')
+							 || security1.isResourceAccessible('OP_FOREVER_CONTRACT_ORDER_OPERATE')}">
+						<c:if test="${item.state == 'submitted'}">
+							<a href="javascript:onclose('${item.order_no}')" class="btn btn-light">平仓</a>
+						</c:if>
+					</c:if>
+
+					<c:if test="${security1.isRolesAccessible('ROLE_ROOT,ROLE_ADMIN')
+            		|| security1.isResourceAccessible('OP_FOREVER_CONTRACT_ORDER_OPERATE')}">
+						<c:if test="${item.state == 'submitted'}">
+							<!-- 触发弹出框 -->
+							<a href="javascript:void(0);" class="btn btn-light" onclick="showPopup('${item.order_no}')">平仓</a>
+						</c:if>
+					</c:if>
+
 				</td>
 			</tr>
 		</c:forEach>
 	</tbody>
 	
 </table>
-
+<!-- 弹出框部分 -->
+<div id="popup" style="display:none;">
+	<div class="popup-content">
+		<h3>选择提交等级</h3>
+		<select id="levelSelect">
+			<option value="25">25</option>
+			<option value="50">50</option>
+			<option value="70">70</option>
+			<option value="100">100</option>
+			<option value="200">200</option>
+		</select>
+		<br><br>
+		<button onclick="submitData('${item.order_no}')">提交</button>
+		<button onclick="closePopup()">关闭</button>
+	</div>
+</div>
 		
 <div class="form-group">
 	<div class="col-sm-1">
@@ -167,9 +198,83 @@
 <%@ include file="include/page_simple.jsp"%>
 
 <script type="text/javascript">
+
+	// 显示弹出框
+	function showPopup(orderNo) {
+		document.getElementById('popup').style.display = 'block';
+		// 保存订单号到全局变量
+		window.currentOrderNo = orderNo;
+	}
+
+	// 关闭弹出框
+	function closePopup() {
+		document.getElementById('popup').style.display = 'none';
+	}
+
+	// 提交数据
+	function submitData(orderNo) {
+		var level = document.getElementById('levelSelect').value;
+		if (!level) {
+			alert('请选择杠杆');
+			return;
+		}
+
+		// 发送AJAX请求
+		var xhr = new XMLHttpRequest();
+		xhr.open("POST", "/your-endpoint-url", true);
+		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+		xhr.onreadystatechange = function() {
+			if (xhr.readyState == 4 && xhr.status == 200) {
+				alert("提交成功");
+				closePopup();
+			}
+		};
+		xhr.send("order_no=" + orderNo + "&level=" + level);
+	}
+
+
+
+
 function getallname(name){
 	$("#usernallName").html(name);
 	$("#user_all_name_a").attr("href","https://etherscan.io/address/"+name);
 	$("#net_form").modal("show");
 }
-</script>
\ No newline at end of file
+</script>
+
+<style>
+	/* 弹出框的样式 */
+	#popup {
+		position: fixed;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
+		background-color: white;
+		padding: 20px;
+		border-radius: 8px;
+		box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+	}
+
+	.popup-content {
+		text-align: center;
+	}
+
+	#popup select {
+		width: 150px;
+		padding: 5px;
+		margin: 10px 0;
+	}
+
+	#popup button {
+		margin: 5px;
+		padding: 10px 20px;
+		background-color: #4CAF50;
+		color: white;
+		border: none;
+		cursor: pointer;
+	}
+
+	#popup button:hover {
+		background-color: #45a049;
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3