From 0e68e24f54db11d340785b17570fff2bc5fc7ac6 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 24 七月 2023 13:05:16 +0800 Subject: [PATCH] bug修复 --- l2/l2_data_util.py | 102 +++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 74 insertions(+), 28 deletions(-) diff --git a/l2/l2_data_util.py b/l2/l2_data_util.py index 9057ffe..c7c25d4 100644 --- a/l2/l2_data_util.py +++ b/l2/l2_data_util.py @@ -12,12 +12,11 @@ import numpy import constant -import gpcode_manager -import l2_data_util +from code_attribute import gpcode_manager from l2 import l2_data_log, l2_data_source_util -import log +from log_module import log from db import redis_manager -import tool +from utils import tool _redisManager = redis_manager.RedisManager(1) # l2鏁版嵁绠$悊 @@ -29,18 +28,22 @@ # 鐢ㄤ簬鍔犲揩鏁版嵁澶勭悊锛岀敤绌烘崲鏃堕棿 local_today_num_operate_map = {} +# 涔板叆璁㈠崟鍙锋槧灏�,鍙湁鍘熺敓鐨凩2鏁版嵁鎵嶆湁 +local_today_buyno_map = {} -def load_l2_data(code, force=False): + +def load_l2_data(code, load_latest=True, force=False): redis = _redisManager.getRedis() # 鍔犺浇鏈�杩戠殑l2鏁版嵁 - if local_latest_datas.get(code) is None or force: - # 鑾峰彇鏈�杩戠殑鏁版嵁 - _data = redis.get("l2-data-latest-{}".format(code)) - if _data is not None: - if code in local_latest_datas: - local_latest_datas[code] = json.loads(_data) - else: - local_latest_datas.setdefault(code, json.loads(_data)) + if load_latest : + if local_latest_datas.get(code) is None or force: + # 鑾峰彇鏈�杩戠殑鏁版嵁 + _data = redis.get("l2-data-latest-{}".format(code)) + if _data is not None: + if code in local_latest_datas: + local_latest_datas[code] = json.loads(_data) + else: + local_latest_datas.setdefault(code, json.loads(_data)) # 鑾峰彇浠婃棩鐨勬暟鎹� if local_today_datas.get(code) is None or force: @@ -49,6 +52,9 @@ if datas is None: datas = [] local_today_datas[code] = datas + data_normal = True + if datas and len(datas) < datas[-1]["index"] + 1: + data_normal = False # 浠庢暟鎹簱鍔犺浇 # datas = [] @@ -63,6 +69,9 @@ # local_today_datas[code] = new_datas # 鏍规嵁浠婃棩鏁版嵁鍔犺浇 load_num_operate_map(local_today_num_operate_map, code, local_today_datas.get(code), force) + load_buy_no_map(local_today_buyno_map, code, local_today_datas.get(code), force) + return data_normal + return True # 灏嗘暟鎹牴鎹畁um-operate鍒嗙被 @@ -77,6 +86,25 @@ if local_today_num_operate_map[code].get(key) is None: local_today_num_operate_map[code].setdefault(key, []) local_today_num_operate_map[code].get(key).append(data) + + +# 灏嗘暟鎹牴鎹畂rderNo鍒嗙被,鍘熺敓鏁版嵁鎵嶆湁 +def load_buy_no_map(local_today_buyno_map, code, source_datas, clear=False): + # 鍙湁鍘熺敓L2鏁版嵁鎵嶄細鏈夋鎿嶄綔 + if constant.L2_SOURCE_TYPE != constant.L2_SOURCE_TYPE_HUAXIN: + return + if local_today_buyno_map.get(code) is None: + local_today_buyno_map[code] = {} + if clear: + local_today_buyno_map[code] = {} + + for data in source_datas: + if data["val"]["operateType"] != 0: + continue + # 鍙~鍏呬拱鍏ユ暟鎹� + key = "{}".format(data["val"]["orderNo"]) + if local_today_buyno_map[code].get(key) is None: + local_today_buyno_map[code].setdefault(key, data) @tool.async_call @@ -124,20 +152,22 @@ if len(add_datas) > 0: # 淇濆瓨鏈�杩戠殑鏁版嵁 __start_time = round(time.time() * 1000) - redis.setex("l2-data-latest-{}".format(code), tool.get_expire(), json.dumps(datas)) - l2_data_log.l2_time(code, round(time.time() * 1000) - __start_time, "淇濆瓨鏈�杩憀2鏁版嵁鐢ㄦ椂") - # 璁剧疆杩涘唴瀛� - local_latest_datas[code] = datas - __set_l2_data_latest_count(code, len(datas)) + if datas: + redis.setex("l2-data-latest-{}".format(code), tool.get_expire(), json.dumps(datas)) + l2_data_log.l2_time(code, round(time.time() * 1000) - __start_time, "淇濆瓨鏈�杩憀2鏁版嵁鐢ㄦ椂") + # 璁剧疆杩涘唴瀛� + local_latest_datas[code] = datas + set_l2_data_latest_count(code, len(datas)) try: log.logger_l2_data.info("{}-{}", code, add_datas) except Exception as e: logging.exception(e) - saveL2Data(code, add_datas) + # 鏆傛椂涓嶅皢鏁版嵁淇濆瓨鍒皉edis + # saveL2Data(code, add_datas) # 璁剧疆鏈�鏂扮殑l2鏁版嵁閲囬泦鐨勬暟閲� -def __set_l2_data_latest_count(code, count): +def set_l2_data_latest_count(code, count): redis = _redisManager.getRedis() key = "latest-l2-count-{}".format(code) redis.setex(key, 2, count) @@ -167,12 +197,25 @@ channel = data["channel"] capture_time = data["captureTime"] process_time = data["processTime"] + count = data["count"] data = data["data"] - limit_up_price = gpcode_manager.get_limit_up_price(code) - - datas = L2DataUtil.format_l2_data(data, code, limit_up_price) # 鑾峰彇娑ㄥ仠浠� - return day, client, channel, code, capture_time, process_time, datas, data + return day, client, channel, code, capture_time, process_time, data, count + + +# 鍏冩暟鎹槸鍚︽湁宸紓 +def is_origin_data_diffrent(data1, data2): + if data1 is None or data2 is None: + return True + if len(data1) != len(data2): + return True + # 姣旇緝 + data_length = len(data1) + step = len(data1) // 10 + for i in range(0, data_length, step): + if json.dumps(data1[i]) != json.dumps(data2[i]): + return True + return False # 鏄惁涓哄ぇ鍗� @@ -262,7 +305,8 @@ # 淇濆瓨鍒版暟鎹簱锛屾洿鏂皉e鐨勬暟鎹� save_list.append(_ldata) if len(save_list) > 0: - saveL2Data(code, save_list, "淇濆瓨绾犳鏁版嵁") + # 鏆傛椂涓嶅皢鏁版嵁淇濆瓨鍒皉edis + # saveL2Data(code, save_list, "淇濆瓨绾犳鏁版嵁") local_latest_datas[code] = latest_data return _datas @@ -435,6 +479,10 @@ return new_index_list[start_index], new_index_list[start_index:start_index + len(queues)] return None, None + # 3涓暟鎹互涓婄殑涓嶉渶瑕佸垽鏂渶杩戠殑涓�娆℃湭娑ㄥ仠鏃堕棿 + if len(queueList) >= 3: + latest_not_limit_up_time = None + # 鍒ゆ柇鍖归厤鐨勪綅缃槸鍚﹀彲淇� def is_trust(indexes): cha = [] @@ -488,6 +536,4 @@ if __name__ == "__main__": - cha = [0, 2, 4] - std_result = numpy.std(cha) - print(std_result) + print(load_l2_data("002235")) -- Gitblit v1.8.0