Browse Source

取车流程修改完成,crash未解决

zx 4 years ago
parent
commit
70ec2181c5

+ 2 - 2
exception/exception_solver.cpp

@@ -130,7 +130,7 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
     {
         //四级故障,任务未完成, 且模块未能回退并恢复到初始待机状态
         //关闭出入口
-        if(task->GetCategory()==message::eStoring) {
+        if(task->get_process_type()==message::eStoring) {
             Command_manager::get_instance_pointer()->pause_entrance(task->terminal_id(),true);
             LOG(ERROR)<<"关闭入口:"<<task->terminal_id()<<"   故障  !!!!!!  等待手动操作 ... ";
             message::Process_manual_operation_msg operate_msg;
@@ -161,7 +161,7 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
 
 
         }
-        if(task->GetCategory()==message::ePicking) {
+        if(task->get_process_type()==message::ePicking) {
             Command_manager::get_instance_pointer()->pause_export(task->terminal_id(),true);
             LOG(ERROR)<<"关闭出口:"<<task->terminal_id()<<"   四级故障  !!!!!!  等待手动操作 ...";
             message::Process_manual_operation_msg operate_msg;

+ 0 - 2
message/dispatch_message.proto

@@ -97,7 +97,6 @@ message Dispatch_manager_status_msg
     required Base_info                  base_info=1;                    //消息类型
     required int32                      dispatch_id=2;                  //调度管理模块 id
     required Dispatch_manager_status    dispatch_manager_status = 3;    //调度管理模块 状态
-
     repeated Catcher_status             catcher_status = 4;             //抓车器状态, 楚天项目就是AGV系统
     repeated Carrier_status             carrier_status = 5;             //搬运器状态, 楚天项目就是中跑车
     repeated Elevator_status            elevator_status = 6;            //升降机状态, 楚天项目就是电梯
@@ -119,7 +118,6 @@ message Dispatch_request_msg
 {
     required Base_info                  base_info=1;                            //消息类型
     required string                     command_key=2;                   //指令唯一标识符id
-
     required Dispatch_motion_direction  dispatch_motion_direction=3;            //调度方向, 停车取车
     required int32                      terminal_id=4;                          //终端id, 出入口
     required int32                      parkspace_id=5;                         //车位编号, 停车位

+ 97 - 58
message/process_message.pb.cc

@@ -565,7 +565,7 @@ void InitDefaultsPicking_process_statu_msgImpl() {
   protobuf_process_5fmessage_2eproto::InitDefaultsRelease_space_step_statu();
   protobuf_process_5fmessage_2eproto::InitDefaultsWaitfor_leave_step_statu();
   protobuf_process_5fmessage_2eproto::InitDefaultsBack_waitfor_leave_step_statu();
-  protobuf_process_5fmessage_2eproto::InitDefaultsBack_release_space_step_statu();
+  protobuf_process_5fmessage_2eproto::InitDefaultsBack_dispatch_pick_step_statu();
   protobuf_process_5fmessage_2eproto::InitDefaultsBack_search_space_step_statu();
   {
     void* ptr = &::message::_Picking_process_statu_msg_default_instance_;
@@ -840,8 +840,9 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, waitfor_leave_step_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, completed_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, back_waitfor_leave_step_),
-  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, back_release_space_step_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, back_dispatch_step_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, back_search_space_step_statu_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Picking_process_statu_msg, back_completed_),
   1,
   9,
   0,
@@ -853,6 +854,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   6,
   7,
   8,
+  11,
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
   { 0, 8, sizeof(::message::Alloc_space_step_statu)},
@@ -874,7 +876,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT
   { 186, 194, sizeof(::message::Waitfor_leave_step_statu)},
   { 197, 205, sizeof(::message::Back_waitfor_leave_step_statu)},
   { 208, 228, sizeof(::message::Storing_process_statu_msg)},
-  { 243, 259, sizeof(::message::Picking_process_statu_msg)},
+  { 243, 260, sizeof(::message::Picking_process_statu_msg)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -996,7 +998,7 @@ void AddDescriptorsImpl() {
       "_step_statu\0221\n\nstep_statu\030\001 \001(\0162\023.messag"
       "e.Step_statu:\010eWaiting\022#\n\010car_info\030\002 \001(\013"
       "2\021.message.Car_info\022\023\n\013description\030\003 \001(\t"
-      "\"\374\005\n\031Storing_process_statu_msg\022%\n\tbase_i"
+      "\"\203\006\n\031Storing_process_statu_msg\022%\n\tbase_i"
       "nfo\030\001 \002(\0132\022.message.Base_info\022\023\n\013termina"
       "l_id\030\002 \002(\005\022\017\n\007license\030\003 \002(\t\0229\n\020alloc_spa"
       "ce_step\030\004 \001(\0132\037.message.Alloc_space_step"
@@ -1014,26 +1016,27 @@ void AddDescriptorsImpl() {
       "re_step_statu\022;\n\021back_measure_step\030\r \001(\013"
       "2 .message.Back_measure_step_statu\022C\n\025ba"
       "ck_alloc_space_step\030\016 \001(\0132$.message.Back"
-      "_alloc_space_step_statu\022\026\n\016back_complete"
-      "d\030\017 \001(\010\"\326\004\n\031Picking_process_statu_msg\022%\n"
-      "\tbase_info\030\001 \002(\0132\022.message.Base_info\022\023\n\013"
-      "terminal_id\030\002 \002(\005\022\017\n\007license\030\003 \002(\t\022;\n\021se"
-      "arch_space_step\030\004 \001(\0132 .message.Search_s"
-      "pace_step_statu\0228\n\rdispatch_step\030\005 \001(\0132!"
-      ".message.Dispatch_pick_step_statu\022=\n\022rel"
-      "ease_space_step\030\006 \001(\0132!.message.Release_"
-      "space_step_statu\022=\n\022waitfor_leave_step\030\007"
-      " \001(\0132!.message.Waitfor_leave_step_statu\022"
-      "\030\n\tcompleted\030\010 \001(\010:\005false\022G\n\027back_waitfo"
-      "r_leave_step\030\t \001(\0132&.message.Back_waitfo"
-      "r_leave_step_statu\022G\n\027back_release_space"
-      "_step\030\n \001(\0132&.message.Back_release_space"
-      "_step_statu\022K\n\034back_search_space_step_st"
-      "atu\030\013 \001(\0132%.message.Back_search_space_st"
-      "ep_statu"
+      "_alloc_space_step_statu\022\035\n\016back_complete"
+      "d\030\017 \001(\010:\005false\"\360\004\n\031Picking_process_statu"
+      "_msg\022%\n\tbase_info\030\001 \002(\0132\022.message.Base_i"
+      "nfo\022\023\n\013terminal_id\030\002 \002(\005\022\017\n\007license\030\003 \002("
+      "\t\022;\n\021search_space_step\030\004 \001(\0132 .message.S"
+      "earch_space_step_statu\0228\n\rdispatch_step\030"
+      "\005 \001(\0132!.message.Dispatch_pick_step_statu"
+      "\022=\n\022release_space_step\030\006 \001(\0132!.message.R"
+      "elease_space_step_statu\022=\n\022waitfor_leave"
+      "_step\030\007 \001(\0132!.message.Waitfor_leave_step"
+      "_statu\022\030\n\tcompleted\030\010 \001(\010:\005false\022G\n\027back"
+      "_waitfor_leave_step\030\t \001(\0132&.message.Back"
+      "_waitfor_leave_step_statu\022B\n\022back_dispat"
+      "ch_step\030\n \001(\0132&.message.Back_dispatch_pi"
+      "ck_step_statu\022K\n\034back_search_space_step_"
+      "statu\030\013 \001(\0132%.message.Back_search_space_"
+      "step_statu\022\035\n\016back_completed\030\014 \001(\010:\005fals"
+      "e"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 4328);
+      descriptor, 4361);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "process_message.proto", &protobuf_RegisterTypes);
   ::protobuf_message_5fbase_2eproto::AddDescriptors();
@@ -8477,7 +8480,7 @@ bool Storing_process_statu_msg::MergePartialFromCodedStream(
         break;
       }
 
-      // optional bool back_completed = 15;
+      // optional bool back_completed = 15 [default = false];
       case 15: {
         if (static_cast< ::google::protobuf::uint8>(tag) ==
             static_cast< ::google::protobuf::uint8>(120u /* 120 & 0xFF */)) {
@@ -8604,7 +8607,7 @@ void Storing_process_statu_msg::SerializeWithCachedSizes(
       14, *this->back_alloc_space_step_, output);
   }
 
-  // optional bool back_completed = 15;
+  // optional bool back_completed = 15 [default = false];
   if (cached_has_bits & 0x00004000u) {
     ::google::protobuf::internal::WireFormatLite::WriteBool(15, this->back_completed(), output);
   }
@@ -8722,7 +8725,7 @@ void Storing_process_statu_msg::SerializeWithCachedSizes(
         14, *this->back_alloc_space_step_, deterministic, target);
   }
 
-  // optional bool back_completed = 15;
+  // optional bool back_completed = 15 [default = false];
   if (cached_has_bits & 0x00004000u) {
     target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(15, this->back_completed(), target);
   }
@@ -8870,7 +8873,7 @@ size_t Storing_process_statu_msg::ByteSizeLong() const {
       total_size += 1 + 1;
     }
 
-    // optional bool back_completed = 15;
+    // optional bool back_completed = 15 [default = false];
     if (has_back_completed()) {
       total_size += 1 + 1;
     }
@@ -9028,8 +9031,8 @@ void Picking_process_statu_msg::InitAsDefaultInstance() {
       ::message::Waitfor_leave_step_statu::internal_default_instance());
   ::message::_Picking_process_statu_msg_default_instance_._instance.get_mutable()->back_waitfor_leave_step_ = const_cast< ::message::Back_waitfor_leave_step_statu*>(
       ::message::Back_waitfor_leave_step_statu::internal_default_instance());
-  ::message::_Picking_process_statu_msg_default_instance_._instance.get_mutable()->back_release_space_step_ = const_cast< ::message::Back_release_space_step_statu*>(
-      ::message::Back_release_space_step_statu::internal_default_instance());
+  ::message::_Picking_process_statu_msg_default_instance_._instance.get_mutable()->back_dispatch_step_ = const_cast< ::message::Back_dispatch_pick_step_statu*>(
+      ::message::Back_dispatch_pick_step_statu::internal_default_instance());
   ::message::_Picking_process_statu_msg_default_instance_._instance.get_mutable()->back_search_space_step_statu_ = const_cast< ::message::Back_search_space_step_statu*>(
       ::message::Back_search_space_step_statu::internal_default_instance());
 }
@@ -9047,8 +9050,9 @@ const int Picking_process_statu_msg::kReleaseSpaceStepFieldNumber;
 const int Picking_process_statu_msg::kWaitforLeaveStepFieldNumber;
 const int Picking_process_statu_msg::kCompletedFieldNumber;
 const int Picking_process_statu_msg::kBackWaitforLeaveStepFieldNumber;
-const int Picking_process_statu_msg::kBackReleaseSpaceStepFieldNumber;
+const int Picking_process_statu_msg::kBackDispatchStepFieldNumber;
 const int Picking_process_statu_msg::kBackSearchSpaceStepStatuFieldNumber;
+const int Picking_process_statu_msg::kBackCompletedFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 Picking_process_statu_msg::Picking_process_statu_msg()
@@ -9099,10 +9103,10 @@ Picking_process_statu_msg::Picking_process_statu_msg(const Picking_process_statu
   } else {
     back_waitfor_leave_step_ = NULL;
   }
-  if (from.has_back_release_space_step()) {
-    back_release_space_step_ = new ::message::Back_release_space_step_statu(*from.back_release_space_step_);
+  if (from.has_back_dispatch_step()) {
+    back_dispatch_step_ = new ::message::Back_dispatch_pick_step_statu(*from.back_dispatch_step_);
   } else {
-    back_release_space_step_ = NULL;
+    back_dispatch_step_ = NULL;
   }
   if (from.has_back_search_space_step_statu()) {
     back_search_space_step_statu_ = new ::message::Back_search_space_step_statu(*from.back_search_space_step_statu_);
@@ -9110,8 +9114,8 @@ Picking_process_statu_msg::Picking_process_statu_msg(const Picking_process_statu
     back_search_space_step_statu_ = NULL;
   }
   ::memcpy(&terminal_id_, &from.terminal_id_,
-    static_cast<size_t>(reinterpret_cast<char*>(&completed_) -
-    reinterpret_cast<char*>(&terminal_id_)) + sizeof(completed_));
+    static_cast<size_t>(reinterpret_cast<char*>(&back_completed_) -
+    reinterpret_cast<char*>(&terminal_id_)) + sizeof(back_completed_));
   // @@protoc_insertion_point(copy_constructor:message.Picking_process_statu_msg)
 }
 
@@ -9119,8 +9123,8 @@ void Picking_process_statu_msg::SharedCtor() {
   _cached_size_ = 0;
   license_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   ::memset(&base_info_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&completed_) -
-      reinterpret_cast<char*>(&base_info_)) + sizeof(completed_));
+      reinterpret_cast<char*>(&back_completed_) -
+      reinterpret_cast<char*>(&base_info_)) + sizeof(back_completed_));
 }
 
 Picking_process_statu_msg::~Picking_process_statu_msg() {
@@ -9136,7 +9140,7 @@ void Picking_process_statu_msg::SharedDtor() {
   if (this != internal_default_instance()) delete release_space_step_;
   if (this != internal_default_instance()) delete waitfor_leave_step_;
   if (this != internal_default_instance()) delete back_waitfor_leave_step_;
-  if (this != internal_default_instance()) delete back_release_space_step_;
+  if (this != internal_default_instance()) delete back_dispatch_step_;
   if (this != internal_default_instance()) delete back_search_space_step_statu_;
 }
 
@@ -9200,18 +9204,18 @@ void Picking_process_statu_msg::Clear() {
       back_waitfor_leave_step_->Clear();
     }
     if (cached_has_bits & 0x00000080u) {
-      GOOGLE_DCHECK(back_release_space_step_ != NULL);
-      back_release_space_step_->Clear();
+      GOOGLE_DCHECK(back_dispatch_step_ != NULL);
+      back_dispatch_step_->Clear();
     }
   }
   if (cached_has_bits & 0x00000100u) {
     GOOGLE_DCHECK(back_search_space_step_statu_ != NULL);
     back_search_space_step_statu_->Clear();
   }
