admin
2024-06-21 e15f8d3a986b9e8ccea31d28e0f7e26ac73d85b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""
代码板块管理
"""
from local_api.log_module import async_log_util, log_export
from local_api.log_module.log import logger_kpl_block, printlog
from local_api.util import kpl_api, constant, kpl_util, tool
from local_api.util.juejin_util import JueJinApi
 
 
class CodeKPLBlockManager:
    __instance = None
    # 代码板块管理
    __code_block_cache_dict = {}
    # 上一个交易日的板块
    __code_before_block_cache_dict = {}
 
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(CodeKPLBlockManager, cls).__new__(cls, *args, **kwargs)
            cls.__load_datas()
        return cls.__instance
 
    @classmethod
    def __load_datas(cls):
        # 加载今日和上个交易日的数据
        today = tool.get_now_date_str()
        last_day = JueJinApi().get_previous_trading_date(today)
        printlog("获取上个交易日", last_day)
        block_dict = log_export.load_kpl_blocks(today)
        for code in block_dict:
            cls.__code_block_cache_dict[code] = block_dict[code]
 
        block_dict = log_export.load_kpl_blocks(last_day)
        for code in block_dict:
            cls.__code_before_block_cache_dict[code] = block_dict[code]
 
    def get_blocks(self, code):
        """
        获取代码的板块,优先今日获取到的板块
        :param code:
        :return:
        """
        blocks =  self.__code_block_cache_dict.get(code)
        if blocks:
            return blocks
        blocks = self.__code_before_block_cache_dict.get(code)
        return blocks
 
 
    def get_codes_count_info(self):
        """
        获取代码数量信息
        :return:(当日板块的代码数量,上个交易日的代码数量)
        """
        return len(self.__code_block_cache_dict), len(self.__code_before_block_cache_dict)
 
    def __request_block(self, code, force=False):
        if code in self.__code_block_cache_dict and not force:
            return
        blocks = kpl_api.getCodeBlocks(code)
        fblocks = set()
        if blocks:
            for b in blocks:
                if b not in constant.KPL_INVALID_BLOCKS:
                    fblocks.add(kpl_util.filter_block(b))
            self.__code_block_cache_dict[code] = fblocks
            async_log_util.info(logger_kpl_block, f"{code}#{fblocks}")
 
    def request_block(self, codes, force=False):
        """
        请求板块
        :param codes: 代码集合
        :param force: 是否强制求情
        :return:
        """
        if type(codes) == str:
            self.__request_block(codes, force)
        else:
            for code in codes:
                self.__request_block(code, force)