From ae8d76a456b64c1c6c4ebf11b6ec33b7df217b1a Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 18 八月 2025 13:43:46 +0800 Subject: [PATCH] bug修复 --- code_attribute/code_volumn_manager.py | 77 +++++++++++++++++++++++++++++++------- 1 files changed, 62 insertions(+), 15 deletions(-) diff --git a/code_attribute/code_volumn_manager.py b/code_attribute/code_volumn_manager.py index 0411fb8..2af92a6 100644 --- a/code_attribute/code_volumn_manager.py +++ b/code_attribute/code_volumn_manager.py @@ -7,7 +7,7 @@ # yesterday 鏄ㄥぉ鐨勯噺 import json -from code_attribute import gpcode_manager +from code_attribute import gpcode_manager, code_nature_analyse from db.redis_manager_delegate import RedisUtils from log_module import async_log_util from utils import global_util, tool @@ -21,7 +21,7 @@ __instance = None __today_volumn_cache = {} __reference_volume_as_money_y_dict = {} - __max_volume_in_5days = {} + __max_volume_info_in_5days = {} def __new__(cls, *args, **kwargs): if not cls.__instance: @@ -47,21 +47,21 @@ for k in keys: code = k.split("-")[1] global_util.yesterday_volumn[code] = RedisUtils.get(redis, k, auto_free=False) - keys = RedisUtils.keys(redis, "volumn_max_5days-*", auto_free=False) + keys = RedisUtils.keys(redis, "volumn_max_5days_info-*", auto_free=False) if keys is not None: for k in keys: code = k.split("-")[1] val = RedisUtils.get(redis, k, auto_free=False) - cls.__max_volume_in_5days[code] = int(val) + cls.__max_volume_info_in_5days[code] = json.loads(val) finally: RedisUtils.realse(redis) # 璁剧疆鍘嗗彶閲� - def set_histry_volumn(self, code, max60, yesterday, max60_day, max60_day_count, max5_volume): + def set_histry_volumn(self, code, max60, yesterday, max60_day, max60_day_count, max5_volume, max5_volume_day): redis = self.__redis_manager.getRedis() global_util.max60_volumn[code] = (max60, max60_day, max60_day_count) global_util.yesterday_volumn[code] = yesterday - self.__save_max_volume_in_5days(code, max5_volume) + self.__save_max_volume_in_5days(code, max5_volume, max5_volume_day) try: RedisUtils.setex_async(self.__db, "volumn_max60-{}".format(code), tool.get_expire(), json.dumps((max60, max60_day, max60_day_count)), @@ -71,25 +71,72 @@ finally: RedisUtils.realse(redis) - def __save_max_volume_in_5days(self, code, volume): - self.__max_volume_in_5days[code] = volume - RedisUtils.setex_async(self.__db, "volumn_max_5days-{}".format(code), tool.get_expire(), volume, + def __save_max_volume_in_5days(self, code, volume, day): + self.__max_volume_info_in_5days[code] = (volume, day) + RedisUtils.setex_async(self.__db, "volumn_max_5days_info-{}".format(code), tool.get_expire(), json.dumps((volume, day)), auto_free=False) def get_max_volume_in_5days(self, code): - return self.__max_volume_in_5days.get(code) - - def get_volume_rate_refer_in_5days(self, code): """ - 鑾峰彇浠婃棩閲忎笌5鏃ユ渶澶ч噺鐨勫弬鑰冨�� + 5鏃ユ渶澶ч噺 @param code: @return: + """ + if code in self.__max_volume_info_in_5days: + return self.__max_volume_info_in_5days.get(code)[0] + return None + + def get_radical_buy_refer_volume(self, code, limit_up_price): + """ + 鑾峰彇鎵叆鐨勫弬鑰冮噺: + 鍙傝�冮灏忎簬3.14浜垮氨鍙�90澶╁弬鑰冮噺 + 鍚﹀垯灏卞彇鏈�杩�5澶╃殑鍙傝�冮噺 + @param code: + @param limit_up_price: + @return: + """ + # 60涓氦鏄撴棩鏈定鍋滃彇 + k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code) + has_limit_up_in_60 = True + if k_format and not k_format[13]: + has_limit_up_in_60 = False + volume = self.get_max_volume_in_5days(code) + if volume and volume * limit_up_price >= 9e8 and has_limit_up_in_60: + return volume + return int(self.get_reference_volume_as_money_y(code) * 1e8 / limit_up_price) + + def get_radical_buy_refer_volume_info(self, code, limit_up_price): + """ + TODO 鏇存敼姝g‘ + 鑾峰彇鎵叆鐨勫弬鑰冮噺: + 鍙傝�冮灏忎簬3.14浜垮氨鍙�90澶╁弬鑰冮噺 + 鍚﹀垯灏卞彇鏈�杩�5澶╃殑鍙傝�冮噺 + @param code: + @param limit_up_price: + @return: + """ + # 60涓氦鏄撴棩鏈定鍋滃彇 + k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code) + has_limit_up_in_60 = True + if k_format and not k_format[13]: + has_limit_up_in_60 = False + volume_info = self.__max_volume_info_in_5days.get(code, None) + if volume_info and volume_info[0] * limit_up_price >= 9e8 and has_limit_up_in_60: + return volume_info + return int(self.get_reference_volume_as_money_y(code) * 1e8 / limit_up_price) + + def get_volume_rate_refer_in_5days(self, code, total_sell_volume=0): + """ + 鑾峰彇浠婃棩閲忎笌5鏃ユ渶澶ч噺鐨勫弬鑰冨�� + @param total_sell_volume: 褰撳墠鎬诲崠閲� + @param code: + @return: 5鏃ラ噺姣� """ max_volume = self.get_max_volume_in_5days(code) if not max_volume: return 0 today_volume = self.get_today_volumn(code) - return round(today_volume / max_volume, 2) + return round((today_volume + total_sell_volume) / max_volume, 2) # 鑾峰彇鍘嗗彶閲� def get_histry_volumn(self, code): @@ -136,7 +183,7 @@ _volumn = global_util.today_volumn.get(code) if _volumn is None: _volumn = RedisUtils.get(self.__redis_manager.getRedis(), "volumn_today-{}".format(code)) - return _volumn + return int(_volumn) # 鑾峰彇浠婃棩閲� def get_today_volumn_cache(self, code): -- Gitblit v1.8.0