修复部分巡查bug
This commit is contained in:
parent
fcb6fd6117
commit
5dcba9822f
|
|
@ -265,7 +265,7 @@ def query_cross_index_trend_controller(params):
|
||||||
roads_dir_dict = gen_road_dir_dict(cross_ledger_info)
|
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)
|
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_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)
|
hours_data_with_change_rate = calc_single_day_delay_info_change_rate(hours_data_dict)
|
||||||
|
|
|
||||||
|
|
@ -179,10 +179,11 @@ def gen_avg_cross_delay_pb(cross_delay_data_list):
|
||||||
for flow_delay_info in flow_delay_list:
|
for flow_delay_info in flow_delay_list:
|
||||||
xlink_id = flow_delay_info.xlink_id
|
xlink_id = flow_delay_info.xlink_id
|
||||||
turn_type = flow_delay_info.turn_type
|
turn_type = flow_delay_info.turn_type
|
||||||
if xlink_id not in flow_delay_info_dict:
|
key = str(xlink_id) + '-' + str(turn_type)
|
||||||
flow_delay_info_dict[str(xlink_id) + '-' + str(turn_type)] = [flow_delay_info]
|
if key not in flow_delay_info_dict:
|
||||||
|
flow_delay_info_dict[key] = [flow_delay_info]
|
||||||
else:
|
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():
|
for key in flow_delay_info_dict.keys():
|
||||||
flow_delay_infos = flow_delay_info_dict[key]
|
flow_delay_infos = flow_delay_info_dict[key]
|
||||||
inroadid = flow_delay_infos[0].inroadid
|
inroadid = flow_delay_infos[0].inroadid
|
||||||
|
|
@ -514,7 +515,7 @@ def calc_inroad_imbalance_index(inroad_delay_pb_list):
|
||||||
for item in tmp_list:
|
for item in tmp_list:
|
||||||
max_stop_times, min_stop_times = 0, 99999
|
max_stop_times, min_stop_times = 0, 99999
|
||||||
flow_delay_infos = item.flow_delay_infos
|
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:
|
for flow_delay_info in flow_delay_infos:
|
||||||
if flow_delay_info.delay_info.stop_times > max_stop_times:
|
if flow_delay_info.delay_info.stop_times > max_stop_times:
|
||||||
max_stop_times = flow_delay_info.delay_info.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
|
cross_car_num = item_cross_delay_info.delay_info.car_num
|
||||||
road_delay_infos = item_cross_delay_info.inroad_delay_infos
|
road_delay_infos = item_cross_delay_info.inroad_delay_infos
|
||||||
if data_type != 'week':
|
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:
|
else:
|
||||||
max_stop_times = max(road_delay_infos, key=lambda x: x.delay_info.stop_times).delay_info.stop_times
|
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
|
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):
|
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
|
rate = (flow_data[i] - prev_flow_data[i]) / prev_flow_data[i] * 100 if prev_flow_data[i] > 0 else 0
|
||||||
if rate < -20:
|
if rate < -20:
|
||||||
flow_data[i + 9] = 1
|
|
||||||
elif rate > 20:
|
|
||||||
flow_data[i + 9] = 2
|
flow_data[i + 9] = 2
|
||||||
|
elif rate > 20:
|
||||||
|
flow_data[i + 9] = 1
|
||||||
else:
|
else:
|
||||||
rate = (flow_data[i] - prev_flow_data[i]) / prev_flow_data[i] * 100 if prev_flow_data[i] > 0 else 0
|
rate = (flow_data[i] - prev_flow_data[i]) / prev_flow_data[i] * 100 if prev_flow_data[i] > 0 else 0
|
||||||
if rate > 20:
|
if rate > 20:
|
||||||
flow_data[i + 9] = 1
|
|
||||||
elif rate < -20:
|
|
||||||
flow_data[i + 9] = 2
|
flow_data[i + 9] = 2
|
||||||
|
elif rate < -20:
|
||||||
|
flow_data[i + 9] = 1
|
||||||
return res_data
|
return res_data
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -955,27 +956,32 @@ def gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cros
|
||||||
'item': '运行效率',
|
'item': '运行效率',
|
||||||
'values': []
|
'values': []
|
||||||
}]
|
}]
|
||||||
|
operating_efficiency_problems = {
|
||||||
|
'item': '运行效率',
|
||||||
|
'values': [],
|
||||||
|
'total_num': 0
|
||||||
|
}
|
||||||
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
|
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_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)
|
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 = {
|
sum_num = 0
|
||||||
'item': '运行效率',
|
if high_park_total_num > 0:
|
||||||
'values': [
|
sum_num += high_park_total_num
|
||||||
{
|
operating_efficiency_problems['values'].append({
|
||||||
'item': '多次排队',
|
'item': '多次排队',
|
||||||
'detail': high_park_problems,
|
'detail': high_park_problems,
|
||||||
'reason': '某一进口道转向的多次停车率大于15%',
|
'reason': '某一进口道转向的多次停车率大于15%',
|
||||||
'suggestions': high_park_suggestions
|
'suggestions': high_park_suggestions
|
||||||
},
|
})
|
||||||
{
|
if high_stop_times_total_num > 0:
|
||||||
|
sum_num += high_stop_times_total_num
|
||||||
|
operating_efficiency_problems['values'].append({
|
||||||
'item': '停车较多',
|
'item': '停车较多',
|
||||||
'detail': high_stop_times_problems,
|
'detail': high_stop_times_problems,
|
||||||
'reason': '高峰时段路口停车次数大于2次,非高峰时段停车次数大于1次',
|
'reason': '高峰时段路口停车次数大于2次,非高峰时段停车次数大于1次',
|
||||||
'suggestions': high_stop_times_suggestions
|
'suggestions': high_stop_times_suggestions
|
||||||
}
|
})
|
||||||
],
|
operating_efficiency_problems['total_num'] = sum_num
|
||||||
'total_num': high_park_total_num + high_stop_times_total_num
|
|
||||||
}
|
|
||||||
return operating_efficiency_problems
|
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)
|
cross_tide_problems, cross_tide_suggestions, cross_tide_total_num = gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict)
|
||||||
balanced_control_problems = {
|
balanced_control_problems = {
|
||||||
'item': '均衡调控',
|
'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': '路口失衡',
|
'item': '路口失衡',
|
||||||
'detail': cross_imbalance_detail,
|
'detail': cross_imbalance_detail,
|
||||||
'reason': '路口存在某个流向绿灯时长不足而另一个方向绿灯存在空放的现象',
|
'reason': '路口存在某个流向绿灯时长不足而另一个方向绿灯存在空放的现象',
|
||||||
'suggestions': cross_imbalance_suggestions
|
'suggestions': cross_imbalance_suggestions
|
||||||
},
|
}
|
||||||
|
)
|
||||||
|
if turn_imbalance_total_num > 0:
|
||||||
|
sum_num += turn_imbalance_total_num
|
||||||
|
balanced_control_problems['values'].append(
|
||||||
{
|
{
|
||||||
'item': '转向失衡',
|
'item': '转向失衡',
|
||||||
'detail': turn_imbalance_detail,
|
'detail': turn_imbalance_detail,
|
||||||
'reason': '同一进口道,直行与左转停车次数之差的绝对值大于0.5,且转向停车次数的最大值大于1',
|
'reason': '同一进口道,直行与左转停车次数之差的绝对值大于0.5,且转向停车次数的最大值大于1',
|
||||||
'suggestions': turn_imbalance_suggestions
|
'suggestions': turn_imbalance_suggestions
|
||||||
},
|
}
|
||||||
|
)
|
||||||
|
if cross_tide_total_num > 0:
|
||||||
|
sum_num += cross_tide_total_num
|
||||||
|
balanced_control_problems['values'].append(
|
||||||
{
|
{
|
||||||
'item': '路口潮汐',
|
'item': '路口潮汐',
|
||||||
'detail': cross_tide_problems,
|
'detail': cross_tide_problems,
|
||||||
'reason': '对向进口道,早高峰其中一个方向的进口道与出口道流量比大于150%,晚高峰另一个方向进口道与出口道流量比大于150%',
|
'reason': '对向进口道,早高峰其中一个方向的进口道与出口道流量比大于150%,晚高峰另一个方向进口道与出口道流量比大于150%',
|
||||||
'suggestions': cross_tide_suggestions
|
'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
|
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)
|
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 = {
|
cross_channelized_problems = {
|
||||||
'item': '路口渠化',
|
'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': '车道资源不匹配',
|
'item': '车道资源不匹配',
|
||||||
'detail': inroad_num_detail,
|
'detail': inroad_num_detail,
|
||||||
'reason': '同一进口道,直行或左转的流量占比大于50%,且相对流量占比大于60%,且车道数量占比小于流量占比的一半(多方向放行车道每个方向各算0.5)',
|
'reason': '同一进口道,直行或左转的流量占比大于50%,且相对流量占比大于60%,且车道数量占比小于流量占比的一半(多方向放行车道每个方向各算0.5)',
|
||||||
'suggestions': inroad_num_suggestion
|
'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': '进出口车道数不匹配',
|
'item': '进出口车道数不匹配',
|
||||||
'detail': inout_lane_num_gap_problems,
|
'detail': inout_lane_num_gap_problems,
|
||||||
'reason': '进口道车道数比对向的出口道车道数多2',
|
'reason': '进口道车道数比对向的出口道车道数多2',
|
||||||
'suggestions': inout_lane_num_gap_suggestions
|
'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
|
return cross_channelized_problems
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue