From 48fb7a00951f91bdc707e5dd2d196e5bccb752c3 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 18 六月 2025 18:41:30 +0800
Subject: [PATCH] 异常保护

---
 l2/l2_data_util.py |   81 +++++++++++++++++++++++++++++-----------
 1 files changed, 58 insertions(+), 23 deletions(-)

diff --git a/l2/l2_data_util.py b/l2/l2_data_util.py
index 376767d..e12f024 100644
--- a/l2/l2_data_util.py
+++ b/l2/l2_data_util.py
@@ -33,6 +33,9 @@
 # 涔板叆璁㈠崟鍙锋槧灏�,鍙湁鍘熺敓鐨凩2鏁版嵁鎵嶆湁
 local_today_buyno_map = {}
 
+# 鍗栧嚭璁㈠崟鍙锋槧灏勶紝鍙湁鍘熺敓鐨凩2鏁版嵁鎵嶆湁
+local_today_sellno_map = {}
+
 # 宸茬粡鎾ゅ崟鐨勮鍗曞彿
 local_today_canceled_buyno_map = {}
 
@@ -74,9 +77,43 @@
         # 鏍规嵁浠婃棩鏁版嵁鍔犺浇
         load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code), force)
         load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code), force)
+        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code), force)
         load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code), force)
         return data_normal
     return True
+
+
+# L2鏁版嵁鏄惁姝e父
+def l2_data_is_normal(code):
+    datas = local_today_datas.get(code)
+    if not datas:
+        # 鍒濆鍖�
+        local_today_datas[code] = []
+        load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code))
+        load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code))
+        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code))
+        load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code))
+
+    if datas and len(datas) != datas[-1]["index"] + 1:
+        return False
+    return True
+
+
+# 鍔犺浇鎵�鏈夌殑l2鏁版嵁
+def load_l2_data_all(force=False):
+    datas = log_export.load_l2_from_log()
+    for code in datas:
+        if force:
+            local_today_datas[code] = datas[code]
+        else:
+            if code not in local_today_datas:
+                local_today_datas[code] = datas[code]
+        load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code), force)
+        load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code), force)
+        load_sell_no_map(local_today_sellno_map, code, local_today_datas.get(code), force)
+        load_canceled_buy_no_map(local_today_canceled_buyno_map, code, local_today_datas.get(code), force)
+
+    constant.L2_DATA_IS_LOADED = True
 
 
 # 灏嗘暟鎹牴鎹畁um-operate鍒嗙被
@@ -110,6 +147,25 @@
         key = "{}".format(data["val"]["orderNo"])
         if local_today_buyno_map[code].get(key) is None:
             local_today_buyno_map[code].setdefault(key, data)
+
+
+# 灏嗘暟鎹牴鎹畂rderNo鍒嗙被,鍘熺敓鏁版嵁鎵嶆湁
+def load_sell_no_map(local_today_sellno_map, code, source_datas, clear=False):
+    # 鍙湁鍘熺敓L2鏁版嵁鎵嶄細鏈夋鎿嶄綔
+    if constant.L2_SOURCE_TYPE != constant.L2_SOURCE_TYPE_HUAXIN:
+        return
+    if local_today_sellno_map.get(code) is None:
+        local_today_sellno_map[code] = {}
+    if clear:
+        local_today_sellno_map[code] = {}
+
+    for data in source_datas:
+        if data["val"]["operateType"] != 2:
+            continue
+        # 鍙~鍏呬拱鍏ユ暟鎹�
+        key = "{}".format(data["val"]["orderNo"])
+        if local_today_sellno_map[code].get(key) is None:
+            local_today_sellno_map[code].setdefault(key, data)
 
 
 # 灏嗘暟鎹牴鎹畂rderNo鍒嗙被宸叉挙璁㈠崟,鍘熺敓鏁版嵁鎵嶆湁
@@ -239,33 +295,12 @@
     return False
 
 
-# 鏄惁涓哄ぇ鍗�
-def is_big_money(val):
-    price = float(val["price"])
-    money = price * int(val["num"])
-    if price > 3.0:
-        if money >= 29900:
-            return True
-        else:
-            return False
-    else:
-        max_money = price * 10000
-        if money >= max_money * 0.95:
-            return True
-        else:
-            return False
-
-
 class L2DataUtil:
     @classmethod
     def is_same_time(cls, time1, time2):
         if constant.TEST:
             return True
-        time1_s = time1.split(":")
-        time1_second = int(time1_s[0]) * 3600 + int(time1_s[1]) * 60 + int(time1_s[2])
-        time2_s = time2.split(":")
-        time2_second = int(time2_s[0]) * 3600 + int(time2_s[1]) * 60 + int(time2_s[2])
-        if abs(time2_second - time1_second) < 3:
+        if abs(tool.trade_time_sub(time1, time2)) < 3:
             return True
         else:
             return False
@@ -585,4 +620,4 @@
 
 
 if __name__ == "__main__":
-    print(L2DataUtil.get_time_with_ms({"time": "10:00:00", "tms": 490}))
+    print(L2DataUtil.time_sub_as_ms({"time": "09:46:05", "tms": 480}, {"time": "09:46:04", "tms": 90}))

--
Gitblit v1.8.0