From a45262eeb0a88a2e35f49134f22278bf54199afa Mon Sep 17 00:00:00 2001 From: wangxu <1318272526@qq.com> Date: Tue, 30 Dec 2025 15:32:58 +0800 Subject: [PATCH] =?UTF-8?q?20251230=20=E8=A7=A3=E5=86=B3=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=B7=AF=E7=BD=91=E6=96=87=E4=BB=B6=E5=AF=BC=E8=87=B4=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E6=96=B0=E6=97=A7=E5=BB=B6=E8=AF=AF=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=AD=E5=AD=98=E5=9C=A8=E8=B7=AF=E6=AE=B5id=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=9C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E8=A1=A5=E4=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common_worker.py | 25 +++++++++++++++++- app/cross_compare_worker.py | 8 ++++-- app/eva_common.py | 52 +++++++++++++++++++++++++++++++++++++ app/global_source.py | 1 + 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/app/common_worker.py b/app/common_worker.py index 6add716..2bf1d42 100644 --- a/app/common_worker.py +++ b/app/common_worker.py @@ -327,6 +327,7 @@ def init_with_config(): if config.has_section('executive'): if config.has_option('executive', 'userid'): g_config['executives'] = config.get('executive', 'userid').split(',') + load_road_mapping("../common_roadnet/xl_tmnet_mapping_20250831.txt") # 20250514 探索分词索引查询路口名称 # full_crossname_inverted_index() # gen_cross_info_index(cityinfo_dict) @@ -532,4 +533,26 @@ def has_duplicate_dates(range1_start, range1_end, range2_start, range2_end): except ValueError as e: print(f"日期格式错误: {e}") - return False \ No newline at end of file + return False + + +def load_road_mapping(mapping_file: str): + with open(mapping_file, 'r', encoding='utf-8') as f: + while True: + line = f.readline() + if not line: + break + fields = line.rstrip('\n').split(' ') + if len(fields) == 3: + tag = fields[0] + if tag == 'in' or tag == 'out': + roadid_old = fields[1] + roadid_new = fields[2] + g_road_mapping[roadid_old] = roadid_new + else: + print(f"Unknown line: {line}") + else: + # 忽略crossid映射 + continue + # 输出道路个数 + print(f"road_mapping_count: {len(g_road_mapping)}") \ No newline at end of file diff --git a/app/cross_compare_worker.py b/app/cross_compare_worker.py index aea5f51..7a6adbc 100644 --- a/app/cross_compare_worker.py +++ b/app/cross_compare_worker.py @@ -415,7 +415,9 @@ def query_cross_survey_result(params): continue item_csr_data = survey_pb.xl_cross_survey_result_t() item_csr_data.ParseFromString(item_data[0]['data']) - inroadid = item_csr_data.inroadid + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + inroadid = item_csr_data.inroadid if item_csr_data.inroadid not in g_road_mapping.keys() else g_road_mapping[item_csr_data.inroadid] + item_csr_data.inroadid = inroadid if inroadid not in road_src_dict: logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid)) continue @@ -566,7 +568,9 @@ def query_cross_survey_pngs(params): continue item_csr_data = survey_pb.xl_cross_survey_result_t() item_csr_data.ParseFromString(item_data[0]['data']) - inroadid = item_csr_data.inroadid + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + inroadid = item_csr_data.inroadid if item_csr_data.inroadid not in g_road_mapping.keys() else g_road_mapping[item_csr_data.inroadid] + item_csr_data.inroadid = inroadid if inroadid not in road_src_dict: logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid)) continue diff --git a/app/eva_common.py b/app/eva_common.py index a33228f..07211e6 100644 --- a/app/eva_common.py +++ b/app/eva_common.py @@ -60,6 +60,19 @@ def gen_avg_cross_delay_pb(cross_delay_data_list, weekdays): continue item_delay_pb = pb.xl_cross_delayinfo_t() item_delay_pb.ParseFromString(item['data']) + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + road_delay_infos = item_delay_pb.inroad_delay_infos + for road_delay_info in road_delay_infos: + new_roadid = road_delay_info.inroadid if road_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[road_delay_info.inroadid] + road_delay_info.inroadid = new_roadid + flow_delay_infos = road_delay_info.flow_delay_infos + for flow_delay_info in flow_delay_infos: + new_roadid = flow_delay_info.inroadid if flow_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[flow_delay_info.inroadid] + flow_delay_info.inroadid = new_roadid + outroadid_infos = item_delay_pb.outroad_infos + for outroadid_info in outroadid_infos: + new_roadid = outroadid_info.outroadid if outroadid_info.outroadid not in g_road_mapping.keys() else g_road_mapping[outroadid_info.outroadid] + outroadid_info.outroadid = new_roadid cross_delay_pb_list.append(item_delay_pb) avg_cross_delay = None if len(cross_delay_pb_list) == 0: @@ -882,7 +895,33 @@ def calc_tide_index(crossid, nodeid, date_list, roads_dir_dict, date_type=None): item_am_cross_delay_info = pb.xl_cross_delayinfo_t() item_pm_cross_delay_info = pb.xl_cross_delayinfo_t() item_am_cross_delay_info.ParseFromString(date_am_delay_info_dict[date]) + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + road_delay_infos = item_am_cross_delay_info.inroad_delay_infos + for road_delay_info in road_delay_infos: + new_roadid = road_delay_info.inroadid if road_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[road_delay_info.inroadid] + road_delay_info.inroadid = new_roadid + flow_delay_infos = road_delay_info.flow_delay_infos + for flow_delay_info in flow_delay_infos: + new_roadid = flow_delay_info.inroadid if flow_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[flow_delay_info.inroadid] + flow_delay_info.inroadid = new_roadid + outroadid_infos = item_am_cross_delay_info.outroad_infos + for outroadid_info in outroadid_infos: + new_roadid = outroadid_info.outroadid if outroadid_info.outroadid not in g_road_mapping.keys() else g_road_mapping[outroadid_info.outroadid] + outroadid_info.outroadid = new_roadid item_pm_cross_delay_info.ParseFromString(date_pm_delay_info_dict[date]) + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + road_delay_infos = item_pm_cross_delay_info.inroad_delay_infos + for road_delay_info in road_delay_infos: + new_roadid = road_delay_info.inroadid if road_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[road_delay_info.inroadid] + road_delay_info.inroadid = new_roadid + flow_delay_infos = road_delay_info.flow_delay_infos + for flow_delay_info in flow_delay_infos: + new_roadid = flow_delay_info.inroadid if flow_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[flow_delay_info.inroadid] + flow_delay_info.inroadid = new_roadid + outroadid_infos = item_pm_cross_delay_info.outroad_infos + for outroadid_info in outroadid_infos: + new_roadid = outroadid_info.outroadid if outroadid_info.outroadid not in g_road_mapping.keys() else g_road_mapping[outroadid_info.outroadid] + outroadid_info.outroadid = new_roadid if not item_am_cross_delay_info or not item_pm_cross_delay_info: tide_index_list.append(tide_index) continue @@ -1219,6 +1258,19 @@ def parse_data2pb(data_list, weekdays): tp_end = row['tp_end'] item_cross_delay_info = pb.xl_cross_delayinfo_t() item_cross_delay_info.ParseFromString(row['data']) + # 20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁 + road_delay_infos = item_cross_delay_info.inroad_delay_infos + for road_delay_info in road_delay_infos: + new_roadid = road_delay_info.inroadid if road_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[road_delay_info.inroadid] + road_delay_info.inroadid = new_roadid + flow_delay_infos = road_delay_info.flow_delay_infos + for flow_delay_info in flow_delay_infos: + new_roadid = flow_delay_info.inroadid if flow_delay_info.inroadid not in g_road_mapping.keys() else g_road_mapping[flow_delay_info.inroadid] + flow_delay_info.inroadid = new_roadid + outroadid_infos = item_cross_delay_info.outroad_infos + for outroadid_info in outroadid_infos: + new_roadid = outroadid_info.outroadid if outroadid_info.outroadid not in g_road_mapping.keys() else g_road_mapping[outroadid_info.outroadid] + outroadid_info.outroadid = new_roadid if str(datetime.strptime(str(day), '%Y%m%d').weekday() + 1) not in weekdays: item_cross_delay_info = None res_list.append({ diff --git a/app/global_source.py b/app/global_source.py index d8bd7de..27f7b45 100644 --- a/app/global_source.py +++ b/app/global_source.py @@ -74,6 +74,7 @@ g_citycode_set = set() g_config = {} g_info_dict = {} g_gw_info_dict = {} +g_road_mapping = {} # g_roadnet = RoadNet('China')