Browse Source

Merge branch 'master' of Dennis/ya-serv into master

zzj 6 years ago
parent
commit
7ebd0405f6
2 changed files with 106 additions and 113 deletions
  1. 18 0
      area.cpp
  2. 88 113
      card.cpp

+ 18 - 0
area.cpp

@@ -6,6 +6,8 @@
 #include <area.h>
 #include "point.h"
 #include "tool_time.h"
+#include "common_tool.h"
+#include "db_tool.h"
 #include "monkey_car/monkeycar_area.h"
 #include "landmark.h"
 #include "area_business.h"
@@ -494,6 +496,22 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
 	}
 
 	m_hover_list=std::move(nlist);
+
+    //更新到数据库
+    std::string strAreaInfo = "";
+    for (std::vector<std::shared_ptr<area_hover>>::iterator itvec = m_hover_list.begin(); itvec != m_hover_list.end(); ++itvec)
+    {
+        if ((*itvec)->id() > 0)
+        {
+            char tmpArea[128] = {0};
+            snprintf(tmpArea, 128, "%d,%lu|", (*itvec)->id(), (*itvec)->m_enter_time);
+            strAreaInfo += tmpArea;
+        }
+    }
+    char sql[1024] = {0};
+    snprintf(sql, 1024, "call card_location(%lu, %d, %lf, %lf, %lf,d '%s');",
+        tool_other::type_id_to_u64(c->m_type, c->m_id), s->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
+    db_tool::PushAsync(sql);
 }
 
 void area_tool::on_leave(const std::shared_ptr<card_location_base>& c)

+ 88 - 113
card.cpp

@@ -161,13 +161,11 @@ void card_list::load_his_card_postion_from_db()
 
 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.map_id, la.area_id, l.state, \
+    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
             case when l.cur_time >= date_sub(now(), interval 2 minute) then l.speed else 0 end as speed, \
-            l.mileage, la.enter_time, att.start_time, \
-            att.end_time, \
-            l.landmark_id, l.direction_mapper_id, l.landmark_dist \
-            from rt_location l, rt_location_area la, rt_att_vehicle att, dat_card c, dat_vehicle_extend v \
-            where l.card_id = c.card_id and l.card_id = la.card_id and l.card_id = att.card_id and l.card_id=v.card_id \
+            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 \
             and c.state_id=0;";
     std::string Error;
     YADB::CDBResultSet DBRes;
@@ -181,16 +179,12 @@ void card_list::load_his_card_postion_vehicle()
 
         while ( DBRes.GetNextRecod(Error) )
         {
-            std::string card_id  = "";
+            long long int card_id  = 0;
             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));
+            auto temp_ptr = card_list::instance()->get(card_id);
             if(!temp_ptr || !temp_ptr->is_vehicle())
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,卡id=%lu", card_id);
                 continue;
             }
 
@@ -205,11 +199,8 @@ void card_list::load_his_card_postion_vehicle()
             double z = 0;
             DBRes.GetField( "z",z, Error );
 
-            int map_id  = 0;
-            DBRes.GetField( "map_id",map_id, Error );
-
-            int area_id  = 0;
-            DBRes.GetField( "area_id",area_id, Error );
+            std::string strAreaInfo = "";
+            DBRes.GetField( "area_info",strAreaInfo, Error );
 
             int state  = 0;
             DBRes.GetField( "state",state, Error );
@@ -217,9 +208,6 @@ void card_list::load_his_card_postion_vehicle()
             double speed = 0;
             DBRes.GetField( "speed",speed, Error );
 
-            std::string enter_time  = "";
-            DBRes.GetField( "enter_time",enter_time, Error );
-
             std::string start_time  = "";
             DBRes.GetField( "start_time",start_time, Error );
 
@@ -239,56 +227,54 @@ void card_list::load_his_card_postion_vehicle()
             card_ptr->y = y;
             card_ptr->z = z;
 
-            auto area = area_list::instance()->get(area_id);
-            if(area == nullptr)
-            {
-                log_error("load_vehicle...area_list 找不到区域:区域id=%d", area_id);
-                continue;
-            }
-            area->m_vehicle_count++;
-
-            //point pt = *card_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();
-
-            //int map_id  = 0;
-            //int state  = 0;
-            card_ptr->m_speed = speed;
-
-            if(end_time.empty())
+            //解析area_info
+            const char * split = "|";
+            char *p = strtok(const_cast<char *>(strAreaInfo.c_str()), split);
+            while (p != NULL)
             {
-                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;
+                int area_id = 0;
+                uint64_t enter_time = 0; 
+                sscanf(p, "%d,%lu", &area_id, &enter_time);
+                p = strtok(NULL, split);
+                if (area_id <= 0)
+                    continue;
+
+                auto area = area_list::instance()->get(area_id);
+                if(area == nullptr)
+                {
+                    log_error("load_vehicle...area_list 找不到区域:区域id=%d", area_id);
+                    continue;
+                }
+                area->m_vehicle_count++;
+                card_ptr->m_speed = speed;
+
+                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();
+
+                //要放到最后
+                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_enter(area_hover_ptr, temp_ptr);
             }
