126 lines
5.5 KiB
Python
126 lines
5.5 KiB
Python
# -*- coding: utf-8 -*-
|
||
# @Author: Owl
|
||
# @Date: 2025/10/10 14:33
|
||
# @Description:
|
||
import json
|
||
|
||
from app.common_worker import *
|
||
from app.eva_common import *
|
||
|
||
|
||
# 查询可用路口列表
|
||
def query_cross_list(params):
|
||
nodeid = check_param(params, 'nodeid')
|
||
if not nodeid:
|
||
return json.dumps(make_common_res(1, '缺少nodeid, 请刷新后重试'))
|
||
area_id = check_param(params, 'area_id')
|
||
if not area_id:
|
||
return json.dumps(make_common_res(2, '缺少area_id, 请刷新后重试'))
|
||
userid = check_param(params, 'userid')
|
||
if not userid:
|
||
return json.dumps(make_common_res(3, '缺少userid, 请刷新后重试'))
|
||
area_list = db_user.query_user_areas(userid)
|
||
if not area_list or len(area_list) < 1:
|
||
return json.dumps(make_common_res(4, '用户信息异常'))
|
||
area_list = [int(row['area_id']) for row in area_list]
|
||
if int(area_id) not in area_list:
|
||
return json.dumps(make_common_res(5, '用户信息异常'))
|
||
|
||
# 查询路口列表
|
||
cross_list = db_tmnet.query_cross_list_sql(nodeid, area_id)
|
||
res = make_common_res(0, 'ok')
|
||
res['data'] = cross_list
|
||
return json.dumps(res, ensure_ascii=False)
|
||
|
||
|
||
# 查询路口可用时段
|
||
def query_cross_usable_date(params):
|
||
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_user_areas(userid)
|
||
if not area_list or len(area_list) < 1:
|
||
return json.dumps(make_common_res(5, '用户信息异常'))
|
||
area_list = [int(row['area_id']) for row in area_list]
|
||
if int(area_id) not in area_list:
|
||
return json.dumps(make_common_res(6, '用户信息异常'))
|
||
|
||
row_list = db_cross.query_cross_usable_date_sql(crossid, nodeid)
|
||
date_list = [row['day'] for row in row_list]
|
||
res = make_common_res(0, 'ok')
|
||
res['data'] = date_list
|
||
return json.dumps(res, ensure_ascii=False)
|
||
|
||
|
||
# 获取路口延迟信息
|
||
def query_cross_delay_info(params):
|
||
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_user_areas(userid)
|
||
if not area_list or len(area_list) < 1:
|
||
return json.dumps(make_common_res(5, '用户信息异常'))
|
||
area_list = [int(row['area_id']) for row in area_list]
|
||
if int(area_id) not in area_list:
|
||
return json.dumps(make_common_res(6, '用户信息异常'))
|
||
date_list = check_param(params, 'date_list')
|
||
if not date_list or len(date_list) < 1:
|
||
return json.dumps(make_common_res(7, '缺少日期参数,请最少选择一天作为查询日期'))
|
||
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 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, tp_end)
|
||
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, '当前所选日期范围内该评测时段无可用数据'))
|
||
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)
|
||
inroad_static_info_dict = {item['roadid']: item for item in cross_inroads}
|
||
# 路口静态信息及台账信息
|
||
cross_static_info, cross_ledger_info_dict = query_cross_ledger_info(crossid, nodeid, area_id, userid)
|
||
roads_dir_dict = gen_road_dir_dict(cross_ledger_info_dict)
|
||
# 路口指标数据概览
|
||
overview_res = gen_overview_index(avg_cross_delay_info, inroad_static_info_dict, nodeid, date_list, roads_dir_dict)
|
||
# 路段及流向数据概览
|
||
road_flow_delay_infos = gen_road_delay_index(avg_cross_delay_info, roads_dir_dict)
|
||
# 路段进出口方向分流比
|
||
road_flow_turn_rate = gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict)
|
||
res = make_common_res(0, 'ok')
|
||
res['data'] = {
|
||
'overview': overview_res,
|
||
'road_flow_delay_infos': road_flow_delay_infos,
|
||
'road_flow_turn_rate': road_flow_turn_rate,
|
||
'cross_static_info': cross_static_info,
|
||
'ledger_info': cross_ledger_info_dict
|
||
}
|
||
return json.dumps(res, ensure_ascii=False)
|
||
|
||
|