diff --git a/app/cross_evaluate_worker.py b/app/cross_evaluate_worker.py index 1882467..a146ec7 100644 --- a/app/cross_evaluate_worker.py +++ b/app/cross_evaluate_worker.py @@ -265,7 +265,7 @@ def query_cross_index_trend_controller(params): roads_dir_dict = gen_road_dir_dict(cross_ledger_info) # 查询前一天的小时级别数据 - hours_data = db_cross.query_cross_delay_whole_day_hours(crossid, nodeid, prev_date) + hours_data = db_cross.query_cross_delay_whole_day_hours(crossid, nodeid, query_date) hour_pb_list = parse_data2pb(hours_data) hours_data_dict = parse_single_cross_delay_info(crossid, nodeid, hour_pb_list, 'hour', roads_dir_dict) hours_data_with_change_rate = calc_single_day_delay_info_change_rate(hours_data_dict) diff --git a/app/eva_common.py b/app/eva_common.py index a966934..f244f9b 100644 --- a/app/eva_common.py +++ b/app/eva_common.py @@ -179,10 +179,11 @@ def gen_avg_cross_delay_pb(cross_delay_data_list): for flow_delay_info in flow_delay_list: xlink_id = flow_delay_info.xlink_id turn_type = flow_delay_info.turn_type - if xlink_id not in flow_delay_info_dict: - flow_delay_info_dict[str(xlink_id) + '-' + str(turn_type)] = [flow_delay_info] + key = str(xlink_id) + '-' + str(turn_type) + if key not in flow_delay_info_dict: + flow_delay_info_dict[key] = [flow_delay_info] else: - flow_delay_info_dict[str(xlink_id) + '-' + str(turn_type)].append(flow_delay_info) + flow_delay_info_dict[key].append(flow_delay_info) for key in flow_delay_info_dict.keys(): flow_delay_infos = flow_delay_info_dict[key] inroadid = flow_delay_infos[0].inroadid @@ -514,7 +515,7 @@ def calc_inroad_imbalance_index(inroad_delay_pb_list): for item in tmp_list: max_stop_times, min_stop_times = 0, 99999 flow_delay_infos = item.flow_delay_infos - avg_stop_times = sum(flow_delay_info.delay_info.stop_times for flow_delay_info in flow_delay_infos) / len(flow_delay_infos) + avg_stop_times = sum(flow_delay_info.delay_info.stop_times for flow_delay_info in flow_delay_infos) / len(flow_delay_infos) if len(flow_delay_infos) > 0 else 0 for flow_delay_info in flow_delay_infos: if flow_delay_info.delay_info.stop_times > max_stop_times: max_stop_times = flow_delay_info.delay_info.stop_times @@ -721,7 +722,7 @@ def parse_single_cross_delay_info(crossid, nodeid, data_list, data_type, roads_d cross_car_num = item_cross_delay_info.delay_info.car_num road_delay_infos = item_cross_delay_info.inroad_delay_infos if data_type != 'week': - cross_imbalance_index = item_cross_delay_info.delay_info.imbalance_index + cross_imbalance_index = round(item_cross_delay_info.delay_info.imbalance_index, 2) else: max_stop_times = max(road_delay_infos, key=lambda x: x.delay_info.stop_times).delay_info.stop_times min_stop_times = min(road_delay_infos, key=lambda x: x.delay_info.stop_times).delay_info.stop_times @@ -903,15 +904,15 @@ def calc_roads_data_change_rate(roads_data, prev_roads_data): if i in (0, 1, 2, 3, 6, 7): rate = (flow_data[i] - prev_flow_data[i]) / prev_flow_data[i] * 100 if prev_flow_data[i] > 0 else 0 if rate < -20: - flow_data[i + 9] = 1 - elif rate > 20: flow_data[i + 9] = 2 + elif rate > 20: + flow_data[i + 9] = 1 else: rate = (flow_data[i] - prev_flow_data[i]) / prev_flow_data[i] * 100 if prev_flow_data[i] > 0 else 0 if rate > 20: - flow_data[i + 9] = 1 - elif rate < -20: flow_data[i + 9] = 2 + elif rate < -20: + flow_data[i + 9] = 1 return res_data @@ -955,27 +956,32 @@ def gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cros 'item': '运行效率', 'values': [] }] + operating_efficiency_problems = { + 'item': '运行效率', + 'values': [], + 'total_num': 0 + } road_delay_infos = avg_cross_delay_info.inroad_delay_infos high_park_problems, high_park_suggestions, high_park_total_num = gen_high_park_problems(road_delay_infos, roads_dir_dict, cross_phase) high_stop_times_problems, high_stop_times_suggestions, high_stop_times_total_num = gen_high_stop_time_problems(avg_cross_delay_info, is_peak) - operating_efficiency_problems = { - 'item': '运行效率', - 'values': [ - { - 'item': '多次排队', - 'detail': high_park_problems, - 'reason': '某一进口道转向的多次停车率大于15%', - 'suggestions': high_park_suggestions - }, - { - 'item': '停车较多', - 'detail': high_stop_times_problems, - 'reason': '高峰时段路口停车次数大于2次,非高峰时段停车次数大于1次', - 'suggestions': high_stop_times_suggestions - } - ], - 'total_num': high_park_total_num + high_stop_times_total_num - } + sum_num = 0 + if high_park_total_num > 0: + sum_num += high_park_total_num + operating_efficiency_problems['values'].append({ + 'item': '多次排队', + 'detail': high_park_problems, + 'reason': '某一进口道转向的多次停车率大于15%', + 'suggestions': high_park_suggestions + }) + if high_stop_times_total_num > 0: + sum_num += high_stop_times_total_num + operating_efficiency_problems['values'].append({ + 'item': '停车较多', + 'detail': high_stop_times_problems, + 'reason': '高峰时段路口停车次数大于2次,非高峰时段停车次数大于1次', + 'suggestions': high_stop_times_suggestions + }) + operating_efficiency_problems['total_num'] = sum_num return operating_efficiency_problems @@ -1081,28 +1087,41 @@ def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_in cross_tide_problems, cross_tide_suggestions, cross_tide_total_num = gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict) balanced_control_problems = { 'item': '均衡调控', - 'values': [ + 'values': [], + 'total_num': 0 + } + sum_num = 0 + if cross_imbalance_total_num > 0: + sum_num += cross_imbalance_total_num + balanced_control_problems['values'].append( { 'item': '路口失衡', 'detail': cross_imbalance_detail, 'reason': '路口存在某个流向绿灯时长不足而另一个方向绿灯存在空放的现象', 'suggestions': cross_imbalance_suggestions - }, + } + ) + if turn_imbalance_total_num > 0: + sum_num += turn_imbalance_total_num + balanced_control_problems['values'].append( { 'item': '转向失衡', 'detail': turn_imbalance_detail, 'reason': '同一进口道,直行与左转停车次数之差的绝对值大于0.5,且转向停车次数的最大值大于1', 'suggestions': turn_imbalance_suggestions - }, + } + ) + if cross_tide_total_num > 0: + sum_num += cross_tide_total_num + balanced_control_problems['values'].append( { 'item': '路口潮汐', 'detail': cross_tide_problems, 'reason': '对向进口道,早高峰其中一个方向的进口道与出口道流量比大于150%,晚高峰另一个方向进口道与出口道流量比大于150%', 'suggestions': cross_tide_suggestions } - ], - 'total_num': cross_imbalance_total_num + turn_imbalance_total_num + cross_tide_total_num - } + ) + balanced_control_problems['total_num'] = sum_num return balanced_control_problems @@ -1423,22 +1442,31 @@ def gen_cross_channelized_problems(avg_cross_delay_info, roads_dir_dict, inroad_ inout_lane_num_gap_problems, inout_lane_num_gap_suggestions, inout_lane_num_gap_total_num = gen_in_out_lane_num_gap_problems(cross_ledger_info) cross_channelized_problems = { 'item': '路口渠化', - 'values': [ + 'values': [], + 'total_num': 0 + } + sum_num = 0 + if inroad_num_err_total_num > 0: + sum_num += inroad_num_err_total_num + cross_channelized_problems['values'].append( { 'item': '车道资源不匹配', 'detail': inroad_num_detail, 'reason': '同一进口道,直行或左转的流量占比大于50%,且相对流量占比大于60%,且车道数量占比小于流量占比的一半(多方向放行车道每个方向各算0.5)', 'suggestions': inroad_num_suggestion - }, + } + ) + if inout_lane_num_gap_total_num > 0: + sum_num += inout_lane_num_gap_total_num + cross_channelized_problems['values'].append( { 'item': '进出口车道数不匹配', 'detail': inout_lane_num_gap_problems, 'reason': '进口道车道数比对向的出口道车道数多2', 'suggestions': inout_lane_num_gap_suggestions - }, - ], - 'total_num': inroad_num_err_total_num + inout_lane_num_gap_total_num - } + } + ) + cross_channelized_problems['total_num'] = sum_num return cross_channelized_problems