From a7bd76dfd00efc7b03999c4559cf8554e34c19cb Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 02 Aug 2024 16:56:34 +0800
Subject: [PATCH] 1

---
 src/main/java/project/futures/FuturesOrderService.java                      |    1 
 src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java    |    2 
 src/main/java/project/admin/AdminFuturesOrderController.java                |   28 +++++++
 src/main/java/project/futures/FuturesOrder.java                             |   12 +++
 src/main/java/project/futures/internal/FuturesOrderServiceImpl.java         |    4 +
 src/main/java/project/data/job/RealtimeWebsocketServer.java                 |    8 +-
 src/main/java/project/data/internal/DataDBServiceImpl.java                  |    8 +-
 src/main/java/project/data/job/GetDataJob.java                              |   85 +++++++++++----------
 src/main/java/project/project/web/admin/AdminContractOrderController.java   |   31 +++++--
 src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java |   13 ++
 10 files changed, 132 insertions(+), 60 deletions(-)

diff --git a/src/main/java/project/admin/AdminFuturesOrderController.java b/src/main/java/project/admin/AdminFuturesOrderController.java
index 1aa7c05..65d6e54 100644
--- a/src/main/java/project/admin/AdminFuturesOrderController.java
+++ b/src/main/java/project/admin/AdminFuturesOrderController.java
@@ -7,6 +7,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import kernel.web.ApplicationUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -141,6 +142,33 @@
         return modelAndView;
     }
 
+    @RequestMapping(action + "saveRemark.action")
+    public ModelAndView saveRemark(HttpServletRequest request) {
+        String orderNo = request.getParameter("orderNo");
+        String remark = request.getParameter("remark");
+        ModelAndView modelAndView = new ModelAndView();
+        modelAndView.setViewName("futures_order_list");
+
+        try {
+            FuturesOrder byOrderNo = futuresOrderService.findByOrderNo(orderNo);
+            if(null != byOrderNo){
+                byOrderNo.setRemark(remark);
+            }
+            ApplicationUtil.executeUpdate(byOrderNo);
+            futuresOrderService.updateCache(byOrderNo.getOrder_no(), byOrderNo);
+            redisHandler.remove(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + byOrderNo.getOrder_no());
+        } 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;
+        }
+
+        return modelAndView;
+    }
+
     /**
      * 获取 交割合约单 列表
      * <p>
diff --git a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
index a423405..23f50cd 100644
--- a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
+++ b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -89,7 +89,12 @@
 	 * @param currentPrice 当前点位
 	 */
 	public void settle(ContractOrder order, String profit_loss, double currentPrice) {
-
+//		(保证金*杠杆)= 仓位总价
+//		(仓位总价/开仓价格)= 数量
+//		(当前价格-开仓价格)* 数量 = 盈亏
+//		(盈亏/保证金)*100 = 盈亏率
+		logger.info("---------进入盈亏计算----------------");
+		logger.info("---------order_close_line_type----------------"+order_close_line_type);
 		double mul = Arith.mul(order.getDeposit_open(), order.getLever_rate());//仓位
 		double div = Arith.div(mul, order.getTrade_avg_price());//持有币的数量
 		double amount = Arith.mul(div, Arith.sub(currentPrice, order.getTrade_avg_price()));
@@ -210,15 +215,19 @@
 
 			}
 		} else {
+			logger.info("---------进入单个持仓----------------");
+			logger.info("---------order.getProfit()----------------"+order.getProfit());
+			logger.info("---------order.getDeposit()----------------"+order.getDeposit());
+			logger.info("---------order_close_line----------------"+order_close_line);
 			if (order.getProfit() < 0 && (Arith.div(order.getDeposit(), Math.abs(order.getProfit())) <= Arith
 					.div(order_close_line, 100))) {
+				logger.info("---------进入强平了----------------");
 				/**
 				 * 低于系统默认平仓线,进行强平
 				 */
 				this.contractOrderService.saveClose(order.getPartyId().toString(), order.getOrder_no());
 				return;
 			}
-
 		}
 
 	}
diff --git a/src/main/java/project/data/internal/DataDBServiceImpl.java b/src/main/java/project/data/internal/DataDBServiceImpl.java
index 55fb173..82207c5 100644
--- a/src/main/java/project/data/internal/DataDBServiceImpl.java
+++ b/src/main/java/project/data/internal/DataDBServiceImpl.java
@@ -53,10 +53,10 @@
 				entity.setLow(low);
 			}
 			
