From e84b3c45f7ecef39926b582b10d03b30ff77ee95 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 28 Oct 2025 16:36:56 +0800
Subject: [PATCH] 最高最低值优化

---
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/AbstractGetDataJob.java          |    8 +++
 trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimePushJob.java                 |    8 ++--
 trading-order-admin/src/main/java/com/yami/trading/admin/controller/data/AdminKlineController.java |    8 ++++
 trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimeWebsocketServer.java         |   24 ++++++-----
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBService.java          |    5 ++
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBServiceImpl.java      |   35 ++++++++++++++++-
 trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/HighLowHandleJob.java            |   31 ++++++++++++---
 7 files changed, 94 insertions(+), 25 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/data/AdminKlineController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/data/AdminKlineController.java
index d403f5b..1053ec1 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/data/AdminKlineController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/data/AdminKlineController.java
@@ -7,6 +7,7 @@
 import com.yami.trading.common.util.MarketOpenChecker;
 import com.yami.trading.common.util.UTCDateUtils;
 import com.yami.trading.huobi.data.internal.CryptosKlineService;
+import com.yami.trading.huobi.data.internal.DataDBService;
 import com.yami.trading.huobi.data.internal.KlineInitService;
 import com.yami.trading.huobi.data.internal.KlineService;
 import com.yami.trading.service.item.ItemService;
@@ -43,6 +44,8 @@
     private KlineService klineService;
     @Autowired
     private CryptosKlineService cryptosKlineService;
+    @Autowired
+    private DataDBService dataDBService;
 
     /**
      * kline初始化
@@ -85,4 +88,9 @@
         return Result.ok("success");
     }
 
+    @GetMapping("cacheBefore24Hour")
+    public Result <String> cacheBefore24Hour(String symbol) {
+        dataDBService.cacheBefore24Hour(symbol);
+        return Result.ok("success");
+    }
 }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimePushJob.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimePushJob.java
index ad1bb9c..236097c 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimePushJob.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimePushJob.java
@@ -125,7 +125,7 @@
         map.put("low", realtime.getLow());
 
         BigDecimal currentValue = AdjustmentValueCache.getCurrentValue().get(symbol);
-        if (currentValue != null) {
+        /*if (currentValue != null) {
             map.put("low", realtime.getLow().add(currentValue));
         }
         if (currentValue != null) {
@@ -134,7 +134,7 @@
                 map.put("high", realtime.getHigh().add(currentValue));
             }
             map.put("low", newLow);
-        }
+        }*/
 
         if( realtime.getVolume() != null){
             map.put("volume", realtime.getVolume().setScale(2, RoundingMode.HALF_UP));
@@ -181,13 +181,13 @@
                 map.put("high", high != null ? high.setScale(decimal, RoundingMode.HALF_UP) : null);
                 BigDecimal low = realtime.getLow();
                 map.put("low", low != null ? low.setScale(decimal, RoundingMode.HALF_UP) : null);
-                if (currentValue != null) {
+                /*if (currentValue != null) {
                     BigDecimal newLow = low != null ? low.add(currentValue).setScale(decimal, RoundingMode.HALF_UP) : BigDecimal.ZERO;
                     if (newLow.compareTo(high) > 0) {
                         map.put("high", high.add(currentValue).setScale(decimal, RoundingMode.HALF_UP));
                     }
                     map.put("low", newLow);
-                }
+                }*/
 
             }
         }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimeWebsocketServer.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimeWebsocketServer.java
index b6e2862..8a0250d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimeWebsocketServer.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/RealtimeWebsocketServer.java
@@ -112,20 +112,22 @@
 			realtime.setAmount(new BigDecimal(amount));
 
 			if (currentValue != null && currentValue != 0) {
-				realtime.setClose(new BigDecimal(Arith.add(close, currentValue.doubleValue())));
+				realtime.setClose(new BigDecimal(Arith.add(close, currentValue)));
 				//realtime.setVolume(new BigDecimal(Arith.add(vol, Arith.mul(Arith.div(currentValue, close), vol))));
 				//realtime.setAmount(new BigDecimal(Arith.add(amount, Arith.mul(Arith.div(currentValue, close), amount))));
+
+				Double high = DataCache.getRealtimeHigh().get(symbol);
+				Double low = DataCache.getRealtimeLow().get(symbol);
+
+				if (high != null) {
+					realtime.setHigh(BigDecimal.valueOf(high));
+				}
+				if (low != null) {
+					realtime.setLow(BigDecimal.valueOf(low));
+				}
 			}
 
