Files
Incidents-Data-Portal/backend/app/blueprints/incident_gen5/routes.py
T
2026-07-10 18:55:55 +08:00

123 lines
3.9 KiB
Python

from flask import Blueprint, json, jsonify, current_app, request
from app.blueprints.incident_gen5.service import (
aggregate_and_sort_incidents,
aggregate_line_list,
get_logging_list,
process_incident_data,
)
from app.services.remote_service import DatabricksQuery
from app.link_wedata_utils import query_tencent_cloud_data
from app.utils import decrypt_code,mask_vin
incident_gen5_bp = Blueprint("incident", __name__)
@incident_gen5_bp.route("/query", methods=["GET"])
def query():
try:
try:
query_client = DatabricksQuery()
results = query_client.query_table(
table_name=current_app.config["GEN5_TABLE_NAME"], # 替换为实际表名 taf_level_two_plus.accident_report_data
vin="LE4LG4GB6RLMLFJEH", # LE4LG4GB6RLMLFJEH
limit=100,
)
# print(999, results)
# for row in results:
# print(111111, row)
# print(type(results))
finally:
query_client.stop()
# for i in query_client:
# print(i['incident_time'])
return jsonify({"status": "success", "data": results}), 200
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
@incident_gen5_bp.route("/list", methods=["GET","POST"])
def get_gen5_list():
# 验证请求头的信息,通过才继续
encrypted = request.headers.get('X-Encrypted-Timestamp')
if not encrypted:
return jsonify({"msg": "Parameters are Incorrect"}), 400
encrypt_str=decrypt_code(encrypted)
if not encrypt_str:
return jsonify({"msg": "Invalid request"}), 400
data = request.get_json()
if not data:
return jsonify({"code": 400, "data": None, "msg": "请填写有效参数"}), 400
required_fields = ["incident_time", "oneid"]
for field in required_fields:
if field not in data:
return (
jsonify({"code": 400, "data": None, "msg": f"缺少必需字段: {field}"}),
400,
)
incident_time = data["incident_time"]
# 检查是否为非空列表
if not isinstance(incident_time, list) or len(incident_time) != 2:
return (
jsonify(
{
"code": 400,
"data": [],
"msg": "incident_time必须是包含两个时间的数组",
}
),
400,
)
oneid = data["oneid"]
if not isinstance(oneid, str) or not oneid.strip():
return jsonify({"code": 400, "data": None, "msg": "oneid必须是非空字符串"}), 400
mask_oneid=mask_vin(oneid)
query_client = DatabricksQuery()
results = query_client.query_table(
table_name=current_app.config["GEN5_TABLE_NAME"],
vin=mask_oneid,
start_time=incident_time[0],
end_time=incident_time[1],
# limit=10000,
)
# print(11,results)
if len(results) == 0:
return jsonify({"code": 200, "data": [], "msg": "查询结果为空"}), 200
try:
events_list = process_incident_data(results)
map_list = aggregate_and_sort_incidents(results)
line_list = aggregate_line_list(map_list)
logging_list = get_logging_list(map_list)
response = {
"code": 200,
"data": {
"events_list": events_list,
"map_list":map_list,
"line_list": line_list,
"logging_list": logging_list,
},
"msg": "success",
}
return jsonify(response)
except Exception as e:
# 打印错误日志,方便后端排查
print(f"数据处理异常:{str(e)}")
# 返回友好的错误信息,前端正常解析
return jsonify({
"code": 500,
"data": [],
"msg": f"数据处理失败:{str(e)}"
}), 200