-  if (cached_has_bits & 1536u) {
+  if (cached_has_bits & 3584u) {
     ::memset(&terminal_id_, 0, static_cast<size_t>(
-        reinterpret_cast<char*>(&completed_) -
-        reinterpret_cast<char*>(&terminal_id_)) + sizeof(completed_));
+        reinterpret_cast<char*>(&back_completed_) -
+        reinterpret_cast<char*>(&terminal_id_)) + sizeof(back_completed_));
   }
   _has_bits_.Clear();
   _internal_metadata_.Clear();
@@ -9343,12 +9347,12 @@ bool Picking_process_statu_msg::MergePartialFromCodedStream(
         break;
       }
 
-      // optional .message.Back_release_space_step_statu back_release_space_step = 10;
+      // optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
       case 10: {
         if (static_cast< ::google::protobuf::uint8>(tag) ==
             static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
-               input, mutable_back_release_space_step()));
+               input, mutable_back_dispatch_step()));
         } else {
           goto handle_unusual;
         }
@@ -9367,6 +9371,20 @@ bool Picking_process_statu_msg::MergePartialFromCodedStream(
         break;
       }
 
+      // optional bool back_completed = 12 [default = false];
+      case 12: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(96u /* 96 & 0xFF */)) {
+          set_has_back_completed();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &back_completed_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
       default: {
       handle_unusual:
         if (tag == 0) {
@@ -9450,10 +9468,10 @@ void Picking_process_statu_msg::SerializeWithCachedSizes(
       9, *this->back_waitfor_leave_step_, output);
   }
 
-  // optional .message.Back_release_space_step_statu back_release_space_step = 10;
+  // optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
   if (cached_has_bits & 0x00000080u) {
     ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      10, *this->back_release_space_step_, output);
+      10, *this->back_dispatch_step_, output);
   }
 
   // optional .message.Back_search_space_step_statu back_search_space_step_statu = 11;
@@ -9462,6 +9480,11 @@ void Picking_process_statu_msg::SerializeWithCachedSizes(
       11, *this->back_search_space_step_statu_, output);
   }
 
