From c9130a91ba50bf2bcdb08de1a2501560285ac706 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 14 九月 2023 16:13:52 +0800
Subject: [PATCH] 报单出错加入日志
---
code_attribute/gpcode_first_screen_manager.py | 140 ++++++++++++++++++++++++++++++----------------
1 files changed, 91 insertions(+), 49 deletions(-)
diff --git a/code_attribute/gpcode_first_screen_manager.py b/code_attribute/gpcode_first_screen_manager.py
index 5bc3366..66d6dcb 100644
--- a/code_attribute/gpcode_first_screen_manager.py
+++ b/code_attribute/gpcode_first_screen_manager.py
@@ -5,61 +5,110 @@
# 璁剧疆棣栨澘鏈瓫閫夌殑鐩爣绁�
import json
-from db.redis_manager import RedisUtils
+from db.redis_manager_delegate import RedisUtils
from utils import tool
-from db import redis_manager
+from db import redis_manager_delegate as redis_manager
from third_data import block_info
-__redisManager = redis_manager.RedisManager(0)
+class FirstCodeDataManager:
+ __instance = None
+ __redisManager = redis_manager.RedisManager(0)
+ __db = 0
+ __first_code_data_cache = {}
-def __get_redis():
- return __redisManager.getRedis()
+ def __new__(cls, *args, **kwargs):
+ if not cls.__instance:
+ cls.__instance = super(FirstCodeDataManager, cls).__new__(cls, *args, **kwargs)
+ cls.__load_data()
+ return cls.__instance
+ # 鍔犺浇鏁版嵁
+ @classmethod
+ def __load_data(cls):
+ keys = RedisUtils.keys(cls.__get_redis(), "first_code_data-*")
+ for k in keys:
+ val = RedisUtils.get(cls.__get_redis(), k)
+ code = k.split("-")[-1]
+ if val:
+ cls.__first_code_data_cache[code] = json.loads(val)
-# 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁
-# 1.棣栨娑ㄥ仠鏃堕棿
-# 2.鏈�杩戞定鍋滄椂闂�
-# 3.棣栨鐐稿紑鏃堕棿
-# 4.鏈�杩戠偢寮�鏃堕棿
-# 5.鏄惁宸茬粡娑ㄥ仠
-def __save_first_code_data(code, data):
- RedisUtils.setex(__redisManager.getRedis(), f"first_code_data-{code}", tool.get_expire(), json.dumps(data))
+ @classmethod
+ def __get_redis(cls):
+ return cls.__redisManager.getRedis()
+ # 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁
+ # 1.棣栨娑ㄥ仠鏃堕棿
+ # 2.鏈�杩戞定鍋滄椂闂�
+ # 3.棣栨鐐稿紑鏃堕棿
+ # 4.鏈�杩戠偢寮�鏃堕棿
+ # 5.鏄惁宸茬粡娑ㄥ仠
+ def save_first_code_data(self, code, data):
+ tool.CodeDataCacheUtil.set_cache(self.__first_code_data_cache, code, data)
+ RedisUtils.setex_async(self.__db, f"first_code_data-{code}", tool.get_expire(), json.dumps(data))
-def __get_first_code_data(code):
- val = RedisUtils.get(__get_redis(), f"first_code_data-{code}")
- if val is None:
+ def get_first_code_data(self, code):
+ val = RedisUtils.get(self.__get_redis(), f"first_code_data-{code}")
+ if val is None:
+ return None
+ return json.loads(val)
+
+ def get_first_code_data_cache(self, code):
+ cache_result = tool.CodeDataCacheUtil.get_cache(self.__first_code_data_cache, code)
+ if cache_result[0]:
+ return cache_result[1]
return None
- return json.loads(val)
-# 娣诲姞杩涢鏉挎湭绛涢�夌エ
-def __add_first_no_screen_codes(codes):
- redis = __redisManager.getRedis()
- if codes:
- for code in codes:
- RedisUtils.sadd(redis, "first_no_screen_codes", code)
- RedisUtils.expire(redis, "first_no_screen_codes", tool.get_expire())
+class FirstNoScreenCodesManager:
+ __instance = None
+ __redisManager = redis_manager.RedisManager(0)
+ __db = 0
+ __first_no_screen_codes_cache = set()
+ def __new__(cls, *args, **kwargs):
+ if not cls.__instance:
+ cls.__instance = super(FirstNoScreenCodesManager, cls).__new__(cls, *args, **kwargs)
+ cls.__load_data()
+ return cls.__instance
-def clear_first_no_screen_codes():
- redis = __redisManager.getRedis()
- RedisUtils.delete(redis, "first_no_screen_codes")
+ # 鍔犺浇鏁版嵁
+ @classmethod
+ def __load_data(cls):
+ codes = RedisUtils.smembers(cls.__get_redis(), "first_no_screen_codes")
+ cls.__first_no_screen_codes_cache = codes
+ @classmethod
+ def __get_redis(cls):
+ return cls.__redisManager.getRedis()
-def __remove_first_no_screen_codes(codes):
- redis = __redisManager.getRedis()
- if codes:
- for code in codes:
- RedisUtils.srem(redis, "first_no_screen_codes", code)
+ # 娣诲姞杩涢鏉挎湭绛涢�夌エ
+ def add_first_no_screen_codes(self, codes):
+ redis = self.__get_redis()
+ if codes:
+ for code in codes:
+ self.__first_no_screen_codes_cache.add(code)
+ RedisUtils.sadd_async(self.__db, "first_no_screen_codes", code, auto_free=False)
+ RedisUtils.expire_async(self.__db, "first_no_screen_codes", tool.get_expire(), auto_free=False)
+ def clear_first_no_screen_codes(self):
+ self.__first_no_screen_codes_cache.clear()
+ RedisUtils.delete(self.__get_redis(), "first_no_screen_codes")
-def __get_first_no_screen_codes():
- codes = RedisUtils.smembers(__get_redis(), "first_no_screen_codes")
- if not codes:
- return set()
- return codes
+ def remove_first_no_screen_codes(self, codes):
+ if codes:
+ for code in codes:
+ self.__first_no_screen_codes_cache.discard(code)
+ RedisUtils.srem_async(self.__db, "first_no_screen_codes", code, auto_free=False)
+
+ def __get_first_no_screen_codes(self):
+ codes = RedisUtils.smembers(self.__get_redis(), "first_no_screen_codes")
+ if not codes:
+ return set()
+ return codes
+
+ def get_first_no_screen_codes_cache(self):
+ return self.__first_no_screen_codes_cache
# 澶勭悊ticks鏁版嵁
@@ -67,7 +116,7 @@
for price in prices:
code = price["code"]
time_ = price["time"]
- old_data = __get_first_code_data(code)
+ old_data = FirstCodeDataManager().get_first_code_data_cache(code)
if old_data is None:
continue
limit_up = price["limit_up"]
@@ -81,7 +130,7 @@
old_data[2] = time_
old_data[3] = time_
old_data[4] = limit_up
- __save_first_code_data(code, old_data)
+ FirstCodeDataManager().save_first_code_data(code, old_data)
def set_target_no_screen_codes(codes):
@@ -94,16 +143,16 @@
del_codes = old_codes - codes_set
add_codes = codes_set - old_codes
if del_codes:
- __remove_first_no_screen_codes(del_codes)
+ FirstNoScreenCodesManager().remove_first_no_screen_codes(del_codes)
if add_codes:
# 娣诲姞杩涢鏉挎湭閫夌エ
- __add_first_no_screen_codes(add_codes)
+ FirstNoScreenCodesManager().add_first_no_screen_codes(add_codes)
return add_codes
# 鑾峰彇棣栨澘鏈瓫閫夌殑鐩爣绁�
def get_target_no_screen_codes():
- return __get_first_no_screen_codes()
+ return FirstNoScreenCodesManager().get_first_no_screen_codes_cache()
# 鏄惁闇�瑕佸姞鍏ラ鏉�
@@ -134,12 +183,5 @@
return True, "鐐告澘鍚庯紝60鍒嗛挓鍐呴兘鏈洖灏�"
if now_rate <= 6:
return True, "鐐告澘鍚庯紝娑ㄥ箙灏忎簬6%"
- # TODO 鏄惁鏈夊悓姒傚康鐨勭エ宸茬粡涔板叆鎴愬姛
- blocks = block_info.get_code_blocks(code)
- if blocks and len(blocks) == 1:
- codes = block_info.get_block_codes(blocks[0])
-
- if codes:
- pass
return False, "棣栨澘鐐稿紑鍚庯紝娑ㄥ箙鈮�6%"
--
Gitblit v1.8.0