From b7000cbf5e67e90abe53e96a4ea931afbf906e24 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 16 九月 2022 18:51:47 +0800
Subject: [PATCH] l2数据计算优化

---
 l2_data_util.py |   55 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/l2_data_util.py b/l2_data_util.py
index 22554f4..726028b 100644
--- a/l2_data_util.py
+++ b/l2_data_util.py
@@ -1,6 +1,13 @@
 # l2鏁版嵁宸ュ叿
 # 姣旇緝鏃堕棿鐨勫ぇ灏�
+import hashlib
 import json
+import time
+
+import l2_data_manager
+import tool
+from log import logger_l2_trade, logger_l2_big_data
+from trade_gui import async_call
 
 
 def compare_time(time1, time2):
@@ -56,7 +63,6 @@
     return time_seconds
 
 
-
 # 璁$畻鏃堕棿鐨勫尯闂�
 def __compute_time_space_as_second(cancel_time, cancel_time_unit):
     __time = int(cancel_time)
@@ -75,21 +81,51 @@
 
 
 # 鏍规嵁涔版挙鏁版嵁(涓庝粖鏃ユ�荤殑鏁版嵁)璁$畻涔板叆鏁版嵁
-def get_buy_data_with_cancel_data(cancel_data, today_datas):
+def get_buy_data_with_cancel_data(cancel_data):
     # 璁$畻鏃堕棿鍖洪棿
     min_space, max_space = __compute_time_space_as_second(cancel_data["val"]["cancelTime"],
                                                           cancel_data["val"]["cancelTimeUnit"])
     max_time = __sub_time(cancel_data["val"]["time"], min_space)
     min_time = __sub_time(cancel_data["val"]["time"], max_space)
-
-    for data in today_datas:
+    buy_datas = l2_data_manager.local_today_num_operate_map.get("{}-{}".format(cancel_data["val"]["num"], "0"))
+    if buy_datas is None:
+        # 鏃犳暟鎹�
+        return None, None
+    for i in range(0, len(buy_datas)):
+        data = buy_datas[i]
         if int(data["val"]["operateType"]) != 0:
             continue
         if int(data["val"]["num"]) != int(cancel_data["val"]["num"]):
             continue
         if compare_time(data["val"]["time"], min_time) > 0 and compare_time(data["val"]["time"], max_time) <= 0:
-            return data
-    return None
+            return data["index"], data
+    return None, None
+
+
+__last_big_data = {}
+
+
+@async_call
+def save_big_data(code, same_time_nums, datas):
+    latest_datas = __last_big_data.get(code)
+    d1 = json.dumps(datas)
+    d2 = json.dumps(latest_datas)
+    if latest_datas is not None and d1.strip() == d2.strip():
+        return None
+    __last_big_data[code] = datas
+    # 鑾峰彇涓嶄竴鏍风殑蹇収
+    if latest_datas is not None:
+        for i in range(len(d1)):
+            if d1[i] != d2[i]:
+                # 淇濆瓨蹇収
+                logger_l2_big_data.debug("code:{} d1:{}  d2:{}", code, d1[i - 60: i + 30], d2[i - 60: i + 30])
+                break
+
+    for key in same_time_nums:
+        if same_time_nums[key] > 20:
+            redis = l2_data_manager._redisManager.getRedis()
+            redis.setex("big_data-{}-{}".format(code, int(round(time.time() * 1000))), tool.get_expire(), d1)
+            break
 
 
 def test(datas):
@@ -101,6 +137,7 @@
     # today_datas=[{"val": {"operateType": 1, "num": 1520, "cancelTime": 1, "cancelTimeUnit": 0, "time": "09:32:30"}},{"val": {"operateType": 0, "num": 1520, "cancelTime": 0, "cancelTimeUnit": 0, "time": "09:31:31"}}]
     # result= get_buy_data_with_cancel_data(cancel_data,today_datas)
     # print(result)
-    __datas = {}
-    test(__datas)
-    print(__datas)
+    redis = l2_data_manager._redisManager.getRedis()
+    keys = redis.keys("big_data-*")
+    for k in keys:
+        redis.delete(k)

--
Gitblit v1.8.0