Browse Source

Merge branch 'master' of http://local.beijingyongan.com:3000/linux-dev/ya-serv

lixioayao 6 years ago
parent
commit
e7f967b077

+ 30 - 15
card.cpp

@@ -43,13 +43,20 @@ void card_list::init_staffer(int64_t id64)
 		auto card_ptr = card_list::instance()->get(id64);
 		if(card_ptr)
 		{
-			person* tmp_ptr= static_cast<person*>(card_ptr.get());
-			tmp_ptr->m_display = static_cast<uint16_t>(db_person->m_display);
-			tmp_ptr->m_deptid = db_person->m_deptid;
-			//group_id
-			//occ_id
-			tmp_ptr->m_level_id = db_person->m_level_id;
-			//worktype_id
+            person* tmp_ptr= static_cast<person*>(card_ptr.get());
+            person* db_person_ptr= static_cast<person*>(db_person.get());
+
+            tmp_ptr->m_cid = db_person_ptr->m_cid;
+            tmp_ptr->m_type = db_person_ptr->m_type;
+            tmp_ptr->m_deptid = db_person_ptr->m_deptid;
+            //group_id
+            //occ_id
+            tmp_ptr->m_level_id = db_person_ptr->m_level_id;
+            tmp_ptr->m_display = db_person_ptr->m_display;
+            tmp_ptr->m_workLine = db_person_ptr->m_workLine;
+            tmp_ptr->m_stafferName = db_person_ptr->m_stafferName;
+            tmp_ptr->m_deptName = db_person_ptr->m_deptName;
+            tmp_ptr->m_worktype_id = db_person_ptr->m_worktype_id;
 		}
 		else
 		{
@@ -241,12 +248,16 @@ void card_list::load_his_card_postion_vehicle()
             area->m_vehicle_count++;
 
             point pt = *card_ptr;
-            card_ptr->m_area_tool->init_area(area,pt,temp_ptr);
+            //card_ptr->m_area_tool->init_area(area,pt,temp_ptr);
 			//m_area_hover = std::make_shared<area_hover>( area, pt,speed);
-            auto area_hover_ptr = card_ptr->get_area_hover();
+            //auto area_hover_ptr = card_ptr->get_area_hover();
 
             auto e_t = tool_time::to_time_ex(enter_time);
-            area_hover_ptr->m_enter_time = std::chrono::system_clock::to_time_t(e_t);
+            auto area_hover_ptr = std::make_shared<area_hover>();
+            area_hover_ptr->m_area = area;
+            area_hover_ptr->m_enter_time = tool_time::to_ms(e_t);
+            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);
 
             //int map_id  = 0;
             //int state  = 0;
@@ -310,7 +321,7 @@ void card_list::load_his_card_postion_staff()
                 continue;
             }
 
-            auto card_ptr = static_cast<car*>(temp_ptr.get());
+            auto card_ptr = static_cast<person*>(temp_ptr.get());
 
             double x = 0;
             DBRes.GetField( "x",x, Error );
@@ -361,13 +372,17 @@ void card_list::load_his_card_postion_staff()
             area->m_person_count++;
 
             point pt = *card_ptr;
-            card_ptr->m_area_tool->init_area(area,pt,temp_ptr);
-			
+            //card_ptr->m_area_tool->init_area(area,pt,temp_ptr);
 //			m_area_hover = std::make_shared<area_hover>(area,pt,speed);
-            auto area_hover_ptr = card_ptr->get_area_hover();
 
             auto e_t = tool_time::to_time_ex(enter_time);
-            area_hover_ptr->m_enter_time = std::chrono::system_clock::to_time_t(e_t);
+
+            auto area_hover_ptr = std::make_shared<area_hover>();
+            area_hover_ptr->m_area = area;
+            area_hover_ptr->m_enter_time = tool_time::to_ms(e_t);
+            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);
+
 			log_info("load_staff...%d,areaid:%d,mapid:%d",id,area->id(),area->mapid());
 
             //int map_id  = 0;

+ 2 - 0
module_service/area_business_card_enter_or_leave.cpp

