优化巡检页面查询逻辑

This commit is contained in:
wangxu 2025-12-09 11:05:30 +08:00
parent 5e0fe98325
commit 9d53994f65
6 changed files with 35 additions and 20 deletions

View File

@ -44,6 +44,9 @@ def query_compare_data(params):
time_range = check_param(params, 'time_range')
if not time_range:
return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围'))
weekdays = check_param(params, 'weekdays')
if not weekdays:
weekdays = '1,2,3,4,5,6,7'
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])
@ -54,11 +57,11 @@ def query_compare_data(params):
elif query_type == 2:
tp_start = 'h' + str(tp_start)
cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, date_list, tp_start)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list, weekdays)
if not avg_cross_delay_info:
return json.dumps(make_common_res(9, '当前所选日期范围内该评测时段无可用数据'))
comp_cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, compare_date_list, tp_start)
avg_comp_cross_delay_info = gen_avg_cross_delay_pb(comp_cross_delay_data_list)
avg_comp_cross_delay_info = gen_avg_cross_delay_pb(comp_cross_delay_data_list, weekdays)
if not avg_comp_cross_delay_info:
return json.dumps(make_common_res(10, '当前所选对比日期范围内该评测时段无可用数据'))
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)

View File

@ -118,6 +118,9 @@ def query_cross_delay_info_controller(params):
time_range = check_param(params, 'time_range')
if not time_range:
return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围'))
weekdays = check_param(params, 'weekdays')
if not weekdays:
weekdays = '1,2,3,4,5,6,7'
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:
@ -127,7 +130,7 @@ def query_cross_delay_info_controller(params):
elif query_type == 2:
tp_start = 'h' + str(tp_start)
cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, date_list, tp_start)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list, weekdays)
if not avg_cross_delay_info:
return json.dumps(make_common_res(9, '当前所选日期范围内该评测时段无可用数据'))
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)
@ -193,13 +196,16 @@ def query_cross_problems(params):
time_range = check_param(params, 'time_range')
if not time_range:
return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围'))
weekdays = check_param(params, 'weekdays')
if not weekdays:
weekdays = '1,2,3,4,5,6,7'
tp_start = int(str(time_range.split('-')[0]).split(':')[0]) * 100 + int(str(time_range.split('-')[0]).split(':')[1])
if query_type == 1:
tp_start = 't' + str(tp_start)
elif query_type == 2:
tp_start = 'h' + str(tp_start)
cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, date_list, tp_start)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list)
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list, weekdays)
if not avg_cross_delay_info:
return json.dumps(make_common_res(9, '当前所选日期范围内该评测时段无可用数据'))
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)
@ -215,7 +221,7 @@ def query_cross_problems(params):
cross_phase, err = QueryCrossRunningPhase(int(nodeid), [crossid], [str(item) for item in date_list], time_range)
if err or not cross_phase or cross_phase.code != 0:
logging.warning("路口未录入配时方案")
problems = gen_cross_problems(crossid, nodeid, area_id, time_range, str(tp_start).replace('h', '').replace('t', ''), date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info)
problems = gen_cross_problems(crossid, nodeid, area_id, time_range, str(tp_start).replace('h', '').replace('t', ''), date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info, weekdays)
res = make_common_res(0, 'ok')
res['data'] = problems
return json.dumps(res, ensure_ascii=False)
@ -247,6 +253,9 @@ def query_cross_index_trend_controller(params):
time_range = check_param(params, 'time_range')
if not time_range:
return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围'))
weekdays = check_param(params, 'weekdays')
if not weekdays:
weekdays = '1,2,3,4,5,6,7'
query_type = check_param(params, 'query_type')
if not query_type:
query_type = 0
@ -273,7 +282,7 @@ def query_cross_index_trend_controller(params):
hours_data_list = []
for tp in ('h0', 'h100', 'h200', 'h300', 'h400', 'h500', 'h600', 'h700', 'h800', 'h900', 'h1000', 'h1100', 'h1200', 'h1300', 'h1400', 'h1500', 'h1600', 'h1700', 'h1800', 'h1900', 'h2000', 'h2100', 'h2200', 'h2300'):
hour_data = db_cross.query_cross_delay_info(crossid, nodeid, date_list, tp)
hour_cross_delay_info = gen_avg_cross_delay_pb(hour_data)
hour_cross_delay_info = gen_avg_cross_delay_pb(hour_data, weekdays)
hour_tp_end = int(tp.replace('h', '')) + 100
hours_data_list.append({
'day': str(date_list[0]) + '-' + str(date_list[-1]),
@ -294,7 +303,7 @@ def query_cross_index_trend_controller(params):
ten_week_datas = []
for week_dates in ten_weeks_date_list:
weeks_data = db_cross.query_cross_delay_info(crossid, nodeid, week_dates, tp_start)
week_cross_delay_info = gen_avg_cross_delay_pb(weeks_data)
week_cross_delay_info = gen_avg_cross_delay_pb(weeks_data, weekdays)
ten_week_datas.append({
'day': week_dates[0] + '-' + week_dates[-1],
'tp_start': tp_start,

View File

@ -204,7 +204,7 @@ def query_cross_tp_data_trend(params):
data_list = []
for week_dates in date_list:
week_data = db_cross.query_cross_delay_info(crossid, nodeid, week_dates, tp_start)
week_cross_delay_info = gen_avg_cross_delay_pb(week_data)
week_cross_delay_info = gen_avg_cross_delay_pb(week_data, weekdays)
data_list.append({
'day': week_dates[0] + '-' + week_dates[-1],
'tp_start': tp_start,

View File

@ -47,7 +47,7 @@ int_cross_model2str = {
}
def gen_avg_cross_delay_pb(cross_delay_data_list):
def gen_avg_cross_delay_pb(cross_delay_data_list, weekdays):
"""
路口评价指标数据聚合
:param cross_delay_data_list:
@ -55,6 +55,8 @@ def gen_avg_cross_delay_pb(cross_delay_data_list):
"""
cross_delay_pb_list = []
for item in cross_delay_data_list:
if str(datetime.strptime(str(item['day']), '%Y%m%d').weekday() + 1) not in weekdays:
continue
item_delay_pb = pb.xl_cross_delayinfo_t()
item_delay_pb.ParseFromString(item['data'])
cross_delay_pb_list.append(item_delay_pb)
@ -1226,10 +1228,10 @@ def parse_data2pb(data_list):
# 生成路口诊断问题
def gen_cross_problems(crossid, nodeid, area_id, time_range, start_hm, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info):
def gen_cross_problems(crossid, nodeid, area_id, time_range, start_hm, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info, weekdays):
# 运行效率、均衡调控、配时方案、路口渠化
operating_efficiency_problems = gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cross_phase, is_peak)
balanced_control_problems = gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase)
balanced_control_problems = gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, weekdays)
phase_problems = gen_phase_problems(nodeid, area_id, crossid, time_range, date_list, min(date_list), max(date_list), start_hm)
cross_channelized_problems = gen_cross_channelized_problems(avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_ledger_info, time_range)
problems = {
@ -1377,11 +1379,11 @@ def gen_high_stop_time_problems(avg_cross_delay_info, is_peak):
# 均衡调控
def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase):
def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, weekdays):
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
cross_imbalance_detail, cross_imbalance_suggestions, cross_imbalance_total_num = gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase)
turn_imbalance_detail, turn_imbalance_suggestions, turn_imbalance_total_num = gen_turn_imbalance_problems(road_delay_infos, roads_dir_dict, inroad_static_info_dict, cross_phase)
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, weekdays)
balanced_control_problems = {
'item': '均衡调控',
'values': [],
@ -1571,15 +1573,15 @@ def gen_turn_imbalance_problems(road_delay_infos, roads_dir_dict, inroad_static_
# 均衡调控-路口潮汐问题诊断
def gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict):
def gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict, weekdays):
detail = []
suggestions, total_num = [], 0
am_tp_start, am_tp_end = 't700', '900'
pm_tp_start, pm_tp_end = 't1700', '1900'
am_cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, date_list, am_tp_start)
pm_cross_delay_data_list = db_cross.query_cross_delay_info(crossid, nodeid, date_list, pm_tp_start)
am_avg_cross_delay_info = gen_avg_cross_delay_pb(am_cross_delay_data_list)
pm_avg_cross_delay_info = gen_avg_cross_delay_pb(pm_cross_delay_data_list)
am_avg_cross_delay_info = gen_avg_cross_delay_pb(am_cross_delay_data_list, weekdays)
pm_avg_cross_delay_info = gen_avg_cross_delay_pb(pm_cross_delay_data_list, weekdays)
# 构建对向进口道对
subtend_road_pair = gen_subtend_road_pair(roads_dir_dict)
road_src_dict = {v['in']: k for k, v in roads_dir_dict.items()}

View File

@ -54,10 +54,10 @@ g_redisinfo = {
}
g_user_db = {
'host': '82.157.173.20',
'host': '120.53.125.169',
'port': 3306,
'user': 'root',
'password': 'pmenJIn7EaK40oThn~~',
'password': 'pmenJIn7EaK40oThn~~~',
'db': 'user'
}

View File

@ -820,12 +820,13 @@ def gen_high_stop_times_problems(multi_park_crosses, routing_crosses, special_ti
weekdays = parse_wd_bitmap(item.cross_delay.tp.weekday)
weekdays_str = gen_week_str({'weekday': parse_wd_bitmap(item.cross_delay.tp.weekday)})
tp_type = item.cross_delay.tp.type
flow_num = len(item.target_flows)
flow_num = 0
dir_flow_dict = {}
for flow in item.target_flows:
inroadid = flow.inroadid
if inroadid not in road_dir:
continue
flow_num += 1
src_dir = road_dir[inroadid]
if src_dir not in dir_flow_dict:
dir_flow_dict[src_dir] = [int_turn_type2str[flow.turn_type]]