Browse Source

历史坐标记录入库,以及加载历史逻辑处理

lixioayao 6 years ago
parent
commit
3c10f597b6
3 changed files with 69 additions and 89 deletions
  1. 3 3
      area.cpp
  2. 1 1
      area.h
  3. 65 85
      card.cpp

+ 3 - 3
area.cpp

@@ -447,7 +447,7 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<sit
 	//区域覆盖不完全地图,很多车辆人行驶在地图外,如何确认.
 	return std::move(ret);
 }
-area_hover::area_hover(std::shared_ptr<area>&area,const point&pt)
+area_hover::area_hover(const std::shared_ptr<area>&area,const point&pt)
 	:m_area(area)
 {
     m_enter_time=m_last_time=tool_time::now_to_ms();
@@ -524,8 +524,8 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
         }
     }
     char sql[1024] = {0};
-    snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%lu, %d, %lf, %lf, %lf, 0, '%s');",
-        tool_other::type_id_to_u64(c->m_type, c->m_id), s->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
+    snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%s, %d, %lf, %lf, %lf, 0, '%s');",
+        tool_other::type_id_to_str(c->m_type, c->m_id).c_str(), s->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
     db_tool::PushAsync(sql);
 }
 

+ 1 - 1
area.h

@@ -133,7 +133,7 @@ struct area_hover
 	std::vector<std::shared_ptr<business_data>> m_data;
 
     area_hover()=default;