@@ -23,7 +23,9 @@ void area_business_card_enter_or_leave::on_enter(const std::shared_ptr<area_hove
                                                  const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
 {
     auto ptr_temp = std::make_shared<enter_or_leave_data>();
+    ptr_temp->m_enter_time_ms = area_hover_ptr->m_enter_time;
     ptr = ptr_temp;
+    area_hover_ptr->m_data[area_business_type()] = ptr_temp;
     save_his_area_location_enter(area_hover_ptr, card_ptr, ptr_temp->m_enter_time_ms);
 }
 

+ 13 - 0
module_service/area_business_geofault.cpp

@@ -41,6 +41,7 @@ void area_business_geofault::on_enter(const std::shared_ptr<area_hover>&area_hov
 
     auto ptr_temp = std::make_shared<geofault_data>();
     ptr = ptr_temp;
+    area_hover_ptr->m_data[area_business_type()] = ptr_temp;
 
     double dist=0;
     if(_is_near(area_hover_ptr->m_area, card_ptr->x, card_ptr->y, dist))
@@ -64,6 +65,12 @@ void area_business_geofault::on_hover(const std::shared_ptr<area_hover>&area_hov
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_geofault::on_hover:nullptr == ptr");
+        return;
+    }
+
     auto ptr_temp = static_cast<geofault_data*>(ptr.get());
 
     double dist=0;
@@ -116,6 +123,12 @@ void area_business_geofault::on_leave(const std::shared_ptr<area_hover>&area_hov
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_geofault::on_leave:nullptr == ptr");
+        return;
+    }
+
     uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
     event_tool::instance()->handle_event(OT_CARD, ET_VEHICLE_NEAR_GEOFAULT, id, CYaSetting::m_sys_setting.geofault_warn_dis, 1000, false);
 }

+ 14 - 1
module_service/area_business_motionless_persion.cpp

@@ -37,7 +37,7 @@ void area_business_motionless_persion::init(config_file& config)
     //        _acc_seconds_limit = std::stoi(config.get("service.motionless_acc_seconds_limit","120"));
 }
 
-void area_business_motionless_persion::on_enter(const std::shared_ptr<area_hover>&a,
+void area_business_motionless_persion::on_enter(const std::shared_ptr<area_hover>&area_hover_ptr,
                                                 const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
 {
     if(!card_ptr->is_person())
@@ -47,6 +47,7 @@ void area_business_motionless_persion::on_enter(const std::shared_ptr<area_hover
 
     auto ptr_temp = std::make_shared<motionless_data>();
     ptr = ptr_temp;
+    area_hover_ptr->m_data[area_business_type()] = ptr_temp;
 
     auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_MOTIONLESS);
     ptr_temp->m_is_warning = (nullptr != ev_ptr_temp && !ev_ptr_temp->is_end());
@@ -60,6 +61,12 @@ void area_business_motionless_persion::on_hover(const std::shared_ptr<area_hover
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_motionless_persion::on_hover:nullptr == ptr");
+        return;
+    }
+
     auto ptr_temp = static_cast<motionless_data*>(ptr.get());
 
     if(0 == static_cast<int>(card_ptr->m_acc))
@@ -100,6 +107,12 @@ void area_business_motionless_persion::on_leave(const std::shared_ptr<area_hover
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_motionless_persion::on_leave:nullptr == ptr");
+        return;
+    }
+
     auto ptr_temp = static_cast<motionless_data*>(ptr.get());
     if(ptr_temp->m_is_warning)//如果正在告警,则发送取消告警的信息
     {

+ 13 - 0
module_service/area_business_speed_checker.cpp

@@ -39,6 +39,7 @@ void area_business_speed_checker::on_enter(const std::shared_ptr<area_hover>&are
 
     auto ptr_temp = std::make_shared<over_speed_data>();
     ptr = ptr_temp;
+    area_hover_ptr->m_data[area_business_type()] = ptr_temp;
 
     double limit = area_hover_ptr->m_area->m_over_speed_vehicle;
     if(area_hover_ptr->m_area->is_mine())
@@ -78,6 +79,12 @@ void area_business_speed_checker::on_hover(const std::shared_ptr<area_hover>&are
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_speed_checker::on_hover:nullptr == ptr");
+        return;
+    }
+
     auto ptr_temp = static_cast<over_speed_data*>(ptr.get());
     double limit = ptr_temp ->m_limit_speed;
     if(limit < 0.01)
@@ -139,6 +146,12 @@ void area_business_speed_checker::on_leave(const std::shared_ptr<area_hover>&are
         return;
     }
 
+    if(nullptr == ptr)
+    {
+        log_error("area_business_speed_checker::on_leave:nullptr == ptr");
+        return;
+    }
+
     auto ptr_temp = static_cast<over_speed_data*>(ptr.get());
     double limit = ptr_temp ->m_limit_speed;