-			Double h24Before = DataCache.getRealtime24HBeforeOpen().get(entity.getSymbol());
-			if (h24Before != null) {
-				entity.setOpen(h24Before);
-			}
+//			Double h24Before = DataCache.getRealtime24HBeforeOpen().get(entity.getSymbol());
+//			if (h24Before != null) {
+//				entity.setOpen(h24Before);
+//			}
 			
 			/**
 			 * 时间有变化,才保存
diff --git a/src/main/java/project/data/job/GetDataJob.java b/src/main/java/project/data/job/GetDataJob.java
index e2ba06a..d63c10a 100644
--- a/src/main/java/project/data/job/GetDataJob.java
+++ b/src/main/java/project/data/job/GetDataJob.java
@@ -132,47 +132,50 @@
 				}
 				
 				// 缓存中最新一条Realtime数据
-				Realtime realtimeLast = DataCache.getRealtime(symbol);
-				if (null != realtimeLast) {
-					// 临时处理:正常10秒超过25%也不合理,丢弃
-					double rate = Math.abs(Arith.sub(realtime.getClose(), realtimeLast.getClose()));
-					if (null == realtimeLast || Arith.div(rate, realtimeLast.getClose()) < 0.25D) {
-						Double high = DataCache.getRealtimeHigh().get(symbol);
-						Double low = DataCache.getRealtimeLow().get(symbol);
-
-						if (high == null || realtime.getClose() > high) {
-							DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
-						}
-						if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
-							DataCache.getRealtimeLow().put(symbol, realtime.getClose());
-						}
-						
-						this.dataDBService.saveAsyn(realtime);
-					} else {
-						Double high = DataCache.getRealtimeHigh().get(symbol);
-						Double low = DataCache.getRealtimeLow().get(symbol);
-
-						if (high == null || realtime.getClose() > high) {
-							DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
-						}
-						if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
-							DataCache.getRealtimeLow().put(symbol, realtime.getClose());
-						}
-						
-						this.dataDBService.saveAsyn(realtime);
-						logger.error("当前价格{},超过25%也不合理,丢弃Realtime,不入库", realtime.getClose());
-					}
-				} else {
-					Double high = DataCache.getRealtimeHigh().get(symbol);
-					Double low = DataCache.getRealtimeLow().get(symbol);
-					if (high == null || realtime.getClose() > high) {
-						DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
-					}
-					if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
-						DataCache.getRealtimeLow().put(symbol, realtime.getClose());
-					}					
-					this.dataDBService.saveAsyn(realtime);
-				}
+				DataCache.getRealtimeHigh().put(symbol, realtime.getHigh());
+				DataCache.getRealtimeLow().put(symbol, realtime.getLow());
+				this.dataDBService.saveAsyn(realtime);
+//				Realtime realtimeLast = DataCache.getRealtime(symbol);
+//				if (null != realtimeLast) {
+//					// 临时处理:正常10秒超过25%也不合理,丢弃
+//					double rate = Math.abs(Arith.sub(realtime.getClose(), realtimeLast.getClose()));
+//					if (null == realtimeLast || Arith.div(rate, realtimeLast.getClose()) < 0.25D) {
+//						Double high = DataCache.getRealtimeHigh().get(symbol);
+//						Double low = DataCache.getRealtimeLow().get(symbol);
+//
+//						if (high == null || realtime.getClose() > high) {
+//							DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
+//						}
+//						if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
+//							DataCache.getRealtimeLow().put(symbol, realtime.getClose());
+//						}
+//
+//						this.dataDBService.saveAsyn(realtime);
+//					} else {
+//						Double high = DataCache.getRealtimeHigh().get(symbol);
+//						Double low = DataCache.getRealtimeLow().get(symbol);
+//
+//						if (high == null || realtime.getClose() > high) {
+//							DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
+//						}
+//						if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
+//							DataCache.getRealtimeLow().put(symbol, realtime.getClose());
+//						}
+//
+//						this.dataDBService.saveAsyn(realtime);
+//						logger.error("当前价格{},超过25%也不合理,丢弃Realtime,不入库", realtime.getClose());
+//					}
+//				} else {
+//					Double high = DataCache.getRealtimeHigh().get(symbol);
+//					Double low = DataCache.getRealtimeLow().get(symbol);
+//					if (high == null || realtime.getClose() > high) {
+//						DataCache.getRealtimeHigh().put(symbol, realtime.getClose());
+//					}
+//					if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) {
+//						DataCache.getRealtimeLow().put(symbol, realtime.getClose());
+//					}
+//					this.dataDBService.saveAsyn(realtime);
+//				}
 
 
 			} catch (Exception e) {				
diff --git a/src/main/java/project/data/job/RealtimeWebsocketServer.java b/src/main/java/project/data/job/RealtimeWebsocketServer.java
index b0becad..d33e249 100644
--- a/src/main/java/project/data/job/RealtimeWebsocketServer.java
+++ b/src/main/java/project/data/job/RealtimeWebsocketServer.java
@@ -130,10 +130,10 @@
 					realtime.setLow(low);
 				}
 
-				Double h24Before = DataCache.getRealtime24HBeforeOpen().get(symbol);
-				if (h24Before != null) {
-					realtime.setOpen(h24Before);
-				}
+//				Double h24Before = DataCache.getRealtime24HBeforeOpen().get(symbol);
+//				if (h24Before != null) {
+//					realtime.setOpen(h24Before);
+//				}
 
 				DataCache.putRealtime(symbol, realtime);
 				// System.out.println(JSONObject.toJSONString(realtime));
diff --git a/src/main/java/project/futures/FuturesOrder.java b/src/main/java/project/futures/FuturesOrder.java
index 0989537..febcaab 100644
--- a/src/main/java/project/futures/FuturesOrder.java
+++ b/src/main/java/project/futures/FuturesOrder.java
@@ -120,6 +120,18 @@
 	@Column(name="PROFIT_LOSS")
 	private String profit_loss;
 
+	//备注
+	@Column(name="REMARK")
+	private String remark;
+
+	public Serializable getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
 	public Serializable getPartyId() {
 		return partyId;
 	}
diff --git a/src/main/java/project/futures/FuturesOrderService.java b/src/main/java/project/futures/FuturesOrderService.java
index b396544..fc69db4 100644
--- a/src/main/java/project/futures/FuturesOrderService.java
+++ b/src/main/java/project/futures/FuturesOrderService.java
@@ -85,4 +85,5 @@
 	 */
 	public void saveCloseAllByPartyId(String partyId);
 
