修复路口对比报告bug
This commit is contained in:
parent
2a00169095
commit
3a64c328e8
|
|
@ -66,7 +66,7 @@ def gen_compare_report_api():
|
|||
|
||||
@app.route('/api/save_report_record', methods=['POST'])
|
||||
def save_report_record_api():
|
||||
return collect_report(request.args)
|
||||
return collect_report(request.json)
|
||||
|
||||
|
||||
@app.route('/api/query_report_records', methods=['GET'])
|
||||
|
|
|
|||
|
|
@ -96,11 +96,11 @@ def parse_comp_inroad_delay_infos(inroad_delay_infos, comp_inroad_delay_infos):
|
|||
diff_data = {
|
||||
'item': '变化量',
|
||||
'service_level': '-' if item_data['service_level'] == '-' or comp_data['service_level'] == '-' else compare_level(comp_data['service_level'], item_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),
|
||||
'stop_times': '-' if item_data['stop_times'] == '-' or comp_data['stop_times'] == '-' else round(comp_data['stop_times'] - item_data['stop_times'], 2),
|
||||
'high_park_percent': '-' if '-' in item_data['high_park_percent'] or '-' in comp_data['high_park_percent'] else str(int(float(item_data['high_park_percent'].replace('%', '')) - float(comp_data['high_park_percent'].replace('%', '')))) + '%',
|
||||
'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'],
|
||||
'delay_time': '-' if item_data['delay_time'] == '-' or comp_data['delay_time'] == '-' else comp_data['delay_time'] - item_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'),
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ def gen_cross_compare_report(params):
|
|||
# 验证文件是否已经存在
|
||||
cos_client = get_client()
|
||||
folder_manager = CosFolderManager(cos_client, g_cos_bucket)
|
||||
download_url = g_cos_root + f"/user/cross_doctor/platform_report/{nodeid}/{area_id}/cross_compare_report/" + file_name
|
||||
download_url = f"/user/cross_doctor/platform_report/{nodeid}/{area_id}/cross_compare_report/" + file_name + '.docx'
|
||||
if folder_manager.file_exists(download_url):
|
||||
res = make_common_res(0, 'ok')
|
||||
res['data'] = {
|
||||
|
|
@ -100,7 +100,7 @@ def gen_cross_compare_report(params):
|
|||
'weekdays': weekdays,
|
||||
'compare_date_range': compare_date_range,
|
||||
'weekday_str': gen_weekday_str(weekdays),
|
||||
'download_url': download_url
|
||||
'download_url': g_cos_root + download_url
|
||||
}
|
||||
return json.dumps(res, ensure_ascii=False)
|
||||
|
||||
|
|
@ -111,13 +111,14 @@ def gen_cross_compare_report(params):
|
|||
with open(localfile_path, 'w') as f:
|
||||
pass
|
||||
doc1 = DocDocumentContrastCtx(str(nodeid))
|
||||
if cut_images == 1:
|
||||
if int(cut_images) == 1:
|
||||
doc1.cut_image = 1
|
||||
doc1.area_id = area_id
|
||||
doc1.area_id = int(area_id)
|
||||
doc1.crossid = crossid
|
||||
doc1.cross_name = cross_static_info['name']
|
||||
doc1.time_list = date_list
|
||||
doc1.tp = time_range
|
||||
logging.info(doc1.cut_image, doc1.area_id, doc1.crossid, doc1.cross_name, doc1.time_list, doc1.tp)
|
||||
# 必要数据获取
|
||||
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, weekdays)
|
||||
|
|
@ -141,7 +142,7 @@ def gen_cross_compare_report(params):
|
|||
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)
|
||||
# 装配数据
|
||||
title = f"{cross_static_info['name']}路口优化对比报告"
|
||||
title = f"{cross_static_info['name']}"
|
||||
doc1.title = title
|
||||
part1_data = gen_compare_report_part1_data(data_range, compare_date_range, time_range, cross_static_info['name'], final_overview)
|
||||
if 'part1' in parts:
|
||||
|
|
@ -173,7 +174,7 @@ def gen_cross_compare_report(params):
|
|||
doc1.tpl_paragraph['part2']['part2_3'] = 1
|
||||
part2_3_data = gen_compare_report_part2_3_data(road_flow_turn_rate, avg_cross_delay_info, inroad_static_info_dict)
|
||||
detail1 = PartDetail()
|
||||
detail1.detail = "根据车辆分流转向比分析,?进口道流量占比最大为?,?进口道流量占比最小为?。路口的主要车流方向为?,?。"
|
||||
detail1.detail = "根据车辆分流转向比分析,?进口道流量占比最大为?,?进口道流量占比最小为?。路口的主要车流方向为?,?。"
|
||||
detail1.detail_value = [part2_3_data['max_src_dir'], part2_3_data['max_flow_rate'], part2_3_data['min_src_dir'], part2_3_data['min_flow_rate'], part2_3_data['main_flow_str'], part2_3_data['main_flow_detail']]
|
||||
doc1.tpl_data['part2_3'].table = [detail1]
|
||||
if 'part3' in parts:
|
||||
|
|
@ -224,7 +225,7 @@ def gen_cross_compare_report(params):
|
|||
file_stream.seek(0)
|
||||
cos_path = f'user/cross_doctor/platform_report/{nodeid}/{area_id}/cross_compare_report'
|
||||
folder_manager.ensure_folder(cos_path)
|
||||
cos_key = f"{cos_path}/{cross_static_info['name']}路口优化对比报告.docx"
|
||||
cos_key = f"{cos_path}/{file_name}.docx"
|
||||
cos_client.put_object(Bucket=g_cos_bucket, Key=cos_key, Body=file_stream)
|
||||
download_url = f'{g_cos_root}/{cos_key}'
|
||||
res = make_common_res(0, 'ok')
|
||||
|
|
@ -271,13 +272,13 @@ def gen_compare_report_part1_data(data_range, compare_date_range, time_range, cr
|
|||
if key == 'high_park_percent':
|
||||
final_overview[key] = int(final_overview[key].replace('%', ''))
|
||||
final_overview[compare_key] = int(final_overview[compare_key].replace('%', ''))
|
||||
if final_overview[compare_key] and final_overview[key] and final_overview[compare_key] > final_overview[key]:
|
||||
rate = round((final_overview[key] - final_overview[compare_key]) / final_overview[compare_key] * 100, 2) if final_overview[compare_key] != '-' and final_overview[compare_key] > 0 else 0
|
||||
if final_overview[compare_key] and final_overview[key] and final_overview[key] != '-' and final_overview[compare_key] != '-' and final_overview[compare_key] > final_overview[key]:
|
||||
rate = round((final_overview[key] - final_overview[compare_key]) / final_overview[compare_key] * 100, 2) if final_overview[compare_key] > 0 else 0
|
||||
compare_res_str = f"{index_dict[key]}由{final_overview[compare_key]}下降为{final_overview[key]}, 减少{round(final_overview[key] - final_overview[compare_key], 2)},优化率为{rate}%;"
|
||||
part1_data['data_list'].append(compare_res_str)
|
||||
else:
|
||||
if final_overview[compare_key] and final_overview[key] and final_overview[compare_key] < final_overview[key]:
|
||||
rate = round((final_overview[compare_key] - final_overview[key]) / final_overview[compare_key] * 100, 2) if final_overview[compare_key] != '-' and final_overview[compare_key] > 0 else 0
|
||||
if final_overview[compare_key] and final_overview[key] and final_overview[key] != '-' and final_overview[compare_key] != '-' and final_overview[compare_key] < final_overview[key]:
|
||||
rate = round((final_overview[compare_key] - final_overview[key]) / final_overview[compare_key] * 100, 2) if final_overview[compare_key] > 0 else 0
|
||||
compare_res_str = f"{index_dict[key]}由{final_overview[compare_key]}Km/h提升为{final_overview[key]}km/h, 提升{round(final_overview[key] - final_overview[compare_key], 2)}km/h,提升率为{rate}%;"
|
||||
part1_data['data_list'].append(compare_res_str)
|
||||
return part1_data
|
||||
|
|
@ -460,16 +461,16 @@ def gen_compare_report_part5_data(part1_data, compared_inroad_delay_infos):
|
|||
service_level_compare_str = f"{index_dict[key]}由{compare_data[key]}提升为{item_data[key]}, 提升{service_level_compare_res}个等级;"
|
||||
src_dir_data.append(service_level_compare_str)
|
||||
elif key in ('stop_times', 'high_park_percent', 'delay_time'):
|
||||
if compare_data[key] and item_data[key] and compare_data[key] > item_data[key]:
|
||||
if key == 'high_park_percent':
|
||||
item_data[key] = int(item_data[key].replace('%', ''))
|
||||
compare_data[key] = int(compare_data[key].replace('%', ''))
|
||||
rate = round((item_data[key] - compare_data[key]) / compare_data[key] * 100, 2) if compare_data[key] != '-' and compare_data[key] > 0 else 0
|
||||
if compare_data[key] and item_data[key] and compare_data[key] != '-' and item_data[key] != '-' and compare_data[key] > item_data[key]:
|
||||
rate = round((compare_data[key] - item_data[key]) / compare_data[key] * 100, 2) if compare_data[key] > 0 else 0
|
||||
compare_res_str = f"{index_dict[key]}由{compare_data[key]}下降为{item_data[key]}, 减少{diff_data[key]},优化率为{rate}%;"
|
||||
src_dir_data.append(compare_res_str)
|
||||
else:
|
||||
if compare_data[key] and item_data[key] and compare_data[key] < item_data[key]:
|
||||
rate = round((compare_data[key] - item_data[key]) / compare_data[key] * 100, 2) if compare_data[key] != '-' and compare_data[key] > 0 else 0
|
||||
if compare_data[key] and item_data[key] and compare_data[key] != '-' and item_data[key] != '-' and compare_data[key] < item_data[key]:
|
||||
rate = round((item_data[key] - compare_data[key]) / compare_data[key] * 100, 2) if compare_data[key] > 0 else 0
|
||||
compare_res_str = f"{index_dict[key]}由{compare_data[key]}Km/h提升为{item_data[key]}km/h, 提升{diff_data[key]}km/h,提升率为{rate}%;"
|
||||
src_dir_data.append(compare_res_str)
|
||||
if len(src_dir_data) > 0:
|
||||
|
|
@ -522,12 +523,12 @@ def collect_report(params):
|
|||
if not download_url:
|
||||
return json.dumps(make_common_res(8, '缺少下载地址,请刷新后重试'))
|
||||
report_type = check_param(params, 'report_type')
|
||||
if not report_type or report_type not in(0, 1, 2, 3):
|
||||
if not report_type or int(report_type) not in (1, 2, 3):
|
||||
# 0 对比报告 ,其余为预留
|
||||
return json.dumps(make_common_res(7, '缺少报告类型,请刷新后重试'))
|
||||
report_type = int(report_type)
|
||||
ret = None
|
||||
if report_type == 0:
|
||||
if report_type == 1:
|
||||
date_range = check_param(params, 'date_range')
|
||||
if not date_range:
|
||||
return json.dumps(make_common_res(8, '缺少时间范围, 请刷新后重试'))
|
||||
|
|
@ -544,8 +545,10 @@ def collect_report(params):
|
|||
if not gen_report_date:
|
||||
return json.dumps(make_common_res(12, '缺少生成时间, 请刷新后重试'))
|
||||
ret = db_tmnet.save_collect_report(report_type, params)
|
||||
logging.info(ret)
|
||||
if ret:
|
||||
return json.dumps(make_common_res(0, 'ok'))
|
||||
return json.dumps(make_common_res(13, '保存记录信息失败'))
|
||||
|
||||
|
||||
def query_collect_report_record(params):
|
||||
|
|
@ -565,7 +568,7 @@ def query_collect_report_record(params):
|
|||
if not str(area_id).lstrip('-').isdigit() or int(area_id) not in area_list:
|
||||
return json.dumps(make_common_res(5, '辖区id异常,请检查后重试'))
|
||||
report_type = check_param(params, 'report_type')
|
||||
if not report_type or int(report_type) not in (0, 1, 2, 3):
|
||||
if not report_type or int(report_type) not in (1, 2, 3):
|
||||
# 0 对比报告 ,其余为预留
|
||||
return json.dumps(make_common_res(7, '缺少报告类型,请刷新后重试'))
|
||||
report_type = int(report_type)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import json
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from app.db_func_base import TableDbHelperBase
|
||||
|
|
@ -793,11 +794,14 @@ class TmnetDbHelper(TableDbHelperBase):
|
|||
|
||||
def save_collect_report(self, report_type, values):
|
||||
ret = None
|
||||
page_params = json.dumps(values['page_params'], ensure_ascii=False) if values.get('page_params') else None
|
||||
if report_type == 0:
|
||||
page_params = values["page_params"] if "page_params" in values else None
|
||||
page_params["report_params_detail"] = json.loads(page_params["report_params_detail"]) if "report_params_detail" in page_params else None
|
||||
final_json_string = json.dumps(page_params, ensure_ascii=False)
|
||||
if report_type == 1:
|
||||
sql = """
|
||||
insert into cross_doctor_config.collect_report_record (crossid, cross_name, date_range, compare_date_range, time_range, weekday_str, gen_report_dater, download_url, nodeid, area_id, page_params, report_type) value (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""" % (values['crossid'], values['cross_name'], values['date_range'], values['compare_date_range'], values['time_range'], values['weekday_str'], values['gen_report_date'], values['download_url'], values['nodeid'], values['area_id'], page_params, int(values['report_type']))
|
||||
insert into cross_doctor_config.collect_report_record (crossid, cross_name, date_range, compare_date_range, time_range, weekday_str, gen_report_date, download_url, nodeid, area_id, page_params, report_type) value ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
|
||||
""" % (values['crossid'], values['cross_name'], values['date_range'], values['compare_date_range'], values['time_range'], values['weekday_str'], values['gen_report_date'], values['download_url'], values['nodeid'], values['area_id'], final_json_string, int(values['report_type']))
|
||||
logging.info(sql)
|
||||
ret = self.do_execute(sql)
|
||||
if ret == 1:
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ class CosFolderManager:
|
|||
|
||||
try:
|
||||
# 2. 调用 SDK 自带的 object_exists 方法进行判断
|
||||
return self.client.object_exists(Bucket=self.bucket, Key=key)
|
||||
return self.client.object_exists(Bucket=self.bucket, Key=file_path)
|
||||
except Exception as e:
|
||||
# 3. 捕获其他可能的异常(如网络错误、权限不足等),按需处理
|
||||
print(f"检查文件存在性时发生错误: {e}")
|
||||
|
|
|
|||
Loading…
Reference in New Issue