-			Double high = DataCache.getRealtimeHigh().get(symbol);
-			Double low = DataCache.getRealtimeLow().get(symbol);
 
-			if (high == null || realtime.getClose().doubleValue() > high) {
-				DataCache.getRealtimeHigh().put(symbol, close);
-			}
-			if ((low == null || realtime.getClose().doubleValue() < low) && realtime.getClose().doubleValue() > 0) {
-				DataCache.getRealtimeLow().put(symbol, close);
-			}
 
 			Realtime current = DataCache.getRealtime(symbol);
 			if (current == null || current.getTs() != event.getTs()) {
@@ -135,13 +137,13 @@
 					realtime.setAmount(realtime.getAmount().multiply(item.getMultiple()));
 				}
 
-				if (high != null && high >= realtime.getClose().doubleValue()) {
+				/*if (high != null && high >= realtime.getClose().doubleValue()) {
 					realtime.setHigh(new BigDecimal(high));
 				}
 
 				if (low != null && low <= realtime.getClose().doubleValue()) {
 					realtime.setLow(new BigDecimal(low));
-				}
+				}*/
 
 				/*ouble h24Before = DataCache.getRealtime24HBeforeOpen().get(symbol);
 				if (h24Before != null) {
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBService.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBService.java
index 6bf7ae7..cccb957 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBService.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBService.java
@@ -23,6 +23,11 @@
 	public Realtime getBefore(String symbol);
 
 	/**
+	 * 缓存数据库前24小时最高最低价格
+	 */
+	public void cacheBefore24Hour(String symbol);
+
+	/**
 	 * 批量保存
 	 */
 	public void saveBatch(List<Realtime> entities);
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBServiceImpl.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBServiceImpl.java
index 4a33d1e..e5aee0b 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBServiceImpl.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/DataDBServiceImpl.java
@@ -24,6 +24,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.*;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -57,8 +58,8 @@
         if (itemService.isSuspended(symbol)) {
             return;
         }
-        /*if (realtime.getSymbol().equals("axsusdt")) {
-            System.out.println("axsusdt1" + realtime);
+        /*if (realtime.getSymbol().equals("galausdt")) {
+            System.out.println("galausdt111" + realtime);
         }*/
         DataCache.putLatestRealTime(symbol, realtime);
         DataCache.putLatestOpen(symbol, realtime.getOpen());
@@ -138,6 +139,36 @@
         return realtime;
     }
 
