From f3589c47b3983ae6231c53028c3f7dce8b9fe3cd Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 31 十月 2023 14:55:17 +0800
Subject: [PATCH] 闪电下单m值打8折
---
code_attribute/gpcode_first_screen_manager.py | 148 ++++++++++++++++++++++++++++--------------------
1 files changed, 86 insertions(+), 62 deletions(-)
diff --git a/code_attribute/gpcode_first_screen_manager.py b/code_attribute/gpcode_first_screen_manager.py
index 71a7f53..66d6dcb 100644
--- a/code_attribute/gpcode_first_screen_manager.py
+++ b/code_attribute/gpcode_first_screen_manager.py
@@ -5,79 +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)
-__first_code_data_cache = {}
+ @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))
-# 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁
-# 1.棣栨娑ㄥ仠鏃堕棿
-# 2.鏈�杩戞定鍋滄椂闂�
-# 3.棣栨鐐稿紑鏃堕棿
-# 4.鏈�杩戠偢寮�鏃堕棿
-# 5.鏄惁宸茬粡娑ㄥ仠
-def __save_first_code_data(code, data):
- tool.CodeDataCacheUtil.set_cache(__first_code_data_cache, code, data)
- RedisUtils.setex(__redisManager.getRedis(), f"first_code_data-{code}", tool.get_expire(), json.dumps(data))
+ 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(code):
- val = RedisUtils.get(__get_redis(), f"first_code_data-{code}")
- if val is None:
+ 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 __get_first_code_data_cache(code):
- cache_result = tool.CodeDataCacheUtil.get_cache(__first_code_data_cache, code)
- if cache_result[0]:
- return cache_result[1]
- val = __get_first_code_data(code)
- tool.CodeDataCacheUtil.set_cache(__first_code_data_cache, code, val)
- return val
+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 __add_first_no_screen_codes(codes):
- redis = __redisManager.getRedis()
- try:
+ # 鍔犺浇鏁版嵁
+ @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 add_first_no_screen_codes(self, codes):
+ redis = self.__get_redis()
if codes:
for code in codes:
- RedisUtils.sadd(redis, "first_no_screen_codes", code, auto_free=False)
- RedisUtils.expire(redis, "first_no_screen_codes", tool.get_expire(), auto_free=False)
- finally:
- redis.connection_pool.disconnect()
+ 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 clear_first_no_screen_codes():
- RedisUtils.delete(__redisManager.getRedis(), "first_no_screen_codes")
-
-
-def __remove_first_no_screen_codes(codes):
- redis = __redisManager.getRedis()
- try:
+ def remove_first_no_screen_codes(self, codes):
if codes:
for code in codes:
- RedisUtils.srem(redis, "first_no_screen_codes", code, auto_free= False)
- finally:
- redis.connection_pool.disconnect()
+ 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():
- codes = RedisUtils.smembers(__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鏁版嵁
@@ -85,7 +116,7 @@
for price in prices:
code = price["code"]
time_ = price["time"]
- old_data = __get_first_code_data_cache(code)
+ old_data = FirstCodeDataManager().get_first_code_data_cache(code)
if old_data is None:
continue
limit_up = price["limit_up"]
@@ -99,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):
@@ -112,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()
# 鏄惁闇�瑕佸姞鍏ラ鏉�
@@ -152,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