+	void updateCache(String orderNo, FuturesOrder byOrderNo);
 }
diff --git a/src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java b/src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java
index c36c169..b87795b 100644
--- a/src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java
+++ b/src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java
@@ -23,7 +23,7 @@
 			String username,String orderNo,String symbol,String direction,Double volume) {
 		StringBuffer queryString = new StringBuffer("SELECT party.USERCODE usercode,party.ROLENAME rolename,orders.UUID id,orders.SYMBOL symbol,"
 				+ "orders.ORDER_NO order_no,orders.TRADE_AVG_PRICE trade_avg_price,orders.DIRECTION direction,orders.PROFIT_LOSS profit_loss,"
-				+ "orders.UNIT_AMOUNT unit_amount,orders.STATE state,FORMAT(orders.FEE,1) fee," + "orders.PROFIT profit,"
+				+ "orders.UNIT_AMOUNT unit_amount,orders.STATE state,orders.REMARK remark,FORMAT(orders.FEE,1) fee," + "orders.PROFIT profit,"
 				+ "FORMAT(orders.VOLUME,1) volume,item.NAME itemname,orders.TIMENUM timenum,orders.TIMEUNIT timeunit,"
 				+ "orders.CLOSE_AVG_PRICE close_avg_price,DATE_FORMAT(orders.CREATE_TIME,'%Y-%m-%d %H:%i:%s') create_time,DATE_FORMAT(orders.SETTLEMENT_TIME,'%Y-%m-%d %H:%i:%s')  settlement_time,");
 //		queryString.append(" wallet.MONEY money,  ");
diff --git a/src/main/java/project/futures/internal/FuturesOrderServiceImpl.java b/src/main/java/project/futures/internal/FuturesOrderServiceImpl.java
index c3ee262..e623c1a 100644
--- a/src/main/java/project/futures/internal/FuturesOrderServiceImpl.java
+++ b/src/main/java/project/futures/internal/FuturesOrderServiceImpl.java
@@ -950,6 +950,10 @@
 		}
 	}
 
+	public void updateCache(String orderNo, FuturesOrder byOrderNo){
+		cache.put(byOrderNo.getOrder_no(), byOrderNo);
+	}
+
 	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 0be3d94..29114ab 100644
--- a/src/main/java/project/project/web/admin/AdminContractOrderController.java
+++ b/src/main/java/project/project/web/admin/AdminContractOrderController.java
@@ -9,6 +9,7 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.Column;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang3.ObjectUtils;
@@ -119,10 +120,17 @@
 				double quantity = positionValue / currentPrice;
 
 				// 得到强平价格
-				double liquidationPrice = currentPrice + (110 / quantity);
-				DecimalFormat df = new DecimalFormat("#.#####");
-				String formattedPrice = df.format(liquidationPrice);
-				map.put("qiangPing",formattedPrice);
+				if(null != map.get("direction")){
+					double liquidationPrice;
+					if(map.get("direction").equals("sell")){
+						liquidationPrice = currentPrice + (100 / quantity);
+					}else{
+						liquidationPrice = currentPrice - (100 / quantity);
+					}
+					DecimalFormat df = new DecimalFormat("#.#####");
+					String formattedPrice = df.format(liquidationPrice);
+					map.put("qiangPing",formattedPrice);
+				}
 			}
 
 			List<Item> items = this.itemService.cacheGetAll();
@@ -223,10 +231,17 @@
 				double quantity = positionValue / currentPrice;
 
 				// 得到强平价格
-				double liquidationPrice = currentPrice + (110 / quantity);
-				DecimalFormat df = new DecimalFormat("#.#####");
-				String formattedPrice = df.format(liquidationPrice);
-				map.put("qiangPing",formattedPrice);
+				if(null != map.get("direction")){
+					double liquidationPrice;
+					if(map.get("direction").equals("sell")){
+						liquidationPrice = currentPrice + (100 / quantity);
+					}else{
+						liquidationPrice = currentPrice - (100 / quantity);
+					}
+					DecimalFormat df = new DecimalFormat("#.#####");
+					String formattedPrice = df.format(liquidationPrice);
+					map.put("qiangPing",formattedPrice);
+				}
 			}
 
 		} catch (BusinessException e) {

--
Gitblit v1.9.3