+  // optional bool back_completed = 12 [default = false];
+  if (cached_has_bits & 0x00000800u) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(12, this->back_completed(), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
@@ -9540,11 +9563,11 @@ void Picking_process_statu_msg::SerializeWithCachedSizes(
         9, *this->back_waitfor_leave_step_, deterministic, target);
   }
 
-  // optional .message.Back_release_space_step_statu back_release_space_step = 10;
+  // optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
   if (cached_has_bits & 0x00000080u) {
     target = ::google::protobuf::internal::WireFormatLite::
       InternalWriteMessageToArray(
-        10, *this->back_release_space_step_, deterministic, target);
+        10, *this->back_dispatch_step_, deterministic, target);
   }
 
   // optional .message.Back_search_space_step_statu back_search_space_step_statu = 11;
@@ -9554,6 +9577,11 @@ void Picking_process_statu_msg::SerializeWithCachedSizes(
         11, *this->back_search_space_step_statu_, deterministic, target);
   }
 
+  // optional bool back_completed = 12 [default = false];
+  if (cached_has_bits & 0x00000800u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(12, this->back_completed(), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
@@ -9653,11 +9681,11 @@ size_t Picking_process_statu_msg::ByteSizeLong() const {
           *this->back_waitfor_leave_step_);
     }
 
-    // optional .message.Back_release_space_step_statu back_release_space_step = 10;
-    if (has_back_release_space_step()) {
+    // optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
+    if (has_back_dispatch_step()) {
       total_size += 1 +
         ::google::protobuf::internal::WireFormatLite::MessageSize(
-          *this->back_release_space_step_);
+          *this->back_dispatch_step_);
     }
 
   }
@@ -9668,11 +9696,18 @@ size_t Picking_process_statu_msg::ByteSizeLong() const {
         *this->back_search_space_step_statu_);
   }
 
-  // optional bool completed = 8 [default = false];
-  if (has_completed()) {
-    total_size += 1 + 1;
-  }
+  if (_has_bits_[8 / 32] & 3072u) {
+    // optional bool completed = 8 [default = false];
+    if (has_completed()) {
+      total_size += 1 + 1;
+    }
+
+    // optional bool back_completed = 12 [default = false];
+    if (has_back_completed()) {
+      total_size += 1 + 1;
+    }
 
+  }
   int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
   _cached_size_ = cached_size;
@@ -9727,10 +9762,10 @@ void Picking_process_statu_msg::MergeFrom(const Picking_process_statu_msg& from)
       mutable_back_waitfor_leave_step()->::message::Back_waitfor_leave_step_statu::MergeFrom(from.back_waitfor_leave_step());
     }
     if (cached_has_bits & 0x00000080u) {
-      mutable_back_release_space_step()->::message::Back_release_space_step_statu::MergeFrom(from.back_release_space_step());
+      mutable_back_dispatch_step()->::message::Back_dispatch_pick_step_statu::MergeFrom(from.back_dispatch_step());
     }
   }
-  if (cached_has_bits & 1792u) {
+  if (cached_has_bits & 3840u) {
     if (cached_has_bits & 0x00000100u) {
       mutable_back_search_space_step_statu()->::message::Back_search_space_step_statu::MergeFrom(from.back_search_space_step_statu());
     }
@@ -9740,6 +9775,9 @@ void Picking_process_statu_msg::MergeFrom(const Picking_process_statu_msg& from)
     if (cached_has_bits & 0x00000400u) {
       completed_ = from.completed_;
     }
+    if (cached_has_bits & 0x00000800u) {
+      back_completed_ = from.back_completed_;
+    }
     _has_bits_[0] |= cached_has_bits;
   }
 }
