"""
|
L2卖管理
|
"""
|
import json
|
|
from db import redis_manager
|
from db.redis_manager import RedisUtils
|
from log_module import async_log_util
|
from log_module.log import logger_l2_market_sell, logger_debug
|
from utils import tool
|
from utils.tool import CodeDataCacheUtil
|
|
|
class L2MarketSellManager:
|
__db = 0
|
__redis_manager = redis_manager.RedisManager(0)
|
__instance = None
|
__current_total_sell_data_cache = {}
|
__last_total_sell_data_cache = {}
|
__used_refer_sell_data_cache = {}
|
|
def __new__(cls, *args, **kwargs):
|
if not cls.__instance:
|
cls.__instance = super(L2MarketSellManager, cls).__new__(cls, *args, **kwargs)
|
cls.__load_datas()
|
return cls.__instance
|
|
@classmethod
|
def __get_redis(cls):
|
return cls.__redis_manager.getRedis()
|
|
@classmethod
|
def __load_datas(cls):
|
logger_debug.info("L2MarketSellManager __load_datas")
|
__redis = cls.__get_redis()
|
try:
|
keys = RedisUtils.keys(__redis, "fast_buy_used_sell_data-*")
|
for k in keys:
|
code = k.split("-")[-1]
|
val = RedisUtils.smembers(__redis, k)
|
CodeDataCacheUtil.set_cache(cls.__used_refer_sell_data_cache, code, val)
|
except:
|
pass
|
finally:
|
RedisUtils.realse(__redis)
|
|
def set_sell_time_used(self, code, time_str):
|
if code not in self.__used_refer_sell_data_cache:
|
self.__used_refer_sell_data_cache[code] = set()
|
self.__used_refer_sell_data_cache[code].add(time_str)
|
RedisUtils.sadd_async(self.__db, f"fast_buy_used_sell_data-{code}", time_str)
|
RedisUtils.expire_async(self.__db, f"fast_buy_used_sell_data-{code}", tool.get_expire())
|
|
def is_refer_sell_time_used(self, code, time_str):
|
if code not in self.__used_refer_sell_data_cache:
|
return False
|
return time_str in self.__used_refer_sell_data_cache[code]
|
|
def clear(self):
|
self.__used_refer_sell_data_cache.clear()
|
keys = RedisUtils.keys(self.__get_redis(), "fast_buy_used_sell_data-*")
|
for k in keys:
|
RedisUtils.delete_async(self.__db, k)
|
|
# 设置当前的总卖
|
def set_current_total_sell_data(self, code, time_str, money):
|
# 记录日志
|
async_log_util.info(logger_l2_market_sell, f"{code}: {time_str}-{money}")
|
if code in self.__current_total_sell_data_cache:
|
self.__last_total_sell_data_cache[code] = self.__current_total_sell_data_cache.get(code)
|
self.__current_total_sell_data_cache[code] = (time_str, round(money))
|
|
# 获取参考卖的数据
|
def get_refer_sell_data(self, code, time_str):
|
cuurent = self.__current_total_sell_data_cache.get(code)
|
if cuurent is None:
|
return None
|
if int(time_str.replace(":", "")) > int(cuurent[0].replace(":", "")):
|
return cuurent
|
last = self.__last_total_sell_data_cache.get(code)
|
if int(time_str.replace(":", "")) > int(last[0].replace(":", "")):
|
return last
|
return None
|