Bläddra i källkod

2021 0301, wangkang parkspace

wk 4 år sedan
förälder
incheckning
5c1926b823
1 ändrade filer med 401 tillägg och 37 borttagningar
  1. 401 37
      parkspace_allocation/parkspace_manager.cpp

+ 401 - 37
parkspace_allocation/parkspace_manager.cpp

@@ -257,9 +257,9 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			int i = 0;
 			while (i < all_min_parkspace_data.parkspace_info_size())
 			{
+				int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
 				//筛选出一号车库的小型车位(第一优先级)的空车位
-				if (all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 <= 8
-					&& all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 >= 1
+				if (room_id %15 <= 8 && room_id %15 >= 1
 					&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
 				{
 					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -300,8 +300,9 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			while(i<all_mid_parkspace_data.parkspace_info_size())
 			{
 				//三楼的中型车位有单独的中跑车停车  且机械臂可以直接抓车到三楼
-				if ( all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() >= 19
-					&& all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 23)
+				int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+				if ( room_id >= 19 && room_id <= 23)
 				{
 				    //只需计算端口到车位的距离
 					// 三楼中型用时=| 目标车位到电梯的距离 - 终端到电梯的距离 | / 中跑车速度
@@ -318,9 +319,8 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 					}
 				}
 				//如果是六楼的中型车位
-				if ( all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 68
-						&& all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() >=61
-						&& all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+				if ( room_id <= 68 && room_id >=61
+					&& all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 				{
 					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
 					float time=terminal_id%6*TERMINAL_SPACING/MEDIUM_CAR_SPEED  + DOWNSTAIRS_SPORTS_TIME +
@@ -360,10 +360,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			int i=0;
 			while(i<all_big_parkspace_data.parkspace_info_size())
 			{
-				//筛选出一号车库的小型车位的靠近电梯的左侧三排(第二优先级)的空车位
-				if ( all_big_parkspace_data.parkspace_info(i).parkingspace_index_id()%15 <= 8
-						&& all_big_parkspace_data.parkspace_info(i).parkingspace_index_id()%15 >=1
-							 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+				int room_id=all_big_parkspace_data.parkspace_info(i).parkingspace_index_id();
+				//筛选出一号车库的大型车位
+				if ( room_id%15 <= 8 && room_id %15 >=1
+					 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 				{
 					//如果是二楼车 则特殊处理
 					if ( all_big_parkspace_data.parkspace_info(i).parkingspace_floor_id() == 2 )
@@ -432,9 +432,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			int i = 0;
 			while (i < all_min_parkspace_data.parkspace_info_size())
 			{
+				int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 				//筛选出一号车库的小型车位(第一优先级)的空车位
-				if (all_min_parkspace_data.parkspace_info(i).parkingspace_index_id()  <= 165
-					&& all_min_parkspace_data.parkspace_info(i).parkingspace_index_id()  >= 54
+				if (room_id  <= 165 && room_id  >= 54
 					&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
 				{
 					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -474,9 +475,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			int i=0;
 			while(i<all_mid_parkspace_data.parkspace_info_size())
 			{
+				int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 				//三楼的中型车位有单独的中跑车停车  且机械臂可以直接抓车到三楼
-				if ( all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() >= 24
-					&& all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 27 )
+				if ( room_id >= 24 && room_id <= 27 )
 				{
 					//只需计算端口到车位的距离
 					// 三楼中型车位用时=| 目标车位到电梯的距离 - 终端到电梯的距离 | / 中跑车速度
@@ -492,8 +494,7 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 						parkingspace_index_id=i;
 					}
 				}
-				if ( all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 75
-					 && all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() >= 69
+				if ( room_id <= 75 && room_id >= 69
 					 && all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 				{
 					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -534,10 +535,11 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverA(message::Pa
 			int i=0;
 			while(i<all_big_parkspace_data.parkspace_info_size())
 			{
+				int room_id=all_big_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 				//筛选出二号车库的大型车位的空车位
-				if ( all_big_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 45
-					 && all_big_parkspace_data.parkspace_info(i).parkingspace_index_id() >= 9
-					 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+				if ( room_id %15 >=9 && room_id %15 <=14 || room_id %15 == 0
+					&& all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 				{
 					//如果是二楼车 则特殊处理
 					if ( all_big_parkspace_data.parkspace_info(i).parkingspace_floor_id() == 2 )
@@ -606,7 +608,7 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 	 */
 	int time_min=0;
 	int parkingspace_index_id=-1;
-	//
+	//找左侧车位
 	//如果是小车 (低于1.55米属于小车)
 	if ( car_info.car_height() <= MIN_CAR_HIGH )
 	{
@@ -621,9 +623,9 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 		int i = 0;
 		while (i < all_min_parkspace_data.parkspace_info_size())
 		{
-			//筛选出一号车库的小型车位的中间部分(第一优先级)的空车位
-			if (all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 <= 8
-				&& all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 >= 4
+			int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
+			//筛选出小型车位的中间部分(第一优先级)的空车位
+			if (room_id % 15 <= 8 && room_id % 15 >= 4
 				&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
 			{
 				//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -655,9 +657,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 			int i = 0;
 			while (i < all_min_parkspace_data.parkspace_info_size())
 			{
+				int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 				//筛选出一号车库的小型车位的中间部分(第一优先级)的空车位
-				if (all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 <= 3
-					&& all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 >= 1
+				if (room_id % 15 <= 3 && room_id % 15 >= 1
 					&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
 				{
 					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -687,7 +690,7 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 	}
 	if ( car_info.car_height() <= MID_CAR_HIGH )
 	{
-		//第二优先级(中型车位)
+		//找中型车位
 		//获取中型车位
 		message::Parkspace_allocation_data_msg all_mid_parkspace_data;
 		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_mid_parkspace_data,message::Parkspace_type::MID_PARKINGSPACE);
@@ -698,9 +701,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 		int i=0;
 		while(i<all_mid_parkspace_data.parkspace_info_size())
 		{
+			int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 			//如果是六楼的中型车位的中间部分(第一优先级)
-			if ( all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() <= 68
-				 && all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id() >=64
+			if ( room_id >=64 && room_id <= 68
 				 && all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 			{
 				//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
@@ -721,16 +725,53 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 			}
 			++i;
 		}
-		//判断中型车位(第二优先级)是否有找到合适的空车位   如果找到了 直接返回
+		//判断中型车位的中间部分(第一优先级)是否有找到合适的空车位   如果找到了 直接返回
 		if ( time_min!=0 && parkingspace_index_id!=-1 )
 		{
 			parkspace_info.CopyFrom(all_mid_parkspace_data.parkspace_info(parkingspace_index_id));
 			return Error_code::SUCCESS;
 		}
+		else
+		{
+		    //如果没找到则找侧边中型车位(第二优先级)
+			int i=0;
+			while(i<all_mid_parkspace_data.parkspace_info_size())
+			{
+				int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+				//如果是六楼的中型车位的侧边(第二优先级)
+				if ( room_id >=61 && room_id <= 63
+					 && all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+				{
+					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+					float time=terminal_id%6*TERMINAL_SPACING/MEDIUM_CAR_SPEED  + DOWNSTAIRS_SPORTS_TIME +
+							   (all_mid_parkspace_data.parkspace_info(i).parkingspace_floor_id()-2)*all_mid_parkspace_data.parkspace_info(i).parkingspace_height()/THE_ELEVATOR_SPEED + ELEVATOR_MOVEMENT_TIME +
+							   all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id()%15*all_mid_parkspace_data.parkspace_info(i).parkingspace_width()/MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+					if ( time_min == 0 )
+					{
+						time_min=time;
+						parkingspace_index_id=i;
+
+					}
+					else
+					{
+						time_min=time<time_min?time:time_min;
+						parkingspace_index_id=i;
+					}
+				}
+				++i;
+			}
+			//判断中型车位侧边(第二优先级)是否有找到合适的空车位   如果找到了 直接返回
+			if ( time_min!=0 && parkingspace_index_id!=-1 )
+			{
+				parkspace_info.CopyFrom(all_mid_parkspace_data.parkspace_info(parkingspace_index_id));
+				return Error_code::SUCCESS;
+			}
+		}
 	}
 	if ( car_info.car_height() <= BIG_CAR_HIGH )
 	{
-		//第三优先级(大型车位)
+		//找大型车位
 		//获取大型车位
 		message::Parkspace_allocation_data_msg all_big_parkspace_data;
 		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_big_parkspace_data,message::Parkspace_type::BIG_PARKINGSPACE);
@@ -741,9 +782,10 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 		int i=0;
 		while(i<all_big_parkspace_data.parkspace_info_size())
 		{
+			int room_id=all_big_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
 			//筛选出一号车库的小型车位的靠近电梯的左侧三排(第二优先级)的空车位
-			if ( all_big_parkspace_data.parkspace_info(i).parkingspace_index_id()%15 <= 8
-				 && all_big_parkspace_data.parkspace_info(i).parkingspace_index_id()%15 >=1
+			if ( room_id %15 == 1 || room_id %15 == 2 || room_id %15 == 3 || room_id>=34 && room_id<=38
 				 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
 			{
 				//如果是二楼车 则特殊处理
@@ -783,7 +825,7 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 			}
 			++i;
 		}
-		//判断大型车位(第三优先级)是否有找到合适的空车位   如果找到了  直接返回
+		//判断大型车位是否有找到合适的空车位   如果找到了  直接返回
 		if ( time_min!=0 && parkingspace_index_id!=-1 )
 		{
 			parkspace_info.CopyFrom(all_big_parkspace_data.parkspace_info(parkingspace_index_id));
@@ -791,11 +833,14 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB1(message::P
 		}
 		else
 		{
-			return Error_manager(Error_code::PARKSPACE_ALLOCATOR_ALLOCATE_FAILED, Error_level::MINOR_ERROR,
-								 " query_the_optimal_parkspace_serverA error ");
+			//如果没找到则代表左侧没找到合适车位
+			parkspace_info.set_parkingspace_index_id(-1);
+			return Error_manager(Error_code::PARKSPACE_ALLOCATOR_ALLOCATE_FAILED, Error_level::NEGLIGIBLE_ERROR,
+								"query_the_optimal_parkspace_serverB1  error ");
 		}
 	}
-
+	return Error_manager(Error_code::PARAMETER_ERROR, Error_level::MINOR_ERROR,
+						" query_the_optimal_parkspace_serverB1 error ");
 
 }
 //找右侧车位
@@ -809,6 +854,239 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB2(message::P
 	 */
 	int time_min=0;
 	int parkingspace_index_id=-1;
+	//找右侧车位
+	//如果是小车 (低于1.55米属于小车)
+	if ( car_info.car_height() <= MIN_CAR_HIGH )
+	{
+		//获取所有小型车位信息
+		message::Parkspace_allocation_data_msg all_min_parkspace_data;
+		Error_manager t_error = m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_min_parkspace_data, message::Parkspace_type::MIN_PARKINGSPACE);
+		if (t_error != SUCCESS)
+		{
+			return t_error;
+		}
+		//遍历所有小型车位
+		int i = 0;
+		while (i < all_min_parkspace_data.parkspace_info_size())
+		{
+			int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
+			//筛选出小型车位的中间部分(第一优先级)的空车位
+			if (room_id % 15 >= 9 && room_id % 15 <= 12
+				&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
+			{
+				//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+				float time = terminal_id % 6 * TERMINAL_SPACING / MEDIUM_CAR_SPEED + DOWNSTAIRS_SPORTS_TIME +
+							 (all_min_parkspace_data.parkspace_info(i).parkingspace_floor_id() - 2) *all_min_parkspace_data.parkspace_info(i).parkingspace_height() /THE_ELEVATOR_SPEED +ELEVATOR_MOVEMENT_TIME +
+							 all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 *all_min_parkspace_data.parkspace_info(i).parkingspace_width() / MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+				if (time_min == 0)
+				{
+					time_min = time;
+					parkingspace_index_id = i;
+				}
+				else
+				{
+					time_min = time < time_min ? time : time_min;
+					parkingspace_index_id = i;
+				}
+			}
+			++i;
+		}
+		//判断小车车位中间部分(第一优先级)是否有找到合适的空车位   如果找到了  则不需要继续比较  直接返回
+		if ( time_min!=0 && parkingspace_index_id!=-1 )
+		{
+			parkspace_info.CopyFrom(all_min_parkspace_data.parkspace_info(parkingspace_index_id));
+			return Error_code::SUCCESS;
+		}
+		else
+		{
+			//如果没找到则找小车车位第二优先级 (侧边)
+			int i = 0;
+			while (i < all_min_parkspace_data.parkspace_info_size())
+			{
+				int room_id=all_min_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+				//筛选出一号车库的小型车位的中间部分(第一优先级)的空车位
+				if (room_id % 15 == 13 || room_id % 15 == 14 || room_id % 15 == 0
+					&& all_min_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty)
+				{
+					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+					float time = terminal_id % 6 * TERMINAL_SPACING / MEDIUM_CAR_SPEED + DOWNSTAIRS_SPORTS_TIME +
+								 (all_min_parkspace_data.parkspace_info(i).parkingspace_floor_id() - 2) *all_min_parkspace_data.parkspace_info(i).parkingspace_height() /THE_ELEVATOR_SPEED +ELEVATOR_MOVEMENT_TIME +
+								 all_min_parkspace_data.parkspace_info(i).parkingspace_index_id() % 15 *all_min_parkspace_data.parkspace_info(i).parkingspace_width() / MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+					if (time_min == 0)
+					{
+						time_min = time;
+						parkingspace_index_id = i;
+					}
+					else
+					{
+						time_min = time < time_min ? time : time_min;
+						parkingspace_index_id = i;
+					}
+				}
+				++i;
+			}
+			//判断小车车位侧边部分(第二优先级)是否有找到合适的空车位   如果找到了  则不需要继续比较  直接返回
+			if ( time_min!=0 && parkingspace_index_id!=-1 )
+			{
+				parkspace_info.CopyFrom(all_min_parkspace_data.parkspace_info(parkingspace_index_id));
+				return Error_code::SUCCESS;
+			}
+		}
+	}
+	if ( car_info.car_height() <= MID_CAR_HIGH )
+	{
+		//找中型车位
+		//获取中型车位
+		message::Parkspace_allocation_data_msg all_mid_parkspace_data;
+		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_mid_parkspace_data,message::Parkspace_type::MID_PARKINGSPACE);
+		if(t_error != SUCCESS)
+		{
+			return t_error;
+		}
+		int i=0;
+		while(i<all_mid_parkspace_data.parkspace_info_size())
+		{
+			int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+			//如果是六楼的中型车位的中间部分(第一优先级)
+			if ( room_id >= 69 && room_id <= 72
+				 && all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+			{
+				//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+				float time=terminal_id%6*TERMINAL_SPACING/MEDIUM_CAR_SPEED  + DOWNSTAIRS_SPORTS_TIME +
+						   (all_mid_parkspace_data.parkspace_info(i).parkingspace_floor_id()-2)*all_mid_parkspace_data.parkspace_info(i).parkingspace_height()/THE_ELEVATOR_SPEED + ELEVATOR_MOVEMENT_TIME +
+						   all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id()%15*all_mid_parkspace_data.parkspace_info(i).parkingspace_width()/MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+				if ( time_min == 0 )
+				{
+					time_min=time;
+					parkingspace_index_id=i;
+
+				}
+				else
+				{
+					time_min=time<time_min?time:time_min;
+					parkingspace_index_id=i;
+				}
+			}
+			++i;
+		}
+		//判断中型车位的中间部分(第一优先级)是否有找到合适的空车位   如果找到了 直接返回
+		if ( time_min!=0 && parkingspace_index_id!=-1 )
+		{
+			parkspace_info.CopyFrom(all_mid_parkspace_data.parkspace_info(parkingspace_index_id));
+			return Error_code::SUCCESS;
+		}
+		else
+		{
+			//如果没找到则找侧边中型车位(第二优先级)
+			int i=0;
+			while(i<all_mid_parkspace_data.parkspace_info_size())
+			{
+				int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+				//如果是六楼的中型车位的侧边(第二优先级)
+				if ( room_id >=73 && room_id <= 75
+					 && all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+				{
+					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+					float time=terminal_id%6*TERMINAL_SPACING/MEDIUM_CAR_SPEED  + DOWNSTAIRS_SPORTS_TIME +
+							   (all_mid_parkspace_data.parkspace_info(i).parkingspace_floor_id()-2)*all_mid_parkspace_data.parkspace_info(i).parkingspace_height()/THE_ELEVATOR_SPEED + ELEVATOR_MOVEMENT_TIME +
+							   all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id()%15*all_mid_parkspace_data.parkspace_info(i).parkingspace_width()/MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+					if ( time_min == 0 )
+					{
+						time_min=time;
+						parkingspace_index_id=i;
+
+					}
+					else
+					{
+						time_min=time<time_min?time:time_min;
+						parkingspace_index_id=i;
+					}
+				}
+				++i;
+			}
+			//判断中型车位侧边(第二优先级)是否有找到合适的空车位   如果找到了 直接返回
+			if ( time_min!=0 && parkingspace_index_id!=-1 )
+			{
+				parkspace_info.CopyFrom(all_mid_parkspace_data.parkspace_info(parkingspace_index_id));
+				return Error_code::SUCCESS;
+			}
+		}
+	}
+	if ( car_info.car_height() <= BIG_CAR_HIGH )
+	{
+		//找大型车位
+		//获取大型车位
+		message::Parkspace_allocation_data_msg all_big_parkspace_data;
+		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_big_parkspace_data,message::Parkspace_type::BIG_PARKINGSPACE);
+		if(t_error != SUCCESS)
+		{
+			return t_error;
+		}
+		int i=0;
+		while(i<all_big_parkspace_data.parkspace_info_size())
+		{
+			int room_id=all_big_parkspace_data.parkspace_info(i).parkingspace_index_id();
+
+			//筛选出大型车位的靠近电梯的右侧三排(第二优先级)的空车位
+			if ( room_id %15 == 13 || room_id %15 == 14 || room_id %15 == 0|| room_id>=39 && room_id<=42
+				 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::Parkspace_status::eParkspace_empty )
+			{
+				//如果是二楼车 则特殊处理
+				if ( all_big_parkspace_data.parkspace_info(i).parkingspace_floor_id() == 2 )
+				{
+					// 二楼用时=| 目标车位到电梯的距离 - 终端到电梯的距离 | / 中跑车速度
+					int t_min=abs( i%15*all_big_parkspace_data.parkspace_info(i).parkingspace_width()-terminal_id%6*TERMINAL_SPACING )/MEDIUM_CAR_SPEED+DOWNSTAIRS_SPORTS_TIME;
+					if ( time_min == 0 )
+					{
+						time_min=t_min;
+						parkingspace_index_id=i;
+					}
+					else
+					{
+						time_min=t_min<time_min?t_min:time_min;
+						parkingspace_index_id=i;
+					}
+				}
+				else
+				{
+					//用时=目标终端到电梯口的距离/中跑车速度+(目标车位楼层-2)*楼层高度/电梯速度+电梯口到目标车位的距离/中跑车速度
+					float time=terminal_id%6*TERMINAL_SPACING/MEDIUM_CAR_SPEED  + DOWNSTAIRS_SPORTS_TIME +
+							   (all_big_parkspace_data.parkspace_info(i).parkingspace_floor_id()-2)*all_big_parkspace_data.parkspace_info(i).parkingspace_height()/THE_ELEVATOR_SPEED + ELEVATOR_MOVEMENT_TIME +
+							   all_big_parkspace_data.parkspace_info(i).parkingspace_index_id()%15*all_big_parkspace_data.parkspace_info(i).parkingspace_width()/MEDIUM_CAR_SPEED + UPSTAIRS_SPORTS_TIME;
+					if ( time_min == 0 )
+					{
+						time_min=time;
+						parkingspace_index_id=i;
+
+					}
+					else
+					{
+						time_min=time<time_min?time:time_min;
+						parkingspace_index_id=i;
+					}
+				}
+			}
+			++i;
+		}
+		//判断大型车位是否有找到合适的空车位   如果找到了  直接返回
+		if ( time_min!=0 && parkingspace_index_id!=-1 )
+		{
+			parkspace_info.CopyFrom(all_big_parkspace_data.parkspace_info(parkingspace_index_id));
+			return Error_code::SUCCESS;
+		}
+		else
+		{
+			//如果没找到则代表右侧没找到合适车位
+			parkspace_info.set_parkingspace_index_id(-1);
+			return Error_manager(Error_code::PARKSPACE_ALLOCATOR_ALLOCATE_FAILED, Error_level::NEGLIGIBLE_ERROR,
+								 "query_the_optimal_parkspace_serverB2  error ");
+		}
+	}
+	return Error_manager(Error_code::PARAMETER_ERROR, Error_level::MINOR_ERROR,
+						 " query_the_optimal_parkspace_serverB2 error ");
 }
 //找缓存区车位
 Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB3(message::Parkspace_info &parkspace_info,message::Car_info car_info,int terminal_id)
@@ -821,6 +1099,92 @@ Error_manager Parkspace_manager::query_the_optimal_parkspace_serverB3(message::P
 	 */
 	int time_min=0;
 	int parkingspace_index_id=-1;
+	//找缓存区车位 缓冲区只有中型车位和大型车位
+	if ( car_info.car_height() <= MID_CAR_HIGH )
+	{
+		message::Parkspace_allocation_data_msg all_mid_parkspace_data;
+		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_mid_parkspace_data,message::Parkspace_type::MID_PARKINGSPACE);
+		if(t_error != SUCCESS)
+		{
+			return t_error;
+		}
+		int i=0;
+		while (i < all_mid_parkspace_data.parkspace_info_size())
+		{
+			//筛选中型车位缓冲区
+			int room_id=all_mid_parkspace_data.parkspace_info(i).parkingspace_index_id();
+			if ( room_id >= 19 && room_id <= 27
+				&& all_mid_parkspace_data.parkspace_info(i).parkingspace_status() == message::eParkspace_empty)
+			{
+				//只需计算端口到车位的距离
+				// 三楼中型用时=| 目标车位到电梯的距离 - 终端到电梯的距离 | / 中跑车速度
+				int t_min=abs( i%15*all_mid_parkspace_data.parkspace_info(i).parkingspace_width()-terminal_id%6*TERMINAL_SPACING )/MEDIUM_CAR_SPEED+DOWNSTAIRS_SPORTS_TIME;
+				if ( time_min == 0 )
+				{
+					time_min=t_min;
+					parkingspace_index_id=i;
+				}
+				else
+				{
+					time_min=t_min<time_min?t_min:time_min;
+					parkingspace_index_id=i;
+				}
+			}
+		}
+		//判断缓冲区的中型车位是否有找到合适的空车位   如果找到了  直接返回
+		if ( time_min!=0 && parkingspace_index_id!=-1 )
+		{
+			parkspace_info.CopyFrom(all_mid_parkspace_data.parkspace_info(parkingspace_index_id));
+			return Error_code::SUCCESS;
+		}
+	}
+	if(  car_info.car_height() <= BIG_CAR_HIGH )
+	{
+		message::Parkspace_allocation_data_msg all_big_parkspace_data;
+		Error_manager t_error=m_parkspace_operating_function.get_specify_the_type_parkspace_info(all_big_parkspace_data,message::Parkspace_type::BIG_PARKINGSPACE);
+		if(t_error != SUCCESS)
+		{
+			return t_error;
+		}
+		int i=0;
+		while (i < all_big_parkspace_data.parkspace_info_size())
+		{
+			//筛选中型车位缓冲区
+			int room_id=all_big_parkspace_data.parkspace_info(i).parkingspace_index_id();
+			if ( room_id >= 4 && room_id <= 12
+				 && all_big_parkspace_data.parkspace_info(i).parkingspace_status() == message::eParkspace_empty)
+			{
+				//只需计算端口到车位的距离
+				// 二楼中型用时=| 目标车位到电梯的距离 - 终端到电梯的距离 | / 中跑车速度
+				int t_min=abs( i%15*all_big_parkspace_data.parkspace_info(i).parkingspace_width()-terminal_id%6*TERMINAL_SPACING )/MEDIUM_CAR_SPEED+DOWNSTAIRS_SPORTS_TIME;
+				if ( time_min == 0 )
+				{
+					time_min=t_min;
+					parkingspace_index_id=i;
+				}
+				else
+				{
+					time_min=t_min<time_min?t_min:time_min;
+					parkingspace_index_id=i;
+				}
+			}
+		}
+		//判断缓冲区的中型车位是否有找到合适的空车位   如果找到了  直接返回
+		if ( time_min!=0 && parkingspace_index_id!=-1 )
+		{
+			parkspace_info.CopyFrom(all_big_parkspace_data.parkspace_info(parkingspace_index_id));
+			return Error_code::SUCCESS;
+		}
+		else
+		{
+			//如果没找到则代表缓冲区没找到合适车位
+			parkspace_info.set_parkingspace_index_id(-1);
+			return Error_manager(Error_code::PARKSPACE_ALLOCATOR_ALLOCATE_FAILED, Error_level::NEGLIGIBLE_ERROR,
+								 "query_the_optimal_parkspace_serverB2  error ");
+		}
+	}
+	return Error_manager(Error_code::PARAMETER_ERROR, Error_level::MINOR_ERROR,
+						 " query_the_optimal_parkspace_serverB3 error ");
 }
 //分配车位线程函数
 void Parkspace_manager::execute_for_allocate(message::Car_info car_info, int terminal_id, std::string command_key)