@@ -9779,10 +9817,11 @@ void Picking_process_statu_msg::InternalSwap(Picking_process_statu_msg* other) {
   swap(release_space_step_, other->release_space_step_);
   swap(waitfor_leave_step_, other->waitfor_leave_step_);
   swap(back_waitfor_leave_step_, other->back_waitfor_leave_step_);
-  swap(back_release_space_step_, other->back_release_space_step_);
+  swap(back_dispatch_step_, other->back_dispatch_step_);
   swap(back_search_space_step_statu_, other->back_search_space_step_statu_);
   swap(terminal_id_, other->terminal_id_);
   swap(completed_, other->completed_);
+  swap(back_completed_, other->back_completed_);
   swap(_has_bits_[0], other->_has_bits_[0]);
   _internal_metadata_.Swap(&other->_internal_metadata_);
   swap(_cached_size_, other->_cached_size_);

+ 81 - 47
message/process_message.pb.h

@@ -2969,7 +2969,7 @@ class Storing_process_statu_msg : public ::google::protobuf::Message /* @@protoc
   bool completed() const;
   void set_completed(bool value);
 
-  // optional bool back_completed = 15;
+  // optional bool back_completed = 15 [default = false];
   bool has_back_completed() const;
   void clear_back_completed();
   static const int kBackCompletedFieldNumber = 15;
@@ -3193,14 +3193,14 @@ class Picking_process_statu_msg : public ::google::protobuf::Message /* @@protoc
   ::message::Back_waitfor_leave_step_statu* mutable_back_waitfor_leave_step();
   void set_allocated_back_waitfor_leave_step(::message::Back_waitfor_leave_step_statu* back_waitfor_leave_step);
 
-  // optional .message.Back_release_space_step_statu back_release_space_step = 10;
-  bool has_back_release_space_step() const;
-  void clear_back_release_space_step();
-  static const int kBackReleaseSpaceStepFieldNumber = 10;
-  const ::message::Back_release_space_step_statu& back_release_space_step() const;
-  ::message::Back_release_space_step_statu* release_back_release_space_step();
-  ::message::Back_release_space_step_statu* mutable_back_release_space_step();
-  void set_allocated_back_release_space_step(::message::Back_release_space_step_statu* back_release_space_step);
+  // optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
+  bool has_back_dispatch_step() const;
+  void clear_back_dispatch_step();
+  static const int kBackDispatchStepFieldNumber = 10;
+  const ::message::Back_dispatch_pick_step_statu& back_dispatch_step() const;
+  ::message::Back_dispatch_pick_step_statu* release_back_dispatch_step();
+  ::message::Back_dispatch_pick_step_statu* mutable_back_dispatch_step();
+  void set_allocated_back_dispatch_step(::message::Back_dispatch_pick_step_statu* back_dispatch_step);
 
   // optional .message.Back_search_space_step_statu back_search_space_step_statu = 11;
   bool has_back_search_space_step_statu() const;
@@ -3225,6 +3225,13 @@ class Picking_process_statu_msg : public ::google::protobuf::Message /* @@protoc
   bool completed() const;
   void set_completed(bool value);
 
+  // optional bool back_completed = 12 [default = false];
+  bool has_back_completed() const;
+  void clear_back_completed();
+  static const int kBackCompletedFieldNumber = 12;
+  bool back_completed() const;
+  void set_back_completed(bool value);
+
   // @@protoc_insertion_point(class_scope:message.Picking_process_statu_msg)
  private:
   void set_has_base_info();
@@ -3245,10 +3252,12 @@ class Picking_process_statu_msg : public ::google::protobuf::Message /* @@protoc
   void clear_has_completed();
   void set_has_back_waitfor_leave_step();
   void clear_has_back_waitfor_leave_step();
-  void set_has_back_release_space_step();
-  void clear_has_back_release_space_step();
+  void set_has_back_dispatch_step();
+  void clear_has_back_dispatch_step();
   void set_has_back_search_space_step_statu();
   void clear_has_back_search_space_step_statu();
+  void set_has_back_completed();
+  void clear_has_back_completed();
 
   // helper for ByteSizeLong()
   size_t RequiredFieldsByteSizeFallback() const;
@@ -3263,10 +3272,11 @@ class Picking_process_statu_msg : public ::google::protobuf::Message /* @@protoc
   ::message::Release_space_step_statu* release_space_step_;
   ::message::Waitfor_leave_step_statu* waitfor_leave_step_;
   ::message::Back_waitfor_leave_step_statu* back_waitfor_leave_step_;
-  ::message::Back_release_space_step_statu* back_release_space_step_;
+  ::message::Back_dispatch_pick_step_statu* back_dispatch_step_;
   ::message::Back_search_space_step_statu* back_search_space_step_statu_;
   ::google::protobuf::int32 terminal_id_;
   bool completed_;
+  bool back_completed_;
   friend struct ::protobuf_process_5fmessage_2eproto::TableStruct;
   friend void ::protobuf_process_5fmessage_2eproto::InitDefaultsPicking_process_statu_msgImpl();
 };
@@ -6788,7 +6798,7 @@ inline void Storing_process_statu_msg::set_allocated_back_alloc_space_step(::mes
   // @@protoc_insertion_point(field_set_allocated:message.Storing_process_statu_msg.back_alloc_space_step)
 }
 
-// optional bool back_completed = 15;
+// optional bool back_completed = 15 [default = false];
 inline bool Storing_process_statu_msg::has_back_completed() const {
   return (_has_bits_[0] & 0x00004000u) != 0;
 }
@@ -7247,58 +7257,58 @@ inline void Picking_process_statu_msg::set_allocated_back_waitfor_leave_step(::m
   // @@protoc_insertion_point(field_set_allocated:message.Picking_process_statu_msg.back_waitfor_leave_step)
 }
 
-// optional .message.Back_release_space_step_statu back_release_space_step = 10;
-inline bool Picking_process_statu_msg::has_back_release_space_step() const {
+// optional .message.Back_dispatch_pick_step_statu back_dispatch_step = 10;
+inline bool Picking_process_statu_msg::has_back_dispatch_step() const {
   return (_has_bits_[0] & 0x00000080u) != 0;
 }
-inline void Picking_process_statu_msg::set_has_back_release_space_step() {
+inline void Picking_process_statu_msg::set_has_back_dispatch_step() {
   _has_bits_[0] |= 0x00000080u;
 }
-inline void Picking_process_statu_msg::clear_has_back_release_space_step() {
+inline void Picking_process_statu_msg::clear_has_back_dispatch_step() {
   _has_bits_[0] &= ~0x00000080u;
 }
-inline void Picking_process_statu_msg::clear_back_release_space_step() {
-  if (back_release_space_step_ != NULL) back_release_space_step_->Clear();
-  clear_has_back_release_space_step();
-}
-inline const ::message::Back_release_space_step_statu& Picking_process_statu_msg::back_release_space_step() const {
-  const ::message::Back_release_space_step_statu* p = back_release_space_step_;
-  // @@protoc_insertion_point(field_get:message.Picking_process_statu_msg.back_release_space_step)
-  return p != NULL ? *p : *reinterpret_cast<const ::message::Back_release_space_step_statu*>(
-      &::message::_Back_release_space_step_statu_default_instance_);
-}
-inline ::message::Back_release_space_step_statu* Picking_process_statu_msg::release_back_release_space_step() {
-  // @@protoc_insertion_point(field_release:message.Picking_process_statu_msg.back_release_space_step)
-  clear_has_back_release_space_step();
-  ::message::Back_release_space_step_statu* temp = back_release_space_step_;
-  back_release_space_step_ = NULL;
+inline void Picking_process_statu_msg::clear_back_dispatch_step() {
+  if (back_dispatch_step_ != NULL) back_dispatch_step_->Clear();
+  clear_has_back_dispatch_step();
+}
+inline const ::message::Back_dispatch_pick_step_statu& Picking_process_statu_msg::back_dispatch_step() const {
+  const ::message::Back_dispatch_pick_step_statu* p = back_dispatch_step_;
+  // @@protoc_insertion_point(field_get:message.Picking_process_statu_msg.back_dispatch_step)
+  return p != NULL ? *p : *reinterpret_cast<const ::message::Back_dispatch_pick_step_statu*>(
+      &::message::_Back_dispatch_pick_step_statu_default_instance_);
+}
+inline ::message::Back_dispatch_pick_step_statu* Picking_process_statu_msg::release_back_dispatch_step() {
+  // @@protoc_insertion_point(field_release:message.Picking_process_statu_msg.back_dispatch_step)
+  clear_has_back_dispatch_step();
+  ::message::Back_dispatch_pick_step_statu* temp = back_dispatch_step_;
+  back_dispatch_step_ = NULL;
   return temp;
 }
-inline ::message::Back_release_space_step_statu* Picking_process_statu_msg::mutable_back_release_space_step() {
-  set_has_back_release_space_step();
-  if (back_release_space_step_ == NULL) {
-    back_release_space_step_ = new ::message::Back_release_space_step_statu;
+inline ::message::Back_dispatch_pick_step_statu* Picking_process_statu_msg::mutable_back_dispatch_step() {
+  set_has_back_dispatch_step();
+  if (back_dispatch_step_ == NULL) {
+    back_dispatch_step_ = new ::message::Back_dispatch_pick_step_statu;
   }
-  // @@protoc_insertion_point(field_mutable:message.Picking_process_statu_msg.back_release_space_step)
-  return back_release_space_step_;
+  // @@protoc_insertion_point(field_mutable:message.Picking_process_statu_msg.back_dispatch_step)
+  return back_dispatch_step_;
 }
-inline void Picking_process_statu_msg::set_allocated_back_release_space_step(::message::Back_release_space_step_statu* back_release_space_step) {
+inline void Picking_process_statu_msg::set_allocated_back_dispatch_step(::message::Back_dispatch_pick_step_statu* back_dispatch_step) {
   ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
   if (message_arena == NULL) {
-    delete back_release_space_step_;
+    delete back_dispatch_step_;
   }
-  if (back_release_space_step) {
+  if (back_dispatch_step) {
     ::google::protobuf::Arena* submessage_arena = NULL;
     if (message_arena != submessage_arena) {
-      back_release_space_step = ::google::protobuf::internal::GetOwnedMessage(
-          message_arena, back_release_space_step, submessage_arena);
+      back_dispatch_step = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, back_dispatch_step, submessage_arena);
     }
-    set_has_back_release_space_step();
+    set_has_back_dispatch_step();
   } else {
-    clear_has_back_release_space_step();
+    clear_has_back_dispatch_step();
   }
-  back_release_space_step_ = back_release_space_step;
-  // @@protoc_insertion_point(field_set_allocated:message.Picking_process_statu_msg.back_release_space_step)
+  back_dispatch_step_ = back_dispatch_step;
+  // @@protoc_insertion_point(field_set_allocated:message.Picking_process_statu_msg.back_dispatch_step)
 }
 
 // optional .message.Back_search_space_step_statu back_search_space_step_statu = 11;
@@ -7355,6 +7365,30 @@ inline void Picking_process_statu_msg::set_allocated_back_search_space_step_stat
   // @@protoc_insertion_point(field_set_allocated:message.Picking_process_statu_msg.back_search_space_step_statu)
 }
 
+// optional bool back_completed = 12 [default = false];
+inline bool Picking_process_statu_msg::has_back_completed() const {
+  return (_has_bits_[0] & 0x00000800u) != 0;
+}
+inline void Picking_process_statu_msg::set_has_back_completed() {
+  _has_bits_[0] |= 0x00000800u;
+}
+inline void Picking_process_statu_msg::clear_has_back_completed() {
+  _has_bits_[0] &= ~0x00000800u;
+}
+inline void Picking_process_statu_msg::clear_back_completed() {
+  back_completed_ = false;
+  clear_has_back_completed();
+}
+inline bool Picking_process_statu_msg::back_completed() const {
+  // @@protoc_insertion_point(field_get:message.Picking_process_statu_msg.back_completed)
+  return back_completed_;
+}
+inline void Picking_process_statu_msg::set_back_completed(bool value) {
+  set_has_back_completed();
+  back_completed_ = value;
+  // @@protoc_insertion_point(field_set:message.Picking_process_statu_msg.back_completed)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__

+ 3 - 2
message/process_message.proto

@@ -149,7 +149,7 @@ message Storing_process_statu_msg
     optional Back_compare_step_statu            back_compare_step=12;
     optional Back_measure_step_statu            back_measure_step=13;
     optional Back_alloc_space_step_statu        back_alloc_space_step=14;
-    optional bool                               back_completed=15;
+    optional bool                               back_completed=15 [default=false];
 }
 
 //取车流程进度消息
@@ -164,6 +164,7 @@ message Picking_process_statu_msg
     optional Waitfor_leave_step_statu           waitfor_leave_step=7;
     optional bool                               completed=8 [default=false];
     optional Back_waitfor_leave_step_statu      back_waitfor_leave_step=9;
-    optional Back_release_space_step_statu      back_release_space_step=10;
+    optional Back_dispatch_pick_step_statu      back_dispatch_step=10;
     optional Back_search_space_step_statu       back_search_space_step_statu=11;
+    optional bool                               back_completed=12 [default=false];
 }

+ 3 - 0
parkspace/parkspace_excutor.cpp

@@ -109,6 +109,8 @@ Error_manager Parkspace_excutor::search_request(message::Parkspace_search_reques
     if(request.base_info().sender()!=message::eMain||request.base_info().receiver()!=message::eParkspace)
         return Error_manager(PARKSPACE_SEARCH_REQUEST_INVALID,MINOR_ERROR,"parkspace search request invalid");
 
+    request.set_command_key(create_key());
+
     if(m_search_table.find(request.command_key())==true)
         return Error_manager(PARKSPACE_SEARCH_REQUEST_REPEATED,MAJOR_ERROR," parkspace search request repeated");
     //设置超时,若没有设置,默认1000
@@ -202,6 +204,7 @@ Error_manager Parkspace_excutor::release_request(message::Parkspace_release_requ
         return Error_manager(PARKSPACE_RELEASE_REQUEST_INVALID,MINOR_ERROR,"parkspace release request invalid");
 
     request.set_command_key(create_key());
+
     if(m_release_table.find(request.command_key())==true)
         return Error_manager(PARKSPACE_RELEASE_REQUEST_REPEATED,MAJOR_ERROR," parkspace release request repeated");
     //设置超时,若没有设置,默认1000

+ 119 - 124
system/PickupProcessTask.cpp

@@ -22,7 +22,7 @@ PickupProcessTask::~PickupProcessTask()
 }
 Error_manager PickupProcessTask::init_task()
 {
-    reset_recv_msg();
+    reset_msg();
     //添加当前流程的任务取消标志位到异常处理模块
     m_cancel_condition.reset(false, false, false);
     Error_manager code=Exception_solver::get_instance_pointer()->add_task_cancel_condition(m_car_info.license(),this);
@@ -50,7 +50,7 @@ Error_manager PickupProcessTask::init_task()
 
 }
 
-void PickupProcessTask::reset_recv_msg()
+void PickupProcessTask::reset_msg()
 {
     m_search_request_msg=message::Parkspace_search_request_msg();
     m_search_response_msg=message::Parkspace_search_response_msg();
@@ -110,12 +110,10 @@ Error_manager PickupProcessTask::search_space_step()
     base_info_request.set_receiver(message::eParkspace);
     base_info_request.set_timeout_ms(2000);
 
-    message::Parkspace_search_request_msg request;
-    request.set_command_key(create_key());
-    request.mutable_base_info()->CopyFrom(base_info_request);
-    request.mutable_car_info()->CopyFrom(m_car_info);
+    m_search_request_msg.mutable_base_info()->CopyFrom(base_info_request);
+    m_search_request_msg.mutable_car_info()->CopyFrom(m_car_info);
 
-    code = Parkspace_excutor::get_instance_pointer()->search_request(request,
+    code = Parkspace_excutor::get_instance_pointer()->search_request(m_search_request_msg,
             m_search_response_msg,m_cancel_condition);
     return code;
 }
@@ -144,10 +142,16 @@ Error_manager PickupProcessTask::next_step()
             m_current_step_type=(m_current_step_statu==message::eFinished)?message::eWait_step:message::eBackSearch_step;
             break;
         case message::eWait_step:
-            m_current_step_type=(m_current_step_statu==message::eFinished)?message::eComplete:message::eBackDispatch_step;
+            m_current_step_type=(m_current_step_statu==message::eFinished)?message::eRelease_step:message::eBackDispatch_step;
+            break;
+        case message::eRelease_step:
+            m_current_step_type=(m_current_step_statu==message::eFinished)?message::eComplete:message::eBackWait_step;
             break;
         case message::eComplete:
             break;
+        case message::eBackWait_step:
+            m_current_step_type=message::eBackDispatch_step;
+            break;
         case message::eBackDispatch_step:
             m_current_step_type=message::eBackSearch_step;
             break;
@@ -157,7 +161,7 @@ Error_manager PickupProcessTask::next_step()
         case message::eBackComplete:
             break;
         default:
-            LOG(ERROR)<<"  取车流程未知步骤 : "<<message::Step_type_Name(m_current_step_type);
+            LOG(ERROR)<<"-------  取  ------- 下一步失败,当前步骤未知: "<<message::Step_type_Name(m_current_step_type);
             break;
     }
     return SUCCESS;
@@ -172,6 +176,7 @@ void PickupProcessTask::Main()
         //第一步查询
         if(m_current_step_type==message::eSearch_step)
         {
+            updata_step_statu(message::eWorking);
             code=search_space_step();
             message::Error_manager error_msg;
             error_msg.set_error_code(code.get_error_code());
@@ -180,113 +185,118 @@ void PickupProcessTask::Main()
             Communication_message msg;
             msg.reset(m_command_response_msg.base_info(),m_command_response_msg.SerializeAsString());
             Message_communicator::get_instance_pointer()->send_msg(&msg);
-            LOG_IF(ERROR, code != SUCCESS) << "查询失败,取车终端:"<<m_terminor_id
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+
+            LOG_IF(ERROR, code != SUCCESS) << "-------  取  -------查询失败,取车终端:"<<m_terminor_id
                                            <<", 车牌号:"<<m_car_info.license()<<code.get_error_description();
-            LOG_IF(WARNING,code==SUCCESS)<<"查询成功,终端号:"<<m_terminor_id
-                                 <<", 车牌号:"<<m_car_info.license();
-            m_current_step_type = (code != SUCCESS) ?  message::eBackComplete :  message::eDispatch_step;
         }
 
         if(m_current_step_type== message::eDispatch_step)
         {
+            updata_step_statu(message::eWorking);
             code=dispatch_step();
             usleep(1000*1000);
-            LOG_IF(ERROR, code != SUCCESS) << "取车调度失败,取车终端:"<<m_terminor_id
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+            LOG_IF(ERROR, code != SUCCESS) << "-------  取  -------取车调度失败,取车终端:"<<m_terminor_id
                                            <<", 车位id:"<<m_search_response_msg.car_position().parkspace_id()
                                            <<", 车位楼层:"<<m_search_response_msg.car_position().floor()
                                            <<", 车位序号:"<<m_search_response_msg.car_position().index()
                                            <<", 车牌号:"<<m_car_info.license()
                                            <<", 库内车牌号:"<<m_search_response_msg.car_position().car_info().license()
                                            <<code.get_error_description();
-            m_current_step_type = (code != SUCCESS) ?  message::eBackDispatch_step :  message::eWait_step;
         }
         if(m_current_step_type== message::eWait_step)
         {
+            updata_step_statu(message::eWorking);
             code=wait_for_leave_step();
-            LOG_IF(ERROR, code != SUCCESS) << "等待车辆离开失败,取车终端:"<<m_terminor_id
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+            LOG_IF(ERROR, code != SUCCESS) << "-------  取  -------等待车辆离开失败,取车终端:"<<m_terminor_id
                                            <<", 车牌号:"<<m_car_info.license();
-            m_current_step_type = (code != SUCCESS) ?  message::eBackWait_step :  message::eRelease_step;
         }
         if(m_current_step_type== message::eRelease_step)
         {
+            updata_step_statu(message::eWorking);
             code=release_space_step();
-            LOG_IF(ERROR, code != SUCCESS) << "取车释放车位失败,取车终端:"<<m_terminor_id
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+            LOG_IF(ERROR, code != SUCCESS) << "-------  取  -------取车释放车位失败,取车终端:"<<m_terminor_id
                                            <<", 车牌号:"<<m_car_info.license();
-            if(code!=SUCCESS)
-            {
-                //升级故障,急停
-                break;
-            }
-            else
-            {
-                m_current_step_type= message::eComplete;
-            }
         }
         if(m_current_step_type==message::eComplete) {
-            //至少发送一次流程完成状态
-            updata_step_statu_msg();
-            Command_accepter::get_instance_pointer()->post_process_statu(m_process_msg);
+            //流程结束前,保证至少发送一次流程完成状态
+            updata_step_statu(message::eFinished);
             break;
         }
         if(m_current_step_type== message::eBackWait_step)
         {
+            updata_step_statu(message::eWorking);
             code=back_wait_for_leave_step();
-            if(code!=SUCCESS)
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+
+            if(code.get_error_level()>=MAJOR_ERROR)
             {
                 //提升错误等级为四级
-                break;
-            }
-            else
-            {
-                m_current_step_type= message::eBackDispatch_step;
+                LOG(ERROR)<<"-------  取  -------  回退等待失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                Exception_solver::get_instance_pointer()->solve_exception(code,this);
+                continue;
             }
         }
         if(m_current_step_type== message::eBackDispatch_step)
         {
+            updata_step_statu(message::eWorking);
             code=back_dispatch_step();
-            if(code!=SUCCESS)
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+            if(code.get_error_level()>=MAJOR_ERROR)
             {
                 //提升错误等级为四级
-                break;
-            }
-            else
-            {
-                m_current_step_type= message::eBackSearch_step;
+                LOG(ERROR)<<"-------  取  -------  回退调度失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                Exception_solver::get_instance_pointer()->solve_exception(code,this);
+                continue;
             }
         }
         if(m_current_step_type== message::eBackSearch_step)
         {
+            updata_step_statu(message::eWorking);
             code=back_search_space_step();
-            if(code!=SUCCESS)
+            code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
+            if(code.get_error_level()>=MAJOR_ERROR)
             {
-                //提升错误等级为四级,急停
-                break;
-            }
-            else
-            {
-                m_current_step_type= message::eBackComplete;
+                //提升错误等级为四级
+                LOG(ERROR)<<"-------  取  -------  回退调度失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                Exception_solver::get_instance_pointer()->solve_exception(code,this);
+                continue;
             }
         }
         if(m_current_step_type== message::eBackComplete)
             break;
+        next_step();
 
     }
 
     /*
-      * 跳出循环后,判断状态,是否正常结束, 循环跳出状态只有可能是 eBackComplete(异常结束),eComplete(正常结束)
-      */
+     * 跳出循环后,判断状态,是否正常结束, 循环跳出状态只有可能是 eBackComplete(异常结束),eComplete(正常结束),任务取消状态
+     */
+    updata_step_statu(message::eFinished);
+    publish_step_status();
+
+    if(m_cancel_condition.wait_for_millisecond(1)==true) {
+        LOG(ERROR) << "-------  取  -------取车任务被强制取消,车牌号:" << m_car_info.license()
+                   << ",  终端号:" << m_terminor_id;
+        usleep(1000*200);
+        return ;
+    }
+
     if(m_current_step_type== message::eBackComplete)
     {
         //异常结束
-        usleep(1000*1000);
-        LOG(ERROR)<<"异常取车,回退结束"<<"车牌号:"<<m_car_info.license()
+        usleep(1000*200);
+        LOG(ERROR)<<"-------  取  -------异常取车,回退结束"<<"车牌号:"<<m_car_info.license()
                   <<",xxxxxxxxxxxxxx  终端:"<<m_terminor_id<<"  xxxxxxxxxxxxxx";
     }
     if(m_current_step_type== message::eComplete)
     {
         //正常结束
-        usleep(1000*1000);
-        LOG(WARNING)<<"取车结束,"<<"车牌号:"<<m_car_info.license()
+        usleep(1000*200);
+        LOG(INFO)<<"-------  取  -------取车结束,"<<"车牌号:"<<m_car_info.license()
                  <<",--------------  终端:"<<m_terminor_id<<"  --------------";
     }
 
@@ -322,10 +332,6 @@ Error_manager PickupProcessTask::dispatch_step()
     m_dispatch_request_msg.set_parkspace_id(space_info.parkspace_id());
     m_dispatch_request_msg.set_terminal_id(m_terminor_id);
 
-    m_dispatch_request_msg.set_command_key(create_key());
-
-
-
     code=Dispatch_excutor::get_instance_pointer()->dispatch_request(m_dispatch_request_msg,m_dispatch_response_msg,m_cancel_condition);
     if(code!=SUCCESS)
         return code;
@@ -345,6 +351,7 @@ Error_manager PickupProcessTask::back_dispatch_step()
     /*
      * 关门,搬运将车从出口抓回去
      */
+    usleep(1000*2000);
     return SUCCESS;
 }
 
