提交除了配时方案异常以外的问题诊断代码
This commit is contained in:
parent
58923b6e55
commit
d75da2f090
|
|
@ -36,9 +36,7 @@ def query_cross_list(params):
|
||||||
tp_info = [
|
tp_info = [
|
||||||
"00:00-07:00",
|
"00:00-07:00",
|
||||||
"07:00-09:00",
|
"07:00-09:00",
|
||||||
"09:00-12:00",
|
"09:00-17:00",
|
||||||
"12:00-14:00",
|
|
||||||
"14:00-17:00",
|
|
||||||
"17:00-19:00",
|
"17:00-19:00",
|
||||||
"19:00-22:00",
|
"19:00-22:00",
|
||||||
"22:00-00:00"
|
"22:00-00:00"
|
||||||
|
|
@ -128,6 +126,11 @@ def query_cross_delay_info_controller(params):
|
||||||
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list)
|
avg_cross_delay_info = gen_avg_cross_delay_pb(cross_delay_data_list)
|
||||||
if not avg_cross_delay_info:
|
if not avg_cross_delay_info:
|
||||||
return json.dumps(make_common_res(9, '当前所选日期范围内该评测时段无可用数据'))
|
return json.dumps(make_common_res(9, '当前所选日期范围内该评测时段无可用数据'))
|
||||||
|
# print(MessageToJson(
|
||||||
|
# avg_cross_delay_info,
|
||||||
|
# always_print_fields_with_no_presence=True, # 输出所有默认值
|
||||||
|
# preserving_proto_field_name=True # 保持原始字段名(不用驼峰)
|
||||||
|
# ))
|
||||||
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)
|
cross_inroads = db_tmnet.query_cross_inroads(crossid, nodeid)
|
||||||
inroad_static_info_dict = {item['roadid']: item for item in cross_inroads}
|
inroad_static_info_dict = {item['roadid']: item for item in cross_inroads}
|
||||||
# 路口静态信息及台账信息
|
# 路口静态信息及台账信息
|
||||||
|
|
|
||||||
|
|
@ -523,17 +523,9 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict):
|
||||||
if roadid != '-' and roadid in road_delay_dict.keys():
|
if roadid != '-' and roadid in road_delay_dict.keys():
|
||||||
car_num = road_delay_dict[roadid].delay_info.car_num
|
car_num = road_delay_dict[roadid].delay_info.car_num
|
||||||
in_flow_rate = round(car_num / cross_sum_car_num, 2) if cross_out_sum_car_num != 0 else '-'
|
in_flow_rate = round(car_num / cross_sum_car_num, 2) if cross_out_sum_car_num != 0 else '-'
|
||||||
|
l_rate = round(road_delay_dict[roadid].delay_info.turn_ratio_1 / car_num, 2) if car_num != 0 else '-'
|
||||||
flow_delay_infos = road_delay_dict[roadid].flow_delay_infos
|
s_rate = round(road_delay_dict[roadid].delay_info.turn_ratio_0 / car_num, 2) if car_num != 0 else '-'
|
||||||
for flow_delay_info in flow_delay_infos:
|
r_rate = round(road_delay_dict[roadid].delay_info.turn_ratio_2 / car_num, 2) if car_num != 0 else '-'
|
||||||
if flow_delay_info.turn_type not in (0, 1, 2):
|
|
||||||
continue
|
|
||||||
if flow_delay_info.turn_type == 0:
|
|
||||||
l_rate = round(flow_delay_info.delay_info.car_num / car_num, 2) if car_num != 0 else '-'
|
|
||||||
elif flow_delay_info.turn_type == 1:
|
|
||||||
s_rate = round(flow_delay_info.delay_info.car_num / car_num, 2) if car_num != 0 else '-'
|
|
||||||
elif flow_delay_info.turn_type == 2:
|
|
||||||
r_rate = round(flow_delay_info.delay_info.car_num / car_num, 2) if car_num != 0 else '-'
|
|
||||||
out_road_id = roads_dir_dict[dir]['out']
|
out_road_id = roads_dir_dict[dir]['out']
|
||||||
if out_road_id != '-' and out_road_id in outroad_info_dict.keys():
|
if out_road_id != '-' and out_road_id in outroad_info_dict.keys():
|
||||||
out_car_num = outroad_info_dict[out_road_id].turn_info.car_num
|
out_car_num = outroad_info_dict[out_road_id].turn_info.car_num
|
||||||
|
|
@ -678,11 +670,12 @@ def parse_single_cross_delay_info(crossid, nodeid, data_list, data_type, roads_d
|
||||||
for flow_delay_info in flow_delay_infos:
|
for flow_delay_info in flow_delay_infos:
|
||||||
if flow_delay_info.delay_info.car_num > max_flow_car_num:
|
if flow_delay_info.delay_info.car_num > max_flow_car_num:
|
||||||
max_flow_car_num = flow_delay_info.delay_info.car_num
|
max_flow_car_num = flow_delay_info.delay_info.car_num
|
||||||
max_cross_car_num = max(
|
max_cross_car_num_pb = max(
|
||||||
(x for x in pb_data_list if x is not None),
|
(x for x in pb_data_list if x is not None),
|
||||||
key=lambda x: x.delay_info.car_num,
|
key=lambda x: x.delay_info.car_num,
|
||||||
default=None
|
default=None
|
||||||
).delay_info.car_num if pb_data_list else 0
|
)
|
||||||
|
max_cross_car_num = max_cross_car_num_pb.delay_info.car_num if max_cross_car_num_pb else 0
|
||||||
for item in data_list:
|
for item in data_list:
|
||||||
tp_start = item['tp_start']
|
tp_start = item['tp_start']
|
||||||
tp_end = item['tp_end']
|
tp_end = item['tp_end']
|
||||||
|
|
@ -914,6 +907,7 @@ def parse_data2pb(data_list):
|
||||||
return res_list
|
return res_list
|
||||||
|
|
||||||
|
|
||||||
|
# 生成路口诊断问题
|
||||||
def gen_cross_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info):
|
def gen_cross_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase, is_peak, cross_ledger_info):
|
||||||
# 运行效率、均衡调控、配时方案、路口渠化
|
# 运行效率、均衡调控、配时方案、路口渠化
|
||||||
operating_efficiency_problems = gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cross_phase, is_peak)
|
operating_efficiency_problems = gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cross_phase, is_peak)
|
||||||
|
|
@ -924,6 +918,7 @@ def gen_cross_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_d
|
||||||
return problems
|
return problems
|
||||||
|
|
||||||
|
|
||||||
|
# 生成运行效率诊断问题结果
|
||||||
def gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cross_phase, is_peak):
|
def gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cross_phase, is_peak):
|
||||||
if not avg_cross_delay_info:
|
if not avg_cross_delay_info:
|
||||||
return [{
|
return [{
|
||||||
|
|
@ -953,6 +948,7 @@ def gen_operating_efficiency_problems(avg_cross_delay_info, roads_dir_dict, cros
|
||||||
return operating_efficiency_problems
|
return operating_efficiency_problems
|
||||||
|
|
||||||
|
|
||||||
|
# 运行效率-多次排队
|
||||||
def gen_high_park_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
def gen_high_park_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1016,6 +1012,7 @@ def gen_high_park_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
||||||
return detail, suggestion
|
return detail, suggestion
|
||||||
|
|
||||||
|
|
||||||
|
# 运行效率-停车较多
|
||||||
def gen_high_stop_time_problems(avg_cross_delay_info, is_peak):
|
def gen_high_stop_time_problems(avg_cross_delay_info, is_peak):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1055,6 +1052,7 @@ def gen_high_stop_time_problems(avg_cross_delay_info, is_peak):
|
||||||
return detail, suggestion
|
return detail, suggestion
|
||||||
|
|
||||||
|
|
||||||
|
# 均衡调控
|
||||||
def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase):
|
def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_phase):
|
||||||
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
|
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
|
||||||
cross_imbalance_detail, cross_imbalance_suggestions = gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase)
|
cross_imbalance_detail, cross_imbalance_suggestions = gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase)
|
||||||
|
|
@ -1086,7 +1084,7 @@ def gen_balanced_control_problems(crossid, nodeid, date_list, avg_cross_delay_in
|
||||||
return balanced_control_problems
|
return balanced_control_problems
|
||||||
|
|
||||||
|
|
||||||
# 路口失衡问题诊断
|
# 均衡调控-路口失衡问题诊断
|
||||||
def gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
def gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1146,7 +1144,7 @@ def gen_cross_imbalance_problems(road_delay_infos, roads_dir_dict, cross_phase):
|
||||||
return detail, suggestion
|
return detail, suggestion
|
||||||
|
|
||||||
|
|
||||||
# 转向失衡问题诊断
|
# 均衡调控-转向失衡问题诊断
|
||||||
def gen_turn_imbalance_problems(road_delay_infos, roads_dir_dict, inroad_static_info_dict, cross_phase):
|
def gen_turn_imbalance_problems(road_delay_infos, roads_dir_dict, inroad_static_info_dict, cross_phase):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1241,7 +1239,7 @@ def gen_turn_imbalance_problems(road_delay_infos, roads_dir_dict, inroad_static_
|
||||||
return detail, suggestion
|
return detail, suggestion
|
||||||
|
|
||||||
|
|
||||||
# 路口潮汐问题判定
|
# 均衡调控-路口潮汐问题诊断
|
||||||
def gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict):
|
def gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1330,10 +1328,12 @@ def gen_cross_tide_problems(crossid, nodeid, date_list, roads_dir_dict):
|
||||||
return detail, suggestions
|
return detail, suggestions
|
||||||
|
|
||||||
|
|
||||||
|
# 配时方案
|
||||||
def gen_phase_problems():
|
def gen_phase_problems():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# 路口渠化
|
||||||
def gen_cross_channelized_problems(avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_ledger_info):
|
def gen_cross_channelized_problems(avg_cross_delay_info, roads_dir_dict, inroad_static_info_dict, cross_ledger_info):
|
||||||
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
|
road_delay_infos = avg_cross_delay_info.inroad_delay_infos
|
||||||
inroad_num_detail, inroad_num_suggestion = gen_inroad_num_problems(road_delay_infos, inroad_static_info_dict, roads_dir_dict)
|
inroad_num_detail, inroad_num_suggestion = gen_inroad_num_problems(road_delay_infos, inroad_static_info_dict, roads_dir_dict)
|
||||||
|
|
@ -1358,6 +1358,7 @@ def gen_cross_channelized_problems(avg_cross_delay_info, roads_dir_dict, inroad_
|
||||||
return cross_channelized_problems
|
return cross_channelized_problems
|
||||||
|
|
||||||
|
|
||||||
|
# 路口渠化-车道资源不匹配
|
||||||
def gen_inroad_num_problems(road_delay_infos, inroad_static_info_dict, roads_dir_dict):
|
def gen_inroad_num_problems(road_delay_infos, inroad_static_info_dict, roads_dir_dict):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
@ -1461,6 +1462,7 @@ def gen_inroad_num_problems(road_delay_infos, inroad_static_info_dict, roads_dir
|
||||||
return detail, suggestions
|
return detail, suggestions
|
||||||
|
|
||||||
|
|
||||||
|
# 路口渠化-进出口道数不匹配
|
||||||
def gen_in_out_lane_num_gap_problems(cross_ledger_info):
|
def gen_in_out_lane_num_gap_problems(cross_ledger_info):
|
||||||
detail = [{
|
detail = [{
|
||||||
'child_detail': [
|
'child_detail': [
|
||||||
|
|
|
||||||
|
|
@ -105,11 +105,11 @@ class GWPerfCloudDbHelper(TableDbHelperBase):
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
return None, error
|
return None, error
|
||||||
|
|
||||||
def query_all_gw_cross_examine_problems(self, day):
|
def query_all_cross_examine_problems(self, day):
|
||||||
if day == 0:
|
if day == 0:
|
||||||
return []
|
return []
|
||||||
sql = """
|
sql = """
|
||||||
select waveid, start_hm, end_hm, weekday, coordinate_dir, index_reason, index_details, xxlight_reason, xxlight_details from gw_examine_problems where day = '%s'
|
select * from cross_examine_problems where day = '%s'
|
||||||
""" % (day)
|
""" % (day)
|
||||||
return self.do_select(sql)
|
return self.do_select(sql)
|
||||||
|
|
||||||
|
|
@ -155,7 +155,7 @@ class GWPerfCloudDbHelper(TableDbHelperBase):
|
||||||
return None, error
|
return None, error
|
||||||
|
|
||||||
|
|
||||||
def query_cross_offset_by_light(self, waveid, crossids, day, start_hm):
|
def query_cross_offset_by_lights(self, waveid, crossids, day, start_hm):
|
||||||
conn, cursor = self.connect()
|
conn, cursor = self.connect()
|
||||||
try:
|
try:
|
||||||
sql = '''SELECT
|
sql = '''SELECT
|
||||||
|
|
|
||||||
|
|
@ -93,3 +93,61 @@ class TmnetDbHelper(TableDbHelperBase):
|
||||||
def query_city_tp_info(self, nodeid, area_id):
|
def query_city_tp_info(self, nodeid, area_id):
|
||||||
sql = f"select tp_desc, peak_tp from cross_doctor_config.area_tp_config where nodeid = {nodeid} and area_id = {area_id}"
|
sql = f"select tp_desc, peak_tp from cross_doctor_config.area_tp_config where nodeid = {nodeid} and area_id = {area_id}"
|
||||||
return self.do_select(sql)
|
return self.do_select(sql)
|
||||||
|
|
||||||
|
def query_all_cross_examine_records(self, yes_str):
|
||||||
|
sql = "select * from cross_doctor_matedata.cross_phase_problems_record where date(update_time) = '%s' and end_date is null" % yes_str
|
||||||
|
return self.do_select(sql)
|
||||||
|
|
||||||
|
def insert_cross_examine_records(self, insert_list):
|
||||||
|
conn, cursor = self.connect()
|
||||||
|
try:
|
||||||
|
sql = """insert into cross_doctor_matedata.cross_phase_problems_record(start_hm,end_hm,crossid,phase_type, phase_detail,cont_times,final_state,level_color,first_date,change_red_daynums)
|
||||||
|
values(%s, %s, %s, %s,%s, %s, %s, %s,%s, %s)
|
||||||
|
"""
|
||||||
|
values = [
|
||||||
|
(
|
||||||
|
d['start_hm'], d['end_hm'], d['crossid'], d['phase_type'], d['phase_detail'], d['cont_times'], d['final_state'],
|
||||||
|
d['level_color'], d['first_date'], d['change_red_daynums']
|
||||||
|
) for d in insert_list
|
||||||
|
]
|
||||||
|
ret = cursor.executemany(sql, values)
|
||||||
|
if ret == len(insert_list):
|
||||||
|
conn.commit()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return ret, None
|
||||||
|
else:
|
||||||
|
conn.rollback()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return 0, "insert_cross_examine_records error"
|
||||||
|
except Exception as e:
|
||||||
|
conn.rollback()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return 0, e
|
||||||
|
|
||||||
|
def update_cross_examine_records(self, update_list):
|
||||||
|
conn, cursor = self.connect()
|
||||||
|
try:
|
||||||
|
sql = """
|
||||||
|
update cross_doctor_matedata.cross_phase_problems_record
|
||||||
|
set phase_type = %s, phase_detail = %s, cont_times = %s, final_state = %s, level_color = %s, change_red_daynums = %s,
|
||||||
|
end_date = %s where crossid = %s and start_hm = %s and first_date = %s
|
||||||
|
"""
|
||||||
|
values = [
|
||||||
|
(
|
||||||
|
d['phase_type'], d['phase_detail'], d['cont_times'], d['final_state'], d['level_color'],
|
||||||
|
d['change_red_daynums'], d['end_date'], d['crossid'], d['start_hm'], d['first_date']
|
||||||
|
) for d in update_list
|
||||||
|
]
|
||||||
|
ret = cursor.executemany(sql, values)
|
||||||
|
if ret == len(update_list):
|
||||||
|
conn.commit()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return ret, None
|
||||||
|
else:
|
||||||
|
conn.rollback()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return ret, None
|
||||||
|
except Exception as e:
|
||||||
|
conn.rollback()
|
||||||
|
self.close(conn, cursor)
|
||||||
|
return 0, e
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,278 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Author: Owl
|
||||||
|
# @Date: 2025/10/28 16:25
|
||||||
|
# @Description:
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
# from app.gw_db_func import GreenWaveDbHelper
|
||||||
|
from app.gwperf_cloud_db_func import *
|
||||||
|
from app.eva_common import *
|
||||||
|
from tool.mysql_common_connector_pool import DatabaseManager
|
||||||
|
|
||||||
|
g_cloud_db = {
|
||||||
|
'host': 'bj-cdb-64eqw2oe.sql.tencentcdb.com',
|
||||||
|
'port': 26807,
|
||||||
|
'user': 'root',
|
||||||
|
'password': 'pmenJIn7EaK40oThn',
|
||||||
|
'db': 'gwperf'
|
||||||
|
}
|
||||||
|
|
||||||
|
g_dbinfo = {
|
||||||
|
'host': '120.53.125.169',
|
||||||
|
'port': 3306,
|
||||||
|
'user': 'root',
|
||||||
|
'password': 'pmenJIn7EaK40oThn~~~',
|
||||||
|
'db': 'cross_doctor_matedata'
|
||||||
|
}
|
||||||
|
|
||||||
|
src_str2_eng = {
|
||||||
|
"东": "E",
|
||||||
|
"南": "S",
|
||||||
|
"西": "W",
|
||||||
|
"北": "N",
|
||||||
|
"东南": "SE",
|
||||||
|
"东北": "NE",
|
||||||
|
"西南": "SW",
|
||||||
|
"西北": "NW"
|
||||||
|
}
|
||||||
|
|
||||||
|
g_cloud_pool = DatabaseManager(g_cloud_db)
|
||||||
|
g_db_cloud = GWPerfCloudDbHelper(g_cloud_pool)
|
||||||
|
|
||||||
|
g_db_pool = DatabaseManager(g_dbinfo)
|
||||||
|
g_db_cross = TmnetDbHelper(g_db_pool)
|
||||||
|
|
||||||
|
|
||||||
|
def dev_args():
|
||||||
|
try:
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--dev', default=0, help='开发环境参数:0否,1是')
|
||||||
|
parser.add_argument('--day', default=0, help='开发环境参数:0否,1是')
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def init(args):
|
||||||
|
dev, day = 0, 0
|
||||||
|
if args:
|
||||||
|
dev = int(args.dev)
|
||||||
|
day = args.day
|
||||||
|
if dev == 0:
|
||||||
|
g_cloud_db['host'] = '172.21.32.41'
|
||||||
|
g_cloud_db['port'] = 3306
|
||||||
|
g_dbinfo['host'] = '172.21.32.21'
|
||||||
|
g_db_pool.init_pool(g_dbinfo)
|
||||||
|
g_cloud_pool.init_pool(g_cloud_db)
|
||||||
|
if day == 0:
|
||||||
|
day = (datetime.now() - timedelta(days=1)).strftime('%Y%m%d')
|
||||||
|
today_data = g_db_cloud.query_all_cross_examine_problems(day)
|
||||||
|
yes_str = datetime.strptime(day, '%Y%m%d').strftime('%Y-%m-%d')
|
||||||
|
yesterday_records = g_db_cross.query_all_cross_examine_records(yes_str)
|
||||||
|
yesterday_data_dict = parse_records2dict(yesterday_records)
|
||||||
|
today_records = {}
|
||||||
|
for row in today_data:
|
||||||
|
start_hm = row['start_hm']
|
||||||
|
end_hm = row['end_hm']
|
||||||
|
crossid = row['crossid']
|
||||||
|
if row['xxlight_details'] and row['xxlight_details'] != '':
|
||||||
|
xxlight_detail = row['xxlight_details']
|
||||||
|
xxlight_reason = row['xxlight_reason']
|
||||||
|
key = '{}-{}-{}'.format(start_hm, end_hm, crossid)
|
||||||
|
today_records[key] = {
|
||||||
|
'cont_times': 1,
|
||||||
|
'phase_type': xxlight_detail,
|
||||||
|
'phase_detail': xxlight_reason,
|
||||||
|
'index_detail': '',
|
||||||
|
'index_detail_r': ''
|
||||||
|
}
|
||||||
|
insert_list, update_list = calc_final_state_color(yesterday_data_dict, today_records, day)
|
||||||
|
insert_ret, update_ret, update_e, insert_e = 0, 0, None, None
|
||||||
|
# 先清除当前天的数据]
|
||||||
|
if len(insert_list) > 0:
|
||||||
|
insert_ret, insert_e = g_db_cross.insert_cross_examine_records(insert_list)
|
||||||
|
if len(update_list) > 0:
|
||||||
|
update_ret, update_e = g_db_cross.update_cross_examine_records(update_list)
|
||||||
|
if insert_ret == len(insert_list) and update_ret == len(update_list) and not insert_e and not update_e:
|
||||||
|
print('success')
|
||||||
|
else:
|
||||||
|
print('insert_ret: {}, update_ret: {}'.format(insert_ret, update_ret))
|
||||||
|
print('insert_list: {}, update_list: {}'.format(len(insert_list), len(update_list)))
|
||||||
|
print(update_e)
|
||||||
|
print(insert_e)
|
||||||
|
print('failed')
|
||||||
|
|
||||||
|
|
||||||
|
def parse_records2dict(records):
|
||||||
|
record_dict = {}
|
||||||
|
for row in records:
|
||||||
|
start_hm = row['start_hm']
|
||||||
|
end_hm = row['end_hm']
|
||||||
|
crossid = row['crossid']
|
||||||
|
key = '{}-{}-{}'.format(start_hm, end_hm, crossid)
|
||||||
|
phase_type = row['phase_type']
|
||||||
|
phase_detail = row['phase_detail']
|
||||||
|
final_state = row['final_state']
|
||||||
|
level_color = row['level_color']
|
||||||
|
first_date = row['first_date']
|
||||||
|
change_red_time = row['change_red_daynums']
|
||||||
|
cont_times = row['cont_times']
|
||||||
|
record_dict[key] = {
|
||||||
|
'final_state': final_state,
|
||||||
|
'level_color': level_color,
|
||||||
|
'first_date': first_date,
|
||||||
|
'change_red_daynums': change_red_time,
|
||||||
|
'phase_type': phase_type,
|
||||||
|
'phase_detail': phase_detail,
|
||||||
|
'cont_times': cont_times
|
||||||
|
}
|
||||||
|
return record_dict
|
||||||
|
|
||||||
|
|
||||||
|
def calc_final_state_color(yesterday_data_dict, today_records, day):
|
||||||
|
insert_list, update_list = [], []
|
||||||
|
for key in today_records.keys():
|
||||||
|
start_hm = key.split('-')[0]
|
||||||
|
end_hm = key.split('-')[1]
|
||||||
|
crossid = key.split('-')[2]
|
||||||
|
phase_type = today_records[key]['phase_type']
|
||||||
|
phase_detail = today_records[key]['phase_detail']
|
||||||
|
if key in yesterday_data_dict.keys():
|
||||||
|
phase_cont_times = today_records[key]['cont_times'] + yesterday_data_dict[key]['cont_times']
|
||||||
|
change_red_daynums = yesterday_data_dict[key]['change_red_daynums']
|
||||||
|
yesterday_final_state = int(yesterday_data_dict[key]['final_state'])
|
||||||
|
yesterday_level_color = yesterday_data_dict[key]['level_color']
|
||||||
|
first_date = yesterday_data_dict[key]['first_date']
|
||||||
|
end_date = None
|
||||||
|
if yesterday_final_state not in [4, 5, 6]:
|
||||||
|
if yesterday_final_state == 1:
|
||||||
|
final_state, level_color = 1, 1
|
||||||
|
elif yesterday_final_state == 2:
|
||||||
|
if yesterday_level_color == 2:
|
||||||
|
if today_records[key]['cont_times'] == 1:
|
||||||
|
final_state, level_color, change_red_daynums = 2, 1, 0
|
||||||
|
else:
|
||||||
|
final_state, level_color = 2, 2
|
||||||
|
else:
|
||||||
|
if change_red_daynums >= 2:
|
||||||
|
final_state, level_color = 1, 1
|
||||||
|
else:
|
||||||
|
final_state, level_color = 2, 1
|
||||||
|
else:
|
||||||
|
if today_records[key]['cont_times'] == 1:
|
||||||
|
final_state, level_color = 2, 1
|
||||||
|
else:
|
||||||
|
final_state, level_color = 2, 2
|
||||||
|
update_list.append({
|
||||||
|
"start_hm": start_hm,
|
||||||
|
"end_hm": end_hm,
|
||||||
|
"crossid": crossid,
|
||||||
|
"phase_type": str(yesterday_data_dict[key]['phase_type']) + '^' + str(phase_type),
|
||||||
|
"phase_detail": yesterday_data_dict[key]['phase_detail'] + '^' + phase_detail,
|
||||||
|
"cont_times": phase_cont_times,
|
||||||
|
"final_state": final_state,
|
||||||
|
"level_color": level_color,
|
||||||
|
"first_date": first_date,
|
||||||
|
"change_red_daynums": change_red_daynums,
|
||||||
|
"end_date": end_date
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
first_date = day
|
||||||
|
phase_cont_times = today_records[key]['cont_times']
|
||||||
|
final_state, level_color = 3, 3
|
||||||
|
insert_list.append({
|
||||||
|
"start_hm": start_hm,
|
||||||
|
"end_hm": end_hm,
|
||||||
|
"crossid": crossid,
|
||||||
|
"phase_type": str(phase_type),
|
||||||
|
"phase_detail": phase_detail,
|
||||||
|
"cont_times": phase_cont_times,
|
||||||
|
"final_state": final_state,
|
||||||
|
"level_color": level_color,
|
||||||
|
"first_date": first_date,
|
||||||
|
"change_red_daynums": change_red_daynums
|
||||||
|
})
|
||||||
|
yesterday_data_dict.pop(key)
|
||||||
|
else:
|
||||||
|
first_date = day
|
||||||
|
phase_cont_times = today_records[key]['cont_times']
|
||||||
|
change_red_daynums = 0
|
||||||
|
final_state, level_color = 3, 3
|
||||||
|
insert_list.append({
|
||||||
|
"start_hm": start_hm,
|
||||||
|
"end_hm": end_hm,
|
||||||
|
"crossid": crossid,
|
||||||
|
"phase_type": str(phase_type),
|
||||||
|
"phase_detail": phase_detail,
|
||||||
|
"cont_times": phase_cont_times,
|
||||||
|
"final_state": final_state,
|
||||||
|
"level_color": level_color,
|
||||||
|
"first_date": first_date,
|
||||||
|
"change_red_daynums": change_red_daynums
|
||||||
|
})
|
||||||
|
for key in yesterday_data_dict.keys():
|
||||||
|
if yesterday_data_dict[key]['final_state'] in [4, 5, 6]:
|
||||||
|
continue
|
||||||
|
start_hm = key.split('-')[0]
|
||||||
|
end_hm = key.split('-')[1]
|
||||||
|
crossid = key.split('-')[2]
|
||||||
|
phase_type = yesterday_data_dict[key]['phase_type']
|
||||||
|
phase_detail = yesterday_data_dict[key]['phase_detail']
|
||||||
|
end_date = None
|
||||||
|
first_date = yesterday_data_dict[key]['first_date']
|
||||||
|
change_red_daynums = yesterday_data_dict[key]['change_red_daynums']
|
||||||
|
if yesterday_data_dict[key]['final_state'] == 3:
|
||||||
|
end_date = day
|
||||||
|
final_state = 6
|
||||||
|
level_color = yesterday_data_dict[key]['level_color']
|
||||||
|
phase_cont_times = 0
|
||||||
|
elif yesterday_data_dict[key]['final_state'] == 2:
|
||||||
|
phase_cont_times = yesterday_data_dict[key]['cont_times'] + 1
|
||||||
|
if yesterday_data_dict[key]['level_color'] == 2:
|
||||||
|
final_state = 2
|
||||||
|
level_color = 2
|
||||||
|
else:
|
||||||
|
change_red_daynums = yesterday_data_dict[key]['change_red_daynums'] + 1
|
||||||
|
if yesterday_data_dict[key]['change_red_daynums'] >= 2:
|
||||||
|
final_state = 1
|
||||||
|
level_color = 1
|
||||||
|
else:
|
||||||
|
final_state = 2
|
||||||
|
level_color = 1
|
||||||
|
else:
|
||||||
|
phase_cont_times = yesterday_data_dict[key]['cont_times'] + 1
|
||||||
|
final_state = yesterday_data_dict[key]['final_state']
|
||||||
|
level_color = yesterday_data_dict[key]['level_color']
|
||||||
|
update_list.append({
|
||||||
|
"start_hm": start_hm,
|
||||||
|
"end_hm": end_hm,
|
||||||
|
"crossid": crossid,
|
||||||
|
"phase_type": str(phase_type) + '^' + '',
|
||||||
|
"phase_detail": phase_detail + '^' + '',
|
||||||
|
"cont_times": phase_cont_times,
|
||||||
|
"final_state": final_state,
|
||||||
|
"level_color": level_color,
|
||||||
|
"first_date": first_date,
|
||||||
|
"change_red_daynums": change_red_daynums,
|
||||||
|
"end_date": end_date
|
||||||
|
})
|
||||||
|
return insert_list, update_list
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--dev', default=0, help='开发环境参数:0否,1是')
|
||||||
|
parser.add_argument('--day', default=0, help='执行日期')
|
||||||
|
args = parser.parse_args()
|
||||||
|
init(args)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue