From 9d53994f651d981d2625562bc237f9c8cb5ca6ad Mon Sep 17 00:00:00 2001 From: wangxu <1318272526@qq.com> Date: Tue, 9 Dec 2025 11:05:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A1=E6=A3=80=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cross_compare_worker.py | 7 +++++-- app/cross_evaluate_worker.py | 21 +++++++++++++++------ app/cross_monitor_worker.py | 2 +- app/eva_common.py | 18 ++++++++++-------- app/global_source.py | 4 ++-- app/monitor_common.py | 3 ++- 6 files changed, 35 insertions(+), 20 deletions(-) diff --git a/app/cross_compare_worker.py b/app/cross_compare_worker.py index c4f230d..092b9e3 100644 --- a/app/cross_compare_worker.py +++ b/app/cross_compare_worker.py @@ -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) diff --git a/app/cross_evaluate_worker.py b/app/cross_evaluate_worker.py index 62ec449..ef519b2 100644 --- a/app/cross_evaluate_worker.py +++ b/app/cross_evaluate_worker.py @@ -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,7 +253,10 @@ 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, '缺少时段范围,请选择时段范围')) - query_type= check_param(params, 'query_type') + 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 tp_start = int(str(time_range.split('-')[0]).split(':')[0]) * 100 + int(str(time_range.split('-')[0]).split(':')[1]) @@ -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, diff --git a/app/cross_monitor_worker.py b/app/cross_monitor_worker.py index 94f913b..903cee6 100644 --- a/app/cross_monitor_worker.py +++ b/app/cross_monitor_worker.py @@ -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, diff --git a/app/eva_common.py b/app/eva_common.py index bdb6c7b..e12ed5b 100644 --- a/app/eva_common.py +++ b/app/eva_common.py @@ -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()} diff --git a/app/global_source.py b/app/global_source.py index 400ede0..b07544a 100644 --- a/app/global_source.py +++ b/app/global_source.py @@ -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' } diff --git a/app/monitor_common.py b/app/monitor_common.py index 93a6073..0e975fc 100644 --- a/app/monitor_common.py +++ b/app/monitor_common.py @@ -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]]