@@ -353,6 +360,7 @@ Error_manager PickupProcessTask::back_dispatch_step()
  */
 Error_manager PickupProcessTask::wait_for_leave_step()
 {
+    usleep(1000*1000);
     return SUCCESS;
 }
 /*
@@ -382,26 +390,21 @@ Error_manager PickupProcessTask::release_space_step()
     if(code!=SUCCESS)
         return code;
 
-    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(5000); //测量超时1s
-    request.mutable_base_info()->CopyFrom(base_info);
+    m_release_request_msg.mutable_base_info()->CopyFrom(base_info);
 
     message::Parkspace_info space_info=m_search_response_msg.car_position();
-    request.mutable_release_space_info()->CopyFrom(space_info);
-
-    request.set_command_key(create_key());
+    m_release_request_msg.mutable_release_space_info()->CopyFrom(space_info);
 
-
-    message::Parkspace_release_response_msg release_response;
-    code=Parkspace_excutor::get_instance_pointer()->release_request(request,release_response,m_cancel_condition);
+    code=Parkspace_excutor::get_instance_pointer()->release_request(m_release_request_msg,m_release_response_msg,m_cancel_condition);
     if(code!=SUCCESS)
         return code;
 
-    if(release_response.error_manager().error_code()==0) {
+    if(m_release_response_msg.error_manager().error_code()==0) {
         return SUCCESS;
     }
     else
@@ -414,7 +417,6 @@ void PickupProcessTask::publish_step_status() {
      * 通过communicator 发布状态
      */
     if (Command_accepter::get_instance_pointer()) {
-        updata_step_statu_msg();
         Command_accepter::get_instance_pointer()->post_process_statu(m_process_msg);
     }
 }
