浏览代码

修改默认异常处理为回退,修复中控状态消息bug

zx 4 年之前
父节点
当前提交
3d624bde14

+ 43 - 14
exception/exception_solver.cpp

@@ -142,15 +142,15 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
             case message::eAlloc_step :
             {
 
-                switch(code.get_error_code())
+                /*switch(code.get_error_code())
                 {
                     case 0:
                         //重新执行
+                        repeat_task_step(task);
                         return code;
                     case 1:
                         //异常无法处理,回退
-                        task->updata_step_statu(message::eError);
-                        task->next_step();
+                        back_task(task);
                         return code;
                     case 2:
                         //code  = .....handle
@@ -158,21 +158,19 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
                         if(code==SUCCESS)
                         {
                             //处理成功
-                            task->updata_step_statu(message::eFinished);
-                            task->next_step();
+                            complete_task_step(task);
                         }
                         else{
                             //修复失败,回退
-                            task->updata_step_statu(message::eError);
-                            task->next_step();
+                            back_task(task);
                         }
                         return code;
                     case 3:
                         //取消任务
-                        task->Cancel();
+                        cancel_task(task);
                         return code;
-                }
-                return SUCCESS;
+                }*/
+                //return SUCCESS;
             }
             case message::eMeasure_step :
             case message::eCompare_step :
@@ -189,7 +187,7 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
             case message::eBackAlloc_step :
             case message::eBackComplete :
             {
-                Command_manager::get_instance_pointer()->pause_entrance(task->terminal_id(),true);
+                /*Command_manager::get_instance_pointer()->pause_entrance(task->terminal_id(),true);
                 LOG(ERROR)<<"关闭入口:"<<task->terminal_id()<<"   故障  !!!!!!  等待手动操作 ... ";
                 message::Process_manual_operation_msg operate_msg;
                 code_operate=waitfor_manual_operate_msg(task,operate_msg);
@@ -217,7 +215,12 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
                         return SUCCESS;
                     }
                 }
-                break;
+                break;*/
+            }
+            default:        //默认回退
+            {
+                back_task(task);
+                return code;
             }
         }
     }
@@ -240,7 +243,7 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
             case message::eBackSearch_step :
             case message::eBackComplete :
             {
-                Command_manager::get_instance_pointer()->pause_export(task->terminal_id(),true);
+                /*Command_manager::get_instance_pointer()->pause_export(task->terminal_id(),true);
                 LOG(ERROR)<<"关闭出口:"<<task->terminal_id()<<"   故障  !!!!!!  等待手动操作 ...";
                 message::Process_manual_operation_msg operate_msg;
                 code_operate=waitfor_manual_operate_msg(task,operate_msg);
@@ -268,9 +271,35 @@ Error_manager Exception_solver::solve_exception(Error_manager code,Process_task*
                         return SUCCESS;
                     }
                 }
-                break;
+                break;*/
+            }
+            default:
+            {
+                back_task(task);
+                return code;
             }
         }
     }
     return code;
 }
+
+
+Error_manager Exception_solver::back_task(Process_task* task)
+{
+    task->updata_step_statu(message::eError);
+    return task->next_step();
+}
+Error_manager Exception_solver::repeat_task_step(Process_task* task)
+{
+    return SUCCESS;
+}
+Error_manager Exception_solver::complete_task_step(Process_task* task)
+{
+    task->updata_step_statu(message::eFinished);
+    return task->next_step();
+}
+Error_manager Exception_solver::cancel_task(Process_task* task)
+{
+    task->Cancel();
+    return SUCCESS;
+}

+ 8 - 1
exception/exception_solver.h

@@ -44,7 +44,14 @@ public:
 protected:
     Exception_solver();
 
-
+    //回退流程
+    Error_manager back_task(Process_task* task);
+    //再次执行当前步骤
+    Error_manager repeat_task_step(Process_task* task);
+    //完成当前步骤
+    Error_manager complete_task_step(Process_task* task);
+    //取消流程
+    Error_manager cancel_task(Process_task* task);
 private:
     thread_safe_map<std::string,tq::BaseTask*>                              m_ptask_map;
     thread_safe_map<std::string,message::Process_manual_operation_msg>      m_manual_msg_map;

