From aacc6148dd43a9cffbff9a23a273a55b64bf3d8c Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期六, 12 十月 2024 17:21:42 +0800
Subject: [PATCH] bug修复

---
 third_data/third_blocks_manager.py |   76 ++++++++++++++++++++++++++++++++-----
 1 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/third_data/third_blocks_manager.py b/third_data/third_blocks_manager.py
index 5eb5910..19cc4da 100644
--- a/third_data/third_blocks_manager.py
+++ b/third_data/third_blocks_manager.py
@@ -4,12 +4,15 @@
 from itertools import combinations
 
 from db.mysql_data_delegate import Mysqldb
-from third_data import kpl_api
+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:
@@ -21,6 +24,7 @@
     # 浠g爜鏉垮潡锛歿code:{1:{"b1","b2"},2:{"c1","c2"}}}
     __code_source_blocks_dict = {}
     __code_source_blocks_dict_origin = {}
+    __ths_industry = ThsCodeIndustryManager()
 
     def __new__(cls, *args, **kwargs):
         if not cls.__instance:
@@ -37,8 +41,31 @@
                 cls.__code_source_blocks_dict[result[0]] = {}
                 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):
         """
@@ -56,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)
@@ -67,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:
@@ -94,6 +121,9 @@
         # 鏇存柊缂撳瓨鏁版嵁
         if code not in self.__code_source_blocks_dict:
             self.__code_source_blocks_dict[code] = {}
+        if code not in self.__code_source_blocks_dict_origin:
+            self.__code_source_blocks_dict_origin[code] = {}
+
         if blocks:
             self.__code_source_blocks_dict[code][source_type] = BlockMapManager().filter_blocks(set(blocks))
             self.__code_source_blocks_dict_origin[code][source_type] = set(blocks)
@@ -181,17 +211,41 @@
         for block in blocks:
             if block.endswith("姒傚康"):
                 block = block[:-2]
-            b = self.get_map_blocks_cache(block)
-            if b:
-                fbs |= b
+            # b = self.get_map_blocks_cache(block)
+            # if b:
+            #     fbs |= b
+            fbs.add(block)
         return fbs
 
     def get_all_blocks(self):
         return self.__block_map.keys()
 
 
+def load_if_less(codes):
+    """
+    鍔犺浇
+    @param codes:
+    @return:
+    """
+    for code in codes:
+        source_blocks = CodeThirdBlocksManager().get_source_blocks_origin(code)
+        if source_blocks is None:
+            source_blocks = {}
+        all_source = {SOURCE_TYPE_EASTMONEY, SOURCE_TYPE_TDX, SOURCE_TYPE_THS}
+        sources = all_source - source_blocks.keys()
+        for source in sources:
+            try:
+                blocks = middle_api_protocol.request(middle_api_protocol.get_third_blocks(code, source))
+                if blocks:
+                    CodeThirdBlocksManager().set_blocks(code, blocks, source)
+            except:
+                pass
+
+
 if __name__ == '__main__':
     code = "000761"
-    blocks = kpl_api.getCodeJingXuanBlocks(code, jx=False)
-    blocks = set([b[1] for b in blocks])
-    print(CodeThirdBlocksManager().get_intersection_blocks_info(code, blocks))
+    try:
+        blocks = middle_api_protocol.request(middle_api_protocol.get_third_blocks(code, 4))
+        print(blocks)
+    except Exception as e:
+        print(e)

--
Gitblit v1.8.0