From 0e68e24f54db11d340785b17570fff2bc5fc7ac6 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 24 七月 2023 13:05:16 +0800 Subject: [PATCH] bug修复 --- third_data/kpl_block_util.py | 164 ++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 102 insertions(+), 62 deletions(-) diff --git a/third_data/kpl_block_util.py b/third_data/kpl_block_util.py index 1a9af1d..0938eaf 100644 --- a/third_data/kpl_block_util.py +++ b/third_data/kpl_block_util.py @@ -7,62 +7,20 @@ import datetime import time +import constant from utils import tool -# latest_2_day_limit_up_datas:鏈�杩�2澶╂定鍋滄暟鎹� -def is_strong_block(block, current_limit_up_datas, latest_2_day_limit_up_datas): - # 鏄惁寮�1锛屼笖灏氭湭鐐告澘 - if current_limit_up_datas: - # 鑾峰彇浠婃棩9锛�30鐨勬椂闂存埑 - time_str = datetime.datetime.now().strftime("%Y-%m-%d") + " 09:30:00" - timestamp = time.mktime(time.strptime(time_str, '%Y-%m-%d %H:%M:%S')) - for k in current_limit_up_datas: - if k[5] == block: - if int(k[2]) < timestamp: - return True, "寮�涓�" - elif k[0].find("30") == 0 or k[0].find("68") == 0: - return True, "20cm娑ㄥ仠" - - # 鏉垮潡鏈変簩鏉夸笖锛�3澶╁唴鏉垮潡鍐呮棤楂樹簬浜屾澘鐨勭エ锛� - has_continue_limit_up = False - for k in current_limit_up_datas: - if k[5] == block: - if k[4] == "2杩炴澘": - has_continue_limit_up = True - break - total_limit_up_datas = list(latest_2_day_limit_up_datas) - total_limit_up_datas.extend(current_limit_up_datas) - for k in total_limit_up_datas: - if k[5] == block: - if k[4].find("杩炴澘") > 0 and int(k[4][:1]) > 2: - has_continue_limit_up = False - break - if has_continue_limit_up: - return True, "鏉垮潡鏈変簩鏉夸笖3澶╁唴鏉垮潡鍐呮棤楂樹簬浜屾澘" - - return False, "" - - -# 鏄惁鏄寷鎷夋澘鍧� +# 鏄惁涓绘澘寮�1 # limit_up_record_datas 浠婃棩鍘嗗彶娑ㄥ仠 -def is_soon_limit_up(code, block, limit_up_record_datas): - block_codes_infos = [] - limit_up_time = time.time() +def is_shsz_open_limit_up(code, block, limit_up_record_datas, code_block_dict): + # 鑾峰彇浠婃棩9锛�30鐨勬椂闂存埑 + time_str = datetime.datetime.now().strftime("%Y-%m-%d") + " 09:30:00" + timestamp = time.mktime(time.strptime(time_str, '%Y-%m-%d %H:%M:%S')) for k in limit_up_record_datas: - if k[2] == block: - if k[3] != code: - block_codes_infos.append((k[3], int(k[5]))) - else: - limit_up_time = int(k[5]) - # 鎺掑簭 - block_codes_infos.append((code, limit_up_time)) - block_codes_infos.sort(key=lambda x: x[1]) - if len(block_codes_infos) < 2: - return False, "" - if block_codes_infos[1][1] - block_codes_infos[0][1] < 30 * 60: - # 棣栨娑ㄥ仠鏃堕棿闂撮殧30鍒嗛挓鍐� - return True, f"鏉垮潡锛歿block} 榫�1锛歿block_codes_infos[0][0]} 榫�2锛歿block_codes_infos[1][0]}" + if code_block_dict.get(k[3]) == block: + if int(k[5]) < timestamp: + return True, f"{k[3]}寮�涓�" return False, "" @@ -79,14 +37,92 @@ return True -# 鑾峰彇涓绘澘韬綅 -def get_sh_sz_code_rank(code, block, limit_up_record_datas): +# 鏄惁鏄墠鍑犵殑鏉垮潡 +# 鏉垮潡涓湁涓绘澘娑ㄥ仠鐨勬墠鍙備笌鎺掑簭锛堟帓搴忔椂闂存寜鐓ф澘鍧椾腑鐨勬定鍋滄椂闂存潵鎺掑簭锛� + +def __is_top_block(block, block_codes_infos, topn): + block_limit_up_dict = {} + for b in block_codes_infos: + if b[1] not in block_limit_up_dict: + block_limit_up_dict[b[1]] = [] + block_limit_up_dict[b[1]].append(b) + # 鍓旈櫎鍙湁闈炰富鏉挎定鍋滅殑鏉垮潡 + invalid_blocks = [] + for k in block_limit_up_dict: + has_shsz = False + for b in block_limit_up_dict[k]: + if b[0].find('00') == 0 or b[0].find('60') == 0: + has_shsz = True + break + if not has_shsz: + invalid_blocks.append(k) + for k in invalid_blocks: + block_limit_up_dict.pop(k) + + # 姣忎釜鏉垮潡娑ㄥ仠鏃堕棿鎺掑簭 + invalid_blocks = [] + for k in block_limit_up_dict: + # 鍒犻櫎瀹芥硾姒傚康 + if k in constant.KPL_INVALID_BLOCKS: + invalid_blocks.append(k) + continue + block_limit_up_dict[k].sort(key=lambda x: x[2]) + + for k in invalid_blocks: + block_limit_up_dict.pop(k) + + block_codes_infos = [block_limit_up_dict[k][0] for k in block_limit_up_dict] + block_codes_infos.sort(key=lambda x: x[2]) + # 鍘婚櫎閫氱敤娑ㄥ仠鍘熷洜 + index = 0 + for d in block_codes_infos: + if d[1] == block: + if index + 1 <= topn: + return True, block_codes_infos[:topn] + else: + return False, block_codes_infos[:topn] + index += 1 + if index <= topn: + return True, block_codes_infos[:topn] + return False, block_codes_infos[:topn] + + +def is_record_top_block(code, block, limit_up_record_datas, topn): block_codes_infos = [] limit_up_time = time.time() for k in limit_up_record_datas: - if k[3].find("00") != 0 and k[3].find("60") != 0: + if k[3] != code: + block_codes_infos.append((k[3], k[2], int(k[5]))) + else: + limit_up_time = int(k[5]) + block_codes_infos.append((code, block, limit_up_time)) + # 鎺掑簭 + return __is_top_block(block, block_codes_infos, topn) + + +def is_current_top_block(code, block, current_limit_up_datas, topn): + block_codes_infos = [] + limit_up_time = time.time() + for k in current_limit_up_datas: + if k[0] != code: + block_codes_infos.append((k[0], k[5], int(k[2]))) + else: + limit_up_time = int(k[2]) + # 鎺掑簭 + block_codes_infos.append((code, block, limit_up_time)) + # 鎺掑簭 + return __is_top_block(block, block_codes_infos, topn) + + +# 鑾峰彇褰撴棩鍘嗗彶韬綅 +# shsz:鏄惁涓绘澘 +def get_code_record_rank(code, block, limit_up_record_datas, code_limit_up_reason_dict, shsz=True): + block_codes_infos = [] + limit_up_time = time.time() + for k in limit_up_record_datas: + if shsz and k[3].find("00") != 0 and k[3].find("60") != 0: continue - if k[2] == block: + if code_limit_up_reason_dict.get(k[3]) == block: if k[3] != code: block_codes_infos.append((k[3], int(k[5]))) else: @@ -99,16 +135,20 @@ return 0 -# 鑾峰彇韬綅 -def get_code_rank(code, block, limit_up_record_datas): +# 鑾峰彇褰撴棩瀹炴椂韬綅 +# before_blocks_dict鏍煎紡浣峽"浠g爜":set("鏉垮潡")} +def get_code_current_rank(code, block, current_limit_up_datas, code_limit_up_reason_dict, shsz=False): block_codes_infos = [] limit_up_time = time.time() - for k in limit_up_record_datas: - if k[2] == block: - if k[3] != code: - block_codes_infos.append((k[3], int(k[5]))) + for k in current_limit_up_datas: + if shsz and k[0].find("00") != 0 and k[0].find("60") != 0: + continue + if code_limit_up_reason_dict.get(k[0]) == block: + if k[0] != code: + # 浠g爜.娑ㄥ仠鏃堕棿 + block_codes_infos.append((k[0], int(k[2]))) else: - limit_up_time = int(k[5]) + limit_up_time = int(k[2]) block_codes_infos.append((code, limit_up_time)) block_codes_infos.sort(key=lambda x: x[1]) for i in range(0, len(block_codes_infos)): -- Gitblit v1.8.0