|
@@ -0,0 +1,147 @@
|
|
|
+//
|
|
|
+// Created by zx on 2020/7/7.
|
|
|
+//
|
|
|
+
|
|
|
+#include <Parkspace_communicator.h>
|
|
|
+#include "PickupProcessTask.h"
|
|
|
+#include "process_message.pb.h"
|
|
|
+#include "command_manager.h"
|
|
|
+
|
|
|
+PickupProcessTask::PickupProcessTask(){}
|
|
|
+PickupProcessTask::~PickupProcessTask(){}
|
|
|
+Error_manager PickupProcessTask::init_task(unsigned int command_id, unsigned int terminor_id,message::Car_info car_info)
|
|
|
+{
|
|
|
+ m_command_id=command_id;
|
|
|
+ m_terminor_id=terminor_id;
|
|
|
+ m_car_info=car_info;
|
|
|
+ return SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * 查询车位
|
|
|
+ */
|
|
|
+Error_manager PickupProcessTask::search_space()
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * 检验汽车信息是否正常
|
|
|
+ */
|
|
|
+ if(m_car_info.has_car_width()==false||m_car_info.has_car_height()== false
|
|
|
+ ||m_car_info.has_license()==false)
|
|
|
+ {
|
|
|
+ return Error_manager(INVALID_MESSAGE,CRITICAL_ERROR,"查询车位请求汽车信息错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ message::Base_info base_info;
|
|
|
+ base_info.set_msg_type(message::eParkspace_search_request_msg);
|
|
|
+ base_info.set_sender(message::eMain);
|
|
|
+ base_info.set_receiver(message::eParkspace);
|
|
|
+
|
|
|
+ message::Parkspace_search_request_msg request;
|
|
|
+ request.set_command_id(m_command_id);
|
|
|
+ request.mutable_base_info()->CopyFrom(base_info);
|
|
|
+ request.mutable_car_info()->CopyFrom(m_car_info);
|
|
|
+ return Parkspace_communicator::get_instance_pointer()->search_request(request,m_parcspace_search_response_msg);
|
|
|
+}
|
|
|
+void PickupProcessTask::Main()
|
|
|
+{
|
|
|
+ Error_manager code;
|
|
|
+ message::Process_pickup_statu pickup_statu;
|
|
|
+ //进入取车流程
|
|
|
+ switch (0)
|
|
|
+ {
|
|
|
+ //第一步,执行取车动作
|
|
|
+ case 0:
|
|
|
+ {
|
|
|
+ message::Picking_statu picking_statu;
|
|
|
+ code=pickup_step();
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //第二步,清除车位
|
|
|
+ case 1:
|
|
|
+ {
|
|
|
+ code=release_space_step();
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //第三步,等待车辆离开
|
|
|
+ case 2:
|
|
|
+ {
|
|
|
+ code=wait_for_leave_step();
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ message::Finish_pickup_statu finish_statu;
|
|
|
+ finish_statu.set_statu(message::eComplete);
|
|
|
+ pickup_statu.mutable_finish_statu()->CopyFrom(finish_statu);
|
|
|
+ Command_manager::get_instance_pointer()->updata_entrance_statu(m_command_id,pickup_statu);
|
|
|
+ ////资源回收
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * 执行取车动作请求,并等待执行完成
|
|
|
+ */
|
|
|
+Error_manager PickupProcessTask::pickup_step()
|
|
|
+{
|
|
|
+ return SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * 等待车辆离开
|
|
|
+ */
|
|
|
+Error_manager PickupProcessTask::wait_for_leave_step()
|
|
|
+{
|
|
|
+ return SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * 清除车位表中对应的车位
|
|
|
+ */
|
|
|
+Error_manager PickupProcessTask::release_space_step()
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * 检查是否曾经分配过车位
|
|
|
+ */
|
|
|
+ if(m_parcspace_search_response_msg.has_car_position()==false)
|
|
|
+ {
|
|
|
+ return Error_manager(FAILED,MINOR_ERROR," 取车流程释放车位请求缺少车位信息");
|
|
|
+ }
|
|
|
+
|
|
|
+ message::Parkspace_release_request_msg request;
|
|
|
+ message::Base_info base_info;
|
|
|
+ base_info.set_msg_type(message::eParkspace_release_request_msg);
|
|
|
+ base_info.set_sender(message::eMain);
|
|
|
+ base_info.set_receiver(message::eParkspace);
|
|
|
+ base_info.set_timeout_ms(1000); //测量超时1s
|
|
|
+ request.mutable_base_info()->CopyFrom(base_info);
|
|
|
+
|
|
|
+ message::Parkspace_info space_info=m_parcspace_search_response_msg.car_position();
|
|
|
+ request.mutable_release_space_info()->CopyFrom(space_info);
|
|
|
+
|
|
|
+ request.set_command_id(m_command_id);
|
|
|
+
|
|
|
+
|
|
|
+ message::Parkspace_release_response_msg release_response;
|
|
|
+ Error_manager code=Parkspace_communicator::get_instance_pointer()->release_request(request,release_response);
|
|
|
+ if(code!=SUCCESS)
|
|
|
+ return code;
|
|
|
+
|
|
|
+ if(release_response.error_manager().error_code()==0) {
|
|
|
+ LOG(INFO)<<"取车流程释放车位成功,停车终端:"<<m_terminor_id
|
|
|
+ <<", 指令id:"<<m_command_id
|
|
|
+ <<", 车位楼层:"<<m_parcspace_search_response_msg.car_position().floor()
|
|
|
+ <<", 车位序号:"<<m_parcspace_search_response_msg.car_position().index()
|
|
|
+ <<", 车牌号:"<<m_parcspace_search_response_msg.car_position().car_info().license();
|
|
|
+ return SUCCESS;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return Error_manager(FAILED,MINOR_ERROR,"取车流程parkspace release response error_code error");
|
|
|
+}
|