From a445f9a2650b9826fa72a203f3144a3ac27509a0 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 03 六月 2024 10:46:14 +0800
Subject: [PATCH] 代码结构修复

---
 third_data/code_plate_key_manager.py |   52 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py
index 173a91a..3f2a6de 100644
--- a/third_data/code_plate_key_manager.py
+++ b/third_data/code_plate_key_manager.py
@@ -11,14 +11,14 @@
 from code_attribute import code_nature_analyse
 from db.redis_manager_delegate import RedisUtils
 from third_data import kpl_block_util, kpl_api, kpl_util
-from trade.trade_manager import MarketSituationManager
+from settings.trade_setting import MarketSituationManager
 from utils import global_util, tool, buy_condition_util
 from log_module import log, async_log_util
 from db import redis_manager_delegate as redis_manager
 
 from log_module.log import logger_kpl_block_can_buy
 from third_data.kpl_util import KPLPlatManager
-from trade import trade_manager, l2_trade_util
+from trade import trade_manager, l2_trade_util, trade_constant
 
 
 # 浠g爜绮鹃�夋澘鍧楃鐞�
@@ -137,6 +137,48 @@
         except Exception as e:
             logger_kpl_block_can_buy.error(f"{code} 鑾峰彇鏉垮潡鍑洪敊")
             logger_kpl_block_can_buy.exception(e)
+
+
+# 绂佹涓嬪崟鐨勬澘鍧�
+class ForbiddenBlockManager:
+    __db = 3
+    __redisManager = redis_manager.RedisManager(3)
+    __instance = None
+    __forbidden_blocks = set()
+
+    def __new__(cls, *args, **kwargs):
+        if not cls.__instance:
+            cls.__instance = super(ForbiddenBlockManager, cls).__new__(cls, *args, **kwargs)
+            cls.__load_data()
+        return cls.__instance
+
+    @classmethod
+    def __get_redis(cls):
+        return cls.__redisManager.getRedis()
+
+    # 鍔犺浇鏁版嵁
+    @classmethod
+    def __load_data(cls):
+        blocks = cls.__get_redis().smembers("forbidden_blocks")
+        if blocks:
+            for b in blocks:
+                cls.__forbidden_blocks.add(b)
+
+    def add(self, block):
+        self.__forbidden_blocks.add(block)
+        RedisUtils.sadd_async(self.__db, "forbidden_blocks", block)
+        RedisUtils.expire_async(self.__db, "forbidden_blocks", tool.get_expire())
+
+    def remove(self, block):
+        if block in self.__forbidden_blocks:
+            self.__forbidden_blocks.remove(block)
+        RedisUtils.srem_async(self.__db, "forbidden_blocks", block)
+
+    def get_blocks(self):
+        return copy.deepcopy(self.__forbidden_blocks)
+
+    def is_in(self, block):
+        return block in self.__forbidden_blocks
 
 
 # 寮�鐩樺暒绂佹浜ゆ槗鏉垮潡绠$悊
@@ -505,7 +547,7 @@
         # 鏍规嵁韬綅绉婚櫎浠g爜
         # return
         # 涓嬭繃鍗曠殑浠g爜涓嶇Щ闄�
-        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_manager.TRADE_STATE_NOT_TRADE:
+        if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_constant.TRADE_STATE_NOT_TRADE:
             # 鍙涓嬭繃鍗曠殑灏变笉绉婚櫎
             return
         l2_trade_util.forbidden_trade(code, msg=msg)
@@ -851,9 +893,9 @@
         if not blocks_compute_results:
             return False, True, f"娌℃湁鎵惧埌鏉垮潡", [], keys, []
         codes_delegate = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache(
-            {trade_manager.TRADE_STATE_BUY_DELEGATED, trade_manager.TRADE_STATE_BUY_PLACE_ORDER}))
+            {trade_constant.TRADE_STATE_BUY_DELEGATED, trade_constant.TRADE_STATE_BUY_PLACE_ORDER}))
         codes_success = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache(
-            {trade_manager.TRADE_STATE_BUY_SUCCESS}))
+            {trade_constant.TRADE_STATE_BUY_SUCCESS}))
         codes = codes_delegate | codes_success
         # 缁熻鎴愪氦浠g爜鐨勬澘鍧�
         trade_codes_blocks_dict = {}

--
Gitblit v1.8.0