+ 57 - 17
message/parkspace_allocation_message.pb.cc

@@ -124,10 +124,11 @@ static void InitDefaultsscc_info_Parkspace_allocation_status_msg_parkspace_5fall
   ::message::Parkspace_allocation_status_msg::InitAsDefaultInstance();
 }
 
-::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_Parkspace_allocation_status_msg_parkspace_5fallocation_5fmessage_2eproto =
-    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_Parkspace_allocation_status_msg_parkspace_5fallocation_5fmessage_2eproto}, {
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<3> scc_info_Parkspace_allocation_status_msg_parkspace_5fallocation_5fmessage_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 3, 0, InitDefaultsscc_info_Parkspace_allocation_status_msg_parkspace_5fallocation_5fmessage_2eproto}, {
       &scc_info_Base_info_message_5fbase_2eproto.base,
-      &scc_info_Error_manager_message_5fbase_2eproto.base,}};
+      &scc_info_Error_manager_message_5fbase_2eproto.base,
+      &scc_info_Parkspace_info_message_5fbase_2eproto.base,}};
 
 static void InitDefaultsscc_info_Parkspace_confirm_alloc_request_msg_parkspace_5fallocation_5fmessage_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
@@ -353,8 +354,10 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_parkspace_5fallocation_5fmessa
   ~0u,  // no _weak_field_map_
   PROTOBUF_FIELD_OFFSET(::message::Parkspace_allocation_status_msg, base_info_),
   PROTOBUF_FIELD_OFFSET(::message::Parkspace_allocation_status_msg, error_manager_),
+  PROTOBUF_FIELD_OFFSET(::message::Parkspace_allocation_status_msg, parkspace_info_),
   0,
   1,
+  ~0u,
   PROTOBUF_FIELD_OFFSET(::message::Parkspace_refresh_request_msg, _has_bits_),
   PROTOBUF_FIELD_OFFSET(::message::Parkspace_refresh_request_msg, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -381,9 +384,9 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
   { 61, 70, sizeof(::message::Parkspace_release_response_msg)},
   { 74, 82, sizeof(::message::Parkspace_confirm_alloc_request_msg)},
   { 85, 94, sizeof(::message::Parkspace_confirm_alloc_response_msg)},
-  { 98, 105, sizeof(::message::Parkspace_allocation_status_msg)},
-  { 107, 113, sizeof(::message::Parkspace_refresh_request_msg)},
-  { 114, 121, sizeof(::message::Parkspace_allocation_data_msg)},
+  { 98, 106, sizeof(::message::Parkspace_allocation_status_msg)},
+  { 109, 115, sizeof(::message::Parkspace_refresh_request_msg)},
+  { 116, 123, sizeof(::message::Parkspace_allocation_data_msg)},
 };
 
 static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@@ -437,14 +440,16 @@ const char descriptor_table_protodef_parkspace_5fallocation_5fmessage_2eproto[]
   "and_key\030\002 \002(\t\022-\n\rerror_manager\030\003 \002(\0132\026.m"
   "essage.Error_manager\0229\n\030confirm_alloc_sp"
   "ace_info\030\004 \002(\0132\027.message.Parkspace_info\""
