From 800cb9fcee1dccaf83b468556bbdb96e5d3723c6 Mon Sep 17 00:00:00 2001 From: yinzijian Date: Wed, 3 Dec 2025 18:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=B9=E9=85=8D=E6=97=B6?= =?UTF-8?q?=E6=AE=B5=E5=A2=9E=E5=8A=A0=E7=9B=B8=E4=BD=8D=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yinzijian --- app/cross_compare_common.py | 290 ++++++++++++++++++++++++++++++------ app/cross_compare_worker.py | 5 + app/flow_worker.py | 1 + 3 files changed, 249 insertions(+), 47 deletions(-) diff --git a/app/cross_compare_common.py b/app/cross_compare_common.py index 3e8f9a4..f469f56 100644 --- a/app/cross_compare_common.py +++ b/app/cross_compare_common.py @@ -12,7 +12,8 @@ def gen_compare_overview_res(eva_overview, comp_eva_overview): main_flows_num = len(eva_overview['main_flow_src_desc'].split('、')) comp_main_flows_num = len(comp_eva_overview['main_flow_src_desc'].split('、')) high_stop_turns_num = sum([len(item.split('/')) for item in eva_overview['high_stop_turn_ratio_desc'].split('、')]) - comp_high_stop_turns_num = sum([len(item.split('/')) for item in comp_eva_overview['high_stop_turn_ratio_desc'].split('、')]) + comp_high_stop_turns_num = sum( + [len(item.split('/')) for item in comp_eva_overview['high_stop_turn_ratio_desc'].split('、')]) overview = { 'stop_times': eva_overview['stop_times'], 'comp_stop_times': comp_eva_overview['stop_times'], @@ -22,10 +23,13 @@ def gen_compare_overview_res(eva_overview, comp_eva_overview): 'jam_index_color': calc_index_color(eva_overview['jam_index'], comp_eva_overview['jam_index'], 'jam_index'), 'high_park_percent': eva_overview['high_park_percent'].replace('%', ''), 'comp_high_park_percent': comp_eva_overview['high_park_percent'].replace('%', ''), - 'high_park_percent_color': calc_index_color(float(eva_overview['high_park_percent'].replace('%', '')), float(comp_eva_overview['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'high_park_percent_color': calc_index_color(float(eva_overview['high_park_percent'].replace('%', '')), + float(comp_eva_overview['high_park_percent'].replace('%', '')), + 'high_park_percent'), 'imbalance_index': eva_overview['imbalance_index'], 'comp_imbalance_index': comp_eva_overview['imbalance_index'], - 'imbalance_index_color': calc_index_color(eva_overview['imbalance_index'], comp_eva_overview['imbalance_index'], 'imbalance_index'), + 'imbalance_index_color': calc_index_color(eva_overview['imbalance_index'], comp_eva_overview['imbalance_index'], + 'imbalance_index'), 'speed': eva_overview['speed'], 'comp_speed': comp_eva_overview['speed'], 'speed_color': calc_index_color(eva_overview['speed'], comp_eva_overview['speed'], 'speed'), @@ -75,7 +79,8 @@ def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos): 'item': '优化前', 'service_level': comp_inroad_delay_infos[key]['service_level'] if key in comp_inroad_data_keys else '-', 'stop_times': comp_inroad_delay_infos[key]['stop_times'] if key in comp_inroad_data_keys else '-', - 'high_park_percent': comp_inroad_delay_infos[key]['high_park_percent'] if key in comp_inroad_data_keys else '-', + 'high_park_percent': comp_inroad_delay_infos[key][ + 'high_park_percent'] if key in comp_inroad_data_keys else '-', 'imbalance_index': comp_inroad_delay_infos[key]['imbalance_index'] if key in comp_inroad_data_keys else '-', 'park_time': comp_inroad_delay_infos[key]['park_time'] if key in comp_inroad_data_keys else '-', 'delay_time': comp_inroad_delay_infos[key]['delay_time'] if key in comp_inroad_data_keys else '-', @@ -95,21 +100,47 @@ def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos): } diff_data = { 'item': '变化量', - 'service_level': '-' if item_data['service_level'] == '-' or comp_data['service_level'] == '-' else compare_level(item_data['service_level'], comp_data['service_level']), - 'stop_times': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else round(item_data['stop_times'] - comp_data['stop_times'], 2), - 'high_park_percent': '-' if item_data['high_park_percent'] == '-' or comp_data['high_park_percent'] == '-' else round(float(item_data['high_park_percent'].replace('%', '')) - float(comp_data['high_park_percent'].replace('%', '')), 2), - 'imbalance_index': '-' if item_data['imbalance_index'] == '-' or comp_data['imbalance_index'] == '-' else round(item_data['imbalance_index'] - comp_data['imbalance_index'], 2), - 'park_time': '-' if item_data['park_time'] == '-' or comp_data['park_time'] == '-' else item_data['park_time'] - comp_data['park_time'], - 'delay_time': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else item_data['delay_time'] - comp_data['delay_time'], - 'speed': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else round(item_data['speed'] - comp_data['speed'], 2), - 'move_speed': '-' if item_data['move_speed'] == '-' or comp_data['move_speed'] == '-' else round(item_data['move_speed'] - comp_data['move_speed'], 2), - 'stop_times_color': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else calc_index_color(item_data['stop_times'], comp_data['stop_times'], 'stop_times'), - 'high_park_percent_color': '-' if item_data['high_park_percent'] == '-' or comp_data['high_park_percent'] == '-' else calc_index_color(float(item_data['high_park_percent'].replace('%', '')), float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), - 'imbalance_index_color': '-' if item_data['imbalance_index'] == '-' or comp_data['imbalance_index'] == '-' else calc_index_color(item_data['imbalance_index'], comp_data['imbalance_index'], 'imbalance_index'), - 'park_time_color': '-' if item_data['park_time'] == '-' or comp_data['park_time'] == '-' else calc_index_color(item_data['park_time'], comp_data['park_time'], 'park_time'), - 'delay_time_color': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else calc_index_color(item_data['delay_time'], comp_data['delay_time'], 'delay_time'), - 'speed_color': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else calc_index_color(item_data['speed'], comp_data['speed'], 'speed'), - 'move_speed_color': '-' if item_data['move_speed'] == '-' or comp_data['move_speed'] == '-' else calc_index_color(item_data['move_speed'], comp_data['move_speed'], 'move_speed') + 'service_level': '-' if item_data['service_level'] == '-' or comp_data[ + 'service_level'] == '-' else compare_level(item_data['service_level'], comp_data['service_level']), + 'stop_times': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else round( + item_data['stop_times'] - comp_data['stop_times'], 2), + 'high_park_percent': '-' if item_data['high_park_percent'] == '-' or comp_data[ + 'high_park_percent'] == '-' else round(float(item_data['high_park_percent'].replace('%', '')) - float( + comp_data['high_park_percent'].replace('%', '')), 2), + 'imbalance_index': '-' if item_data['imbalance_index'] == '-' or comp_data[ + 'imbalance_index'] == '-' else round(item_data['imbalance_index'] - comp_data['imbalance_index'], 2), + 'park_time': '-' if item_data['park_time'] == '-' or comp_data['park_time'] == '-' else item_data[ + 'park_time'] - + comp_data[ + 'park_time'], + 'delay_time': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else item_data[ + 'delay_time'] - + comp_data[ + 'delay_time'], + 'speed': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else round( + item_data['speed'] - comp_data['speed'], 2), + 'move_speed': '-' if item_data['move_speed'] == '-' or comp_data['move_speed'] == '-' else round( + item_data['move_speed'] - comp_data['move_speed'], 2), + 'stop_times_color': '-' if item_data['stop_times'] == '-' or comp_data[ + 'stop_times'] == '-' else calc_index_color(item_data['stop_times'], comp_data['stop_times'], + 'stop_times'), + 'high_park_percent_color': '-' if item_data['high_park_percent'] == '-' or comp_data[ + 'high_park_percent'] == '-' else calc_index_color( + float(item_data['high_park_percent'].replace('%', '')), + float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'imbalance_index_color': '-' if item_data['imbalance_index'] == '-' or comp_data[ + 'imbalance_index'] == '-' else calc_index_color(item_data['imbalance_index'], + comp_data['imbalance_index'], 'imbalance_index'), + 'park_time_color': '-' if item_data['park_time'] == '-' or comp_data[ + 'park_time'] == '-' else calc_index_color(item_data['park_time'], comp_data['park_time'], 'park_time'), + 'delay_time_color': '-' if item_data['delay_time'] == '-' or comp_data[ + 'delay_time'] == '-' else calc_index_color(item_data['delay_time'], comp_data['delay_time'], + 'delay_time'), + 'speed_color': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else calc_index_color( + item_data['speed'], comp_data['speed'], 'speed'), + 'move_speed_color': '-' if item_data['move_speed'] == '-' or comp_data[ + 'move_speed'] == '-' else calc_index_color(item_data['move_speed'], comp_data['move_speed'], + 'move_speed') } turn_type = inroad_delay_infos[key]['flow_delays'].keys() comp_turn_type = comp_inroad_delay_infos[key]['flow_delays'].keys() @@ -118,39 +149,74 @@ def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos): for item_turn in all_turn_type: flow_comp_data = { 'item': '优化前', - 'service_level': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['service_level'] if item_turn in comp_turn_type else '-', - 'stop_times': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['stop_times'] if item_turn in comp_turn_type else '-', - 'high_park_percent': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['high_park_percent'] if item_turn in comp_turn_type else '-', - 'park_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['park_time'] if item_turn in comp_turn_type else '-', - 'delay_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['delay_time'] if item_turn in comp_turn_type else '-', - 'speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['speed'] if item_turn in comp_turn_type else '-', - 'move_speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['move_speed'] if item_turn in comp_turn_type else '-' + 'service_level': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'service_level'] if item_turn in comp_turn_type else '-', + 'stop_times': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'stop_times'] if item_turn in comp_turn_type else '-', + 'high_park_percent': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'high_park_percent'] if item_turn in comp_turn_type else '-', + 'park_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'park_time'] if item_turn in comp_turn_type else '-', + 'delay_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'delay_time'] if item_turn in comp_turn_type else '-', + 'speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'speed'] if item_turn in comp_turn_type else '-', + 'move_speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn][ + 'move_speed'] if item_turn in comp_turn_type else '-' } flow_item_data = { 'item': '优化后', - 'service_level': inroad_delay_infos[key]['flow_delays'][item_turn]['service_level'] if item_turn in turn_type else '-', - 'stop_times': inroad_delay_infos[key]['flow_delays'][item_turn]['stop_times'] if item_turn in turn_type else '-', - 'high_park_percent': inroad_delay_infos[key]['flow_delays'][item_turn]['high_park_percent'] if item_turn in turn_type else '-', - 'park_time': inroad_delay_infos[key]['flow_delays'][item_turn]['park_time'] if item_turn in turn_type else '-', - 'delay_time': inroad_delay_infos[key]['flow_delays'][item_turn]['delay_time'] if item_turn in turn_type else '-', + 'service_level': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'service_level'] if item_turn in turn_type else '-', + 'stop_times': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'stop_times'] if item_turn in turn_type else '-', + 'high_park_percent': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'high_park_percent'] if item_turn in turn_type else '-', + 'park_time': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'park_time'] if item_turn in turn_type else '-', + 'delay_time': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'delay_time'] if item_turn in turn_type else '-', 'speed': inroad_delay_infos[key]['flow_delays'][item_turn]['speed'] if item_turn in turn_type else '-', - 'move_speed': inroad_delay_infos[key]['flow_delays'][item_turn]['move_speed'] if item_turn in turn_type else '-' + 'move_speed': inroad_delay_infos[key]['flow_delays'][item_turn][ + 'move_speed'] if item_turn in turn_type else '-' } flow_diff_data = { 'item': '变化量', - 'service_level': '-' if flow_comp_data['service_level'] == '-' or flow_item_data['service_level'] == '-' else compare_level(flow_comp_data['service_level'], flow_item_data['service_level']), - 'stop_times': '-' if flow_comp_data['stop_times'] == '-' or flow_item_data['stop_times'] == '-' else round(flow_comp_data['stop_times'] - flow_item_data['stop_times'], 2), - 'high_park_percent': '-' if flow_comp_data['high_park_percent'] == '-' or flow_item_data['high_park_percent'] == '-' else round(float(flow_comp_data['high_park_percent'].replace('%', '')) - float(flow_item_data['high_park_percent'].replace('%', '')), 2), - 'park_time': '-' if flow_comp_data['park_time'] == '-' or flow_item_data['park_time'] == '-' else round(flow_comp_data['park_time'] - flow_item_data['park_time'], 2), - 'delay_time': '-' if flow_comp_data['delay_time'] == '-' or flow_item_data['delay_time'] == '-' else round(flow_comp_data['delay_time'] - flow_item_data['delay_time'], 2), - 'speed': '-' if flow_comp_data['speed'] == '-' or flow_item_data['speed'] == '-' else round(flow_comp_data['speed'] - flow_item_data['speed'], 2), - 'move_speed': '-' if flow_comp_data['move_speed'] == '-' or flow_item_data['move_speed'] == '-' else round(flow_comp_data['move_speed'] - flow_item_data['move_speed'], 2), - 'stop_times_color': '-' if flow_item_data['stop_times'] == '-' or flow_comp_data['stop_times'] == '-' else calc_index_color(flow_item_data['stop_times'], flow_comp_data['stop_times'], 'stop_times'), - 'high_park_percent_color': '-' if flow_item_data['high_park_percent'] == '-' or flow_comp_data['high_park_percent'] == '-' else calc_index_color(float(flow_item_data['high_park_percent'].replace('%', '')), float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), - 'park_time_color': '-' if flow_item_data['park_time'] == '-' or flow_comp_data['park_time'] == '-' else calc_index_color(flow_item_data['park_time'], flow_comp_data['park_time'], 'park_time'), - 'delay_time_color': '-' if flow_item_data['delay_time'] == '-' or flow_comp_data['delay_time'] == '-' else calc_index_color(flow_item_data['delay_time'], flow_comp_data['delay_time'], 'delay_time'), - 'speed_color': '-' if flow_item_data['speed'] == '-' or flow_comp_data['speed'] == '-' else calc_index_color(flow_item_data['speed'], flow_comp_data['speed'], 'speed'), - 'move_speed_color': '-' if flow_item_data['move_speed'] == '-' or flow_comp_data['move_speed'] == '-' else calc_index_color(flow_item_data['move_speed'], flow_comp_data['move_speed'], 'move_speed') + 'service_level': '-' if flow_comp_data['service_level'] == '-' or flow_item_data[ + 'service_level'] == '-' else compare_level(flow_comp_data['service_level'], + flow_item_data['service_level']), + 'stop_times': '-' if flow_comp_data['stop_times'] == '-' or flow_item_data[ + 'stop_times'] == '-' else round(flow_comp_data['stop_times'] - flow_item_data['stop_times'], 2), + 'high_park_percent': '-' if flow_comp_data['high_park_percent'] == '-' or flow_item_data[ + 'high_park_percent'] == '-' else round( + float(flow_comp_data['high_park_percent'].replace('%', '')) - float( + flow_item_data['high_park_percent'].replace('%', '')), 2), + 'park_time': '-' if flow_comp_data['park_time'] == '-' or flow_item_data['park_time'] == '-' else round( + flow_comp_data['park_time'] - flow_item_data['park_time'], 2), + 'delay_time': '-' if flow_comp_data['delay_time'] == '-' or flow_item_data[ + 'delay_time'] == '-' else round(flow_comp_data['delay_time'] - flow_item_data['delay_time'], 2), + 'speed': '-' if flow_comp_data['speed'] == '-' or flow_item_data['speed'] == '-' else round( + flow_comp_data['speed'] - flow_item_data['speed'], 2), + 'move_speed': '-' if flow_comp_data['move_speed'] == '-' or flow_item_data[ + 'move_speed'] == '-' else round(flow_comp_data['move_speed'] - flow_item_data['move_speed'], 2), + 'stop_times_color': '-' if flow_item_data['stop_times'] == '-' or flow_comp_data[ + 'stop_times'] == '-' else calc_index_color(flow_item_data['stop_times'], + flow_comp_data['stop_times'], 'stop_times'), + 'high_park_percent_color': '-' if flow_item_data['high_park_percent'] == '-' or flow_comp_data[ + 'high_park_percent'] == '-' else calc_index_color( + float(flow_item_data['high_park_percent'].replace('%', '')), + float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'park_time_color': '-' if flow_item_data['park_time'] == '-' or flow_comp_data[ + 'park_time'] == '-' else calc_index_color(flow_item_data['park_time'], flow_comp_data['park_time'], + 'park_time'), + 'delay_time_color': '-' if flow_item_data['delay_time'] == '-' or flow_comp_data[ + 'delay_time'] == '-' else calc_index_color(flow_item_data['delay_time'], + flow_comp_data['delay_time'], 'delay_time'), + 'speed_color': '-' if flow_item_data['speed'] == '-' or flow_comp_data[ + 'speed'] == '-' else calc_index_color(flow_item_data['speed'], flow_comp_data['speed'], 'speed'), + 'move_speed_color': '-' if flow_item_data['move_speed'] == '-' or flow_comp_data[ + 'move_speed'] == '-' else calc_index_color(flow_item_data['move_speed'], + flow_comp_data['move_speed'], 'move_speed') } flow_delay_datas[item_turn] = { 'item_data': flow_item_data, @@ -158,7 +224,8 @@ def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos): 'diff_data': flow_diff_data } res[key] = { - 'src_dir': inroad_delay_infos[key]['src_dir'] if 'src_dir' in inroad_delay_infos[key] else comp_inroad_delay_infos[key]['src_dir'], + 'src_dir': inroad_delay_infos[key]['src_dir'] if 'src_dir' in inroad_delay_infos[key] else + comp_inroad_delay_infos[key]['src_dir'], 'dir_data': { 'item_data': item_data, 'comp_data': comp_data, @@ -199,4 +266,133 @@ def find_job_info(key, value_list): # # 检查是否包含关键字 # elif key in value['wave_name']: # result.append(value) - return result \ No newline at end of file + return result + + +def query_compare_data_export_excel(road_flow_delay_infos): + wb = Workbook() + sheet1 = wb.active + sheet1.title = "调度计划表" # 给第一个 sheet 命名 + table_head = [ + {"range": "A1:A2", "value": "路口名称"}, + {"range": "B1:B2", "value": "进口道"}, + {"range": "C1:C2", "value": "对比"}, + {"range": "D1:D2", "value": "服务水平"}, + {"range": "E1:F1", "value": "转向服务水平"}, + {"range": "E2", "value": "左转", "width": 10}, + {"range": "F2", "value": "直行", "width": 10}, + {"range": "G1:G2", "value": "停车次数"}, + {"range": "H1:I1", "value": "转向停车次数"}, + {"range": "H2", "value": "左转"}, + {"range": "I2", "value": "直行"}, + {"range": "J1", "value": "多次停车率"}, + # {"range": "K1:L1", "value": "转向多次停车率", "width": 20}, + # {"range": "M1", "value": "行程时间(s)"}, + # {"range": "N1:O1", "value": "延误时间(s)", "width": 20}, + # {"range": "P1:Q1", "value": "转向延误时间(s)"}, + # {"range": "L2", "value": "左转"}, + # {"range": "M2", "value": "直行"}, + # {"range": "N1:N2", "value": "平均速度(km/h)", "width": 20}, + # {"range": "O1:P1", "value": "转向平均速度(km/h)"}, + # {"range": "O2", "value": "左转"}, + # {"range": "P2", "value": "直行"}, + # {"range": "Q1:Q2", "value": "不停车速度(km/h)", "width": 20}, + # {"range": "R1:S1", "value": "转向不停车速度"}, + # {"range": "R2", "value": "左转"}, + # {"range": "S2", "value": "直行"}, + # {"range": "T1:T2", "value": "进口道流量占比","width": 20}, + # {"range": "U1:W1", "value": "分流转向占比"}, + # {"range": "U2", "value": "左转"}, + # {"range": "V2", "value": "直行"}, + # {"range": "W2", "value": "右转"}, + # {"range": "X1:X2", "value": "出口道流量占比","width": 20}, + # {"range": "Y1:AA1", "value": "汇入转向占比"}, + # {"range": "Y2", "value": "左转"}, + # {"range": "Z2", "value": "直行"}, + # {"range": "AA2", "value": "右转"}, + # {"range": "AB1:AB2", "value": "转向失衡系数","width": 20}, + ] + + for item_head in table_head: + sheet1.merge_cells(item_head['range']) + cell = item_head['range'].split(":")[0] + sheet1[cell] = item_head['value'] + sheet1[cell].alignment = Alignment(horizontal='center', vertical='center') + if item_head.get('width'): + sheet1.column_dimensions[cell[:-1]].width = item_head['width'] + + wb.save("test.xlsx") + exit(0) + src_dir_map = {} + for road, item_delay_infos in road_flow_delay_infos.items(): + src_dir = item_delay_infos['src_dir'] + if src_dir not in src_dir_map: + src_dir_map[src_dir] = [] + src_dir_map[src_dir].append(srcDir_toStr(item_delay_infos['src_dir'])) + src_dir_map[src_dir].append(item_delay_infos['service_level']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['service_level'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['service_level'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append(item_delay_infos['stop_times']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['stop_times'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['stop_times'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append(item_delay_infos['high_park_percent']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['high_park_percent'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['high_park_percent'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append(item_delay_infos['delay_time']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['delay_time'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['delay_time'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append(item_delay_infos['speed']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['speed'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['speed'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append(item_delay_infos['move_speed']) + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][1]['move_speed'] if 1 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + item_delay_infos['flow_delays'][0]['move_speed'] if 0 in item_delay_infos['flow_delays'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['in_flow_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'in_flow_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['l_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'l_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['s_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 's_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['r_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'r_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['out_flow_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'out_flow_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['out_l_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'out_l_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['out_s_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'out_s_rate'] else '-') + src_dir_map[src_dir].append( + road_flow_turn_rate[road]['out_r_rate'] if road in road_flow_turn_rate and road_flow_turn_rate[road][ + 'out_r_rate'] else '-') + src_dir_map[src_dir].append(item_delay_infos['imbalance_index']) + src_dir_data = list(src_dir_map.values()) + for item_src_dir_data in src_dir_data: + sheet1.append(item_src_dir_data) + + file_stream = io.BytesIO() + wb.save(file_stream) + file_stream.seek(0) # 将指针移到文件开头 + return send_file( + file_stream, + mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + as_attachment=True, + download_name=f"路口诊断指标.xlsx") diff --git a/app/cross_compare_worker.py b/app/cross_compare_worker.py index 6fece42..a33e90d 100644 --- a/app/cross_compare_worker.py +++ b/app/cross_compare_worker.py @@ -44,6 +44,7 @@ def query_compare_data(params): time_range = check_param(params, 'time_range') if not time_range: return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围')) + export = 1 if check_param(params, 'export') and params['export'] == 1 else 0 tp_start = int(str(time_range.split('-')[0]).split(':')[0]) * 100 + int(str(time_range.split('-')[0]).split(':')[1]) # tp_end = int(str(time_range.split('-')[1]).split(':')[0]) * 100 + int(str(time_range.split('-')[1]).split(':')[1]) # if tp_end == 0: @@ -86,6 +87,10 @@ def query_compare_data(params): 'next_cross_info': prev_cross_info, 'road_flow_delay_infos': compared_inroad_delay_infos } + + # if export == 1: + # return query_compare_data_export_excel(compared_inroad_delay_infos) + return json.dumps(res, ensure_ascii=False) diff --git a/app/flow_worker.py b/app/flow_worker.py index f3665b3..f9e73f7 100644 --- a/app/flow_worker.py +++ b/app/flow_worker.py @@ -498,6 +498,7 @@ def auto_match_phase(params): 'max_green': item_cross_phase_info['max_green'], 'min_green': item_cross_phase_info['min_green'], 'phaseids': item_cross_phase_info['phases'], + 'phases_names': item_cross_phase_info['phase_name'], 'redyellow': item_cross_phase_info['redyellow'], 'stage_duration': item_cross_phase_info['stage_duration'], 'yellow': item_cross_phase_info['yellow'],