From 781aa4e0af5a29d39c63f022404e93570248c5b9 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 28 十一月 2023 14:42:58 +0800
Subject: [PATCH] 精选板块获取修改

---
 third_data/code_plate_key_manager.py |   56 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 43 insertions(+), 13 deletions(-)

diff --git a/third_data/code_plate_key_manager.py b/third_data/code_plate_key_manager.py
index 7fe0f9d..a48d004 100644
--- a/third_data/code_plate_key_manager.py
+++ b/third_data/code_plate_key_manager.py
@@ -3,7 +3,9 @@
 """
 
 # 娑ㄥ仠浠g爜鍏抽敭璇嶆澘鍧楃鐞�
+import copy
 import json
+import time
 
 import constant
 from db.redis_manager_delegate import RedisUtils
@@ -35,19 +37,28 @@
     def __get_redis(self):
         return self.__redisManager.getRedis()
 
-    def save_jx_blocks(self, code, blocks, by=False):
-        if blocks is None:
+    def save_jx_blocks(self, code, blocks: list, by=False):
+        if not blocks:
             return
+        final_blocks = copy.deepcopy(blocks)
         if len(blocks) > 2:
-            blocks = blocks[:2]
+            final_blocks.clear()
+            # 鏍规嵁娑ㄥ箙鎺掑簭
+            blocks.sort(key=lambda x: x[2])
+            blocks.reverse()
+            for b in blocks:
+                if b[2] > 0 and b[1] not in constant.KPL_INVALID_BLOCKS:
+                    final_blocks.append(b)
+            if len(final_blocks) < 2:
+                final_blocks = blocks
 
         # 淇濆瓨鍓�2鏉℃暟鎹�
         if by:
-            RedisUtils.setex_async(self.__db, f"kpl_jx_blocks_by-{code}", tool.get_expire(), json.dumps(blocks))
-            self.__code_by_blocks[code] = blocks
+            RedisUtils.setex_async(self.__db, f"kpl_jx_blocks_by-{code}", tool.get_expire(), json.dumps(final_blocks))
+            self.__code_by_blocks[code] = (final_blocks, time.time())
         else:
-            RedisUtils.setex_async(self.__db, f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(blocks))
-            self.__code_blocks[code] = blocks
+            RedisUtils.setex_async(self.__db, f"kpl_jx_blocks-{code}", tool.get_expire(), json.dumps(final_blocks))
+            self.__code_blocks[code] = (final_blocks, time.time())
 
     # 鑾峰彇绮鹃�夋澘鍧�
     def get_jx_blocks(self, code, by=False):
@@ -86,10 +97,29 @@
             # 濡傛灉娑ㄥ箙澶т簬7%灏辫鍙栨澘鍧�
             price_rate = (buy_1_price - pre_close_price) / pre_close_price
             if price_rate > 0.07:
-                if not self.get_jx_blocks_cache(code):
+                jx_blocks_info = self.get_jx_blocks_cache(code)
+                if not jx_blocks_info:
                     blocks = kpl_api.getCodeJingXuanBlocks(code)
                     self.save_jx_blocks(code, blocks)
                     async_log_util.info(logger_kpl_block_can_buy, f"{code}:鑾峰彇鍒扮簿閫夋澘鍧�-{blocks}")
+                else:
+                    # 杩樻病娑ㄥ仠鐨勯渶瑕佹洿鏂扮簿閫夋澘鍧� 鏇存柊绮鹃�夋澘鍧�
+                    if abs(float(buy_1_price) - float(limit_up_price)) >= 0.001:
+                        # 闈炴定鍋滅姸鎬�
+                        UPDATE_TIME_SPACE = 5 * 60
+                        time_diff = tool.trade_time_sub(tool.get_now_time_str(), "09:30:00")
+                        if time_diff < 0:
+                            UPDATE_TIME_SPACE = 60 * 60
+                        else:
+                            UPDATE_TIME_SPACE = int(time_diff / 30) + 60
+                            if UPDATE_TIME_SPACE > 5 * 60:
+                                UPDATE_TIME_SPACE = 5 * 60
+
+                        if time.time() - jx_blocks_info[1] > UPDATE_TIME_SPACE:
+                            # 璺濈涓婃鏇存柊鏃堕棿杩囧幓浜�5鍒嗛挓
+                            blocks = kpl_api.getCodeJingXuanBlocks(code)
+                            self.save_jx_blocks(code, blocks)
+
             elif price_rate > 0.03:
                 # 娣诲姞澶囩敤鏉垮潡
                 if not self.get_jx_blocks_cache(code, by=True):
@@ -410,11 +440,11 @@
             k3 = {industry}
 
         k4 = set()
-        jingxuan_blocks = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code)
-        if not jingxuan_blocks:
-            jingxuan_blocks = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code, by=True)
-        if jingxuan_blocks:
-            jingxuan_blocks = jingxuan_blocks[:2]
+        jingxuan_block_info = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code)
+        if not jingxuan_block_info:
+            jingxuan_block_info = self.__KPLCodeJXBlockManager.get_jx_blocks_cache(code, by=True)
+        if jingxuan_block_info:
+            jingxuan_blocks = jingxuan_block_info[0]
             k4 |= set([x[1] for x in jingxuan_blocks])
         for k in [k1, k11, k2, k3, k4]:
             keys |= k

--
Gitblit v1.8.0