Kaynağa Gözat

完成停取车流程封装

zx 5 yıl önce
ebeveyn
işleme
9df926b90b

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3636 - 0
message/process_message.pb.cc


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2121 - 0
message/process_message.pb.h


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1882 - 0
message/terminal_message.pb.cc


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1222 - 0
message/terminal_message.pb.h


+ 147 - 0
system/PickupProcessTask.cpp

@@ -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");
+}

+ 51 - 0
system/PickupProcessTask.h

@@ -0,0 +1,51 @@
+//
+// Created by zx on 2020/7/7.
+//
+
+#ifndef NNXX_TESTS_TAKEPROCESS_H
+#define NNXX_TESTS_TAKEPROCESS_H
+#include <parkspace_allocation_message.pb.h>
+#include "error_code.h"
+#include "TaskQueue/BaseTask.h"
+
+class PickupProcessTask :public tq::BaseTask{
+public:
+    PickupProcessTask();
+    virtual  ~PickupProcessTask();
+    Error_manager init_task(unsigned int command_id, unsigned int terminor_id,message::Car_info car_info);
+
+    /*
+     * 查询车位
+     */
+    Error_manager search_space();
+protected:
+    virtual void Main();
+
+    /*
+     * 执行取车动作请求,并等待执行完成
+     */
+    Error_manager pickup_step();
+
+    /*
+     * 等待车辆离开
+     */
+    Error_manager wait_for_leave_step();
+
+    /*
+     * 清除车位表中对应的车位
+     */
+    Error_manager release_space_step();
+
+protected:
+    unsigned int                m_command_id;
+    unsigned int                m_terminor_id;
+    message::Car_info           m_car_info;          //当前流程的车辆信息
+
+private:
+    //查询到的车位信息
+    message::Parkspace_search_response_msg                  m_parcspace_search_response_msg;
+
+};
+
+
+#endif //NNXX_TESTS_TAKEPROCESS_H