ソースを参照

地区的业务结构已改变对应修改相关的代码

chensongchao 6 年 前
コミット
afaaec679b

+ 11 - 0
area.cpp

@@ -91,6 +91,17 @@ void area::on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<ca
 	}
 }
 
+void area::on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c)
+{
+	a->m_enter_time=tool_time::now_to_ms();
+	a->m_enter_point=*c;
+	for(const auto &i:m_area_business_list)
+	{
+		auto &x=a->get_business_data(i->area_business_type());
+		i->on_load_his(a,c,x);
+	}
+}
+
 void area::on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c)
 {
 	log_info("on_enter..%d  areaId:%d",c->m_id,m_id);

+ 3 - 0
area.h

@@ -24,6 +24,9 @@ struct site;
 struct area
 {
     area(int id,int limit_count_person, int limit_time_person,double scale,int32_t mapid,int32_t type);
+
+    //服务器重启加载数据
+    virtual void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
   	virtual void on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
 	virtual	void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
 	virtual	void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);

+ 1 - 1
card.cpp

@@ -262,7 +262,7 @@ void card_list::load_his_card_postion_vehicle()
                 area_hover_ptr->m_area = area;
                 area_hover_ptr->m_enter_time = enter_time;
                 card_ptr->m_area_tool->m_hover_list.push_back(area_hover_ptr);
-                area_hover_ptr->m_area->on_enter(area_hover_ptr, temp_ptr);
+                area_hover_ptr->m_area->on_load_his(area_hover_ptr, temp_ptr);
             }
         }
     }

+ 26 - 0
module_service/area_business_count_checker.cpp

@@ -9,6 +9,32 @@
 	区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新
 	整个井下的超员和某个区域的超员都使用这个代码
 */
+
+//服务器重启加载数据
+void area_business_count_checker::on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
+{
+	if (nullptr == a->m_area )//|| !a->m_area->is_mine())
+	{
+		return ;
+	}
+	if (c->is_person())
+	{
+		a->m_area->m_person_count ++ ;
+		if (a->m_area->m_person_count > a->m_area->m_limit_person_count)
+		{
+			a->m_area->m_event_person_count = true;
+		}
+	}
+	else if (c->is_vehicle())
+	{
+		a->m_area->m_vehicle_count ++ ;
+		if (a->m_area->m_vehicle_count > a->m_area->m_limit_vehicle_count)
+		{
+			a->m_area->m_event_vehicle_count = true;
+		}
+	}
+}
+
 //增加计数,并进行判断
 void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
 						const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)

+ 2 - 0
module_service/area_business_count_checker.h

@@ -16,6 +16,8 @@ struct area_business_count_checker:area_business
 		return 3;
 	
 	}
+	//服务器重启加载数据
+	void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
 	//增加计数,并进行判断
 	void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
 	void on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);

+ 10 - 15
module_service/area_business_person_dwell_checker.cpp

@@ -26,25 +26,24 @@ struct SPersonDwellChecker : business_data
         m_send_event = false;
     }
 };
+//服务器重启加载数据
+void area_business_person_dwell_checker::on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
+{
+    std::shared_ptr<SPersonDwellChecker> p = std::make_shared<SPersonDwellChecker>();
+    p->m_send_event = false;
+    ptr = p;
+}
 
 //进入区域,记录进入时间
 void area_business_person_dwell_checker::on_enter(const std::shared_ptr<area_hover>&a,
 							const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
 {
-    if (nullptr == ptr)
-    {
-        ptr = std::make_shared<SPersonDwellChecker>();
-    }
-    auto ptr_temp = dynamic_cast<SPersonDwellChecker*>(ptr.get());
-    ptr_temp->m_enter_point.set(c->x,c->y,c->z);
-    ptr_temp->m_enter_time = tool_time::now_to_seconds();
-    ptr_temp->m_level_time = 0;
-    ptr_temp->m_level_point.set(0,0,0);
-    //a->m_data[this->area_business_type()] = ptr;
+    std::shared_ptr<SPersonDwellChecker> p = std::make_shared<SPersonDwellChecker>();
+    p->m_send_event = false;
+    ptr = p;
     log_info("area_business_person_dwell_checker::on_enter : In Area=%d Card = %d  ",a->m_area->is_mine(),c->m_id);
 }
 
-
 //判断是否超时
 void area_business_person_dwell_checker::on_hover(const std::shared_ptr<area_hover>&a,
 							const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
@@ -89,10 +88,6 @@ void area_business_person_dwell_checker::on_leave(const std::shared_ptr<area_hov
     {
         return ;
     }
-    ptr_temp->m_level_point.set(c->x,c->y,c->z);
-    ptr_temp->m_level_time = tool_time::now_to_seconds();
-    ptr_temp->m_enter_point.set(0,0,0);
-    ptr_temp->m_enter_time = 0;
     ptr_temp->m_send_event = false;
     EVENT_TYPE evType = EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
     if(c->is_person())

+ 2 - 0
module_service/area_business_person_dwell_checker.h

@@ -14,6 +14,8 @@ struct area_business_person_dwell_checker:area_business
 	{
 		return 2;
 	}
+	//服务器重启加载数据
+	virtual void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
 	//进入区域,记录进入时间
 	void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
 	//判断是否超时