@@ -422,76 +424,69 @@ void PickupProcessTask::publish_step_status() {
 /*
      * 根据当前流程状态,生成状态消息
      */
-void PickupProcessTask::updata_step_statu_msg()
+void PickupProcessTask::updata_step_statu(message::Step_statu statu)
 {
-    message::Search_space_step_statu            search_step_statu;
-    message::Dispatch_pick_step_statu           dispatch_step_statu;
-    message::Waitfor_leave_step_statu           wait_step_statu;
-    message::Release_space_step_statu           release_step_statu;
-    search_step_statu.set_step_statu(message::eWaiting);
-    dispatch_step_statu.set_step_statu(message::eWaiting);
-    wait_step_statu.set_step_statu(message::eWaiting);
-    release_step_statu.set_step_statu(message::eWaiting);
-
+    m_current_step_statu=statu;
+    std::lock_guard<std::mutex>         lock(m_process_msg_lock);
     switch (m_current_step_type) {
-        case  message::eSearch_step: {
-            search_step_statu.set_step_statu(message::eWorking);
-            if(m_current_step_type==message::eSearch_step)
-                break;
+        case message::eSearch_step: {
+            message::Search_space_step_statu search_step_statu;
+            search_step_statu.set_step_statu(statu);
+            m_process_msg.mutable_search_space_step()->CopyFrom(search_step_statu);
+            break;
         }
-        case  message::eDispatch_step: {
-            search_step_statu.set_step_statu(message::eFinished);
-            dispatch_step_statu.set_step_statu(message::eWorking);
+        case message::eDispatch_step: {
+            message::Dispatch_pick_step_statu dispatch_step_statu;
+            dispatch_step_statu.set_step_statu(statu);
             dispatch_step_statu.mutable_space_info()->CopyFrom(m_search_response_msg.car_position());
-            if(m_current_step_type==message::eDispatch_step)
-                break;
-        }
-        case  message::eWait_step: {
-            dispatch_step_statu.set_step_statu(message::eFinished);
-            wait_step_statu.set_step_statu(message::eWorking);
-            wait_step_statu.mutable_car_info()->CopyFrom(m_car_info);
-            if(m_current_step_type== message::eWait_step)
-                break;
+            m_process_msg.mutable_dispatch_step()->CopyFrom(dispatch_step_statu);
+            break;
         }
-        case  message::eRelease_step:
+        case message::eWait_step:
         {
-            wait_step_statu.set_step_statu(message::eFinished);
-            release_step_statu.set_step_statu(message::eWorking);
+            message::Waitfor_leave_step_statu waitfor_leave_step;
+            waitfor_leave_step.set_step_statu(statu);
+            waitfor_leave_step.mutable_car_info()->CopyFrom(m_car_info);
+            m_process_msg.mutable_waitfor_leave_step()->CopyFrom(waitfor_leave_step);
+            break;
+        }
+        case  message::eRelease_step: {
+            message::Release_space_step_statu           release_step_statu;
+            release_step_statu.set_step_statu(statu);
             release_step_statu.mutable_space_info()->CopyFrom(m_search_response_msg.car_position());
-            if(m_current_step_type== message::eRelease_step)
-                break;
+            m_process_msg.mutable_release_space_step()->CopyFrom(release_step_statu);
+            break;
         }
         case  message::eComplete: {
-            release_step_statu.set_step_statu(message::eFinished);
-            if(m_current_step_type==message::eComplete)
-                break;
+            m_process_msg.set_completed(true);
+            break;
         }
-        case  message::eBackWait_step :{
-            wait_step_statu.set_step_statu(message::eError);
-            if(m_current_step_type== message::eBackWait_step)
-                break;
+        case  message::eBackWait_step: {
+            message::Back_waitfor_leave_step_statu back_waitfor_step_statu;
+            back_waitfor_step_statu.set_step_statu(statu);
+            back_waitfor_step_statu.mutable_car_info()->CopyFrom(m_car_info);
+            m_process_msg.mutable_back_waitfor_leave_step()->CopyFrom(back_waitfor_step_statu);
+            break;
         }
-        case message::eBackDispatch_step: {
-            dispatch_step_statu.set_step_statu(message::eError);
-            if(m_current_step_type==message::eBackDispatch_step)
-                break;
+        case  message::eBackDispatch_step: {
+            message::Back_dispatch_pick_step_statu   back_dispatch_step_statu;
+            back_dispatch_step_statu.set_step_statu(statu);
+            back_dispatch_step_statu.mutable_space_info()->CopyFrom(m_search_response_msg.car_position());
+            m_process_msg.mutable_back_dispatch_step()->CopyFrom(back_dispatch_step_statu);
+            break;
         }
-        case message::eBackSearch_step: {
-            search_step_statu.set_step_statu(message::eError);
-            if(m_current_step_type==message::eBackSearch_step)
-                break;
+        case  message::eBackSearch_step: {
+            message::Back_search_space_step_statu    back_search_step_statu;
+            back_search_step_statu.set_step_statu(statu);
+            back_search_step_statu.mutable_car_info()->CopyFrom(m_car_info);
+            m_process_msg.mutable_back_search_space_step_statu()->CopyFrom(back_search_step_statu);
+            break;
         }
-        case message::eBackComplete: {
-            release_step_statu.set_step_statu(message::eFinished);
-            if(m_current_step_type==message::eBackComplete)
-                break;
+        case  message::eBackComplete: {
+            m_process_msg.set_back_completed(true);
+            break;
         }
         default:
             break;
     }
-    m_process_msg.mutable_search_space_step()->CopyFrom(search_step_statu);
-    m_process_msg.mutable_dispatch_step()->CopyFrom(dispatch_step_statu);
-    m_process_msg.mutable_waitfor_leave_step()->CopyFrom(wait_step_statu);
-    m_process_msg.mutable_release_space_step()->CopyFrom(release_step_statu);
-
 }

+ 12 - 9
system/PickupProcessTask.h

@@ -18,7 +18,8 @@ public:
     virtual  ~PickupProcessTask();
 
     Error_manager init_task();
-    virtual tq::TaskCategory GetCategory() const{ return message::ePicking;}
+    // 获取任务类型
+    virtual message::Process_type get_process_type()const{return message::ePicking;};
 
     /*
      * 控制流程到下一步
@@ -60,19 +61,18 @@ protected:
      * 清除车位表中对应的车位
      */
     Error_manager release_space_step();
-    /*
-     * 回退清除车位表中对应的车位
-     */
-    Error_manager back_release_space_step();
 
 
     virtual void publish_step_status();
     /*
-     * 根据当前流程状态,生成状态消息
+     * 根据当前流程状态,修改状态消息
      */
-    void updata_step_statu_msg();
+    void updata_step_statu(message::Step_statu statu);
 
-    void reset_recv_msg();
+    /*
+     * 初始化 接收到的消息
+     */
+    void reset_msg();
 
 protected:
 
@@ -80,13 +80,16 @@ private:
     //查询到的车位信息
     message::Parkspace_search_request_msg                   m_search_request_msg;
     message::Parkspace_search_response_msg                  m_search_response_msg;
+
+    message::Parkspace_release_request_msg                  m_release_request_msg;
+    message::Parkspace_release_response_msg                 m_release_response_msg;
+
     //取车调度反馈信息
     message::Pickup_command_response_msg                    m_command_response_msg;
     message::Dispatch_request_msg                           m_dispatch_request_msg;
     message::Dispatch_response_msg                          m_dispatch_response_msg;
 
     message::Picking_process_statu_msg                      m_process_msg;
-
 };
 
 

+ 12 - 22
system/StoreProcessTask.cpp

@@ -26,7 +26,6 @@ StoreProcessTask::~StoreProcessTask()
 Error_manager StoreProcessTask::init_task(message::Locate_information locate_info)
 {
     reset_msg();
-
     m_locate_info=locate_info;
 
     //添加当前流程的任务取消标志位到异常处理模块
@@ -95,9 +94,6 @@ Error_manager StoreProcessTask::back_locate_step()
 {
     m_measure_request_msg=message::Measure_request_msg();
     m_measure_response_msg=message::Measure_response_msg();
-    int k=rand()%5;
-    if(k==0)
-        return Error_manager(ERROR,CRITICAL_ERROR,"回退测量对比失败");
     return SUCCESS;
 }
 
@@ -113,9 +109,6 @@ Error_manager StoreProcessTask::compare_step()
  */
 Error_manager StoreProcessTask::back_compare_step()
 {
-    int k=rand()%5;
-    if(k==0)
-        return Error_manager(ERROR,CRITICAL_ERROR,"回退检验对比失败");
     return SUCCESS;
 }
 
@@ -317,9 +310,6 @@ Error_manager StoreProcessTask::confirm_space_step()
  */
 Error_manager StoreProcessTask::back_alloc_space_step()
 {
-    int k=rand()%5;
-    if(k==0)
-        return Error_manager(ERROR,CRITICAL_ERROR,"回退车位分配失败");
     /*
     * 检查是否曾经分配过车位
     */
@@ -442,7 +432,7 @@ void StoreProcessTask::Main()
             Message_communicator::get_instance_pointer()->send_msg(&msg);
 
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
-            LOG_IF(ERROR, code != SUCCESS) << "分配失败:" <<m_car_info.license()<< code.get_error_description();
+            LOG_IF(WARNING, code != SUCCESS) << "------  停  ------- 分配失败:" <<m_car_info.license()<< code.get_error_description();
         }
 
         //第二步,测量
@@ -454,7 +444,7 @@ void StoreProcessTask::Main()
             usleep(1000 * 1000 );
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
 
-            LOG_IF(ERROR, code != SUCCESS) << "测量失败:" <<m_car_info.license()<< code.get_error_description();
+            LOG_IF(WARNING, code != SUCCESS) << "------  停  ------- 测量失败:" <<m_car_info.license()<< code.get_error_description();
         }
         if(m_current_step_type== message::eCompare_step)
         {
@@ -463,7 +453,7 @@ void StoreProcessTask::Main()
             usleep(500*1000);
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
 
-            LOG_IF(ERROR, code != SUCCESS) << "检验失败:"<<m_car_info.license() << code.get_error_description();
+            LOG_IF(WARNING, code != SUCCESS) << "------  停  ------- 检验失败:"<<m_car_info.license() << code.get_error_description();
         }
         //第二步,调度
         if (m_current_step_type ==  message::eDispatch_step)
@@ -473,7 +463,7 @@ void StoreProcessTask::Main()
             code = dispatch_step();
             usleep(1000 * 2000 );
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
-            LOG_IF(ERROR, code != SUCCESS) << "调度失败:"<<m_car_info.license() << code.get_error_description();
+            LOG_IF(WARNING, code != SUCCESS) << "------  停  ------- 调度失败:"<<m_car_info.license() << code.get_error_description();
         }
         //第三步,占据车位
         if (m_current_step_type ==  message::eConfirm_step)
@@ -482,7 +472,7 @@ void StoreProcessTask::Main()
             code = confirm_space_step();
             usleep(1000 * 1000);
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
-            LOG_IF(ERROR, code != SUCCESS) << "终端号:" << m_terminor_id << "停车流程:" << code.get_error_description() <<
+            LOG_IF(WARNING, code != SUCCESS) << "------  停  ------- 占据车位失败,终端号:" << m_terminor_id << "停车流程:" << code.get_error_description() <<
                                            " 车位id :"
                                            << m_parcspace_alloc_response_msg.allocated_space_info().parkspace_id()
                                            << ",车牌:" << m_car_info.license()<<code.to_string();
@@ -513,7 +503,7 @@ void StoreProcessTask::Main()
             if(code.get_error_level()>=MAJOR_ERROR)
             {
                 //提升错误等级为四级
-                LOG(ERROR)<<" 回退调度失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                LOG(WARNING)<<" ------  停  ------- 回退调度失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
                 Exception_solver::get_instance_pointer()->solve_exception(code,this);
                 continue;
             }
@@ -527,7 +517,7 @@ void StoreProcessTask::Main()
             code!=SUCCESS?updata_step_statu(message::eError):updata_step_statu(message::eFinished);
             if(code.get_error_level()>=MAJOR_ERROR)
             {
-                LOG(ERROR)<<" 回退对比失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                LOG(WARNING)<<" ------  停  ------- 回退对比失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
                 Exception_solver::get_instance_pointer()->solve_exception(code,this);
                 LOG(WARNING)<<" 手动处理 结果对比,  继续 ..........车牌:"<<m_car_info.license();
                 continue;
@@ -543,7 +533,7 @@ void StoreProcessTask::Main()
             if(code.get_error_level()>=MAJOR_ERROR)
             {
                 //提升错误等级为四级
-                LOG(ERROR)<<" 回退测量失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                LOG(ERROR)<<" ------  停  ------- 回退测量失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
                 Exception_solver::get_instance_pointer()->solve_exception(code,this);
                 continue;
             }
@@ -557,7 +547,7 @@ void StoreProcessTask::Main()
             if(code.get_error_level()>=MAJOR_ERROR)
             {
                 //提升错误等级为四级
-                LOG(ERROR)<<" 回退分配车位失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
+                LOG(WARNING)<<" ------  停  ------- 回退分配车位失败 ------进入异常处理,  车牌号:"<<m_car_info.license();
                 Exception_solver::get_instance_pointer()->solve_exception(code,this);
                 continue;
             }
@@ -576,7 +566,7 @@ void StoreProcessTask::Main()
     publish_step_status();
 
     if(m_cancel_condition.wait_for_millisecond(1)==true) {
-        LOG(ERROR) << "停车任务被强制取消,车牌号:" << m_car_info.license()
+        LOG(ERROR) << "------  停  ------- 停车任务被强制取消,车牌号:" << m_car_info.license()
                    << ",  终端号:" << m_terminor_id;
         usleep(1000*200);
         return ;
@@ -586,14 +576,14 @@ void StoreProcessTask::Main()
     {
         //异常结束
         usleep(1000*200);
-        LOG(ERROR)<<"异常停车,回退结束"<<"车牌号:"<<m_car_info.license()
+        LOG(WARNING)<<"------  停  ------- 异常停车,回退结束"<<"车牌号:"<<m_car_info.license()
             <<",xxxxxxxxxxxxxx  终端:"<<m_terminor_id<<"  xxxxxxxxxxxxxx";
     }
     if(m_current_step_type== message::eComplete)
     {
         //正常结束
         usleep(1000*200);
-        LOG(INFO)<<"停车结束,"<<"车牌号:"<<m_car_info.license()
+        LOG(INFO)<<"------  停  ------- 停车结束,"<<"车牌号:"<<m_car_info.license()
             <<",--------------  终端:"<<m_terminor_id<<"  --------------";
     }
 }

+ 2 - 5
system/StoreProcessTask.h

@@ -18,11 +18,8 @@ public:
     StoreProcessTask(unsigned int command_id,message::Car_info car_info);
     virtual  ~StoreProcessTask();
     Error_manager init_task(message::Locate_information locate_info);
-
-    /*
-     * 获取任务类型
-     */
-    virtual tq::TaskCategory GetCategory() const{ return message::eStoring;}
+    // 获取任务类型
+    virtual message::Process_type get_process_type()const{return message::eStoring;}
 
     /*
      * 控制流程到下一步

+ 6 - 6
system/command_manager.cpp

@@ -189,7 +189,7 @@ Error_manager Command_manager::execute_store_command(message::Store_command_requ
                          * 检查消息完毕,开始处理
                          */
 
-                        LOG(INFO) << "收到停车,车牌:" << request.car_info().license() <<
+                        LOG(INFO) << "------  停  ------- 收到停车,车牌:" << request.car_info().license() <<
                                   ",终端:" << request.terminal_id() << "............................";
                         Process_task *ptask = new StoreProcessTask(request.terminal_id(), request.car_info());
                         StoreProcessTask *pStore_task = (StoreProcessTask *) ptask;
@@ -200,7 +200,7 @@ Error_manager Command_manager::execute_store_command(message::Store_command_requ
                             error_msg.set_error_code(code.get_error_code());
                             error_msg.set_error_description(code.to_string());
                             response.mutable_code()->CopyFrom(error_msg);
-                            LOG(ERROR) << "创建停车流程失败(车位分配失败),终端:" << request.terminal_id() <<
+                            LOG(ERROR) << "xxxx 创建停车流程失败(车位分配失败),终端:" << request.terminal_id() <<
                                        "车牌:" << request.car_info().license() << "  " << code.to_string();
 
                             Communication_message msg;
@@ -255,7 +255,7 @@ Error_manager Command_manager::execute_pickup_command(message::Pickup_command_re
 
     if (m_thread_queue_process == nullptr) {
         error_msg.set_error_code(ERROR);
-        error_msg.set_error_description("bug,线程池未初始化");
+        error_msg.set_error_description(" xxxxx bug,线程池未初始化");
         response.mutable_code()->CopyFrom(error_msg);
         return Error_manager(ERROR, MINOR_ERROR, "线程池未初始化,bug");
     }
@@ -272,9 +272,9 @@ Error_manager Command_manager::execute_pickup_command(message::Pickup_command_re
     if(request.terminal_id()<0 || request.terminal_id()>=m_system_setting.export_num())
     {
         error_msg.set_error_code(ERROR);
-        error_msg.set_error_description("出口 id 设置错误");
+        error_msg.set_error_description(" xxxx 出口 id 设置错误");
         response.mutable_code()->CopyFrom(error_msg);
-        return Error_manager(ERROR, MINOR_ERROR, "出口 id 设置错误");
+        return Error_manager(ERROR, MINOR_ERROR, " xxxxx出口 id 设置错误");
     }
     if(m_output_entrance_paused[request.terminal_id()]!=false)
     {
@@ -314,7 +314,7 @@ Error_manager Command_manager::execute_pickup_command(message::Pickup_command_re
 
         //一切正常,接受指令
         Error_manager code;
-        LOG(WARNING)<<"收到取车-----------------------------"<<request.car_info().license();
+        LOG(WARNING)<<"---------  取  -------收到取车-----------------------------"<<request.car_info().license();
         Process_task* ptask=new PickupProcessTask(request.terminal_id(),request.car_info());
         PickupProcessTask* pPick_task=(PickupProcessTask*)ptask;
         //初始化流程

+ 7 - 0
system/process_task.h

@@ -20,10 +20,17 @@ class Process_task : public tq::BaseTask{
 public:
     Process_task(unsigned int command_id,message::Car_info car_info);
     virtual ~Process_task();
+
+    /*
+     * 获取当前任务相关属性
+     */
     unsigned int terminal_id(){return m_terminor_id;}
     std::string license(){ return m_car_info.license();}
     message::Step_type current_step_type(){return m_current_step_type;}
     message::Step_statu current_step_statu(){return m_current_step_statu;}
+    // 获取任务类型
+    virtual message::Process_type get_process_type() const=0;
+
     /*
      * 取消任务
      */

+ 1 - 1
tool/TaskQueue/BaseTask.h

@@ -23,7 +23,7 @@ namespace tq
         bool IsCancelled() const;
         
         virtual void Main() = 0;
-        virtual TaskCategory GetCategory() const {return NoCategory;}
+        TaskCategory GetCategory() const {return NoCategory;}
     };
 }
 #endif /* defined(__LibDriveRating_CXX__BaseTaskQueue__) */