From 2f4bf81b042d24d5fbbd2fa7ec3672a06b211264 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 21 三月 2025 15:41:17 +0800
Subject: [PATCH] 根据板块成分股来获取新题材的成分股/成交数据处理优化

---
 servers/data_server.py |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/servers/data_server.py b/servers/data_server.py
index 9276e38..818b8e0 100644
--- a/servers/data_server.py
+++ b/servers/data_server.py
@@ -62,6 +62,8 @@
     __industry_cache_dict = {}
     __latest_limit_up_codes_set = set()
     __data_process_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=10)
+    # 鏂伴鏉愯姹�
+    __new_blocks_codes_request_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=5)
     # 浠g爜鐨勬定骞�
     __code_limit_rate_dict = {}
 
@@ -1017,7 +1019,37 @@
             self.__send_response(result_str)
 
     def __process_kpl_data(self, data_origin):
+
         def do_limit_up(result_list_):
+
+            def request_new_blocks_codes(blocks_info):
+                """
+                璇锋眰鏂版澘鍧楃殑浠g爜
+                @param blocks_info:[(鏉垮潡鍚嶇О,鏉垮潡浠g爜)]
+                @return:
+                """
+                yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
+                for bi in blocks_info:
+                    result = kpl_api.getCodesByPlate(bi[1])
+                    result = json.loads(result)
+                    code_info_list = []
+                    for d in result["list"]:
+                        if d[0] in yesterday_codes:
+                            continue
+                        # 娑ㄥ箙瑕佸ぇ浜�5%
+                        rate = d[6] / int(round((tool.get_limit_up_rate(d[0]) - 1) * 10))
+                        if rate < 5:
+                            continue
+                        # 鏍煎紡锛�(浠g爜,娑ㄥ箙)
+                        code_info_list.append((d[0], d[6]))
+                    if code_info_list:
+                        # 灏嗕唬鐮佸姞鍏ユ柊棰樻潗
+                        for x in code_info_list:
+                            add_result = LimitUpCodesBlockRecordManager().add_new_blocks(x[0], bi[0])
+                            if add_result:
+                                # 澧炲姞鏂伴鏉愭槸鍚︽垚鍔燂紝 涓存椂灏嗙エ鍔犲叆杈ㄨ瘑搴�
+                                BlockSpecialCodesManager().add_code_block_for_temp(x[0], bi[0])
+
             try:
                 if result_list_:
                     # 淇濆瓨娑ㄥ仠鏃堕棿
@@ -1094,8 +1126,11 @@
                         records = KPLLimitUpDataRecordManager.total_datas
                         # 璁$畻浠婃棩鏂板鐨勯鏉愭蹇�
                         block_codes = {}
+                        # 缁熻鏉垮潡鐨勪唬鐮�
+                        block_plate_code_dict = {}
                         for x in records:
                             bs = {kpl_util.filter_block(x[2])}
+                            block_plate_code_dict[kpl_util.filter_block(x[2])] = x[15]
                             if x[6]:
                                 bs |= set(x[6].split("銆�"))
                             for b in bs:
@@ -1106,6 +1141,8 @@
                         reasons -= constant.KPL_INVALID_BLOCKS
                         reasons -= LimitUpCodesBlockRecordManager().get_total_before_blocks()
                         if reasons:
+                            # 鏂版澘鍧�
+                            update_new_block_plates = []
                             for r in reasons:
                                 for c in block_codes[r]:
                                     add_result = LimitUpCodesBlockRecordManager().add_new_blocks(c, r)
@@ -1113,6 +1150,13 @@
                                         # 澧炲姞鏂伴鏉愭槸鍚︽垚鍔燂紝 涓存椂灏嗙エ鍔犲叆杈ㄨ瘑搴�
                                         BlockSpecialCodesManager().add_code_block_for_temp(c, r)
 
+                            for r in reasons:
+                                if r in block_plate_code_dict:
+                                    update_new_block_plates.append((r, block_plate_code_dict[r]))
+                            if update_new_block_plates:
+                                # 闇�瑕佽幏鍙栨澘鍧椾笅鐨勪唬鐮�
+                                self.__new_blocks_codes_request_thread_pool.submit(
+                                    lambda: request_new_blocks_codes(update_new_block_plates))
                     except:
                         pass
                     self.__kplDataManager.save_data(type_, result_list_)

--
Gitblit v1.8.0