From 901f8b052de4abfa3546b8ddcda01c7644bb8a4f Mon Sep 17 00:00:00 2001 From: wangxu <1318272526@qq.com> Date: Fri, 5 Dec 2025 12:00:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B7=AF=E5=8F=A3=E7=AE=A1?= =?UTF-8?q?=E5=AE=B6=E5=B7=A1=E6=A3=80=E9=A1=B5=E9=9D=A2=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E8=B5=B0=E6=9F=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cross_evaluate_worker.py | 2 -- app/cross_monitor_worker.py | 15 ++++++++-- app/db_cross_delay.py | 12 ++++---- app/monitor_common.py | 53 ++++++++++++++++++++---------------- app/tmnet_db_func.py | 9 ++++-- 5 files changed, 53 insertions(+), 38 deletions(-) diff --git a/app/cross_evaluate_worker.py b/app/cross_evaluate_worker.py index e1d658f..62ec449 100644 --- a/app/cross_evaluate_worker.py +++ b/app/cross_evaluate_worker.py @@ -393,8 +393,6 @@ def query_cross_examine_records_detail(params): else: phase_type_dir_dict[int(item_type)].append(item_detail) days_records[date] = phase_type_dir_dict - last_14_keys = list(days_records.keys())[-14:] - days_records = {k: days_records[k] for k in last_14_keys} res = make_common_res(0, 'ok') res['data'] = { 'days_records': days_records, diff --git a/app/cross_monitor_worker.py b/app/cross_monitor_worker.py index f5552cb..87e2622 100644 --- a/app/cross_monitor_worker.py +++ b/app/cross_monitor_worker.py @@ -308,7 +308,10 @@ def query_monitor_problems(params): else: shield_info['tide'][row['crossid']].append(problem_key) elif problem_key == 'phase_error': - shield_info['phase'].append(row['crossid'] + '^' + row['time_range']) + first_date = row['first_date'] + if not first_date: + continue + shield_info['phase'].append(row['crossid'] + '^' + row['time_range'] + '^' + row['first_date']) elif problem_key in ('sample_sch', 'sample_tp'): key = row['crossid'] + '^' + row['weekdays'] if key not in shield_info['sample'].keys(): @@ -361,15 +364,21 @@ def update_cross_problem_shield_state(params): date_type = check_param(params, 'date_type') if not date_type: return json.dumps(make_common_res(9, '缺少查询日期类型, 请刷新后重试')) + first_date = check_param(params, 'first_date') + if not first_date: + first_date = '' + if problem_key == 'phase_error': + if not first_date or first_date == '': + return json.dumps(make_common_res(10, '缺少开始时间, 请选择开始时间')) if op_type == 'add': - ret = db_cross.add_shield_records(crossid ,area_id, weekdays, time_range, problem_key, date_type) + ret = db_cross.add_shield_records(crossid ,area_id, weekdays, time_range, problem_key, date_type, first_date) if ret == 1: return json.dumps(make_common_res(0, 'ok')) else: return json.dumps(make_common_res(10, '添加屏蔽信息失败')) elif op_type == 'del': - ret = db_cross.delete_shield_records(crossid, area_id, weekdays, time_range, problem_key, date_type) + ret = db_cross.delete_shield_records(crossid, area_id, weekdays, time_range, problem_key, date_type, first_date) if ret == 1: return json.dumps(make_common_res(0, 'ok')) else: diff --git a/app/db_cross_delay.py b/app/db_cross_delay.py index f72d1f3..127864f 100644 --- a/app/db_cross_delay.py +++ b/app/db_cross_delay.py @@ -142,16 +142,16 @@ class CrossDbHelper(TableDbHelperBase): """ % (area_id) return self.do_select(sql) - def add_shield_records(self, crossid ,area_id, weekday, time_range, problem_key, date_type): + def add_shield_records(self, crossid ,area_id, weekday, time_range, problem_key, date_type, first_date): sql = """ - insert into cross_doctor_matedata.cross_problem_shield (crossid, area_id, weekdays, time_range, problem_key, date_type) values ('%s', %s, '%s', '%s', '%s', '%s') - """ % (crossid, area_id, weekday, time_range, problem_key, date_type) + insert into cross_doctor_matedata.cross_problem_shield (crossid, area_id, weekdays, time_range, problem_key, date_type, first_date) values ('%s', %s, '%s', '%s', '%s', '%s', '%s') + """ % (crossid, area_id, weekday, time_range, problem_key, date_type, first_date) return self.do_execute(sql) - def delete_shield_records(self, crossid, area_id, weekday, time_range, problem_key, date_type): + def delete_shield_records(self, crossid, area_id, weekday, time_range, problem_key, date_type, first_date): sql = """ - delete from cross_doctor_matedata.cross_problem_shield where crossid = '%s' and area_id = %s and weekdays = '%s' and time_range = '%s' and problem_key = '%s' and date_type = '%s' - """ % (crossid, area_id, weekday, time_range, problem_key, date_type) + delete from cross_doctor_matedata.cross_problem_shield where crossid = '%s' and area_id = %s and weekdays = '%s' and time_range = '%s' and problem_key = '%s' and date_type = '%s' and first_date = '%s' + """ % (crossid, area_id, weekday, time_range, problem_key, date_type, first_date) return self.do_execute(sql) def query_csr_data(self, nodeid, key, crossid): diff --git a/app/monitor_common.py b/app/monitor_common.py index 5f51262..9ea0360 100644 --- a/app/monitor_common.py +++ b/app/monitor_common.py @@ -139,7 +139,7 @@ def gen_monitor_overview_data(cross_report_pb, date_type, routing_crosses, speci for cross_delay_info in cross_delay_info_list: if special_time_range != '' and not is_overlap_greater_than_one_hour(cross_delay_info.tp.start_hm, cross_delay_info.tp.end_hm, special_time_range): continue - service_level = calc_service_level(cross_delay_info.delay_info.delay_time, cross_delay_info.delay_info.stop_times) + service_level = calc_service_level(cross_delay_info.delay_info.delay_time, cross_delay_info.delay_info.stop_times) if cross_delay_info.delay_info.car_num >= 10 else '-' if service_level != '-': overview['cross_service_levels']['total'] += 1 if service_level in ('A', 'B'): @@ -291,7 +291,7 @@ def gen_monitor_cross_ledger_info(routing_crosses, nodeid, area_id, slc_company_ inroadid_list = [item['roadid'] for item in all_crosses_inroads] cross_has_reverse_lane = db_tmnet.check_reverse_turn(inroadid_list) virtual_roads = db_tmnet.query_virtual_roads(crossid_list) - has_reverse_turn = int(cross_has_reverse_lane) + int(sum([item['reverse_turn'] for item in virtual_roads])) + has_reverse_turn = int(cross_has_reverse_lane) + int(sum([item['reverse_turn'] for item in virtual_roads if item['reverse_turn']])) reversible_lane_num = db_tmnet.calc_has_reversible_lane_crosses(crossid_list)[0]['num'] special_info = { 'reverse_turn': has_reverse_turn, @@ -313,22 +313,23 @@ def gen_cross_delay_info_list(userid, area_id, nodeid, date_type, cross_report_p all_cross_index_dict_prev = parse_cross_index_dict(cross_delay_index_list_prev, special_time_range, routing_crosses_dict, date_type, area_id, nodeid, userid) # print(json.dumps(all_cross_index_dict, ensure_ascii=False)) for crossid in all_cross_index_dict.keys(): - if 'udc_' in crossid: - cross_ledger_info = db_tmnet.query_cross_ledger_info(crossid, nodeid, area_id) - else: - cross_ledger_info = db_tmnet.query_virtual_cross_info(crossid, nodeid, area_id) - internet_code = cross_ledger_info[0]['internet'] if cross_ledger_info else 0 - if internet_code == 0: + if crossid not in routing_crosses_dict.keys(): + continue + + internet_code = routing_crosses_dict[crossid]['internet'] + if internet_code == '0': internet_name = '未配置' - elif internet_code == 1: + elif internet_code == '1': internet_name = '联网' - elif internet_code == 2: + elif internet_code == '2': internet_name = '脱机' else: internet_name = '未联网' - slc_company = cross_ledger_info[0]['slc_company'] if cross_ledger_info else 0 + slc_company = routing_crosses_dict[crossid]['slc_company'] + if slc_company: + slc_company = int(slc_company) slc_company_name = slc_company_dict[slc_company] if slc_company in slc_company_dict.keys() else '-' - cross_model = cross_ledger_info[0]['cross_model'].split(',') if cross_ledger_info and cross_ledger_info[0]['cross_model'] and cross_ledger_info[0]['cross_model'] != '-' and cross_ledger_info[0]['cross_model'] != '' else ['3', '3'] + cross_model = routing_crosses_dict[crossid]['cross_model'].split(',') cross_model_dict = { '1': '快', '2': '主', @@ -364,6 +365,8 @@ def gen_cross_delay_info_list(userid, area_id, nodeid, date_type, cross_report_p elif tp_info['service_level'] > tp_info_prev['service_level']: tp_info['service_level_color'] = 1 for key in ('delay_time', 'stop_times', 'high_park_percent', 'park_time', 'relative_flow_rate', 'flow', 'jam_index', 'imbalance_index'): + if tp_info[key] == '-' or tp_info_prev[key] == '-': + continue if tp_info_prev[key] != 0: rate = round((tp_info[key] - tp_info_prev[key]) / tp_info_prev[key] * 100, 2) tp_info[key + '_rate'] = rate @@ -372,6 +375,8 @@ def gen_cross_delay_info_list(userid, area_id, nodeid, date_type, cross_report_p elif rate < -20: tp_info[key + '_color'] = 2 for key in ('speed', 'move_speed'): + if tp_info[key] == '-' or tp_info_prev[key] == '-': + continue if tp_info_prev[key] != 0: rate = round((tp_info[key] - tp_info_prev[key]) / tp_info_prev[key] * 100, 2) tp_info[key + '_rate'] = rate @@ -437,17 +442,17 @@ def parse_cross_index_dict(delay_index_list, special_time_range, routing_crosses 'weekdays': weekdays, 'tp_type': tp_type, # 时段类型,默认0表示普通时段,1表示小时级时段,2表示单日典型时段 'weekdays_str': weekdays_str, - 'service_level': calc_service_level(delay_index.delay_info.delay_time, delay_index.delay_info.stop_times), - 'stop_times': round(delay_index.delay_info.stop_times, 2), - 'high_park_percent': delay_index.delay_info.high_park_percent, - 'park_time': delay_index.delay_info.park_time, - 'delay_time': delay_index.delay_info.delay_time, - 'speed': round(delay_index.delay_info.speed / 100, 2), - 'move_speed': round(delay_index.delay_info.move_speed / 100, 2), - 'relative_flow_rate': relative_flow_rate, + 'service_level': calc_service_level(delay_index.delay_info.delay_time, delay_index.delay_info.stop_times) if delay_index.delay_info.car_num >= 10 else '-', + 'stop_times': round(delay_index.delay_info.stop_times, 2) if delay_index.delay_info.car_num >= 10 else '-', + 'high_park_percent': delay_index.delay_info.high_park_percent if delay_index.delay_info.car_num >= 10 else '-', + 'park_time': delay_index.delay_info.park_time if delay_index.delay_info.car_num >= 10 else '-', + 'delay_time': delay_index.delay_info.delay_time if delay_index.delay_info.car_num >= 10 else '-', + 'speed': round(delay_index.delay_info.speed / 100, 2) if delay_index.delay_info.car_num >= 10 else '-', + 'move_speed': round(delay_index.delay_info.move_speed / 100, 2) if delay_index.delay_info.car_num >= 10 else '-', + 'relative_flow_rate': relative_flow_rate if delay_index.delay_info.car_num >= 10 else '-', 'flow': delay_index.delay_info.car_num, - 'jam_index': round(delay_index.delay_info.jam_index, 2), - 'imbalance_index': round(delay_index.delay_info.imbalance_index, 2), + 'jam_index': round(delay_index.delay_info.jam_index, 2) if delay_index.delay_info.car_num >= 10 else '-', + 'imbalance_index': round(delay_index.delay_info.imbalance_index, 2) if delay_index.delay_info.car_num >= 10 else '-', 'service_level_color': 0, 'stop_times_color': 0, 'high_park_percent_color': 0, @@ -1097,7 +1102,7 @@ def turn_imbalance_problems(turn_imbalance_crosses, routing_crosses, special_tim 'time_range': time_range, 'weekdays_str': weekdays_str, 'weekdays': weekdays, - 'imbalance_index': '、'.join(inroad_imbalance_index_list), + 'imbalance_index': '、'.join(list(set(inroad_imbalance_index_list))), 'detail': detail, 'is_new': is_new, 'cont_times': cont_times, @@ -1368,7 +1373,7 @@ def phase_tp_check_problems(routing_crosses, special_time_range, first_date, dat cross_name = routing_crosses[crossid]['name'] cross_no = routing_crosses[crossid]['crossno'] time_range = convert_time(start_hm) + '-' + convert_time(end_hm) - key = crossid + '^' + time_range + key = crossid + '^' + time_range + '^' + first_date shield_state = 0 if key in shield_info['phase']: if filter_shield == 1: diff --git a/app/tmnet_db_func.py b/app/tmnet_db_func.py index ab8a088..69688c7 100644 --- a/app/tmnet_db_func.py +++ b/app/tmnet_db_func.py @@ -345,17 +345,20 @@ class TmnetDbHelper(TableDbHelperBase): if(t2.cross_no is not null, t2.cross_no, t1.cross_no) as crossno, if(t2.company is not null, t2.company, t1.company) as company, if(t2.location is not null, t2.location, t1.location) as location, + if(t2.internet is not null, t2.internet, t1.internet) as internet, + if(t2.slc_company is not null, t2.slc_company, t1.slc_company) as slc_company, + if(t2.cross_model is not null and t1.cross_model is not null and t2.cross_model != t1.cross_model, t2.cross_model, t1.cross_model) as cross_model, t1.nodeid, t1.area_id from - (select crossid, name, location, nodeid, area_id, cross_no, company from `cross` where nodeid = %s and area_id = %s) t1 + (select crossid, name, location, nodeid, area_id, cross_no, company,internet, slc_company, cross_model from `cross` where nodeid = %s and area_id = %s) t1 left join - (select crossid, name, location, nodeid, area_id, cross_no, company from `cross_ledger_update_info` where nodeid = %s and area_id = %s ) t2 on t1.crossid = t2.crossid + (select crossid, name, location, nodeid, area_id, cross_no, company,internet, slc_company, cross_model from `cross_ledger_update_info` where nodeid = %s and area_id = %s ) t2 on t1.crossid = t2.crossid where t1.area_id = %s and t1.nodeid = %s and t1.crossid in (select crossid from bound_crosses where area_id = %s and nodeid = %s and is_routing_inspection = 1) union all - select crossid, name, location, nodeid, area_id, cross_no, company from user_defined_cross where area_id = %s and nodeid = %s and crossid in (select crossid from bound_crosses where area_id = %s and nodeid = %s and is_routing_inspection = 1) + select crossid, name, location, nodeid, area_id, cross_no, company, internet, slc_company, cross_model from user_defined_cross where area_id = %s and nodeid = %s and crossid in (select crossid from bound_crosses where area_id = %s and nodeid = %s and is_routing_inspection = 1) """ % (nodeid, area_id, nodeid, area_id, area_id, nodeid, area_id, nodeid, area_id, nodeid, area_id, nodeid) return self.do_select(sql)