-    area_hover(std::shared_ptr<area>&area,const point&pt);
+    area_hover(const std::shared_ptr<area>&area,const point&pt);
    	std::shared_ptr<business_data>&get_business_data(int type)
 	{
 		if(type>=(int)m_data.size())

+ 65 - 85
card.cpp

@@ -117,50 +117,11 @@ void card_list::load_his_card_postion_from_db()
 {
     load_his_card_postion_vehicle();
     load_his_card_postion_staff();
-
-    for(auto&iter: m_map)
-    {
-        auto card_ptr = iter.second;
-        auto mine_tool_ptr = card_ptr->get_mine_tool();
-        if(mine_tool_ptr->m_is_attendance)
-        {
-            auto str = tool_time::to_str_ex( tool_time::to_ms(mine_tool_ptr->m_attendance_start_time));
-            log_info("加载考勤,考勤开始时间: %s, 卡id=%d,卡type=%d", str.c_str(), card_ptr->m_id, card_ptr->m_type);
-
-            //还在考勤中表示,还在井下(初始化话数据)
-            if(card_ptr->is_person())
-            {
-                //CMineCardManager::instance()->OnPersonDown(card_ptr,true);
-            }
-            if(card_ptr->is_vehicle())
-            {
-                //CMineCardManager::instance()->OnVehicleDown(card_ptr,true);
-            }
-        }
-    }
-    //初始化后检查是否超员
-    //CMineCardManager::instance()->OnPersonOvercrowdingWarning();
-    //CMineCardManager::instance()->OnVehicleOvercrowdingWarning();
-
-    auto area_map = area_list::instance()->m_map;
-    for(auto&iter: area_map)
-    {
-        auto area_ptr = iter.second;
-        if(area_ptr->m_person_count)
-        {
-            log_info("加载区域人数: 区域id=%d,区域人数=%d",area_ptr->m_id, area_ptr->m_person_count.load());
-        }
-
-        if(area_ptr->m_vehicle_count)
-        {
-            log_info("加载区域车数: 区域id=%d,区域车数=%d",area_ptr->m_id, area_ptr->m_vehicle_count.load());
-        }
-    }
 }
 
 void card_list::load_his_card_postion_vehicle()
 {
-    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
+    const char *sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
             att.start_time, att.end_time \
             from rt_location l, rt_att_vehicle att, dat_card c, dat_vehicle_extend v \
             where l.card_id = c.card_id and l.card_id = att.card_id and l.card_id=v.card_id \
@@ -177,18 +138,19 @@ void card_list::load_his_card_postion_vehicle()
 
         while ( DBRes.GetNextRecod(Error) )
         {
-             std::string card_id  = "";
+            std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            uint32_t id = tool_other::id64_to_id(card_id);
-            int type = tool_other::id64_to_type(card_id);
-            auto temp_ptr = card_list::instance()->get(tool_other::type_id_to_u64(type, id));
-            if(!temp_ptr || !temp_ptr->is_vehicle())
+            uint64_t c_id = tool_other::card_id_to_u64(card_id);
+            auto card_ptr = card_list::instance()->get(c_id);
+
+            if(!card_ptr)
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,%s",card_id.c_str());
                 continue;
             }
 
-            auto card_ptr = static_cast<car*>(temp_ptr.get());
+            int site_id = -1;
+            DBRes.GetField( "site_id",site_id, Error );
 
             double x = 0;
             DBRes.GetField( "x",x, Error );
@@ -214,9 +176,27 @@ void card_list::load_his_card_postion_vehicle()
             std::string end_time  = "";
             DBRes.GetField( "end_time",end_time, Error );
 
-            card_ptr->x = x;
-            card_ptr->y = y;
-            card_ptr->z = z;
+            std::string cur_time  = "";
+            DBRes.GetField( "cur_time",cur_time, Error );
+            
+            card_ptr->m_time = tool_time::to_time(cur_time)*1000;
+            card_ptr->set(x,y,z);
+
+            if(end_time.empty())
+            {
+                auto mine_tool_ptr = card_ptr->get_mine_tool();
+                mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
+                mine_tool_ptr->m_is_attendance = true;
+                log_info("vehicle加载考勤,考勤开始时间: %s, 卡id=%s", start_time.c_str(), card_id.c_str());
+            }
+
+            auto area_tool=card_ptr->get_area_tool();
+            auto sit_ptr=sit_list::instance()->get(site_id);
+            if(sit_ptr)
+            {
+                auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+            }
 
             //解析area_info
             const char * split = "|";
@@ -236,22 +216,13 @@ void card_list::load_his_card_postion_vehicle()
                     log_error("load_vehicle...area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-
-                if(end_time.empty())
-                {
-                    auto mine_tool_ptr = card_ptr->get_mine_tool();
-                    mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
-                    mine_tool_ptr->m_is_attendance = true;
-                }
-
-                card_ptr->m_time = tool_time::now_to_ms();
-
+                log_info("load_vehicle_area:%s,%d,%lu",card_id.c_str(),area_id,enter_time);
                 //要放到最后
                 auto area_hover_ptr = std::make_shared<area_hover>();
                 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_load_his(area_hover_ptr, temp_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+                area->on_load_his(area_hover_ptr, card_ptr);
             }
         }
     }
@@ -259,7 +230,7 @@ void card_list::load_his_card_postion_vehicle()
 
 void card_list::load_his_card_postion_staff()
 {
-    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
+    const char *sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
             att.start_time, att.end_time \
             from rt_location l, rt_att_staff att, dat_card c, dat_staff_extend s \
             where l.card_id = c.card_id and l.card_id = att.card_id and l.card_id=s.card_id\
@@ -279,22 +250,21 @@ void card_list::load_his_card_postion_staff()
             std::string end_time  = "";
             DBRes.GetField( "end_time",end_time, Error );
             if(!end_time.empty()) // 已升井,不再读入
-            {
                 continue;
-            }
 
             std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            uint32_t id = tool_other::id64_to_id(card_id);
-            int type = tool_other::id64_to_type(card_id);
-            auto temp_ptr = card_list::instance()->get(tool_other::type_id_to_u64(type, id));
-            if(!temp_ptr || !temp_ptr->is_person())
+            uint64_t c_id = tool_other::card_id_to_u64(card_id);
+            auto card_ptr = card_list::instance()->get(c_id);
+
+            if(!card_ptr)
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,%s", card_id.c_str());
                 continue;
             }
 
-            auto card_ptr = static_cast<person*>(temp_ptr.get());
+            int site_id = -1;
+            DBRes.GetField( "site_id",site_id, Error );
 
             double x = 0;
             DBRes.GetField( "x",x, Error );
@@ -317,9 +287,27 @@ void card_list::load_his_card_postion_staff()
             std::string start_time  = "";
             DBRes.GetField( "start_time",start_time, Error );
 
-            card_ptr->x = x;
-            card_ptr->y = y;
-            card_ptr->z = z;
+            std::string cur_time  = "";
+            DBRes.GetField( "cur_time",cur_time, Error );
+            
+            card_ptr->set(x,y,z);
+            card_ptr->m_time = tool_time::to_time(cur_time)*1000;
+
+            if(end_time.empty())
+            {
+                auto mine_tool_ptr = card_ptr->get_mine_tool();
+                mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
+                mine_tool_ptr->m_is_attendance = true;
+                log_info("person加载考勤,考勤开始时间: %s, 卡id=%s", start_time.c_str(), card_id.c_str());
+            }
+
+            auto area_tool=card_ptr->get_area_tool();
+            auto sit_ptr=sit_list::instance()->get(site_id);
+            if(sit_ptr)
+            {
+                auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+            }
 
             //解析area_info
             const char * split = "|";
@@ -339,22 +327,14 @@ void card_list::load_his_card_postion_staff()
                     log_error("area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-
-                if(end_time.empty())
-                {
-                    auto mine_tool_ptr = card_ptr->get_mine_tool();
-                    mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
-                    mine_tool_ptr->m_is_attendance = true;
-                }
-
-                card_ptr->m_time = tool_time::now_to_ms();
+                log_info("load_person_area:%s,%d,%lu",card_id.c_str(),area_id,enter_time);
 
                 //要放到最后
                 auto area_hover_ptr = std::make_shared<area_hover>();
                 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_load_his(area_hover_ptr, temp_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+                area->on_load_his(area_hover_ptr, card_ptr);
             }
         }
     }