20251230 解决更新路网文件导致出现新旧延误数据中存在路段id不一致返回结果异常的补丁

This commit is contained in:
wangxu 2025-12-30 15:32:58 +08:00
parent 7362b32e68
commit a45262eeb0
4 changed files with 83 additions and 3 deletions

View File

@ -327,6 +327,7 @@ def init_with_config():
if config.has_section('executive'): if config.has_section('executive'):
if config.has_option('executive', 'userid'): if config.has_option('executive', 'userid'):
g_config['executives'] = config.get('executive', 'userid').split(',') g_config['executives'] = config.get('executive', 'userid').split(',')
load_road_mapping("../common_roadnet/xl_tmnet_mapping_20250831.txt")
# 20250514 探索分词索引查询路口名称 # 20250514 探索分词索引查询路口名称
# full_crossname_inverted_index() # full_crossname_inverted_index()
# gen_cross_info_index(cityinfo_dict) # 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: except ValueError as e:
print(f"日期格式错误: {e}") print(f"日期格式错误: {e}")
return False 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)}")

View File

@ -415,7 +415,9 @@ def query_cross_survey_result(params):
continue continue
item_csr_data = survey_pb.xl_cross_survey_result_t() item_csr_data = survey_pb.xl_cross_survey_result_t()
item_csr_data.ParseFromString(item_data[0]['data']) 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: if inroadid not in road_src_dict:
logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid)) logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid))
continue continue
@ -566,7 +568,9 @@ def query_cross_survey_pngs(params):
continue continue
item_csr_data = survey_pb.xl_cross_survey_result_t() item_csr_data = survey_pb.xl_cross_survey_result_t()
item_csr_data.ParseFromString(item_data[0]['data']) 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: if inroadid not in road_src_dict:
logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid)) logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid))
continue continue

View File

@ -60,6 +60,19 @@ def gen_avg_cross_delay_pb(cross_delay_data_list, weekdays):
continue continue
item_delay_pb = pb.xl_cross_delayinfo_t() item_delay_pb = pb.xl_cross_delayinfo_t()
item_delay_pb.ParseFromString(item['data']) 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) cross_delay_pb_list.append(item_delay_pb)
avg_cross_delay = None avg_cross_delay = None
if len(cross_delay_pb_list) == 0: 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_am_cross_delay_info = pb.xl_cross_delayinfo_t()
item_pm_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]) 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]) 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: if not item_am_cross_delay_info or not item_pm_cross_delay_info:
tide_index_list.append(tide_index) tide_index_list.append(tide_index)
continue continue
@ -1219,6 +1258,19 @@ def parse_data2pb(data_list, weekdays):
tp_end = row['tp_end'] tp_end = row['tp_end']
item_cross_delay_info = pb.xl_cross_delayinfo_t() item_cross_delay_info = pb.xl_cross_delayinfo_t()
item_cross_delay_info.ParseFromString(row['data']) 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: if str(datetime.strptime(str(day), '%Y%m%d').weekday() + 1) not in weekdays:
item_cross_delay_info = None item_cross_delay_info = None
res_list.append({ res_list.append({

View File

@ -74,6 +74,7 @@ g_citycode_set = set()
g_config = {} g_config = {}
g_info_dict = {} g_info_dict = {}
g_gw_info_dict = {} g_gw_info_dict = {}
g_road_mapping = {}
# #
g_roadnet = RoadNet('China') g_roadnet = RoadNet('China')