From 9e5cebf19c97856758b52643e88c622ad997ee38 Mon Sep 17 00:00:00 2001 From: wangxu <1318272526@qq.com> Date: Mon, 3 Nov 2025 17:39:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=97=AE=E9=A2=98=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E8=81=94=E8=B0=83=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/eva_common.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/app/eva_common.py b/app/eva_common.py index 694fba8..7d827f7 100644 --- a/app/eva_common.py +++ b/app/eva_common.py @@ -8,6 +8,7 @@ import logging import requests from google.protobuf.json_format import MessageToJson +import random import proto.xlcomm_pb2 as pb from app.common_worker import * @@ -550,6 +551,8 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict): l_num = road_delay_dict[roadid].delay_info.turn_ratio_1 s_num = road_delay_dict[roadid].delay_info.turn_ratio_0 r_num = road_delay_dict[roadid].delay_info.turn_ratio_2 + rate_list = fix_to_100(l_rate, s_rate, r_rate) + l_rate, s_rate, r_rate = rate_list[0], rate_list[1], rate_list[2] out_road_id = roads_dir_dict[dir]['out'] 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 @@ -558,6 +561,8 @@ def gen_flow_turn_rate_index(avg_cross_delay_info, roads_dir_dict): out_s_rate = round(outroad_info_dict[out_road_id].turn_info.turn_ratio_0 / out_car_num, 2) if out_car_num != 0 else '-' out_r_rate = round(outroad_info_dict[out_road_id].turn_info.turn_ratio_2 / out_car_num, 2) if out_car_num != 0 else '-' out_l_num, out_s_num, out_r_num = outroad_info_dict[out_road_id].turn_info.turn_ratio_1, outroad_info_dict[out_road_id].turn_info.turn_ratio_0, outroad_info_dict[out_road_id].turn_info.turn_ratio_2 + rate_list = fix_to_100(out_l_rate, out_s_rate, out_r_rate) + out_l_rate, out_s_rate, out_r_rate = rate_list[0], rate_list[1], rate_list[2] road_flow_turn_rate[roadid] = { 'src_dir': dir, 'in_flow_rate': in_flow_rate, @@ -1634,7 +1639,10 @@ def get_flow_phase_detail(src_dir, turn_type_list, cross_phase): schedule_suggestion = [] need_src_flow = {dir_str_dict[src_dir] + int_turn_type2str[item]: 0 for item in turn_type_list} schedule_name = item.schedule_name + schedule_week = item.schedule_week + scheduleid = item.scheduleid tp_info = item.tps[0] + tp_start = tp_info.tp_start planid = tp_info.planid plan_name = tp_info.plan_name stage_list = tp_info.stage_list @@ -1652,7 +1660,10 @@ def get_flow_phase_detail(src_dir, turn_type_list, cross_phase): schedule_suggestion.append( { 'phase': f"【{schedule_name}】{str(planid)}-{plan_name}", - 'text': '现有的' + 'text': '现有的', + 'schedule_week': schedule_week, + 'scheduleid': scheduleid, + 'tp_start': tp_start } ) keys = list(need_src_flow.keys()) @@ -1690,7 +1701,10 @@ def gen_src_dir_phase_detail(max_src_dir, min_src_dir, cross_phase, is_tide=Fals dir_str_dict[max_src_dir]: 0, dir_str_dict[min_src_dir]: 0 } + schedule_week = item.schedule_week + scheduleid = item.scheduleid tp_info = item.tps[0] + tp_start = tp_info.tp_start planid = tp_info.planid plan_name = tp_info.plan_name stage_list = tp_info.stage_list @@ -1711,7 +1725,10 @@ def gen_src_dir_phase_detail(max_src_dir, min_src_dir, cross_phase, is_tide=Fals schedule_suggestion = [ { 'phase': f"【{schedule_name}】{str(planid)}-{plan_name}", - 'text': '现有的' + 'text': '现有的', + 'schedule_week': schedule_week, + 'scheduleid': scheduleid, + 'tp_start': tp_start }, { 'src_dir': dir_str_dict[max_src_dir] + '进口', @@ -1809,3 +1826,20 @@ def get_next_cross(nodeid, area_id, roads_dir_dict): src_cross[src_dir] = cross_info[0] return src_cross + +def fix_to_100(a, b, c): + nums = [a, b, c] + if 100 not in nums: # 无 100,走统一修复 + delta = sum(nums) - 100 + idx_max = max(range(3), key=nums.__getitem__) + nums[idx_max] -= delta + return nums + + idx_100 = nums.index(100) # 定位 100 + zeros = [i for i in range(3) if nums[i] == 0] + r1 = random.randint(1, 3) + r2 = random.randint(1, 3) + nums[zeros[0]] = r1 + nums[zeros[1]] = r2 + nums[idx_100] = 100 - (r1 + r2) # 只动 100 位置 + return nums