+    @Override
+    public void cacheBefore24Hour(String symbol) {
+        // 计算“24小时前”的时间戳(毫秒级)
+        long twentyFourHoursAgo = Instant.now().minus(24, ChronoUnit.HOURS).toEpochMilli();
+        RequestDataHelper.set("symbol", symbol);
+        LambdaQueryWrapper<Realtime> queryWrapper = new LambdaQueryWrapper<Realtime>()
+                .eq(Realtime::getSymbol, symbol)
+                .ge(Realtime::getTs, twentyFourHoursAgo) // 时间戳 >= 24小时前(前24小时内)
+                .orderByDesc(Realtime::getClose)  // 24小时最高
+                .last("LIMIT 1");
+        Realtime realtimeHigh = realtimeService.getBaseMapper().selectOne(queryWrapper);
+        LambdaQueryWrapper<Realtime> queryWrapper2 = new LambdaQueryWrapper<Realtime>()
+                .eq(Realtime::getSymbol, symbol)
+                .ge(Realtime::getTs, twentyFourHoursAgo) // 时间戳 >= 24小时前(前24小时内)
+                .orderByAsc(Realtime::getClose)  // 24小时最低
+                .last("LIMIT 1");
+        Realtime realtimeLow = realtimeService.getBaseMapper().selectOne(queryWrapper2);
+        RequestDataHelper.clear();
+        System.out.println("realtimeHigh:" + realtimeHigh);
+        System.out.println("realtimeLow:" + realtimeLow);
+        if (realtimeHigh != null) {
+            DataCache.getRealtimeHigh().put(symbol, realtimeHigh.getClose().doubleValue());
+            System.out.println("putRealtimeHigh:" + realtimeHigh.getClose().doubleValue());
+        }
+        if (realtimeLow != null) {
+            DataCache.getRealtimeLow().put(symbol, realtimeLow.getClose().doubleValue());
+            System.out.println("putRealtimeLow:" + realtimeLow.getClose().doubleValue());
+        }
+    }
+
     public void deleteRealtime(int days) {
         for (int i = 0; i <=  Constants.TABLE_PARTITIONS - 1; i++) {
             Map<String, Object> parameters = new HashMap();
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/AbstractGetDataJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/AbstractGetDataJob.java
index 579aa4b..bef925c 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/AbstractGetDataJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/AbstractGetDataJob.java
@@ -184,11 +184,17 @@
             realtime.setTs(Long.valueOf(realtime.getTs() + "000"));
         }
         realtime.setName(item.getName());
-        if (high == null || realtime.getHigh().doubleValue() > high) {
+        /*if (high == null || realtime.getHigh().doubleValue() > high) {
             DataCache.getRealtimeHigh().put(symbol, realtime.getHigh().doubleValue());
         }
         if ((low == null || realtime.getLow().doubleValue() < low) && realtime.getLow().doubleValue() > 0) {
             DataCache.getRealtimeLow().put(symbol, realtime.getLow().doubleValue());
+        }*/
+        if (high != null) {
+            realtime.setHigh(BigDecimal.valueOf(high));
+        }
+        if (low != null) {
+            realtime.setLow(BigDecimal.valueOf(low));
         }
         this.dataDBService.saveAsyn(realtime);
     }
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/HighLowHandleJob.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/HighLowHandleJob.java
index 96f3540..e86517a 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/HighLowHandleJob.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/data/job/HighLowHandleJob.java
@@ -4,6 +4,8 @@
 import com.yami.trading.bean.item.domain.Item;
 import com.yami.trading.common.util.ThreadUtils;
 import com.yami.trading.huobi.data.DataCache;
+import com.yami.trading.huobi.data.internal.DataDBService;
+import com.yami.trading.service.data.DataService;
 import com.yami.trading.service.item.ItemService;
 import com.yami.trading.service.syspara.SysparaService;
 import org.slf4j.Logger;
@@ -15,6 +17,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 最高最低修正
@@ -34,31 +37,45 @@
 	private SysparaService sysparaService;
 	@Autowired
 	private ItemService itemService;
-	
+    @Autowired
+    private DataService dataService;
+	@Autowired
+	DataDBService dataDBService;
+
 	public void start() {
 		new Thread(this, "HighLowHandleJob").start();
 	}
 
 	@Override
 	public void run() {
-		ThreadUtils.sleep(1000 * 60 * 3);
+		bulidHighLow();
+		ThreadUtils.sleep(1000 * 60 * 5);
 		while (true) {
 			bulidHighLow();
-			ThreadUtils.sleep(1000 * 60 * 3);
+			ThreadUtils.sleep(1000 * 60 * 5);
 		}
 	}
 
 	public void bulidHighLow() {
 		try {
-			if (first) {
+			/*if (first) {
 				// data数据保存间隔时长(毫秒)
 				this.interval = this.sysparaService.find("data_interval").getInteger().intValue() / 1000;
 				first = false;
 			}
 			// 秒
-			int num = (24 * 60 * 60) / this.interval;
+			int num = (24 * 60 * 60) / this.interval;*/
 			List<Item> item_list = itemService.findByType(Item.cryptos);
+			item_list = item_list.stream()
+					.filter(x -> x.getAdjustmentValue()!=null && x.getAdjustmentValue().doubleValue()!=0)
+					.collect(Collectors.toList());
 			for (int i = 0; i < item_list.size(); i++) {
+				String symbol = item_list.get(i).getSymbol();
+				//重新查询缓存
+				dataDBService.cacheBefore24Hour(symbol);
+			}
+
+			/*for (int i = 0; i < item_list.size(); i++) {
 				Item item = item_list.get(i);
 				try {
 
@@ -96,10 +113,10 @@
 				} catch (Exception e) {
 					logger.error("run fail", e);
 				}
-			}
+			}*/
 
 		} catch (Exception e) {
-			logger.error("run fail", e);
+			logger.error("bulidHighLow run fail", e);
 		}
 	}
 

--
Gitblit v1.9.3