From 8ffb521f738254038d85bbade839b2e30456e525 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 04 十一月 2024 00:41:05 +0800 Subject: [PATCH] 扫入参考代码板块优化 --- third_data/kpl_data_constant.py | 130 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 124 insertions(+), 6 deletions(-) diff --git a/third_data/kpl_data_constant.py b/third_data/kpl_data_constant.py index d12a2e2..ac99407 100644 --- a/third_data/kpl_data_constant.py +++ b/third_data/kpl_data_constant.py @@ -1,9 +1,119 @@ # 褰撳墠娑ㄥ仠鏁版嵁 import constant -from third_data import kpl_block_util +from db import redis_manager_delegate as redis_manager +from db.redis_manager_delegate import RedisUtils # 鐢ㄤ簬璁$畻婵�杩涗拱寮�1鐨勬澘鏁帮細{"浠g爜":(鍑犵増,{鏉垮潡})} +from utils import tool +from utils.kpl_data_db_util import KPLLimitUpDataUtil + open_limit_up_code_dict_for_radical_buy = None + + +class LimitUpCodesBlockRecordManager: + """ + 鍘嗗彶娑ㄥ仠浠g爜鐨勬澘鍧楃鐞� + """ + # 娑ㄥ仠鍘熷洜 + __limit_up_reasons_dict = {} + # 娑ㄥ仠鎺ㄨ崘鍘熷洜 + __limit_up_recommend_reasons_dict = {} + + __instance = None + + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(LimitUpCodesBlockRecordManager, cls).__new__(cls, *args, **kwargs) + cls.__load_data() + return cls.__instance + + @classmethod + def __load_data(cls): + kpl_results = KPLLimitUpDataUtil.get_latest_block_infos() + limit_up_reasons_dict = {} + limit_up_recommend_block_dict = {} + for r in kpl_results: + code = r[0] + if code not in limit_up_reasons_dict: + limit_up_reasons_dict[code] = [] + if code not in limit_up_recommend_block_dict: + limit_up_recommend_block_dict[code] = [] + if len(limit_up_reasons_dict[code]) >= 2: + continue + limit_up_reasons_dict[code].append(r[2]) + if r[3]: + limit_up_recommend_block_dict[code].extend(r[3].split("銆�")) + for code in limit_up_reasons_dict: + cls.__limit_up_reasons_dict[code] = set(limit_up_reasons_dict[code]) + + for code in limit_up_recommend_block_dict: + cls.__limit_up_recommend_reasons_dict[code] = set(limit_up_recommend_block_dict[code]) + + def get_limit_up_reasons(self, code): + """ + 鑾峰彇娑ㄥ仠鍘熷洜 + @param code: + @return: + """ + if code in self.__limit_up_reasons_dict: + return set(self.__limit_up_reasons_dict[code]) + return set() + + def get_limit_up_reasons_with_recommend(self, code): + """ + 鑾峰彇娑ㄥ仠鍘熷洜涓庢帹鑽愬師鍥� + @param code: + @return: + """ + blocks = set() + if code in self.__limit_up_reasons_dict: + blocks |= self.__limit_up_reasons_dict[code] + if code in self.__limit_up_recommend_reasons_dict: + blocks |= self.__limit_up_recommend_reasons_dict[code] + return blocks + + +class TodayLimitUpReasonChangeManager: + """ + 浠婃棩娑ㄥ仠鍘熷洜鍙樺寲 + """ + # 娑ㄥ仠鍘熷洜 + __today_change_reasons_dict = {} + # 娑ㄥ仠 + __instance = None + __db = 1 + __redisManager = redis_manager.RedisManager(1) + + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(TodayLimitUpReasonChangeManager, 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): + keys = RedisUtils.keys(cls.__get_redis(), "kpl_limit_up_reason_his-*") + if keys: + for key in keys: + code = key.split("-")[1] + reasons = RedisUtils.smembers(cls.__get_redis(), key) + cls.__today_change_reasons_dict[code] = reasons + + def set_today_limit_up_reason_change(self, code, from_reason, to_reason): + if code not in self.__today_change_reasons_dict: + self.__today_change_reasons_dict[code] = set() + self.__today_change_reasons_dict[code].add(from_reason) + RedisUtils.sadd_async(self.__db, f"kpl_limit_up_reason_his-{code}", from_reason) + RedisUtils.expire_async(self.__db, f"kpl_limit_up_reason_his-{code}", tool.get_expire()) + + def get_changed_reasons(self, code): + if code in self.__today_change_reasons_dict: + return self.__today_change_reasons_dict[code] + return set() class LimitUpDataConstant: @@ -25,14 +135,22 @@ return cls.history_limit_up_datas = history_limit_up_datas_ for d in cls.history_limit_up_datas: + # 鍙傝�冨師鍥狅細褰撳墠娑ㄥ仠鍘熷洜+褰撴棩鍙樺寲涔嬪墠鐨勫師鍥�+180澶╂渶杩�2鏉℃定鍋滃師鍥� + code = d[3] blocks = {d[2]} + history_reasons = LimitUpCodesBlockRecordManager().get_limit_up_reasons(code) + if history_reasons: + blocks |= history_reasons + today_changed_reasons = TodayLimitUpReasonChangeManager().get_changed_reasons(code) + if today_changed_reasons: + blocks |= today_changed_reasons # 寮�1鎵嶈兘鍖呭惈鎺ㄨ崘鍘熷洜 - if d[6] and kpl_block_util.open_limit_up_time_range[0] <= int(d[5]) < \ - kpl_block_util.open_limit_up_time_range[1]: - blocks |= set(d[6].split("銆�")) + # if d[6] and kpl_block_util.open_limit_up_time_range[0] <= int(d[5]) < \ + # kpl_block_util.open_limit_up_time_range[1]: + # blocks |= set(d[6].split("銆�")) blocks -= constant.KPL_INVALID_BLOCKS - cls.__history_code_blocks_dict[d[3]] = blocks - cls.__history_code_data_dict[d[3]] = d + cls.__history_code_blocks_dict[code] = blocks + cls.__history_code_data_dict[code] = d @classmethod def get_blocks_with_history(cls, code): -- Gitblit v1.8.0