-  "w\n\037Parkspace_allocation_status_msg\022%\n\tba"
-  "se_info\030\001 \002(\0132\022.message.Base_info\022-\n\rerr"
-  "or_manager\030\002 \002(\0132\026.message.Error_manager"
-  "\"F\n\035Parkspace_refresh_request_msg\022%\n\tbas"
-  "e_info\030\001 \002(\0132\022.message.Base_info\"w\n\035Park"
-  "space_allocation_data_msg\022%\n\tbase_info\030\001"
-  " \002(\0132\022.message.Base_info\022/\n\016parkspace_in"
-  "fo\030\002 \003(\0132\027.message.Parkspace_info"
+  "\250\001\n\037Parkspace_allocation_status_msg\022%\n\tb"
+  "ase_info\030\001 \002(\0132\022.message.Base_info\022-\n\rer"
+  "ror_manager\030\002 \002(\0132\026.message.Error_manage"
+  "r\022/\n\016parkspace_info\030\003 \003(\0132\027.message.Park"
+  "space_info\"F\n\035Parkspace_refresh_request_"
+  "msg\022%\n\tbase_info\030\001 \002(\0132\022.message.Base_in"
+  "fo\"w\n\035Parkspace_allocation_data_msg\022%\n\tb"
+  "ase_info\030\001 \002(\0132\022.message.Base_info\022/\n\016pa"
+  "rkspace_info\030\002 \003(\0132\027.message.Parkspace_i"
+  "nfo"
   ;
 static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_parkspace_5fallocation_5fmessage_2eproto_deps[1] = {
   &::descriptor_table_message_5fbase_2eproto,
@@ -464,7 +469,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_par
 };
 static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_parkspace_5fallocation_5fmessage_2eproto_once;
 const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_parkspace_5fallocation_5fmessage_2eproto = {
-  false, false, descriptor_table_protodef_parkspace_5fallocation_5fmessage_2eproto, "parkspace_allocation_message.proto", 1753,
+  false, false, descriptor_table_protodef_parkspace_5fallocation_5fmessage_2eproto, "parkspace_allocation_message.proto", 1803,
   &descriptor_table_parkspace_5fallocation_5fmessage_2eproto_once, descriptor_table_parkspace_5fallocation_5fmessage_2eproto_sccs, descriptor_table_parkspace_5fallocation_5fmessage_2eproto_deps, 11, 1,
   schemas, file_default_instances, TableStruct_parkspace_5fallocation_5fmessage_2eproto::offsets,
   file_level_metadata_parkspace_5fallocation_5fmessage_2eproto, 11, file_level_enum_descriptors_parkspace_5fallocation_5fmessage_2eproto, file_level_service_descriptors_parkspace_5fallocation_5fmessage_2eproto,
@@ -3717,15 +3722,20 @@ void Parkspace_allocation_status_msg::clear_error_manager() {
   if (error_manager_ != nullptr) error_manager_->Clear();
   _has_bits_[0] &= ~0x00000002u;
 }
+void Parkspace_allocation_status_msg::clear_parkspace_info() {
+  parkspace_info_.Clear();
+}
 Parkspace_allocation_status_msg::Parkspace_allocation_status_msg(::PROTOBUF_NAMESPACE_ID::Arena* arena)
-  : ::PROTOBUF_NAMESPACE_ID::Message(arena) {
+  : ::PROTOBUF_NAMESPACE_ID::Message(arena),
+  parkspace_info_(arena) {
   SharedCtor();
   RegisterArenaDtor(arena);
   // @@protoc_insertion_point(arena_constructor:message.Parkspace_allocation_status_msg)
 }
 Parkspace_allocation_status_msg::Parkspace_allocation_status_msg(const Parkspace_allocation_status_msg& from)
   : ::PROTOBUF_NAMESPACE_ID::Message(),
-      _has_bits_(from._has_bits_) {
+      _has_bits_(from._has_bits_),
+      parkspace_info_(from.parkspace_info_) {
   _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
   if (from._internal_has_base_info()) {
     base_info_ = new ::message::Base_info(*from.base_info_);
@@ -3780,6 +3790,7 @@ void Parkspace_allocation_status_msg::Clear() {
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
+  parkspace_info_.Clear();
   cached_has_bits = _has_bits_[0];
   if (cached_has_bits & 0x00000003u) {
     if (cached_has_bits & 0x00000001u) {
@@ -3818,6 +3829,18 @@ const char* Parkspace_allocation_status_msg::_InternalParse(const char* ptr, ::P
           CHK_(ptr);
         } else goto handle_unusual;
         continue;
+      // repeated .message.Parkspace_info parkspace_info = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(_internal_add_parkspace_info(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
+        } else goto handle_unusual;
+        continue;
       default: {
       handle_unusual:
         if ((tag & 7) == 4 || tag == 0) {
@@ -3864,6 +3887,14 @@ failure:
         2, _Internal::error_manager(this), target, stream);
   }
 
+  // repeated .message.Parkspace_info parkspace_info = 3;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->_internal_parkspace_info_size()); i < n; i++) {
+    target = stream->EnsureSpace(target);
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessage(3, this->_internal_parkspace_info(i), target, stream);
+  }
+
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
@@ -3914,6 +3945,13 @@ size_t Parkspace_allocation_status_msg::ByteSizeLong() const {
   // Prevent compiler warnings about cached_has_bits being unused
   (void) cached_has_bits;
 
+  // repeated .message.Parkspace_info parkspace_info = 3;
+  total_size += 1UL * this->_internal_parkspace_info_size();
+  for (const auto& msg : this->parkspace_info_) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
+  }
+
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
     return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
         _internal_metadata_, total_size, &_cached_size_);
@@ -3945,6 +3983,7 @@ void Parkspace_allocation_status_msg::MergeFrom(const Parkspace_allocation_statu
   ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
   (void) cached_has_bits;
 
+  parkspace_info_.MergeFrom(from.parkspace_info_);
   cached_has_bits = from._has_bits_[0];
   if (cached_has_bits & 0x00000003u) {
     if (cached_has_bits & 0x00000001u) {
@@ -3985,6 +4024,7 @@ void Parkspace_allocation_status_msg::InternalSwap(Parkspace_allocation_status_m
   using std::swap;
   _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_);
   swap(_has_bits_[0], other->_has_bits_[0]);
+  parkspace_info_.InternalSwap(&other->parkspace_info_);
   ::PROTOBUF_NAMESPACE_ID::internal::memswap<
       PROTOBUF_FIELD_OFFSET(Parkspace_allocation_status_msg, error_manager_)
       + sizeof(Parkspace_allocation_status_msg::error_manager_)

+ 56 - 0
message/parkspace_allocation_message.pb.h

@@ -1914,9 +1914,28 @@ class Parkspace_allocation_status_msg PROTOBUF_FINAL :
   // accessors -------------------------------------------------------
 
   enum : int {
+    kParkspaceInfoFieldNumber = 3,
     kBaseInfoFieldNumber = 1,
     kErrorManagerFieldNumber = 2,
   };
+  // repeated .message.Parkspace_info parkspace_info = 3;
+  int parkspace_info_size() const;
+  private:
+  int _internal_parkspace_info_size() const;
+  public:
+  void clear_parkspace_info();
+  ::message::Parkspace_info* mutable_parkspace_info(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::message::Parkspace_info >*
+      mutable_parkspace_info();
+  private:
+  const ::message::Parkspace_info& _internal_parkspace_info(int index) const;
+  ::message::Parkspace_info* _internal_add_parkspace_info();
+  public:
+  const ::message::Parkspace_info& parkspace_info(int index) const;
+  ::message::Parkspace_info* add_parkspace_info();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::message::Parkspace_info >&
+      parkspace_info() const;
+
   // required .message.Base_info base_info = 1;
   bool has_base_info() const;
   private:
@@ -1965,6 +1984,7 @@ class Parkspace_allocation_status_msg PROTOBUF_FINAL :
   typedef void DestructorSkippable_;
   ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::message::Parkspace_info > parkspace_info_;
   ::message::Base_info* base_info_;
   ::message::Error_manager* error_manager_;
   friend struct ::TableStruct_parkspace_5fallocation_5fmessage_2eproto;
@@ -4698,6 +4718,42 @@ inline void Parkspace_allocation_status_msg::set_allocated_error_manager(::messa
   // @@protoc_insertion_point(field_set_allocated:message.Parkspace_allocation_status_msg.error_manager)
 }
 
+// repeated .message.Parkspace_info parkspace_info = 3;
+inline int Parkspace_allocation_status_msg::_internal_parkspace_info_size() const {
+  return parkspace_info_.size();
+}
+inline int Parkspace_allocation_status_msg::parkspace_info_size() const {
+  return _internal_parkspace_info_size();
+}
+inline ::message::Parkspace_info* Parkspace_allocation_status_msg::mutable_parkspace_info(int index) {
+  // @@protoc_insertion_point(field_mutable:message.Parkspace_allocation_status_msg.parkspace_info)
+  return parkspace_info_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::message::Parkspace_info >*
+Parkspace_allocation_status_msg::mutable_parkspace_info() {
+  // @@protoc_insertion_point(field_mutable_list:message.Parkspace_allocation_status_msg.parkspace_info)
+  return &parkspace_info_;
+}
+inline const ::message::Parkspace_info& Parkspace_allocation_status_msg::_internal_parkspace_info(int index) const {
+  return parkspace_info_.Get(index);
+}
+inline const ::message::Parkspace_info& Parkspace_allocation_status_msg::parkspace_info(int index) const {
+  // @@protoc_insertion_point(field_get:message.Parkspace_allocation_status_msg.parkspace_info)
+  return _internal_parkspace_info(index);
+}
+inline ::message::Parkspace_info* Parkspace_allocation_status_msg::_internal_add_parkspace_info() {
+  return parkspace_info_.Add();
+}
+inline ::message::Parkspace_info* Parkspace_allocation_status_msg::add_parkspace_info() {
+  // @@protoc_insertion_point(field_add:message.Parkspace_allocation_status_msg.parkspace_info)
+  return _internal_add_parkspace_info();
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::message::Parkspace_info >&
+Parkspace_allocation_status_msg::parkspace_info() const {
+  // @@protoc_insertion_point(field_list:message.Parkspace_allocation_status_msg.parkspace_info)
+  return parkspace_info_;
+}
+
 // -------------------------------------------------------------------
 
 // Parkspace_refresh_request_msg

+ 1 - 0
message/parkspace_allocation_message.proto

@@ -75,6 +75,7 @@ message Parkspace_allocation_status_msg
 {
     required Base_info                  base_info=1;            //消息类型
     required Error_manager              error_manager=2;
+    repeated Parkspace_info             parkspace_info=3;       //车位状态
 }
 
 //更新车位数据请求

+ 3 - 4
system/command_manager.cpp

@@ -457,16 +457,15 @@ void Command_manager::publish_statu()
             entrance_statu.set_parkspace_statu(statu);
 
             code=Measure_excutor::get_instance_pointer()->check_statu(i);
-            if (code==ERROR) statu=message::eFault;
+            statu=(code==SUCCESS)?message::eConnected:message::eFault;
             if(code==DISCONNECT) statu=message::eDisconnected;
             entrance_statu.set_measure_statu(statu);
 
             code=Dispatch_excutor::get_instance_pointer()->check_entrance_statu(i);
-            if (code==ERROR) statu=message::eFault;
+            statu=(code==SUCCESS)?message::eConnected:message::eFault;
             if(code==DISCONNECT) statu=message::eDisconnected;
             entrance_statu.set_dispatch_statu(statu);
 
-
             entrance_statu.set_paused(m_input_entrance_paused[i]);
 
             msg.mutable_entrance_statu_vector()->Add();
@@ -482,7 +481,7 @@ void Command_manager::publish_statu()
             entrance_statu.set_parkspace_statu(statu);
 
             code=Dispatch_excutor::get_instance_pointer()->check_export_statu(i);
-            if (code==ERROR) statu=message::eFault;
+            statu=(code==SUCCESS)?message::eConnected:message::eFault;
             if(code==DISCONNECT) statu=message::eDisconnected;
             entrance_statu.set_dispatch_statu(statu);
 

+ 2 - 2
system/message_communicator.cpp

@@ -35,7 +35,8 @@ Error_manager Message_communicator::encapsulate_send_data()
  */
 Error_manager Message_communicator::check_msg(Communication_message* p_msg)
 {
-    if ( (p_msg->get_receiver() == Communication_message::Communicator::eMain) &&
+    if ( (p_msg->get_receiver() == Communication_message::Communicator::eMain
+            ||p_msg->get_receiver() == Communication_message::Communicator::eEmpty) &&
          (p_msg->get_message_type() == Communication_message::Message_type::eDispatch_response_msg
           ||p_msg->get_message_type() == Communication_message::Message_type::eDispatch_status_msg
           ||p_msg->get_message_type() == Communication_message::Message_type::eStore_command_request_msg
@@ -70,7 +71,6 @@ Error_manager Message_communicator::execute_msg(Communication_message* p_msg)
      * 接收终端指令, 生成流程
      */
     Error_manager code;
-
     switch(p_msg->get_message_type())
     {
         //终端消息