| | |
| | | import time |
| | | |
| | | import client_manager |
| | | import constant |
| | | from db import redis_manager |
| | | import tool |
| | | import decimal |
| | | |
| | | __redisManager = redis_manager.RedisManager(0) |
| | | |
| | | |
| | | class CodesNameManager: |
| | | redisManager = redis_manager.RedisManager(0) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.redisManager.getRedis() |
| | | |
| | | @classmethod |
| | | def list_code_name_dict(cls): |
| | | dict_ = {} |
| | | val = cls.list_first_code_name_dict() |
| | | if val is not None: |
| | | for k in val: |
| | | dict_[k] = val[k] |
| | | val = cls.list_second_code_name_dict() |
| | | if val is not None: |
| | | for k in val: |
| | | dict_[k] = val[k] |
| | | return dict_ |
| | | |
| | | @classmethod |
| | | def list_first_code_name_dict(cls): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | if val is not None: |
| | | val = json.loads(val) |
| | | return val |
| | | return None |
| | | |
| | | @classmethod |
| | | def list_second_code_name_dict(cls): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | if val is not None: |
| | | val = json.loads(val) |
| | | return val |
| | | return None |
| | | |
| | | @classmethod |
| | | def get_first_code_name(cls, code): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | for k in val: |
| | | if val[k] == code: |
| | | return k |
| | | return None |
| | | |
| | | @classmethod |
| | | def get_second_code_name(cls, code): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | for k in val: |
| | | if val[k] == code: |
| | | return k |
| | | |
| | | @classmethod |
| | | def get_first_name_code(cls, name): |
| | | val = cls.__get_redis().get("gp_list_names_first") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | return val.get(name) |
| | | |
| | | @classmethod |
| | | def get_second_name_code(cls, name): |
| | | val = cls.__get_redis().get("gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | return val.get(name) |
| | | |
| | | # 设置首板代码名称 |
| | | @classmethod |
| | | def set_first_code_names(cls, datas): |
| | | cls.__get_redis().set("gp_list_names_first", json.dumps(datas)) |
| | | |
| | | # 设置二板代码名称 |
| | | @classmethod |
| | | def set_second_code_names(cls, datas): |
| | | cls.__get_redis().set("gp_list_names", json.dumps(datas)) |
| | | |
| | | # 删除首板代码名称 |
| | | @classmethod |
| | | def clear_first_code_names(cls): |
| | | cls.__get_redis().delete("gp_list_names_first") |
| | | |
| | | # 设置二板代码名称 |
| | | @classmethod |
| | | def clear_second_code_names(cls): |
| | | cls.__get_redis().delete("gp_list_names") |
| | | |
| | | |
| | | # 首板代码管理 |
| | | class FirstCodeManager: |
| | | redisManager = redis_manager.RedisManager(0) |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.redisManager.getRedis() |
| | | |
| | | # 加入首板历史记录 |
| | | @classmethod |
| | | def add_record(cls, codes): |
| | | for code in codes: |
| | | cls.__get_redis().sadd("first_code_record", code) |
| | | cls.__get_redis().expire("first_code_record", tool.get_expire()) |
| | | |
| | | @classmethod |
| | | def is_in_first_record(cls, code): |
| | | if cls.__get_redis().sismember("first_code_record", code): |
| | | return True |
| | | else: |
| | | return False |
| | | |
| | | # 加入首板涨停过代码集合 |
| | | @classmethod |
| | | def add_limited_up_record(cls, codes): |
| | | for code in codes: |
| | | cls.__get_redis().sadd("first_code_limited_up_record", code) |
| | | cls.__get_redis().expire("first_code_limited_up_record", tool.get_expire()) |
| | | |
| | | # 是否涨停过 |
| | | @classmethod |
| | | def is_limited_up(cls, code): |
| | | if cls.__get_redis().sismember("first_code_limited_up_record", code): |
| | | return True |
| | | else: |
| | | return False |
| | | |
| | | |
| | | def __parse_codes_data(code_datas): |
| | |
| | | return codes, name_codes |
| | | |
| | | |
| | | # -------------------------------二板代码管理--------------------------------- |
| | | |
| | | def set_gp_list(code_datas): |
| | | codes, name_codes = __parse_codes_data(code_datas) |
| | | redis_instance = __redisManager.getRedis() |
| | | # 删除之前的 |
| | | redis_instance.delete("gp_list") |
| | | redis_instance.delete("gp_list_names") |
| | | CodesNameManager.clear_second_code_names() |
| | | for d in codes: |
| | | redis_instance.sadd("gp_list", d) |
| | | redis_instance.set("gp_list_names", json.dumps(name_codes)) |
| | | CodesNameManager.set_second_code_names(name_codes) |
| | | |
| | | |
| | | # 新增代码 |
| | | def add_gp_list(code_datas): |
| | | if len(code_datas) > 200: |
| | | raise Exception("不能超过200个数据") |
| | | redis_instance = __redisManager.getRedis() |
| | | codes, name_codes = __parse_codes_data(code_datas) |
| | | for d in codes: |
| | | redis_instance.sadd("gp_list", d) |
| | | old_name_codes = get_name_codes() |
| | | old_name_codes = CodesNameManager.list_second_code_name_dict() |
| | | if old_name_codes is None: |
| | | old_name_codes = name_codes |
| | | else: |
| | | for key in name_codes: |
| | | old_name_codes[key] = name_codes[key] |
| | | redis_instance.set("gp_list_names", json.dumps(old_name_codes)) |
| | | CodesNameManager.set_second_code_names(old_name_codes) |
| | | |
| | | |
| | | # -------------------------------首板代码管理------------------------------- |
| | | # 添加首板代码 |
| | | # code_datas 掘金返回的数据 |
| | | def set_first_gp_codes_with_data(code_datas): |
| | | redis_instance = __redisManager.getRedis() |
| | | codes, name_codes = __parse_codes_data(code_datas) |
| | | codes_set = set() |
| | | for code in codes: |
| | | codes_set.add(code) |
| | | old_codes_set = redis_instance.smembers("gp_list_first") |
| | | if old_codes_set is None: |
| | | old_codes_set = set() |
| | | del_set = old_codes_set - codes_set |
| | | add_codes = codes_set - old_codes_set |
| | | for code in add_codes: |
| | | redis_instance.sadd("gp_list_first", code) |
| | | for code in del_set: |
| | | redis_instance.srem("gp_list_first", code) |
| | | redis_instance.expire("gp_list_first", tool.get_expire()) |
| | | |
| | | old_name_codes = CodesNameManager.list_first_code_name_dict() |
| | | if old_name_codes is None: |
| | | old_name_codes = name_codes |
| | | else: |
| | | for key in name_codes: |
| | | old_name_codes[key] = name_codes[key] |
| | | CodesNameManager.set_first_code_names(old_name_codes) |
| | | |
| | | |
| | | # 移除首板代码 |
| | | def remove_first_gp_code(codes): |
| | | redis_instance = __redisManager.getRedis() |
| | | for code in codes: |
| | | redis_instance.srem("gp_list_first", code) |
| | | |
| | | |
| | | # 获取首板代码 |
| | | def get_first_gp_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.smembers("gp_list_first") |
| | | |
| | | |
| | | # 是否在首板里面 |
| | | def is_in_first_gp_codes(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.sismember("gp_list_first", code) |
| | | |
| | | |
| | | # 获取名称对应的代码 |
| | | def get_name_code(name): |
| | | redis_instance = __redisManager.getRedis() |
| | | val = redis_instance.get("gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | return val.get(name) |
| | | code = CodesNameManager.get_second_name_code(name) |
| | | if code is not None: |
| | | return code |
| | | code = CodesNameManager.get_first_name_code(name) |
| | | return code |
| | | |
| | | |
| | | def get_code_name(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | val = redis_instance.get("gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | for key in val: |
| | | if val[key] == code: |
| | | return key |
| | | return None |
| | | name = CodesNameManager.get_second_code_name(code) |
| | | if name is not None: |
| | | return name |
| | | name = CodesNameManager.get_first_code_name(code) |
| | | return name |
| | | |
| | | |
| | | def get_name_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | val = redis_instance.get("gp_list_names") |
| | | if not val: |
| | | return None |
| | | val = json.loads(val) |
| | | return val |
| | | return CodesNameManager.list_code_name_dict() |
| | | |
| | | |
| | | # 涨停犁碑坳 |
| | | # 涨停数据保存 |
| | | def set_limit_up_list(gpset): |
| | | if gpset is None: |
| | | return |
| | |
| | | def rm_gp(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | redis_instance.srem("gp_list", code) |
| | | remove_first_gp_code([code]) |
| | | |
| | | |
| | | def is_in_gp_pool(code): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.sismember("gp_list", code) |
| | | return redis_instance.sismember("gp_list", code) or is_in_first_gp_codes(code) |
| | | |
| | | |
| | | def get_gp_list(): |
| | | redis_instance = __redisManager.getRedis() |
| | | return redis_instance.smembers("gp_list") |
| | | codes = redis_instance.smembers("gp_list") |
| | | first_codes = get_first_gp_codes() |
| | | return set.union(codes, first_codes) |
| | | |
| | | |
| | | # 获取二板代码 |
| | | def get_second_gp_list(): |
| | | redis_instance = __redisManager.getRedis() |
| | | codes = redis_instance.smembers("gp_list") |
| | | return codes |
| | | |
| | | |
| | | def get_gp_list_with_prefix(data=None): |
| | |
| | | redis_instance.expire(key, tool.get_expire()) |
| | | |
| | | |
| | | # 清除所有监听代码 |
| | | def clear_listen_codes(): |
| | | redis_instance = __redisManager.getRedis() |
| | | keys = redis_instance.keys("listen_code-*-*") |
| | | for key in keys: |
| | | redis_instance.setex(key, tool.get_expire(), "") |
| | | |
| | | |
| | | # 获取可以操作的位置 |
| | | def get_can_listen_pos(client_id=0): |
| | | client_ids = [] |
| | |
| | | random.shuffle(keys) |
| | | codes = [] |
| | | for key in keys: |
| | | index = key.split("-")[-1] |
| | | if int(index) + 1 > constant.L2_CODE_COUNT_PER_DEVICE: |
| | | continue |
| | | result = redis_instance.get(key) |
| | | |
| | | if result is None or len(result) == 0: |
| | | return client_id, int(key.replace("listen_code-{}-".format(client_id), "")) |
| | | else: |
| | |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | _start = time.time() |
| | | redis_instance = __redisManager.getRedis() |
| | | val = redis_instance.get("code_listen_pos-{}".format("603786")) |
| | | print(json.loads(val)) |
| | | print((time.time() - _start) * 1000) |
| | | print(get_code_name("603042")) |
| | | print(get_name_code("华脉科技")) |
| | | print(get_name_codes()) |