-
-            //area_hover_ptr->landmark_id = landmark_id;
-            //area_hover_ptr->landmark_dir = direction_mapper_id;
-            //area_hover_ptr->landmark_dis = landmark_dist;
-
-            card_ptr->m_time = tool_time::now_to_ms();
-
-            //要放到最后
-            auto e_t = tool_time::to_time_ex(enter_time);
-            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);
         }
     }
 }
 
 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.map_id, la.area_id, l.state, \
+    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info l.state, \
             case when l.cur_time >= date_sub(now(), interval 2 minute) then l.speed else 0 end as speed, \
-            l.mileage, la.enter_time, att.start_time, \
-            att.end_time, \
-            l.landmark_id, l.direction_mapper_id, l.landmark_dist \
-            from rt_location l, rt_location_area la, rt_att_staff att, dat_card c, dat_staff_extend s \
-            where l.card_id = c.card_id and l.card_id = la.card_id and l.card_id = att.card_id and l.card_id=s.card_id\
+            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\
             and c.state_id=0;";
     std::string Error;
     YADB::CDBResultSet DBRes;
@@ -309,16 +295,12 @@ void card_list::load_his_card_postion_staff()
                 continue;
             }
 
-            std::string card_id  = "";
+            long long int card_id  = 0;
             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));
+            auto temp_ptr = card_list::instance()->get(card_id);
             if(!temp_ptr || !temp_ptr->is_person())
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,卡id=%lu", card_id);
                 continue;
             }
 
@@ -333,11 +315,8 @@ void card_list::load_his_card_postion_staff()
             double z = 0;
             DBRes.GetField( "z",z, Error );
 
-            int map_id  = 0;
-            DBRes.GetField( "map_id",map_id, Error );
-
-            int area_id  = 0;
-            DBRes.GetField( "area_id",area_id, Error );
+            std::string strAreaInfo = "";
+            DBRes.GetField( "area_info",strAreaInfo, Error );
 
             int state  = 0;
             DBRes.GetField( "state",state, Error );
@@ -345,9 +324,6 @@ void card_list::load_his_card_postion_staff()
             double speed = 0;
             DBRes.GetField( "speed",speed, Error );
 
-            std::string enter_time  = "";
-            DBRes.GetField( "enter_time",enter_time, Error );
-
             std::string start_time  = "";
             DBRes.GetField( "start_time",start_time, Error );
 
@@ -364,44 +340,43 @@ void card_list::load_his_card_postion_staff()
             card_ptr->y = y;
             card_ptr->z = z;
 
-            auto area = area_list::instance()->get(area_id);
-            if(area == nullptr)
+            //解析area_info
+            const char * split = "|";
+            char *p = strtok(const_cast<char *>(strAreaInfo.c_str()), split);
+            while (p != NULL)
             {
-                log_error("area_list 找不到区域:区域id=%d", area_id);
-                continue;
+                int area_id = 0;
+                uint64_t enter_time = 0; 
+                sscanf(p, "%d,%lu", &area_id, &enter_time);
+                p = strtok(NULL, split);
+                if (area_id <= 0)
+                    continue;
+
+                auto area = area_list::instance()->get(area_id);
+                if(area == nullptr)
+                {
+                    log_error("area_list 找不到区域:区域id=%d", area_id);
+                    continue;
+                }
+                area->m_person_count++;
+                card_ptr->m_speed = speed;
+
+                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();
+
+                //要放到最后
+                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_enter(area_hover_ptr, temp_ptr);
             }
-            area->m_person_count++;
-
-            //point pt = *card_ptr;
-            //card_ptr->m_area_tool->init_area(area,pt,temp_ptr);
-//			m_area_hover = std::make_shared<area_hover>(area,pt,speed);
-
-			log_info("load_staff...%d,areaid:%d,mapid:%d",id,area->id(),area->mapid());
-
-            //int map_id  = 0;
-            //int state  = 0;
-            card_ptr->m_speed = speed;
-
-            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;
-            }
-
-            //area_hover_ptr->landmark_id = landmark_id;
-            //area_hover_ptr->landmark_dir = direction_mapper_id;
-            //area_hover_ptr->landmark_dis = landmark_dist;
-
-            card_ptr->m_time = tool_time::now_to_ms();
-
-            //要放到最后
-            auto e_t = tool_time::to_time_ex(enter_time);
-            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);
         }
     }
 }