// // Created by zx on 2020/7/7. // #include #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)<<"取车流程释放车位成功,停车终端:"<