diff --git a/app/compare_views.py b/app/compare_views.py new file mode 100644 index 0000000..d7ceb5e --- /dev/null +++ b/app/compare_views.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# @Author: Owl +# @Date: 2025/11/28 16:35 +# @Description: 路口对比评测相关接口 +from flask import request + +from app.cross_compare_worker import * +from app.cross_eva_views import app + + +@app.route('/api/cross_compare_data', methods=['POST']) +def cross_compare_data(): + return query_compare_data(request.json) + + +@app.route('/api/do_add_cross_survey_job', methods=['POST']) +def do_add_cross_survey_job_api(): + return do_add_cross_survey_job(request.json) + + +@app.route('/api/del_cross_survey_job', methods=['GET']) +def del_cross_survey_job_api(): + return do_del_cross_survey_job(request.args) + + +@app.route('/api/query_cross_survey_jobs', methods=['GET']) +def query_cross_survey_jobs_api(): + return query_cross_survey_job_list(request.args) + + +@app.route('/api/rerun_cross_survey', methods=['GET']) +def rerun_cross_survey_api(): + return rerun_cross_survey_job(request.args) \ No newline at end of file diff --git a/app/cross_compare_common.py b/app/cross_compare_common.py new file mode 100644 index 0000000..3e8f9a4 --- /dev/null +++ b/app/cross_compare_common.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +# @Author: Owl +# @Date: 2025/11/27 11:17 +# @Description: 路口优化对比页面相关公共函数 +from pypinyin import lazy_pinyin + +from app.eva_common import * + + +def gen_compare_overview_res(eva_overview, comp_eva_overview): + # comp_index 为优化前指标 + main_flows_num = len(eva_overview['main_flow_src_desc'].split('、')) + comp_main_flows_num = len(comp_eva_overview['main_flow_src_desc'].split('、')) + high_stop_turns_num = sum([len(item.split('/')) for item in eva_overview['high_stop_turn_ratio_desc'].split('、')]) + comp_high_stop_turns_num = sum([len(item.split('/')) for item in comp_eva_overview['high_stop_turn_ratio_desc'].split('、')]) + overview = { + 'stop_times': eva_overview['stop_times'], + 'comp_stop_times': comp_eva_overview['stop_times'], + 'stop_times_color': calc_index_color(eva_overview['stop_times'], comp_eva_overview['stop_times'], 'stop_times'), + 'jam_index': eva_overview['jam_index'], + 'comp_jam_index': comp_eva_overview['jam_index'], + 'jam_index_color': calc_index_color(eva_overview['jam_index'], comp_eva_overview['jam_index'], 'jam_index'), + 'high_park_percent': eva_overview['high_park_percent'].replace('%', ''), + 'comp_high_park_percent': comp_eva_overview['high_park_percent'].replace('%', ''), + 'high_park_percent_color': calc_index_color(float(eva_overview['high_park_percent'].replace('%', '')), float(comp_eva_overview['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'imbalance_index': eva_overview['imbalance_index'], + 'comp_imbalance_index': comp_eva_overview['imbalance_index'], + 'imbalance_index_color': calc_index_color(eva_overview['imbalance_index'], comp_eva_overview['imbalance_index'], 'imbalance_index'), + 'speed': eva_overview['speed'], + 'comp_speed': comp_eva_overview['speed'], + 'speed_color': calc_index_color(eva_overview['speed'], comp_eva_overview['speed'], 'speed'), + 'move_speed': eva_overview['move_speed'], + 'comp_move_speed': comp_eva_overview['move_speed'], + 'move_speed_color': calc_index_color(eva_overview['move_speed'], comp_eva_overview['move_speed'], 'move_speed'), + 'delay_time': eva_overview['delay_time'], + 'comp_delay_time': comp_eva_overview['delay_time'], + 'delay_time_color': calc_index_color(eva_overview['delay_time'], comp_eva_overview['delay_time'], 'delay_time'), + 'park_time': eva_overview['park_time'], + 'comp_park_time': comp_eva_overview['park_time'], + 'park_time_color': calc_index_color(eva_overview['park_time'], comp_eva_overview['park_time'], 'park_time'), + 'service_level': eva_overview['service_level'], + 'comp_service_level': comp_eva_overview['service_level'], + 'main_flow_nums': main_flows_num, + 'comp_main_flow_nums': comp_main_flows_num, + 'high_stop_turns_num': high_stop_turns_num, + 'comp_high_stop_turns_num': comp_high_stop_turns_num + } + return overview + + +def calc_index_color(index, comp_index, key): + color = 0 + if key not in ('speed', 'move_speed'): + rate = 0 if (comp_index in (0, '-') or index == '-') else round((index - comp_index) / comp_index * 100, 2) + if rate > 20: + color = 1 + elif rate < -20: + color = 2 + else: + rate = 0 if (comp_index in (0, '-') or index == '-') else round((index - comp_index) / comp_index * 100, 2) + if rate < -20: + color = 1 + elif rate > 20: + color = 2 + return color + + +def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos): + inroad_data_keys = inroad_delay_infos.keys() + comp_inroad_data_keys = comp_inroad_delay_infos.keys() + all_keys = inroad_data_keys | comp_inroad_data_keys + res = {} + for key in all_keys: + comp_data = { + 'item': '优化前', + 'service_level': comp_inroad_delay_infos[key]['service_level'] if key in comp_inroad_data_keys else '-', + 'stop_times': comp_inroad_delay_infos[key]['stop_times'] if key in comp_inroad_data_keys else '-', + 'high_park_percent': comp_inroad_delay_infos[key]['high_park_percent'] if key in comp_inroad_data_keys else '-', + 'imbalance_index': comp_inroad_delay_infos[key]['imbalance_index'] if key in comp_inroad_data_keys else '-', + 'park_time': comp_inroad_delay_infos[key]['park_time'] if key in comp_inroad_data_keys else '-', + 'delay_time': comp_inroad_delay_infos[key]['delay_time'] if key in comp_inroad_data_keys else '-', + 'speed': comp_inroad_delay_infos[key]['speed'] if key in comp_inroad_data_keys else '-', + 'move_speed': comp_inroad_delay_infos[key]['move_speed'] if key in comp_inroad_data_keys else '-' + } + item_data = { + 'item': '优化后', + 'service_level': inroad_delay_infos[key]['service_level'] if key in inroad_data_keys else '-', + 'stop_times': inroad_delay_infos[key]['stop_times'] if key in inroad_data_keys else '-', + 'high_park_percent': inroad_delay_infos[key]['high_park_percent'] if key in inroad_data_keys else '-', + 'imbalance_index': inroad_delay_infos[key]['imbalance_index'] if key in inroad_data_keys else '-', + 'park_time': inroad_delay_infos[key]['park_time'] if key in inroad_data_keys else '-', + 'delay_time': inroad_delay_infos[key]['delay_time'] if key in inroad_data_keys else '-', + 'speed': inroad_delay_infos[key]['speed'] if key in inroad_data_keys else '-', + 'move_speed': inroad_delay_infos[key]['move_speed'] if key in inroad_data_keys else '-' + } + diff_data = { + 'item': '变化量', + 'service_level': '-' if item_data['service_level'] == '-' or comp_data['service_level'] == '-' else compare_level(item_data['service_level'], comp_data['service_level']), + 'stop_times': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else round(item_data['stop_times'] - comp_data['stop_times'], 2), + 'high_park_percent': '-' if item_data['high_park_percent'] == '-' or comp_data['high_park_percent'] == '-' else round(float(item_data['high_park_percent'].replace('%', '')) - float(comp_data['high_park_percent'].replace('%', '')), 2), + 'imbalance_index': '-' if item_data['imbalance_index'] == '-' or comp_data['imbalance_index'] == '-' else round(item_data['imbalance_index'] - comp_data['imbalance_index'], 2), + 'park_time': '-' if item_data['park_time'] == '-' or comp_data['park_time'] == '-' else item_data['park_time'] - comp_data['park_time'], + 'delay_time': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else item_data['delay_time'] - comp_data['delay_time'], + 'speed': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else round(item_data['speed'] - comp_data['speed'], 2), + 'move_speed': '-' if item_data['move_speed'] == '-' or comp_data['move_speed'] == '-' else round(item_data['move_speed'] - comp_data['move_speed'], 2), + 'stop_times_color': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else calc_index_color(item_data['stop_times'], comp_data['stop_times'], 'stop_times'), + 'high_park_percent_color': '-' if item_data['high_park_percent'] == '-' or comp_data['high_park_percent'] == '-' else calc_index_color(float(item_data['high_park_percent'].replace('%', '')), float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'imbalance_index_color': '-' if item_data['imbalance_index'] == '-' or comp_data['imbalance_index'] == '-' else calc_index_color(item_data['imbalance_index'], comp_data['imbalance_index'], 'imbalance_index'), + 'park_time_color': '-' if item_data['park_time'] == '-' or comp_data['park_time'] == '-' else calc_index_color(item_data['park_time'], comp_data['park_time'], 'park_time'), + 'delay_time_color': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else calc_index_color(item_data['delay_time'], comp_data['delay_time'], 'delay_time'), + 'speed_color': '-' if item_data['speed'] == '-' or comp_data['speed'] == '-' else calc_index_color(item_data['speed'], comp_data['speed'], 'speed'), + 'move_speed_color': '-' if item_data['move_speed'] == '-' or comp_data['move_speed'] == '-' else calc_index_color(item_data['move_speed'], comp_data['move_speed'], 'move_speed') + } + turn_type = inroad_delay_infos[key]['flow_delays'].keys() + comp_turn_type = comp_inroad_delay_infos[key]['flow_delays'].keys() + all_turn_type = turn_type | comp_turn_type + flow_delay_datas = {} + for item_turn in all_turn_type: + flow_comp_data = { + 'item': '优化前', + 'service_level': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['service_level'] if item_turn in comp_turn_type else '-', + 'stop_times': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['stop_times'] if item_turn in comp_turn_type else '-', + 'high_park_percent': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['high_park_percent'] if item_turn in comp_turn_type else '-', + 'park_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['park_time'] if item_turn in comp_turn_type else '-', + 'delay_time': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['delay_time'] if item_turn in comp_turn_type else '-', + 'speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['speed'] if item_turn in comp_turn_type else '-', + 'move_speed': comp_inroad_delay_infos[key]['flow_delays'][item_turn]['move_speed'] if item_turn in comp_turn_type else '-' + } + flow_item_data = { + 'item': '优化后', + 'service_level': inroad_delay_infos[key]['flow_delays'][item_turn]['service_level'] if item_turn in turn_type else '-', + 'stop_times': inroad_delay_infos[key]['flow_delays'][item_turn]['stop_times'] if item_turn in turn_type else '-', + 'high_park_percent': inroad_delay_infos[key]['flow_delays'][item_turn]['high_park_percent'] if item_turn in turn_type else '-', + 'park_time': inroad_delay_infos[key]['flow_delays'][item_turn]['park_time'] if item_turn in turn_type else '-', + 'delay_time': inroad_delay_infos[key]['flow_delays'][item_turn]['delay_time'] if item_turn in turn_type else '-', + 'speed': inroad_delay_infos[key]['flow_delays'][item_turn]['speed'] if item_turn in turn_type else '-', + 'move_speed': inroad_delay_infos[key]['flow_delays'][item_turn]['move_speed'] if item_turn in turn_type else '-' + } + flow_diff_data = { + 'item': '变化量', + 'service_level': '-' if flow_comp_data['service_level'] == '-' or flow_item_data['service_level'] == '-' else compare_level(flow_comp_data['service_level'], flow_item_data['service_level']), + 'stop_times': '-' if flow_comp_data['stop_times'] == '-' or flow_item_data['stop_times'] == '-' else round(flow_comp_data['stop_times'] - flow_item_data['stop_times'], 2), + 'high_park_percent': '-' if flow_comp_data['high_park_percent'] == '-' or flow_item_data['high_park_percent'] == '-' else round(float(flow_comp_data['high_park_percent'].replace('%', '')) - float(flow_item_data['high_park_percent'].replace('%', '')), 2), + 'park_time': '-' if flow_comp_data['park_time'] == '-' or flow_item_data['park_time'] == '-' else round(flow_comp_data['park_time'] - flow_item_data['park_time'], 2), + 'delay_time': '-' if flow_comp_data['delay_time'] == '-' or flow_item_data['delay_time'] == '-' else round(flow_comp_data['delay_time'] - flow_item_data['delay_time'], 2), + 'speed': '-' if flow_comp_data['speed'] == '-' or flow_item_data['speed'] == '-' else round(flow_comp_data['speed'] - flow_item_data['speed'], 2), + 'move_speed': '-' if flow_comp_data['move_speed'] == '-' or flow_item_data['move_speed'] == '-' else round(flow_comp_data['move_speed'] - flow_item_data['move_speed'], 2), + 'stop_times_color': '-' if flow_item_data['stop_times'] == '-' or flow_comp_data['stop_times'] == '-' else calc_index_color(flow_item_data['stop_times'], flow_comp_data['stop_times'], 'stop_times'), + 'high_park_percent_color': '-' if flow_item_data['high_park_percent'] == '-' or flow_comp_data['high_park_percent'] == '-' else calc_index_color(float(flow_item_data['high_park_percent'].replace('%', '')), float(comp_data['high_park_percent'].replace('%', '')), 'high_park_percent'), + 'park_time_color': '-' if flow_item_data['park_time'] == '-' or flow_comp_data['park_time'] == '-' else calc_index_color(flow_item_data['park_time'], flow_comp_data['park_time'], 'park_time'), + 'delay_time_color': '-' if flow_item_data['delay_time'] == '-' or flow_comp_data['delay_time'] == '-' else calc_index_color(flow_item_data['delay_time'], flow_comp_data['delay_time'], 'delay_time'), + 'speed_color': '-' if flow_item_data['speed'] == '-' or flow_comp_data['speed'] == '-' else calc_index_color(flow_item_data['speed'], flow_comp_data['speed'], 'speed'), + 'move_speed_color': '-' if flow_item_data['move_speed'] == '-' or flow_comp_data['move_speed'] == '-' else calc_index_color(flow_item_data['move_speed'], flow_comp_data['move_speed'], 'move_speed') + } + flow_delay_datas[item_turn] = { + 'item_data': flow_item_data, + 'comp_data': flow_comp_data, + 'diff_data': flow_diff_data + } + res[key] = { + 'src_dir': inroad_delay_infos[key]['src_dir'] if 'src_dir' in inroad_delay_infos[key] else comp_inroad_delay_infos[key]['src_dir'], + 'dir_data': { + 'item_data': item_data, + 'comp_data': comp_data, + 'diff_data': diff_data, + 'flow_delay_datas': flow_delay_datas + } + } + return res + + +def compare_level(new, old): + if new == '-' or old == '-': + return 0 + scores = {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5} + new_score, old_score = scores.get(new, 99), scores.get(old, 99) + if new_score == old_score: + return 0 + return 2 if new_score < old_score else 1 + + +def find_job_info(key, value_list): + result = [] + # 遍历名字列表 + for value in value_list: + # 检查是否完全匹配 + if key in value['cross_name']: + result.append(value) + if key == value['cross_name']: + result = [value] + break + # 检查是否是首字母缩写匹配 + elif len(key) >= 2 and len(value['cross_name']) >= 2: + # 将名字转换为拼音并提取首字母 + first_pinyin = lazy_pinyin(value['cross_name'][0])[0] + second_pinyin = lazy_pinyin(value['cross_name'][1])[0] + if key[0].lower() == first_pinyin[0].lower() and key[1].lower() == second_pinyin[0].lower(): + result.append(value) + # # 检查是否包含关键字 + # elif key in value['wave_name']: + # result.append(value) + return result \ No newline at end of file diff --git a/app/cross_compare_worker.py b/app/cross_compare_worker.py new file mode 100644 index 0000000..6fece42 --- /dev/null +++ b/app/cross_compare_worker.py @@ -0,0 +1,409 @@ +# -*- coding: utf-8 -*- +# @Author: Owl +# @Date: 2025/11/27 10:15 +# @Description: 路口优化对比页面相关接口函数 + +from app.eva_common import * +from app.cross_compare_common import * +import proto.greenwave_type_pb2 as survey_pb + + +def query_compare_data(params): + """ + 对比数据查询接口 + :param data: + :return: json + """ + crossid = check_param(params, 'crossid') + if not crossid: + return json.dumps(make_common_res(1, '缺少crossid, 请刷新后重试')) + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + date_list = check_param(params, 'date_list') # 优化后 + if not date_list or len(date_list) < 1: + return json.dumps(make_common_res(7, '缺少日期参数,请最少选择一天作为查询日期')) + compare_date_list = check_param(params, 'compare_date_list') # 优化前 + if not compare_date_list or len(compare_date_list) < 1: + return json.dumps(make_common_res(6, '缺少对比日期参数,请最少选择一天作为对比日期')) + query_type = check_param(params, 'query_type') + if not query_type: + query_type = 0 + time_range = check_param(params, 'time_range') + if not time_range: + return json.dumps(make_common_res(8, '缺少时段范围,请选择时段范围')) + 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: + # tp_end = 2400 + 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) + 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) + if not avg_comp_cross_delay_info: + return json.dumps(make_common_res(10, '当前所选对比日期范围内该评测时段无可用数据')) + cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid) + inroad_static_info_dict = {item['roadid']: item for item in cross_inroads} + # 路口静态信息及台账信息 + cross_ledger_info_dict = query_cross_ledger_info(crossid, nodeid, area_id, userid) + if not cross_ledger_info_dict: + return json.dumps(make_common_res(10, '查询路口信息失败')) + cross_static_info, cross_ledger_info = gen_cross_static_info(crossid, nodeid, area_id, cross_ledger_info_dict) + roads_dir_dict = gen_road_dir_dict(cross_ledger_info) + # 路口指标数据概览 + overview_res = gen_overview_index(avg_cross_delay_info, inroad_static_info_dict, nodeid, date_list, roads_dir_dict) + comp_overview_res = gen_overview_index(avg_comp_cross_delay_info, inroad_static_info_dict, nodeid, compare_date_list, roads_dir_dict) + final_overview = gen_compare_overview_res(overview_res, comp_overview_res) + # 路段及流向数据概览 + road_flow_delay_infos = gen_road_delay_index(avg_cross_delay_info, roads_dir_dict) + comp_road_flow_delay_infos = gen_road_delay_index(avg_comp_cross_delay_info, roads_dir_dict) + compared_inroad_delay_infos = parse_comp_inroad_delay_infos(road_flow_delay_infos, comp_road_flow_delay_infos) + + prev_cross_info = get_prev_cross(nodeid, area_id, roads_dir_dict) + res = make_common_res(0, 'ok') + res['data'] = { + 'cross_static_info': cross_static_info, + 'overview': final_overview, + 'ledger_info': cross_ledger_info, + 'next_cross_info': prev_cross_info, + 'road_flow_delay_infos': compared_inroad_delay_infos + } + return json.dumps(res, ensure_ascii=False) + + +def do_add_cross_survey_job(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + start_date = check_param(params, 'start_date') + if not start_date: + return json.dumps(make_common_res(6, '缺少开始日期,请选择开始日期')) + crossids = check_param(params, 'crossids') + if not crossids or len(crossids) < 1: + return json.dumps(make_common_res(7, '缺少路口id,请选择路口')) + + fail_num, err_str, values = 0, '创建实景勘察任务失败的路口为:', [] + for crossid in crossids: + existed_jobs_list = db_tmnet.query_cross_survey_job(crossid, area_id) + new_job_end_date = datetime.strptime(start_date, '%Y%m%d') + + timedelta(days=30) + bad_flag = False + cross_ledger_info_dict = query_cross_ledger_info(crossid, nodeid, area_id, userid) + if not cross_ledger_info_dict: + err_str += ",路口【%s】信息查询失败" % crossid + fail_num += 1 + continue + cross_static_info, cross_ledger_info = gen_cross_static_info(crossid, nodeid, area_id, cross_ledger_info_dict) + roads_dir_dict = gen_road_dir_dict(cross_ledger_info) + for job in existed_jobs_list: + if job['status'] == 1: + err_str += ",路口【%s】已存在进行中任务" % g_roadnet.query_cross(crossid).name + bad_flag = True + continue + elif job['status'] == 0: + if datetime.strptime(str(job['start_day']), '%Y%m%d') < new_job_end_date < datetime.strptime(str(job['end_day']), '%Y%m%d')\ + or datetime.strptime(str(job['start_day']), '%Y%m%d') < datetime.strptime(start_date, '%Y%m%d') < datetime.strptime(str(job['end_day']), '%Y%m%d'): + err_str += ",路口【%s】已存在未开始任务" % g_roadnet.query_cross(crossid).name + bad_flag = True + continue + if bad_flag: + fail_num += 1 + continue + + done_inroads = '|'.join([src_dir + ':0' for src_dir in roads_dir_dict.keys() if roads_dir_dict[src_dir]['in'] != '-']) + inroads_dir = '|'.join([src_dir + ':' + roads_dir_dict[src_dir]['in'] for src_dir in roads_dir_dict.keys() if roads_dir_dict[src_dir]['in'] != '-']) + values.append((crossid, start_date, new_job_end_date.strftime('%Y%m%d'), 0, done_inroads, inroads_dir, nodeid, area_id)) + if len(values) > 0: + ret = db_tmnet.insert_cross_survey_job(values) + if ret == len(values): + res = make_common_res(0, 'ok') + else: + res = make_common_res(1, '创建任务失败') + res['data'] = { + 'fail_num': fail_num, + 'err_str': err_str if err_str != '创建实景勘察任务失败的路口为:' else '无' + } + return json.dumps(res) + else: + res = make_common_res(1, '创建任务失败') + res['data'] = { + 'fail_num': fail_num, + 'err_str': err_str if err_str != '创建实景勘察任务失败的路口为:' else '无' + } + return json.dumps(res) + + +def do_del_cross_survey_job(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + jobid = check_param(params, 'jobid') + if not jobid: + return json.dumps(make_common_res(6, '缺少任务ID,请刷新后重试')) + job_info = db_tmnet.query_survey_job_info_by_id(jobid) + if not job_info: + return json.dumps(make_common_res(7, '任务不存在,请刷新后重试')) + if job_info[0]['status'] in [1, 2]: + return json.dumps(make_common_res(8, '任务正在执行中,请勿删除')) + ret = db_tmnet.del_cross_survey_job(jobid) + if ret == 1: + return json.dumps(make_common_res(0, 'ok')) + return json.dumps(make_common_res(9, '删除任务失败')) + + +def query_cross_survey_job_list(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + keyword = check_param(params, 'keyword') + if not keyword: + keyword = '' + start_date = check_param(params, 'start_date') + if not start_date: + start_date = '' + end_date = check_param(params, 'end_date') + if not end_date: + end_date = '' + page = check_param(params, 'page') + if not page: + page = 1 + page_size = check_param(params, 'page_size') + if not page_size: + page_size = 10 + job_state = check_param(params, 'job_state') + if not job_state: + job_state = -1 + start_index = (int(page) - 1) * int(page_size) + end_index = start_index + int(page_size) + job_list = db_tmnet.query_survey_job_info_by_area_id(area_id) + for row in job_list: + row['cross_name'] = g_roadnet.query_cross(row['cross_id']).name + complete_day = '-' + status = row['status'] + if row['end_day'] < int(datetime.now().strftime('%Y%m%d')) and status != 2: + status = 3 + if row['start_day'] > int(datetime.now().strftime('%Y%m%d')): + status = 0 + if status == 2: + complete_day = row['update_time'].strftime('%Y%m%d') + row['status'] = status + row['complete_day'] = complete_day + row['update_time'] = row['update_time'].strftime('%Y%m%d') + + if keyword and keyword != '': + job_list = find_job_info(job_list, keyword) + if start_date and start_date != '' and end_date and end_date != '': + job_list = list(filter(lambda item: str(item['end_day']) > str(end_date), job_list)) + job_list = list(filter(lambda item: str(item['start_day']) < str(start_date), job_list)) + if job_state and job_state != -1: + job_list = list(filter(lambda item: item['status'] == job_state, job_list)) + job_list = sorted(job_list, key=lambda item: item['update_time'], reverse=True) + total_num = len(job_list) + job_list = job_list[start_index:end_index] + res = make_common_res(0, 'ok') + res['data'] = { + 'total_num': total_num, + 'job_list': job_list + } + return json.dumps(res) + + +def rerun_cross_survey_job(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + jobid = check_param(params, 'jobid') + if not jobid: + return json.dumps(make_common_res(6, '缺少任务ID,请刷新后重试')) + job_info = db_tmnet.query_survey_job_info_by_id(jobid) + if not job_info: + return json.dumps(make_common_res(7, '任务不存在,请刷新后重试')) + if job_info[0]['status'] in [1, 2]: + return json.dumps(make_common_res(8, '任务正在执行中,无法执行重跑操作')) + + ret = db_tmnet.update_cross_survey_job_status(job_info, jobid) + if ret == 1: + return json.dumps(make_common_res(0, 'ok')) + return json.dumps(make_common_res(9, '重跑任务失败')) + + +def query_cross_survey_usable_dates(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + crossid = check_param(params, 'crossid') + if not crossid: + return json.dumps(make_common_res(6, '缺少crossid, 请刷新后重试')) + + usable_info = { + 'crossid': crossid, + 'job_info': [] + } + existed_jobs_list = db_tmnet.query_cross_survey_job(crossid, area_id) + for row in existed_jobs_list: + start_day = row['start_day'] + end_day = '至今' + if row['status'] == 2: + # 判定当前任务状态值,如果当前任务状态为2 则任务可查询时间区间的极大值取当前日期和任务完成时间(即最新的update_time)的较小值 + end_day = row['update_time'].strftime('%Y%m%d') + usable_info['job_info'].append({ + 'jobid': row['id'], + 'time_range': start_day + '-' + end_day, + }) + res = make_common_res(0, 'ok') + res['data'] = usable_info + return json.dumps(res) + + +def query_cross_survey_result(params): + nodeid = check_param(params, 'nodeid') + if not nodeid: + return json.dumps(make_common_res(2, '缺少nodeid, 请刷新后重试')) + area_id = check_param(params, 'area_id') + if not area_id: + return json.dumps(make_common_res(3, '缺少area_id, 请刷新后重试')) + userid = check_param(params, 'userid') + if not userid: + return json.dumps(make_common_res(4, '缺少userid, 请刷新后重试')) + area_list = db_user.query_areaid_list(userid) + if not area_list or len(area_list) < 1: + return json.dumps(make_common_res(5, '用户信息异常')) + area_list = map(int, area_list) + if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list: + return json.dumps(make_common_res(5, '辖区id异常,请检查后重试')) + crossid = check_param(params, 'crossid') + if not crossid: + return json.dumps(make_common_res(6, '缺少路口id,请刷新后重试')) + jobid = check_param(params, 'jobid') + if not jobid: + return json.dumps(make_common_res(7, '缺少任务id,请刷新后重试')) + + job_info = db_tmnet.query_survey_job_info_by_id(jobid) + done_inroads = job_info[0]['done_inroads'] + done_inroads_list = done_inroads.split('|') + done_src_dir_list = [] + for item in done_inroads_list: + if item.split(':')[1] == '2': + done_src_dir_list.append(item.split(':')[0]) + # 路口静态信息及台账信息 + cross_ledger_info_dict = query_cross_ledger_info(crossid, nodeid, area_id, userid) + if not cross_ledger_info_dict: + return json.dumps(make_common_res(10, '查询路口信息失败')) + cross_static_info, cross_ledger_info = gen_cross_static_info(crossid, nodeid, area_id, cross_ledger_info_dict) + roads_dir_dict = gen_road_dir_dict(cross_ledger_info) + road_src_dict = {v['in']: k for k, v in roads_dir_dict.items()} + src_images = {} + for item in done_src_dir_list: + item_key = 'csr_' + crossid + '_' + str(jobid) + '_' + item + item_data = db_cross.query_csr_data(nodeid, item_key, crossid) + if not item_data: + logging.error('路口id: %s, 任务id: %s, 源方向: %s, 数据不存在' % (crossid, jobid, item)) + continue + item_csr_data = survey_pb.xl_cross_survey_result_t() + item_csr_data.ParseFromString(item_data[0]['data']) + inroadid = item_csr_data.inroadid + if inroadid not in road_src_dict: + logging.error('路口id: %s, 源方向: %s, 数据不存在' % (crossid, inroadid)) + continue + src_dir = road_src_dict[inroadid] + pos_list = item_csr_data.pos_list + image_list = [] + for pos in pos_list: + speed = pos.speed + image_time = datetime.fromtimestamp(pos.timestamp).strftime('%Y-%m-%d %H:%M:%S') + image_url = pos.image_url + image_location = str(pos.lon / 10000000) + ',' + str(pos.lat / 10000000) + dist = pos.dist + image_list.append({ + 'src_dir': srcDir_toStr(src_dir) + '进口', + 'speed': speed, + 'image_time': image_time, + 'image_url': image_url, + 'image_location': image_location, + 'dist': dist + }) + src_images[src_dir] = image_list + + + + + + + diff --git a/app/tmnet_db_func.py b/app/tmnet_db_func.py index 0dc64c2..2b100bd 100644 --- a/app/tmnet_db_func.py +++ b/app/tmnet_db_func.py @@ -425,7 +425,7 @@ class TmnetDbHelper(TableDbHelperBase): def insert_cross_survey_job(self, values): sql = """ - insert into cross_survey.cross_survey_jobs (crossid, start_day, end_day, status, done_inroads, nodeid, area_id) values('%s', %s, %s, %s, '%s', %s, %s) + insert into cross_survey.cross_survey_jobs (crossid, start_day, end_day, status, done_inroads, inroads_dir, nodeid, area_id) values('%s', %s, %s, %s, '%s', '%s', %s, %s) """ return self.do_executemany(sql, values) diff --git a/proto/greenwave_type.proto b/proto/greenwave_type.proto index 758b509..a4348dc 100644 --- a/proto/greenwave_type.proto +++ b/proto/greenwave_type.proto @@ -42,6 +42,10 @@ message xl_road_traj_brief_t uint32 pass_timestamp = 16; // 过灯时刻 int32 color = 17; // 过灯时的灯色,取值含义为: 3:红灯; 5:绿灯; 7:黄灯. 0值表示无信息. int32 remain = 18; // 过灯时的灯色剩余的秒数 + + // 针对灯后轨迹段的特殊字段 + bool is_after_light = 19; // 是否为灯后轨迹段 + uint64 xlinkid_after_light = 20; // 灯后的第一个link的xlinkid }; /// @brief 行驶段指标 @@ -501,6 +505,8 @@ message xl_cross_survey_result_t int32 daynum = 3; // 勘查完成的日期 string orderid = 4; // 订单ID repeated xl_survey_pos_t pos_list = 5; // 一系列位置点的图片信息 + string inroadid = 6; // 进口道的id + string outroadid = 7; // 出口道的id, 预留扩展。两个roadid只能给其中一个赋值。 } //////////////////////////////////////////////////////////// diff --git a/proto/greenwave_type_pb2.py b/proto/greenwave_type_pb2.py index 7fdfac8..0b48a27 100644 --- a/proto/greenwave_type_pb2.py +++ b/proto/greenwave_type_pb2.py @@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14greenwave_type.proto\x12\x05xlsyn\"d\n\x0cxl_gtb_pos_t\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x0c\n\x04\x64ist\x18\x02 \x01(\x05\x12\r\n\x05speed\x18\x03 \x01(\x05\x12\x0b\n\x03lon\x18\x04 \x01(\r\x12\x0b\n\x03lat\x18\x05 \x01(\r\x12\n\n\x02ms\x18\x06 \x01(\x05\"\x94\x03\n\x14xl_road_traj_brief_t\x12\x19\n\x11\x65nd_light_xlinkid\x18\x01 \x01(\x04\x12\x15\n\rend_crossname\x18\x02 \x01(\t\x12\x13\n\x0broad_length\x18\x03 \x01(\x05\x12\x13\n\x0btravel_time\x18\x04 \x01(\x05\x12\x11\n\tpark_time\x18\x05 \x01(\x05\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\r\n\x05speed\x18\x07 \x01(\x02\x12\x12\n\nmove_speed\x18\x08 \x01(\x02\x12\x12\n\nstop_times\x18\t \x01(\x05\x12\x16\n\x0elast_park_dist\x18\n \x01(\x05\x12%\n\x08pos_list\x18\x0b \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\x11\n\tturn_type\x18\x0c \x01(\x05\x12\x19\n\x11\x65nd_light_mlinkid\x18\r \x01(\t\x12\x0f\n\x07gps_src\x18\x0e \x01(\x05\x12\r\n\x05\x63\x61rid\x18\x0f \x01(\x04\x12\x16\n\x0epass_timestamp\x18\x10 \x01(\r\x12\r\n\x05\x63olor\x18\x11 \x01(\x05\x12\x0e\n\x06remain\x18\x12 \x01(\x05\"\xeb\x01\n\x0fxl_road_index_t\x12\x13\n\x0btravel_time\x18\x01 \x01(\x02\x12\x11\n\tpark_time\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x02\x12\r\n\x05speed\x18\x04 \x01(\x02\x12\x12\n\nmove_speed\x18\x05 \x01(\x02\x12\x12\n\nstop_times\x18\x06 \x01(\x02\x12\x16\n\x0elast_park_dist\x18\x07 \x01(\x02\x12\x18\n\x10nostop_pass_rate\x18\x08 \x01(\x02\x12\x18\n\x10park_time_counts\x18\t \x03(\x05\x12\x19\n\x11move_speed_counts\x18\n \x03(\x05\"D\n\x18xl_road_traj_brief_bkt_t\x12(\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x1b.xlsyn.xl_road_traj_brief_t\"\xb4\x02\n\x19xl_greenwave_traj_brief_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0e\n\x06trajid\x18\x02 \x01(\t\x12\x10\n\x08wave_dir\x18\x03 \x01(\x05\x12\x12\n\nstart_time\x18\x04 \x01(\r\x12\x10\n\x08\x65nd_time\x18\x05 \x01(\r\x12\x18\n\x10nostop_pass_rate\x18\x06 \x01(\x02\x12\x12\n\nstop_times\x18\x07 \x01(\x02\x12\x13\n\x0btravel_time\x18\x08 \x01(\x05\x12\r\n\x05speed\x18\t \x01(\x02\x12\x12\n\ndelay_time\x18\n \x01(\x05\x12\x34\n\x0froad_brief_list\x18\x0b \x03(\x0b\x32\x1b.xlsyn.xl_road_traj_brief_t\x12\x12\n\nextra_info\x18\x0c \x01(\t\x12\x0f\n\x07gps_src\x18\r \x01(\x05\"=\n\x0cxl_gtb_bkt_t\x12-\n\x03\x62kt\x18\x01 \x03(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\"S\n\x10xl_time_period_t\x12\x10\n\x08start_hm\x18\x01 \x01(\x05\x12\x0e\n\x06\x65nd_hm\x18\x02 \x01(\x05\x12\x0f\n\x07weekday\x18\x03 \x01(\x05\x12\x0c\n\x04type\x18\x04 \x01(\x05\"m\n\x0exl_turn_stat_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x0f\n\x07mlinkid\x18\x02 \x01(\t\x12\x12\n\ninout_type\x18\x03 \x01(\x05\x12\x11\n\tturn_stat\x18\x04 \x03(\x05\x12\x12\n\nmidway_num\x18\x05 \x01(\x05\"\xb1\x01\n\x11xl_gw_turn_stat_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12)\n\nin_ts_list\x18\x04 \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12*\n\x0bout_ts_list\x18\x05 \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\">\n\x15xl_gw_turn_stat_bkt_t\x12%\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x18.xlsyn.xl_gw_turn_stat_t\"P\n\x07xl_gw_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\"U\n\rxl_gw_cross_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12\x11\n\tcross_seq\x18\x03 \x01(\x05\x12\x0f\n\x07src_dir\x18\x04 \x01(\t\"\xf4\x01\n\rxl_gw_index_t\x12\x18\n\x10nostop_pass_rate\x18\x01 \x01(\x02\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x18\n\x10\x63ross_stop_times\x18\x03 \x01(\x02\x12\x13\n\x0btravel_time\x18\x04 \x01(\x05\x12\r\n\x05speed\x18\x05 \x01(\x02\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\x1a\n\x02gw\x18\x07 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x0e\n\x06\x64\x61ynum\x18\x08 \x01(\x05\x12#\n\x05grade\x18\t \x01(\x0e\x32\x14.xlsyn.xl_gw_grade_t\x12\x12\n\nmove_speed\x18\n \x01(\x02\"\xce\x03\n\x13xl_gw_performance_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12\x18\n\x10nostop_pass_rate\x18\x04 \x01(\x02\x12\x12\n\nstop_times\x18\x05 \x01(\x02\x12\x18\n\x10\x63ross_stop_times\x18\x06 \x01(\x02\x12\x13\n\x0btravel_time\x18\x07 \x01(\x05\x12\r\n\x05speed\x18\x08 \x01(\x02\x12\x12\n\ndelay_time\x18\t \x01(\x05\x12/\n\x0froad_index_list\x18\n \x03(\x0b\x32\x16.xlsyn.xl_road_index_t\x12)\n\nin_ts_list\x18\x0b \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12*\n\x0bout_ts_list\x18\x0c \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12\x31\n\x07gtb_bkt\x18\r \x03(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\x12\x0e\n\x06\x64\x61ynum\x18\x0e \x01(\x05\x12\x0f\n\x07gtb_num\x18\x0f \x01(\x05\x12\x14\n\x0cpart_gtb_num\x18\x10 \x01(\x02\"\x99\x01\n\x13xl_gw_index_curve_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12(\n\nindex_list\x18\x04 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x11\n\tstart_day\x18\x05 \x01(\x05\"\x8b\x01\n\x17xl_gw_cross_turn_stat_t\x12#\n\x05\x63ross\x18\x01 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12$\n\x05in_ts\x18\x02 \x01(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12%\n\x06out_ts\x18\x03 \x01(\x0b\x32\x15.xlsyn.xl_turn_stat_t\"[\n\x0cxl_gw_diff_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x1d\n\x15nostop_pass_rate_prev\x18\x02 \x01(\x02\x12\x1c\n\x14nostop_pass_rate_now\x18\x03 \x01(\x02\"\xa4\x01\n\x13xl_gw_report_diff_t\x12\x1e\n\x16smooth_gw_percent_diff\x18\x01 \x01(\x02\x12\'\n\nbetter_gws\x18\x02 \x03(\x0b\x32\x13.xlsyn.xl_gw_diff_t\x12&\n\tworse_gws\x18\x03 \x03(\x0b\x32\x13.xlsyn.xl_gw_diff_t\x12\x0f\n\x07ref_day\x18\x05 \x01(\x05\x12\x0b\n\x03\x64\x61y\x18\x06 \x01(\x05\"/\n\x0exl_vibration_t\x12\r\n\x05range\x18\x01 \x01(\x02\x12\x0e\n\x06stddev\x18\x02 \x01(\x02\"M\n\x0bxl_gw_vib_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\"\n\x03vib\x18\x02 \x01(\x0b\x32\x15.xlsyn.xl_vibration_t\"f\n\x0exl_cross_pos_t\x12\x10\n\x08wave_dir\x18\x01 \x01(\x05\x12\x11\n\tcross_seq\x18\x02 \x01(\x05\x12\x12\n\nstop_times\x18\x03 \x01(\x02\x12\x1b\n\x13\x63onn_park_cross_num\x18\x04 \x01(\x05\"}\n\x12xl_gw_park_cross_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12.\n\x0fpark_cross_list\x18\x02 \x03(\x0b\x32\x15.xlsyn.xl_cross_pos_t\x12\x1b\n\x13prev_park_cross_num\x18\x03 \x01(\x05\"\x9c\x04\n\x10xl_gw_ts_index_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x1c\n\x14\x62\x61\x64_split_cross_rate\x18\x02 \x01(\x02\x12\x1c\n\x14\x62\x61\x64_merge_cross_rate\x18\x03 \x01(\x02\x12\x19\n\x11max_split_percent\x18\x04 \x01(\x02\x12-\n\x0fmax_split_cross\x18\x05 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x19\n\x11max_merge_percent\x18\x06 \x01(\x02\x12-\n\x0fmax_merge_cross\x18\x07 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x32\n\x14\x62\x61\x64_split_cross_list\x18\x08 \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x32\n\x14\x62\x61\x64_merge_cross_list\x18\t \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12!\n\x19prev_bad_split_cross_rate\x18\n \x01(\x02\x12!\n\x19prev_bad_merge_cross_rate\x18\x0b \x01(\x02\x12\x36\n\x18new_bad_split_cross_list\x18\x0c \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x36\n\x18new_bad_merge_cross_list\x18\r \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\"\xa0\x01\n\x13xl_gw_cross_delay_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x16\n\x0e\x61vg_delay_time\x18\x02 \x01(\x05\x12\x16\n\x0emax_delay_time\x18\x03 \x01(\x05\x12)\n\x0bworst_cross\x18\x04 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x12\n\nstop_times\x18\x05 \x01(\x02\"\xad\x01\n\x11xl_gw_odi_index_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x11\n\tcross_seq\x18\x02 \x01(\x05\x12\x0f\n\x07src_dir\x18\x03 \x01(\t\x12#\n\x02tp\x18\x04 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12\x12\n\nstop_times\x18\x05 \x01(\x02\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\x17\n\x0fprev_stop_times\x18\x07 \x01(\x02\"\xf7\x01\n\rxl_gw_badtp_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12.\n\x08\x62\x61\x64_type\x18\x02 \x01(\x0e\x32\x1c.xlsyn.xl_gwtp_bad_reasone_t\x12\x19\n\x11park_alot_weekday\x18\x03 \x01(\x05\x12\x13\n\x0b\x66low_stddev\x18\x04 \x01(\x02\x12\x12\n\nmove_speed\x18\x05 \x01(\x05\x12\x1a\n\x12\x61vg_adj_speed_diff\x18\x06 \x01(\x02\x12\x1e\n\x16\x66orward_backward_ratio\x18\x07 \x01(\x02\x12\x1a\n\x12\x65xpected_wave_type\x18\x08 \x01(\x05\"\x9a\x08\n\x0exl_gw_report_t\x12\r\n\x05jobid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x19\n\x11smooth_gw_percent\x18\x03 \x01(\x02\x12\'\n\tjob_index\x18\x04 \x01(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12,\n\x0ejob_index_prev\x18\x05 \x01(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12.\n\x10\x61ll_gwtp_indexes\x18\x06 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x33\n\x15\x61ll_gwtp_indexes_prev\x18\x07 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x18\n\x10\x66ocus_gwtp_idxes\x18\x08 \x03(\x05\x12\x1f\n\x17lowest_grade_gwtp_idxes\x18\t \x03(\x05\x12\x1b\n\x13improved_gwtp_idxes\x18\n \x03(\x05\x12\x1a\n\x12turnbad_gwtp_idxes\x18\x0b \x03(\x05\x12\x37\n\x14gwtp_park_cross_list\x18\x0c \x03(\x0b\x32\x19.xlsyn.xl_gw_park_cross_t\x12;\n\x18gwtp_connpark_cross_list\x18\r \x03(\x0b\x32\x19.xlsyn.xl_gw_park_cross_t\x12\x34\n\x13\x61ll_gwtp_ts_indexes\x18\x0e \x03(\x0b\x32\x17.xlsyn.xl_gw_ts_index_t\x12=\n\x19top_cross_delay_gwtp_list\x18\x0f \x03(\x0b\x32\x1a.xlsyn.xl_gw_cross_delay_t\x12;\n\x17top_odi_delay_gwtp_list\x18\x10 \x03(\x0b\x32\x1a.xlsyn.xl_gw_cross_delay_t\x12\x33\n\x15\x62\x61\x64_weekday_gwtp_list\x18\x11 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12.\n\x10\x62\x61\x64_tp_gwtp_list\x18\x12 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x35\n\x17low_movespeed_gwtp_list\x18\x13 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x38\n\x1a\x61\x64jspeed_bigdiff_gwtp_list\x18\x14 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x32\n\x14wrong_type_gwtp_list\x18\x15 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x36\n\x14\x61ll_odi_gwtp_indexes\x18\x16 \x03(\x0b\x32\x18.xlsyn.xl_gw_odi_index_t\x12\x37\n\x15turnbad_odi_gwtp_list\x18\x17 \x03(\x0b\x32\x18.xlsyn.xl_gw_odi_index_t\"s\n\x12xl_gw_flow_curve_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0e\n\x06\x66lows0\x18\x02 \x03(\x05\x12\x0e\n\x06\x66lows1\x18\x03 \x03(\x05\x12\x0b\n\x03\x64\x61y\x18\x04 \x01(\x05\x12\x0f\n\x07speeds0\x18\x05 \x03(\x02\x12\x0f\n\x07speeds1\x18\x06 \x03(\x02\"_\n\x10xl_midway_info_t\x12\x12\n\nmidway_out\x18\x01 \x01(\x05\x12\x11\n\tmidway_in\x18\x02 \x01(\x05\x12\x11\n\thead_flow\x18\x03 \x01(\x05\x12\x11\n\ttail_flow\x18\x04 \x01(\x05\"i\n\x14xl_day_midway_info_t\x12\x10\n\x08wave_dir\x18\x01 \x01(\x05\x12\x10\n\x08road_req\x18\x02 \x01(\x05\x12-\n\x0cmidway_flows\x18\x03 \x03(\x0b\x32\x17.xlsyn.xl_midway_info_t\"\xa4\x01\n\x13xl_gw_midway_info_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x37\n\x12road_midway_infos0\x18\x03 \x03(\x0b\x32\x1b.xlsyn.xl_day_midway_info_t\x12\x37\n\x12road_midway_infos1\x18\x04 \x03(\x0b\x32\x1b.xlsyn.xl_day_midway_info_t\"k\n\x0bxl_tt_odi_t\x12\x10\n\x08start_hm\x18\x01 \x01(\x05\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x05\x12\x12\n\nsample_num\x18\x04 \x01(\x05\x12\x0e\n\x06\x65nd_hm\x18\x05 \x01(\x05\"\xb3\x01\n\x08xl_odi_t\x12\x0f\n\x07mlinkid\x18\x01 \x01(\t\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x05\x12\x0f\n\x07src_dir\x18\x04 \x01(\t\x12\x12\n\nsample_num\x18\x05 \x01(\x05\x12#\n\x07odi_seq\x18\x06 \x03(\x0b\x32\x12.xlsyn.xl_tt_odi_t\x12$\n\x08peak_odi\x18\x07 \x01(\x0b\x32\x12.xlsyn.xl_tt_odi_t\":\n\x0exl_cross_odi_t\x12(\n\x0finroad_odi_list\x18\x01 \x03(\x0b\x32\x0f.xlsyn.xl_odi_t\"\x81\x01\n\x0bxl_gw_odi_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12#\n\x02tp\x18\x02 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12-\n\x0e\x63ross_odi_list\x18\x03 \x03(\x0b\x32\x15.xlsyn.xl_cross_odi_t\x12\x0e\n\x06\x64\x61ynum\x18\x04 \x01(\x05\"2\n\x0fxl_gw_odi_bkt_t\x12\x1f\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x12.xlsyn.xl_gw_odi_t\"X\n\x0fxl_survey_pos_t\x12 \n\x03pos\x18\x01 \x01(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\x10\n\x08road_idx\x18\x02 \x01(\x05\x12\x11\n\timage_url\x18\x03 \x01(\t\"\xd7\x01\n\x15xl_gw_survey_result_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12\x0e\n\x06\x64\x61ynum\x18\x03 \x01(\x05\x12\x0f\n\x07orderid\x18\x04 \x01(\t\x12\x0f\n\x07gif_url\x18\x05 \x01(\t\x12(\n\x08pos_list\x18\x06 \x03(\x0b\x32\x16.xlsyn.xl_survey_pos_t\x12-\n\x03gtb\x18\x07 \x01(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\x12\x11\n\tother_dir\x18\x08 \x01(\t\"\x87\x01\n\x18xl_cross_survey_result_t\x12\x0f\n\x07\x63rossid\x18\x01 \x01(\t\x12\x0f\n\x07src_dir\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x61ynum\x18\x03 \x01(\x05\x12\x0f\n\x07orderid\x18\x04 \x01(\t\x12(\n\x08pos_list\x18\x05 \x03(\x0b\x32\x16.xlsyn.xl_survey_pos_t\"r\n\x15xl_inroad_passtimes_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x12\n\npasstimes0\x18\x02 \x03(\r\x12\x12\n\npasstimes1\x18\x03 \x03(\r\x12\x10\n\x08in_angle\x18\x04 \x01(\x05\x12\x0e\n\x06srcDir\x18\x05 \x01(\t\"g\n\x0cxl_lpt_msg_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x10\n\x08passtime\x18\x02 \x01(\r\x12\r\n\x05\x63\x61rid\x18\x03 \x01(\x04\x12%\n\x08pos_list\x18\x04 \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\"4\n\x0cxl_lpt_bkt_t\x12$\n\x07lpt_bkt\x18\x01 \x03(\x0b\x32\x13.xlsyn.xl_lpt_msg_t\"\x91\x01\n\x16xl_inroad_greenstart_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x11\n\tgst_list0\x18\x02 \x03(\r\x12\x11\n\tgst_list1\x18\x03 \x03(\r\x12\x10\n\x08in_angle\x18\x04 \x01(\x05\x12\x0e\n\x06srcDir\x18\x05 \x01(\t\x12\x0e\n\x06\x63ycle0\x18\x06 \x01(\x05\x12\x0e\n\x06\x63ycle1\x18\x07 \x01(\x05\"k\n\x15xl_cross_greenstart_t\x12\x0f\n\x07\x63rossid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x34\n\rturn_gst_data\x18\x03 \x03(\x0b\x32\x1d.xlsyn.xl_inroad_greenstart_t\"W\n\rxl_rg_slice_t\x12\r\n\x05phase\x18\x01 \x01(\x11\x12\x10\n\x08start_tt\x18\x02 \x01(\r\x12\x0e\n\x06\x65nd_tt\x18\x03 \x01(\r\x12\x15\n\rdist_to_light\x18\x04 \x01(\x05\"\xd6\x01\n\x0cxl_gst_msg_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x11\n\tturn_type\x18\x02 \x01(\x05\x12\x10\n\x08gst_list\x18\x03 \x03(\r\x12\x11\n\ttimestamp\x18\x04 \x01(\r\x12$\n\x06slices\x18\x05 \x03(\x0b\x32\x14.xlsyn.xl_rg_slice_t\x12\x10\n\x08in_angle\x18\x06 \x01(\x05\x12\x0f\n\x07\x63rossid\x18\x07 \x01(\t\x12%\n\x08pos_list\x18\x08 \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\r\n\x05\x63ycle\x18\t \x01(\x05\"m\n\x0cxl_gst_bkt_t\x12 \n\x03\x62kt\x18\x01 \x03(\x0b\x32\x13.xlsyn.xl_gst_msg_t\x12\x10\n\x08\x63itycode\x18\x02 \x01(\x05\x12\x11\n\tpack_info\x18\x03 \x01(\r\x12\t\n\x01t\x18\x04 \x01(\x04\x12\x0b\n\x03ver\x18\x05 \x01(\t*U\n\rxl_gw_grade_t\x12\x0e\n\nGW_UNKNOWN\x10\x00\x12\x10\n\x0cGW_EXCELLENT\x10\x01\x12\x0b\n\x07GW_GOOD\x10\x02\x12\t\n\x05GW_OK\x10\x03\x12\n\n\x06GW_BAD\x10\x04*\x8d\x01\n\x15xl_gwtp_bad_reasone_t\x12\x0e\n\nGR_UNKNOWN\x10\x00\x12\x12\n\x0eGR_BAD_WEEKDAY\x10\x01\x12\x10\n\x0cGR_TOOBIG_TP\x10\x02\x12\x13\n\x0fGR_TOOLOW_SPEED\x10\x03\x12\x13\n\x0fGR_SPEED_BIGVIB\x10\x04\x12\x14\n\x10GR_WRONG_WAVEDIR\x10\x05\x42\x15\n\x13\x63om.xinglusyn.protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14greenwave_type.proto\x12\x05xlsyn\"d\n\x0cxl_gtb_pos_t\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x0c\n\x04\x64ist\x18\x02 \x01(\x05\x12\r\n\x05speed\x18\x03 \x01(\x05\x12\x0b\n\x03lon\x18\x04 \x01(\r\x12\x0b\n\x03lat\x18\x05 \x01(\r\x12\n\n\x02ms\x18\x06 \x01(\x05\"\xc9\x03\n\x14xl_road_traj_brief_t\x12\x19\n\x11\x65nd_light_xlinkid\x18\x01 \x01(\x04\x12\x15\n\rend_crossname\x18\x02 \x01(\t\x12\x13\n\x0broad_length\x18\x03 \x01(\x05\x12\x13\n\x0btravel_time\x18\x04 \x01(\x05\x12\x11\n\tpark_time\x18\x05 \x01(\x05\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\r\n\x05speed\x18\x07 \x01(\x02\x12\x12\n\nmove_speed\x18\x08 \x01(\x02\x12\x12\n\nstop_times\x18\t \x01(\x05\x12\x16\n\x0elast_park_dist\x18\n \x01(\x05\x12%\n\x08pos_list\x18\x0b \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\x11\n\tturn_type\x18\x0c \x01(\x05\x12\x19\n\x11\x65nd_light_mlinkid\x18\r \x01(\t\x12\x0f\n\x07gps_src\x18\x0e \x01(\x05\x12\r\n\x05\x63\x61rid\x18\x0f \x01(\x04\x12\x16\n\x0epass_timestamp\x18\x10 \x01(\r\x12\r\n\x05\x63olor\x18\x11 \x01(\x05\x12\x0e\n\x06remain\x18\x12 \x01(\x05\x12\x16\n\x0eis_after_light\x18\x13 \x01(\x08\x12\x1b\n\x13xlinkid_after_light\x18\x14 \x01(\x04\"\xeb\x01\n\x0fxl_road_index_t\x12\x13\n\x0btravel_time\x18\x01 \x01(\x02\x12\x11\n\tpark_time\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x02\x12\r\n\x05speed\x18\x04 \x01(\x02\x12\x12\n\nmove_speed\x18\x05 \x01(\x02\x12\x12\n\nstop_times\x18\x06 \x01(\x02\x12\x16\n\x0elast_park_dist\x18\x07 \x01(\x02\x12\x18\n\x10nostop_pass_rate\x18\x08 \x01(\x02\x12\x18\n\x10park_time_counts\x18\t \x03(\x05\x12\x19\n\x11move_speed_counts\x18\n \x03(\x05\"D\n\x18xl_road_traj_brief_bkt_t\x12(\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x1b.xlsyn.xl_road_traj_brief_t\"\xb4\x02\n\x19xl_greenwave_traj_brief_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0e\n\x06trajid\x18\x02 \x01(\t\x12\x10\n\x08wave_dir\x18\x03 \x01(\x05\x12\x12\n\nstart_time\x18\x04 \x01(\r\x12\x10\n\x08\x65nd_time\x18\x05 \x01(\r\x12\x18\n\x10nostop_pass_rate\x18\x06 \x01(\x02\x12\x12\n\nstop_times\x18\x07 \x01(\x02\x12\x13\n\x0btravel_time\x18\x08 \x01(\x05\x12\r\n\x05speed\x18\t \x01(\x02\x12\x12\n\ndelay_time\x18\n \x01(\x05\x12\x34\n\x0froad_brief_list\x18\x0b \x03(\x0b\x32\x1b.xlsyn.xl_road_traj_brief_t\x12\x12\n\nextra_info\x18\x0c \x01(\t\x12\x0f\n\x07gps_src\x18\r \x01(\x05\"=\n\x0cxl_gtb_bkt_t\x12-\n\x03\x62kt\x18\x01 \x03(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\"S\n\x10xl_time_period_t\x12\x10\n\x08start_hm\x18\x01 \x01(\x05\x12\x0e\n\x06\x65nd_hm\x18\x02 \x01(\x05\x12\x0f\n\x07weekday\x18\x03 \x01(\x05\x12\x0c\n\x04type\x18\x04 \x01(\x05\"m\n\x0exl_turn_stat_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x0f\n\x07mlinkid\x18\x02 \x01(\t\x12\x12\n\ninout_type\x18\x03 \x01(\x05\x12\x11\n\tturn_stat\x18\x04 \x03(\x05\x12\x12\n\nmidway_num\x18\x05 \x01(\x05\"\xb1\x01\n\x11xl_gw_turn_stat_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12)\n\nin_ts_list\x18\x04 \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12*\n\x0bout_ts_list\x18\x05 \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\">\n\x15xl_gw_turn_stat_bkt_t\x12%\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x18.xlsyn.xl_gw_turn_stat_t\"P\n\x07xl_gw_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\"U\n\rxl_gw_cross_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12\x11\n\tcross_seq\x18\x03 \x01(\x05\x12\x0f\n\x07src_dir\x18\x04 \x01(\t\"\xf4\x01\n\rxl_gw_index_t\x12\x18\n\x10nostop_pass_rate\x18\x01 \x01(\x02\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x18\n\x10\x63ross_stop_times\x18\x03 \x01(\x02\x12\x13\n\x0btravel_time\x18\x04 \x01(\x05\x12\r\n\x05speed\x18\x05 \x01(\x02\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\x1a\n\x02gw\x18\x07 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x0e\n\x06\x64\x61ynum\x18\x08 \x01(\x05\x12#\n\x05grade\x18\t \x01(\x0e\x32\x14.xlsyn.xl_gw_grade_t\x12\x12\n\nmove_speed\x18\n \x01(\x02\"\xce\x03\n\x13xl_gw_performance_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12\x18\n\x10nostop_pass_rate\x18\x04 \x01(\x02\x12\x12\n\nstop_times\x18\x05 \x01(\x02\x12\x18\n\x10\x63ross_stop_times\x18\x06 \x01(\x02\x12\x13\n\x0btravel_time\x18\x07 \x01(\x05\x12\r\n\x05speed\x18\x08 \x01(\x02\x12\x12\n\ndelay_time\x18\t \x01(\x05\x12/\n\x0froad_index_list\x18\n \x03(\x0b\x32\x16.xlsyn.xl_road_index_t\x12)\n\nin_ts_list\x18\x0b \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12*\n\x0bout_ts_list\x18\x0c \x03(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12\x31\n\x07gtb_bkt\x18\r \x03(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\x12\x0e\n\x06\x64\x61ynum\x18\x0e \x01(\x05\x12\x0f\n\x07gtb_num\x18\x0f \x01(\x05\x12\x14\n\x0cpart_gtb_num\x18\x10 \x01(\x02\"\x99\x01\n\x13xl_gw_index_curve_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12#\n\x02tp\x18\x03 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12(\n\nindex_list\x18\x04 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x11\n\tstart_day\x18\x05 \x01(\x05\"\x8b\x01\n\x17xl_gw_cross_turn_stat_t\x12#\n\x05\x63ross\x18\x01 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12$\n\x05in_ts\x18\x02 \x01(\x0b\x32\x15.xlsyn.xl_turn_stat_t\x12%\n\x06out_ts\x18\x03 \x01(\x0b\x32\x15.xlsyn.xl_turn_stat_t\"[\n\x0cxl_gw_diff_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x1d\n\x15nostop_pass_rate_prev\x18\x02 \x01(\x02\x12\x1c\n\x14nostop_pass_rate_now\x18\x03 \x01(\x02\"\xa4\x01\n\x13xl_gw_report_diff_t\x12\x1e\n\x16smooth_gw_percent_diff\x18\x01 \x01(\x02\x12\'\n\nbetter_gws\x18\x02 \x03(\x0b\x32\x13.xlsyn.xl_gw_diff_t\x12&\n\tworse_gws\x18\x03 \x03(\x0b\x32\x13.xlsyn.xl_gw_diff_t\x12\x0f\n\x07ref_day\x18\x05 \x01(\x05\x12\x0b\n\x03\x64\x61y\x18\x06 \x01(\x05\"/\n\x0exl_vibration_t\x12\r\n\x05range\x18\x01 \x01(\x02\x12\x0e\n\x06stddev\x18\x02 \x01(\x02\"M\n\x0bxl_gw_vib_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\"\n\x03vib\x18\x02 \x01(\x0b\x32\x15.xlsyn.xl_vibration_t\"f\n\x0exl_cross_pos_t\x12\x10\n\x08wave_dir\x18\x01 \x01(\x05\x12\x11\n\tcross_seq\x18\x02 \x01(\x05\x12\x12\n\nstop_times\x18\x03 \x01(\x02\x12\x1b\n\x13\x63onn_park_cross_num\x18\x04 \x01(\x05\"}\n\x12xl_gw_park_cross_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12.\n\x0fpark_cross_list\x18\x02 \x03(\x0b\x32\x15.xlsyn.xl_cross_pos_t\x12\x1b\n\x13prev_park_cross_num\x18\x03 \x01(\x05\"\x9c\x04\n\x10xl_gw_ts_index_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x1c\n\x14\x62\x61\x64_split_cross_rate\x18\x02 \x01(\x02\x12\x1c\n\x14\x62\x61\x64_merge_cross_rate\x18\x03 \x01(\x02\x12\x19\n\x11max_split_percent\x18\x04 \x01(\x02\x12-\n\x0fmax_split_cross\x18\x05 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x19\n\x11max_merge_percent\x18\x06 \x01(\x02\x12-\n\x0fmax_merge_cross\x18\x07 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x32\n\x14\x62\x61\x64_split_cross_list\x18\x08 \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x32\n\x14\x62\x61\x64_merge_cross_list\x18\t \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12!\n\x19prev_bad_split_cross_rate\x18\n \x01(\x02\x12!\n\x19prev_bad_merge_cross_rate\x18\x0b \x01(\x02\x12\x36\n\x18new_bad_split_cross_list\x18\x0c \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x36\n\x18new_bad_merge_cross_list\x18\r \x03(\x0b\x32\x14.xlsyn.xl_gw_cross_t\"\xa0\x01\n\x13xl_gw_cross_delay_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12\x16\n\x0e\x61vg_delay_time\x18\x02 \x01(\x05\x12\x16\n\x0emax_delay_time\x18\x03 \x01(\x05\x12)\n\x0bworst_cross\x18\x04 \x01(\x0b\x32\x14.xlsyn.xl_gw_cross_t\x12\x12\n\nstop_times\x18\x05 \x01(\x02\"\xad\x01\n\x11xl_gw_odi_index_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x11\n\tcross_seq\x18\x02 \x01(\x05\x12\x0f\n\x07src_dir\x18\x03 \x01(\t\x12#\n\x02tp\x18\x04 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12\x12\n\nstop_times\x18\x05 \x01(\x02\x12\x12\n\ndelay_time\x18\x06 \x01(\x05\x12\x17\n\x0fprev_stop_times\x18\x07 \x01(\x02\"\xf7\x01\n\rxl_gw_badtp_t\x12\x1a\n\x02gw\x18\x01 \x01(\x0b\x32\x0e.xlsyn.xl_gw_t\x12.\n\x08\x62\x61\x64_type\x18\x02 \x01(\x0e\x32\x1c.xlsyn.xl_gwtp_bad_reasone_t\x12\x19\n\x11park_alot_weekday\x18\x03 \x01(\x05\x12\x13\n\x0b\x66low_stddev\x18\x04 \x01(\x02\x12\x12\n\nmove_speed\x18\x05 \x01(\x05\x12\x1a\n\x12\x61vg_adj_speed_diff\x18\x06 \x01(\x02\x12\x1e\n\x16\x66orward_backward_ratio\x18\x07 \x01(\x02\x12\x1a\n\x12\x65xpected_wave_type\x18\x08 \x01(\x05\"\x9a\x08\n\x0exl_gw_report_t\x12\r\n\x05jobid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x19\n\x11smooth_gw_percent\x18\x03 \x01(\x02\x12\'\n\tjob_index\x18\x04 \x01(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12,\n\x0ejob_index_prev\x18\x05 \x01(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12.\n\x10\x61ll_gwtp_indexes\x18\x06 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x33\n\x15\x61ll_gwtp_indexes_prev\x18\x07 \x03(\x0b\x32\x14.xlsyn.xl_gw_index_t\x12\x18\n\x10\x66ocus_gwtp_idxes\x18\x08 \x03(\x05\x12\x1f\n\x17lowest_grade_gwtp_idxes\x18\t \x03(\x05\x12\x1b\n\x13improved_gwtp_idxes\x18\n \x03(\x05\x12\x1a\n\x12turnbad_gwtp_idxes\x18\x0b \x03(\x05\x12\x37\n\x14gwtp_park_cross_list\x18\x0c \x03(\x0b\x32\x19.xlsyn.xl_gw_park_cross_t\x12;\n\x18gwtp_connpark_cross_list\x18\r \x03(\x0b\x32\x19.xlsyn.xl_gw_park_cross_t\x12\x34\n\x13\x61ll_gwtp_ts_indexes\x18\x0e \x03(\x0b\x32\x17.xlsyn.xl_gw_ts_index_t\x12=\n\x19top_cross_delay_gwtp_list\x18\x0f \x03(\x0b\x32\x1a.xlsyn.xl_gw_cross_delay_t\x12;\n\x17top_odi_delay_gwtp_list\x18\x10 \x03(\x0b\x32\x1a.xlsyn.xl_gw_cross_delay_t\x12\x33\n\x15\x62\x61\x64_weekday_gwtp_list\x18\x11 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12.\n\x10\x62\x61\x64_tp_gwtp_list\x18\x12 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x35\n\x17low_movespeed_gwtp_list\x18\x13 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x38\n\x1a\x61\x64jspeed_bigdiff_gwtp_list\x18\x14 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x32\n\x14wrong_type_gwtp_list\x18\x15 \x03(\x0b\x32\x14.xlsyn.xl_gw_badtp_t\x12\x36\n\x14\x61ll_odi_gwtp_indexes\x18\x16 \x03(\x0b\x32\x18.xlsyn.xl_gw_odi_index_t\x12\x37\n\x15turnbad_odi_gwtp_list\x18\x17 \x03(\x0b\x32\x18.xlsyn.xl_gw_odi_index_t\"s\n\x12xl_gw_flow_curve_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0e\n\x06\x66lows0\x18\x02 \x03(\x05\x12\x0e\n\x06\x66lows1\x18\x03 \x03(\x05\x12\x0b\n\x03\x64\x61y\x18\x04 \x01(\x05\x12\x0f\n\x07speeds0\x18\x05 \x03(\x02\x12\x0f\n\x07speeds1\x18\x06 \x03(\x02\"_\n\x10xl_midway_info_t\x12\x12\n\nmidway_out\x18\x01 \x01(\x05\x12\x11\n\tmidway_in\x18\x02 \x01(\x05\x12\x11\n\thead_flow\x18\x03 \x01(\x05\x12\x11\n\ttail_flow\x18\x04 \x01(\x05\"i\n\x14xl_day_midway_info_t\x12\x10\n\x08wave_dir\x18\x01 \x01(\x05\x12\x10\n\x08road_req\x18\x02 \x01(\x05\x12-\n\x0cmidway_flows\x18\x03 \x03(\x0b\x32\x17.xlsyn.xl_midway_info_t\"\xa4\x01\n\x13xl_gw_midway_info_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x37\n\x12road_midway_infos0\x18\x03 \x03(\x0b\x32\x1b.xlsyn.xl_day_midway_info_t\x12\x37\n\x12road_midway_infos1\x18\x04 \x03(\x0b\x32\x1b.xlsyn.xl_day_midway_info_t\"k\n\x0bxl_tt_odi_t\x12\x10\n\x08start_hm\x18\x01 \x01(\x05\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x05\x12\x12\n\nsample_num\x18\x04 \x01(\x05\x12\x0e\n\x06\x65nd_hm\x18\x05 \x01(\x05\"\xb3\x01\n\x08xl_odi_t\x12\x0f\n\x07mlinkid\x18\x01 \x01(\t\x12\x12\n\nstop_times\x18\x02 \x01(\x02\x12\x12\n\ndelay_time\x18\x03 \x01(\x05\x12\x0f\n\x07src_dir\x18\x04 \x01(\t\x12\x12\n\nsample_num\x18\x05 \x01(\x05\x12#\n\x07odi_seq\x18\x06 \x03(\x0b\x32\x12.xlsyn.xl_tt_odi_t\x12$\n\x08peak_odi\x18\x07 \x01(\x0b\x32\x12.xlsyn.xl_tt_odi_t\":\n\x0exl_cross_odi_t\x12(\n\x0finroad_odi_list\x18\x01 \x03(\x0b\x32\x0f.xlsyn.xl_odi_t\"\x81\x01\n\x0bxl_gw_odi_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12#\n\x02tp\x18\x02 \x01(\x0b\x32\x17.xlsyn.xl_time_period_t\x12-\n\x0e\x63ross_odi_list\x18\x03 \x03(\x0b\x32\x15.xlsyn.xl_cross_odi_t\x12\x0e\n\x06\x64\x61ynum\x18\x04 \x01(\x05\"2\n\x0fxl_gw_odi_bkt_t\x12\x1f\n\x03\x62kt\x18\x01 \x03(\x0b\x32\x12.xlsyn.xl_gw_odi_t\"X\n\x0fxl_survey_pos_t\x12 \n\x03pos\x18\x01 \x01(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\x10\n\x08road_idx\x18\x02 \x01(\x05\x12\x11\n\timage_url\x18\x03 \x01(\t\"\xd7\x01\n\x15xl_gw_survey_result_t\x12\x0e\n\x06waveid\x18\x01 \x01(\t\x12\x10\n\x08wave_dir\x18\x02 \x01(\x05\x12\x0e\n\x06\x64\x61ynum\x18\x03 \x01(\x05\x12\x0f\n\x07orderid\x18\x04 \x01(\t\x12\x0f\n\x07gif_url\x18\x05 \x01(\t\x12(\n\x08pos_list\x18\x06 \x03(\x0b\x32\x16.xlsyn.xl_survey_pos_t\x12-\n\x03gtb\x18\x07 \x01(\x0b\x32 .xlsyn.xl_greenwave_traj_brief_t\x12\x11\n\tother_dir\x18\x08 \x01(\t\"\xac\x01\n\x18xl_cross_survey_result_t\x12\x0f\n\x07\x63rossid\x18\x01 \x01(\t\x12\x0f\n\x07src_dir\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x61ynum\x18\x03 \x01(\x05\x12\x0f\n\x07orderid\x18\x04 \x01(\t\x12(\n\x08pos_list\x18\x05 \x03(\x0b\x32\x16.xlsyn.xl_survey_pos_t\x12\x10\n\x08inroadid\x18\x06 \x01(\t\x12\x11\n\toutroadid\x18\x07 \x01(\t\"r\n\x15xl_inroad_passtimes_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x12\n\npasstimes0\x18\x02 \x03(\r\x12\x12\n\npasstimes1\x18\x03 \x03(\r\x12\x10\n\x08in_angle\x18\x04 \x01(\x05\x12\x0e\n\x06srcDir\x18\x05 \x01(\t\"g\n\x0cxl_lpt_msg_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x10\n\x08passtime\x18\x02 \x01(\r\x12\r\n\x05\x63\x61rid\x18\x03 \x01(\x04\x12%\n\x08pos_list\x18\x04 \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\"4\n\x0cxl_lpt_bkt_t\x12$\n\x07lpt_bkt\x18\x01 \x03(\x0b\x32\x13.xlsyn.xl_lpt_msg_t\"\x91\x01\n\x16xl_inroad_greenstart_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x11\n\tgst_list0\x18\x02 \x03(\r\x12\x11\n\tgst_list1\x18\x03 \x03(\r\x12\x10\n\x08in_angle\x18\x04 \x01(\x05\x12\x0e\n\x06srcDir\x18\x05 \x01(\t\x12\x0e\n\x06\x63ycle0\x18\x06 \x01(\x05\x12\x0e\n\x06\x63ycle1\x18\x07 \x01(\x05\"k\n\x15xl_cross_greenstart_t\x12\x0f\n\x07\x63rossid\x18\x01 \x01(\t\x12\x0b\n\x03\x64\x61y\x18\x02 \x01(\x05\x12\x34\n\rturn_gst_data\x18\x03 \x03(\x0b\x32\x1d.xlsyn.xl_inroad_greenstart_t\"W\n\rxl_rg_slice_t\x12\r\n\x05phase\x18\x01 \x01(\x11\x12\x10\n\x08start_tt\x18\x02 \x01(\r\x12\x0e\n\x06\x65nd_tt\x18\x03 \x01(\r\x12\x15\n\rdist_to_light\x18\x04 \x01(\x05\"\xd6\x01\n\x0cxl_gst_msg_t\x12\x0f\n\x07xlinkid\x18\x01 \x01(\x04\x12\x11\n\tturn_type\x18\x02 \x01(\x05\x12\x10\n\x08gst_list\x18\x03 \x03(\r\x12\x11\n\ttimestamp\x18\x04 \x01(\r\x12$\n\x06slices\x18\x05 \x03(\x0b\x32\x14.xlsyn.xl_rg_slice_t\x12\x10\n\x08in_angle\x18\x06 \x01(\x05\x12\x0f\n\x07\x63rossid\x18\x07 \x01(\t\x12%\n\x08pos_list\x18\x08 \x03(\x0b\x32\x13.xlsyn.xl_gtb_pos_t\x12\r\n\x05\x63ycle\x18\t \x01(\x05\"m\n\x0cxl_gst_bkt_t\x12 \n\x03\x62kt\x18\x01 \x03(\x0b\x32\x13.xlsyn.xl_gst_msg_t\x12\x10\n\x08\x63itycode\x18\x02 \x01(\x05\x12\x11\n\tpack_info\x18\x03 \x01(\r\x12\t\n\x01t\x18\x04 \x01(\x04\x12\x0b\n\x03ver\x18\x05 \x01(\t*U\n\rxl_gw_grade_t\x12\x0e\n\nGW_UNKNOWN\x10\x00\x12\x10\n\x0cGW_EXCELLENT\x10\x01\x12\x0b\n\x07GW_GOOD\x10\x02\x12\t\n\x05GW_OK\x10\x03\x12\n\n\x06GW_BAD\x10\x04*\x8d\x01\n\x15xl_gwtp_bad_reasone_t\x12\x0e\n\nGR_UNKNOWN\x10\x00\x12\x12\n\x0eGR_BAD_WEEKDAY\x10\x01\x12\x10\n\x0cGR_TOOBIG_TP\x10\x02\x12\x13\n\x0fGR_TOOLOW_SPEED\x10\x03\x12\x13\n\x0fGR_SPEED_BIGVIB\x10\x04\x12\x14\n\x10GR_WRONG_WAVEDIR\x10\x05\x42\x15\n\x13\x63om.xinglusyn.protob\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'greenwave_type_pb2', globals()) @@ -21,102 +21,102 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n\023com.xinglusyn.proto' - _XL_GW_GRADE_T._serialized_start=8063 - _XL_GW_GRADE_T._serialized_end=8148 - _XL_GWTP_BAD_REASONE_T._serialized_start=8151 - _XL_GWTP_BAD_REASONE_T._serialized_end=8292 + _XL_GW_GRADE_T._serialized_start=8153 + _XL_GW_GRADE_T._serialized_end=8238 + _XL_GWTP_BAD_REASONE_T._serialized_start=8241 + _XL_GWTP_BAD_REASONE_T._serialized_end=8382 _XL_GTB_POS_T._serialized_start=31 _XL_GTB_POS_T._serialized_end=131 _XL_ROAD_TRAJ_BRIEF_T._serialized_start=134 - _XL_ROAD_TRAJ_BRIEF_T._serialized_end=538 - _XL_ROAD_INDEX_T._serialized_start=541 - _XL_ROAD_INDEX_T._serialized_end=776 - _XL_ROAD_TRAJ_BRIEF_BKT_T._serialized_start=778 - _XL_ROAD_TRAJ_BRIEF_BKT_T._serialized_end=846 - _XL_GREENWAVE_TRAJ_BRIEF_T._serialized_start=849 - _XL_GREENWAVE_TRAJ_BRIEF_T._serialized_end=1157 - _XL_GTB_BKT_T._serialized_start=1159 - _XL_GTB_BKT_T._serialized_end=1220 - _XL_TIME_PERIOD_T._serialized_start=1222 - _XL_TIME_PERIOD_T._serialized_end=1305 - _XL_TURN_STAT_T._serialized_start=1307 - _XL_TURN_STAT_T._serialized_end=1416 - _XL_GW_TURN_STAT_T._serialized_start=1419 - _XL_GW_TURN_STAT_T._serialized_end=1596 - _XL_GW_TURN_STAT_BKT_T._serialized_start=1598 - _XL_GW_TURN_STAT_BKT_T._serialized_end=1660 - _XL_GW_T._serialized_start=1662 - _XL_GW_T._serialized_end=1742 - _XL_GW_CROSS_T._serialized_start=1744 - _XL_GW_CROSS_T._serialized_end=1829 - _XL_GW_INDEX_T._serialized_start=1832 - _XL_GW_INDEX_T._serialized_end=2076 - _XL_GW_PERFORMANCE_T._serialized_start=2079 - _XL_GW_PERFORMANCE_T._serialized_end=2541 - _XL_GW_INDEX_CURVE_T._serialized_start=2544 - _XL_GW_INDEX_CURVE_T._serialized_end=2697 - _XL_GW_CROSS_TURN_STAT_T._serialized_start=2700 - _XL_GW_CROSS_TURN_STAT_T._serialized_end=2839 - _XL_GW_DIFF_T._serialized_start=2841 - _XL_GW_DIFF_T._serialized_end=2932 - _XL_GW_REPORT_DIFF_T._serialized_start=2935 - _XL_GW_REPORT_DIFF_T._serialized_end=3099 - _XL_VIBRATION_T._serialized_start=3101 - _XL_VIBRATION_T._serialized_end=3148 - _XL_GW_VIB_T._serialized_start=3150 - _XL_GW_VIB_T._serialized_end=3227 - _XL_CROSS_POS_T._serialized_start=3229 - _XL_CROSS_POS_T._serialized_end=3331 - _XL_GW_PARK_CROSS_T._serialized_start=3333 - _XL_GW_PARK_CROSS_T._serialized_end=3458 - _XL_GW_TS_INDEX_T._serialized_start=3461 - _XL_GW_TS_INDEX_T._serialized_end=4001 - _XL_GW_CROSS_DELAY_T._serialized_start=4004 - _XL_GW_CROSS_DELAY_T._serialized_end=4164 - _XL_GW_ODI_INDEX_T._serialized_start=4167 - _XL_GW_ODI_INDEX_T._serialized_end=4340 - _XL_GW_BADTP_T._serialized_start=4343 - _XL_GW_BADTP_T._serialized_end=4590 - _XL_GW_REPORT_T._serialized_start=4593 - _XL_GW_REPORT_T._serialized_end=5643 - _XL_GW_FLOW_CURVE_T._serialized_start=5645 - _XL_GW_FLOW_CURVE_T._serialized_end=5760 - _XL_MIDWAY_INFO_T._serialized_start=5762 - _XL_MIDWAY_INFO_T._serialized_end=5857 - _XL_DAY_MIDWAY_INFO_T._serialized_start=5859 - _XL_DAY_MIDWAY_INFO_T._serialized_end=5964 - _XL_GW_MIDWAY_INFO_T._serialized_start=5967 - _XL_GW_MIDWAY_INFO_T._serialized_end=6131 - _XL_TT_ODI_T._serialized_start=6133 - _XL_TT_ODI_T._serialized_end=6240 - _XL_ODI_T._serialized_start=6243 - _XL_ODI_T._serialized_end=6422 - _XL_CROSS_ODI_T._serialized_start=6424 - _XL_CROSS_ODI_T._serialized_end=6482 - _XL_GW_ODI_T._serialized_start=6485 - _XL_GW_ODI_T._serialized_end=6614 - _XL_GW_ODI_BKT_T._serialized_start=6616 - _XL_GW_ODI_BKT_T._serialized_end=6666 - _XL_SURVEY_POS_T._serialized_start=6668 - _XL_SURVEY_POS_T._serialized_end=6756 - _XL_GW_SURVEY_RESULT_T._serialized_start=6759 - _XL_GW_SURVEY_RESULT_T._serialized_end=6974 - _XL_CROSS_SURVEY_RESULT_T._serialized_start=6977 - _XL_CROSS_SURVEY_RESULT_T._serialized_end=7112 - _XL_INROAD_PASSTIMES_T._serialized_start=7114 - _XL_INROAD_PASSTIMES_T._serialized_end=7228 - _XL_LPT_MSG_T._serialized_start=7230 - _XL_LPT_MSG_T._serialized_end=7333 - _XL_LPT_BKT_T._serialized_start=7335 - _XL_LPT_BKT_T._serialized_end=7387 - _XL_INROAD_GREENSTART_T._serialized_start=7390 - _XL_INROAD_GREENSTART_T._serialized_end=7535 - _XL_CROSS_GREENSTART_T._serialized_start=7537 - _XL_CROSS_GREENSTART_T._serialized_end=7644 - _XL_RG_SLICE_T._serialized_start=7646 - _XL_RG_SLICE_T._serialized_end=7733 - _XL_GST_MSG_T._serialized_start=7736 - _XL_GST_MSG_T._serialized_end=7950 - _XL_GST_BKT_T._serialized_start=7952 - _XL_GST_BKT_T._serialized_end=8061 + _XL_ROAD_TRAJ_BRIEF_T._serialized_end=591 + _XL_ROAD_INDEX_T._serialized_start=594 + _XL_ROAD_INDEX_T._serialized_end=829 + _XL_ROAD_TRAJ_BRIEF_BKT_T._serialized_start=831 + _XL_ROAD_TRAJ_BRIEF_BKT_T._serialized_end=899 + _XL_GREENWAVE_TRAJ_BRIEF_T._serialized_start=902 + _XL_GREENWAVE_TRAJ_BRIEF_T._serialized_end=1210 + _XL_GTB_BKT_T._serialized_start=1212 + _XL_GTB_BKT_T._serialized_end=1273 + _XL_TIME_PERIOD_T._serialized_start=1275 + _XL_TIME_PERIOD_T._serialized_end=1358 + _XL_TURN_STAT_T._serialized_start=1360 + _XL_TURN_STAT_T._serialized_end=1469 + _XL_GW_TURN_STAT_T._serialized_start=1472 + _XL_GW_TURN_STAT_T._serialized_end=1649 + _XL_GW_TURN_STAT_BKT_T._serialized_start=1651 + _XL_GW_TURN_STAT_BKT_T._serialized_end=1713 + _XL_GW_T._serialized_start=1715 + _XL_GW_T._serialized_end=1795 + _XL_GW_CROSS_T._serialized_start=1797 + _XL_GW_CROSS_T._serialized_end=1882 + _XL_GW_INDEX_T._serialized_start=1885 + _XL_GW_INDEX_T._serialized_end=2129 + _XL_GW_PERFORMANCE_T._serialized_start=2132 + _XL_GW_PERFORMANCE_T._serialized_end=2594 + _XL_GW_INDEX_CURVE_T._serialized_start=2597 + _XL_GW_INDEX_CURVE_T._serialized_end=2750 + _XL_GW_CROSS_TURN_STAT_T._serialized_start=2753 + _XL_GW_CROSS_TURN_STAT_T._serialized_end=2892 + _XL_GW_DIFF_T._serialized_start=2894 + _XL_GW_DIFF_T._serialized_end=2985 + _XL_GW_REPORT_DIFF_T._serialized_start=2988 + _XL_GW_REPORT_DIFF_T._serialized_end=3152 + _XL_VIBRATION_T._serialized_start=3154 + _XL_VIBRATION_T._serialized_end=3201 + _XL_GW_VIB_T._serialized_start=3203 + _XL_GW_VIB_T._serialized_end=3280 + _XL_CROSS_POS_T._serialized_start=3282 + _XL_CROSS_POS_T._serialized_end=3384 + _XL_GW_PARK_CROSS_T._serialized_start=3386 + _XL_GW_PARK_CROSS_T._serialized_end=3511 + _XL_GW_TS_INDEX_T._serialized_start=3514 + _XL_GW_TS_INDEX_T._serialized_end=4054 + _XL_GW_CROSS_DELAY_T._serialized_start=4057 + _XL_GW_CROSS_DELAY_T._serialized_end=4217 + _XL_GW_ODI_INDEX_T._serialized_start=4220 + _XL_GW_ODI_INDEX_T._serialized_end=4393 + _XL_GW_BADTP_T._serialized_start=4396 + _XL_GW_BADTP_T._serialized_end=4643 + _XL_GW_REPORT_T._serialized_start=4646 + _XL_GW_REPORT_T._serialized_end=5696 + _XL_GW_FLOW_CURVE_T._serialized_start=5698 + _XL_GW_FLOW_CURVE_T._serialized_end=5813 + _XL_MIDWAY_INFO_T._serialized_start=5815 + _XL_MIDWAY_INFO_T._serialized_end=5910 + _XL_DAY_MIDWAY_INFO_T._serialized_start=5912 + _XL_DAY_MIDWAY_INFO_T._serialized_end=6017 + _XL_GW_MIDWAY_INFO_T._serialized_start=6020 + _XL_GW_MIDWAY_INFO_T._serialized_end=6184 + _XL_TT_ODI_T._serialized_start=6186 + _XL_TT_ODI_T._serialized_end=6293 + _XL_ODI_T._serialized_start=6296 + _XL_ODI_T._serialized_end=6475 + _XL_CROSS_ODI_T._serialized_start=6477 + _XL_CROSS_ODI_T._serialized_end=6535 + _XL_GW_ODI_T._serialized_start=6538 + _XL_GW_ODI_T._serialized_end=6667 + _XL_GW_ODI_BKT_T._serialized_start=6669 + _XL_GW_ODI_BKT_T._serialized_end=6719 + _XL_SURVEY_POS_T._serialized_start=6721 + _XL_SURVEY_POS_T._serialized_end=6809 + _XL_GW_SURVEY_RESULT_T._serialized_start=6812 + _XL_GW_SURVEY_RESULT_T._serialized_end=7027 + _XL_CROSS_SURVEY_RESULT_T._serialized_start=7030 + _XL_CROSS_SURVEY_RESULT_T._serialized_end=7202 + _XL_INROAD_PASSTIMES_T._serialized_start=7204 + _XL_INROAD_PASSTIMES_T._serialized_end=7318 + _XL_LPT_MSG_T._serialized_start=7320 + _XL_LPT_MSG_T._serialized_end=7423 + _XL_LPT_BKT_T._serialized_start=7425 + _XL_LPT_BKT_T._serialized_end=7477 + _XL_INROAD_GREENSTART_T._serialized_start=7480 + _XL_INROAD_GREENSTART_T._serialized_end=7625 + _XL_CROSS_GREENSTART_T._serialized_start=7627 + _XL_CROSS_GREENSTART_T._serialized_end=7734 + _XL_RG_SLICE_T._serialized_start=7736 + _XL_RG_SLICE_T._serialized_end=7823 + _XL_GST_MSG_T._serialized_start=7826 + _XL_GST_MSG_T._serialized_end=8040 + _XL_GST_BKT_T._serialized_start=8042 + _XL_GST_BKT_T._serialized_end=8151 # @@protoc_insertion_point(module_scope)