From c8d828e625fa5b3ae6232666ac2c0e5f51a62c54 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 18 八月 2025 15:02:56 +0800
Subject: [PATCH] 13:01之前下单规则修改/接口修改/自动加想策略修改

---
 third_data/third_blocks_manager.py |   97 +++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 87 insertions(+), 10 deletions(-)

diff --git a/third_data/third_blocks_manager.py b/third_data/third_blocks_manager.py
index 46343d8..456988f 100644
--- a/third_data/third_blocks_manager.py
+++ b/third_data/third_blocks_manager.py
@@ -5,12 +5,14 @@
 
 from db.mysql_data_delegate import Mysqldb
 from utils import middle_api_protocol
+from utils.kpl_data_db_util import KPLLimitUpDataUtil
 from utils.ths_industry_util import ThsCodeIndustryManager
 
-SOURCE_TYPE_KPL = 1  # 涓滄柟璐㈠瘜
+SOURCE_TYPE_KPL = 1  # 寮�鐩樺暒
 SOURCE_TYPE_TDX = 2  # 閫氳揪淇�
 SOURCE_TYPE_THS = 3  # 鍚岃姳椤�
 SOURCE_TYPE_EASTMONEY = 4  # 涓滄柟璐㈠瘜
+SOURCE_TYPE_KPL_RECORD = 5  # 寮�鐩樺暒鍘嗗彶鏁版嵁
 
 
 class CodeThirdBlocksManager:
@@ -40,12 +42,30 @@
                 cls.__code_source_blocks_dict_origin[result[0]] = {}
             blocks = set(result[2].split("銆�"))
             if result[1] == SOURCE_TYPE_THS:
+                # 鍚岃姳椤哄姞鍏�2绾у垎绫�
                 industry = cls.__ths_industry.get_industry(result[0])
                 if industry:
                     blocks.add(industry)
 
             cls.__code_source_blocks_dict_origin[result[0]][result[1]] = blocks
             cls.__code_source_blocks_dict[result[0]][result[1]] = BlockMapManager().filter_blocks(blocks)
+        # 鍔犺浇寮�鐩樺暒鍘嗗彶娑ㄥ仠鍘熷洜
+        kpl_results = KPLLimitUpDataUtil.get_latest_block_infos()
+        code_blocks = {}
+        for r in kpl_results:
+            if r[0] not in code_blocks:
+                code_blocks[r[0]] = set()
+            code_blocks[r[0]].add(r[2])
+            if r[3]:
+                code_blocks[r[0]] |= set(r[3].split("銆�"))
+        for code in code_blocks:
+            if code not in cls.__code_source_blocks_dict:
+                cls.__code_source_blocks_dict[code] = {}
+                cls.__code_source_blocks_dict_origin[code] = {}
+            blocks = code_blocks[code]
+            cls.__code_source_blocks_dict_origin[code][SOURCE_TYPE_KPL_RECORD] = blocks
+            cls.__code_source_blocks_dict[code][SOURCE_TYPE_KPL_RECORD] = BlockMapManager().filter_blocks(blocks)
+
 
     def get_source_blocks(self, code):
         """
@@ -63,7 +83,7 @@
         """
         return self.__code_source_blocks_dict_origin.get(code)
 
-    def get_intersection_blocks_info(self, code, blocks):
+    def get_intersection_blocks_info(self, code, blocks, same_count=2):
         # 鑾峰彇浜ら泦
         bs = []
         b1 = BlockMapManager().filter_blocks(blocks)
@@ -74,13 +94,13 @@
             for s in sb_dict:
                 if sb_dict[s]:
                     bs.append(sb_dict[s])
-        if len(bs) < 2:
+        if len(bs) < same_count:
             return set(), bs
         s_count = len(bs)
         fblocks = set()
 
         # 姹�2涓钩鍙扮殑浜ら泦
-        for ces in combinations(bs, 2):
+        for ces in combinations(bs, same_count):
             ic = None
             for c in ces:
                 if ic is None:
@@ -188,16 +208,62 @@
         if blocks is None or len(blocks) == 0:
             return set()
         fbs = set()
+        invalid_blocks = InvalidBlockManager().get_invalid_blocks()
         for block in blocks:
             if block.endswith("姒傚康"):
                 block = block[:-2]
             b = self.get_map_blocks_cache(block)
             if b:
                 fbs |= b
+            if block in invalid_blocks:
+                continue
+            fbs.add(block)
         return fbs
 
     def get_all_blocks(self):
         return self.__block_map.keys()
+
+
+class InvalidBlockManager:
+    """
+    鏃犳晥鏉垮潡绠$悊
+    """
+    __mysql = Mysqldb()
+    __instance = None
+    __block = set()
+
+    def __new__(cls, *args, **kwargs):
+        if not cls.__instance:
+            cls.__instance = super(InvalidBlockManager, cls).__new__(cls, *args, **kwargs)
+            cls.__load_data()
+        return cls.__instance
+
+    @classmethod
+    def __load_data(cls):
+        results = cls.__mysql.select_all("select _block from invalid_block")
+        cls.__block.clear()
+        for result in results:
+            if result[0]:
+                cls.__block.add(result[0])
+
+    def get_invalid_blocks(self):
+        """
+        鑾峰彇鏃犳晥鐨勬澘鍧�
+        @return:
+        """
+        return self.__block
+
+    def set_incalid_blocks(self, blocks):
+        """
+        璁剧疆鏃犳晥鐨勬澘鍧�
+        @param blocks:
+        @return:
+        """
+        # 鍏堝垹闄ゆ墍鏈夛紝鐒跺悗鍐嶆坊鍔�
+        self.__mysql.execute("delete from invalid_block")
+        for b in blocks:
+            self.__mysql.execute(f"insert into invalid_block(_block) values('{b}')")
+        self.__block = set(blocks)
 
 
 def load_if_less(codes):
@@ -221,10 +287,21 @@
                 pass
 
 
+def __add_invlaid_blocks():
+    blocks_str = """
+    鏄ㄦ棩杩炴澘
+    鏄ㄦ棩杩炴澘_鍚竴瀛�
+    鏄ㄦ棩娑ㄥ仠
+    鏄ㄦ棩娑ㄥ仠_鍚竴瀛�
+        """
+    blocks = set()
+    for x in blocks_str.split("\n"):
+        if x.strip():
+            blocks.add(x.strip())
+    print(len(blocks))
+    InvalidBlockManager().set_incalid_blocks(blocks)
+
+
 if __name__ == '__main__':
-    code = "000761"
-    try:
-        blocks = middle_api_protocol.request(middle_api_protocol.get_third_blocks(code, 4))
-        print(blocks)
-    except Exception as e:
-        print(e)
+    pass
+

--
Gitblit v1.8.0