Quellcode durchsuchen

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

chensongchao vor 6 Jahren
Ursprung
Commit
4eb60a4fad

+ 14 - 2
area.cpp

@@ -114,6 +114,18 @@ void area::on_enter(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)
+{
+    log_info("on_load_his..%d  areaId:%d",c->m_id,m_id);
+    //a->m_last_time=tool_time::now_to_ms();
+    a->m_last_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_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c)
 {
 	log_info("on_leave..%d  areaId:%d",c->m_id,m_id);
@@ -516,7 +528,7 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
     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)
+        if ((*itvec)->id() >= 0)
         {
             char tmpArea[128] = {0};
             snprintf(tmpArea, 128, "%d,%lu|", (*itvec)->id(), (*itvec)->m_enter_time);
@@ -524,7 +536,7 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
         }
     }
     char sql[1024] = {0};
-    snprintf(sql, 1024, "call card_location(%lu, %d, %lf, %lf, %lf,d '%s');",
+    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());
     db_tool::PushAsync(sql);
 }

+ 3 - 1
area.h

@@ -29,7 +29,9 @@ struct area
     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);
+    virtual	void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
+
+    virtual	void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
 
     virtual bool in_area(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>&c, const point & p,int &);
     int id()const

+ 14 - 34
card.cpp

@@ -162,8 +162,7 @@ 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.area_info, l.state, \
-            case when l.cur_time >= date_sub(now(), interval 2 minute) then l.speed else 0 end as speed, \
-            att.start_time, att.end_time\
+            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;";
@@ -179,12 +178,14 @@ void card_list::load_his_card_postion_vehicle()
 
         while ( DBRes.GetNextRecod(Error) )
         {
-            long long int card_id  = 0;
+             std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            auto temp_ptr = card_list::instance()->get(card_id);
+            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())
             {
-                log_error("全局卡列表中找不到卡,卡id=%lu", card_id);
+                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
                 continue;
             }
 
@@ -214,15 +215,6 @@ void card_list::load_his_card_postion_vehicle()
             std::string end_time  = "";
             DBRes.GetField( "end_time",end_time, Error );
 
-            int landmark_id  = 0;
-            DBRes.GetField( "landmark_id",landmark_id, Error );
-
-            int direction_mapper_id  = 0;
-            DBRes.GetField( "direction_mapper_id",direction_mapper_id, Error );
-
-            double landmark_dist = 0;
-            DBRes.GetField( "landmark_dist",landmark_dist, Error );
-
             card_ptr->x = x;
             card_ptr->y = y;
             card_ptr->z = z;
@@ -236,7 +228,7 @@ void card_list::load_his_card_postion_vehicle()
                 uint64_t enter_time = 0; 
                 sscanf(p, "%d,%lu", &area_id, &enter_time);
                 p = strtok(NULL, split);
-                if (area_id <= 0)
+                if (area_id < 0)
                     continue;
 
                 auto area = area_list::instance()->get(area_id);
@@ -245,8 +237,6 @@ void card_list::load_his_card_postion_vehicle()
                     log_error("load_vehicle...area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-                area->m_vehicle_count++;
-                card_ptr->m_speed = speed;
 
                 if(end_time.empty())
                 {
@@ -271,8 +261,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, \
-            case when l.cur_time >= date_sub(now(), interval 2 minute) then l.speed else 0 end as speed, \
-            att.start_time, att.end_time\
+            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;";
@@ -295,12 +284,14 @@ void card_list::load_his_card_postion_staff()
                 continue;
             }
 
-            long long int card_id  = 0;
+            std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            auto temp_ptr = card_list::instance()->get(card_id);
+            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())
             {
-                log_error("全局卡列表中找不到卡,卡id=%lu", card_id);
+                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
                 continue;
             }
 
@@ -327,15 +318,6 @@ void card_list::load_his_card_postion_staff()
             std::string start_time  = "";
             DBRes.GetField( "start_time",start_time, Error );
 
-            int landmark_id  = 0;
-            DBRes.GetField( "landmark_id",landmark_id, Error );
-
-            int direction_mapper_id  = 0;
-            DBRes.GetField( "direction_mapper_id",direction_mapper_id, Error );
-
-            double landmark_dist = 0;
-            DBRes.GetField( "landmark_dist",landmark_dist, Error );
-
             card_ptr->x = x;
             card_ptr->y = y;
             card_ptr->z = z;
@@ -349,7 +331,7 @@ void card_list::load_his_card_postion_staff()
                 uint64_t enter_time = 0; 
                 sscanf(p, "%d,%lu", &area_id, &enter_time);
                 p = strtok(NULL, split);
-                if (area_id <= 0)
+                if (area_id < 0)
                     continue;
 
                 auto area = area_list::instance()->get(area_id);
@@ -358,8 +340,6 @@ void card_list::load_his_card_postion_staff()
                     log_error("area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-                area->m_person_count++;
-                card_ptr->m_speed = speed;
 
                 if(end_time.empty())
                 {

+ 8 - 1
module_service/area_business_car_attendance.cpp

@@ -24,6 +24,11 @@ area_business_car_attendance::area_business_car_attendance()
 {
 }
 
+void area_business_car_attendance::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+
+}
 
 //记录进入时间等信息,结束考勤,根据离开的时间和距离,判断是否记录一条新的考勤记录
 void area_business_car_attendance::on_enter(const std::shared_ptr<area_hover>&area_hover_ptr,
@@ -79,7 +84,9 @@ void area_business_car_attendance::on_leave(const std::shared_ptr<area_hover>&ar
     {
         //考勤开始
         mine_tool_ptr->m_is_attendance = true;
-        mine_tool_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+        //mine_tool_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+        mine_tool_ptr->m_attendance_start_time=
+                std::chrono::system_clock::time_point(std::chrono::milliseconds(area_hover_ptr->m_last_time));
 
         //作为一条开始考勤记录保存到数据库
         db_tool::save_attendance(card_ptr, area_hover_ptr);

+ 3 - 0
module_service/area_business_car_attendance.h

@@ -15,6 +15,9 @@ public:
     {
         return 6;
     }
+
+    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);

+ 6 - 0
module_service/area_business_card_enter_or_leave.cpp

@@ -7,6 +7,12 @@
 #include"log.h"
 
 
+void area_business_card_enter_or_leave::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+
+}
+
 //进入区域则入库操作
 void area_business_card_enter_or_leave::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_card_enter_or_leave.h

@@ -10,6 +10,8 @@ struct area_business_card_enter_or_leave:area_business
 		return 9;
 	}
 
+    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);

+ 6 - 0
module_service/area_business_forbid.cpp

@@ -18,6 +18,12 @@ area_business_forbid::area_business_forbid()
 {
 }
 
+void area_business_forbid::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+
+}
+
 //记录进入时间等信息,生成告警
 void area_business_forbid::on_enter(const std::shared_ptr<area_hover>&a,
                                     const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)

+ 2 - 0
module_service/area_business_forbid.h

@@ -12,6 +12,8 @@ public:
     {
         return 7;
     }
+    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);

+ 6 - 0
module_service/area_business_geofault.cpp

@@ -31,6 +31,12 @@ struct geofault_data:business_data
 std::unordered_map<int, std::vector<point>> area_business_geofault::_area_geofault_map;
 int area_business_geofault::_geofault_count_limit;
 
+void area_business_geofault::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+    on_enter(area_hover_ptr, card_ptr, ptr);
+}
+
 void area_business_geofault::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)
 {

+ 2 - 0
module_service/area_business_geofault.h

@@ -26,6 +26,8 @@ public:
         return 11;
     }
 
+    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);
     void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);

+ 6 - 0
module_service/area_business_motionless_persion.cpp

@@ -37,6 +37,12 @@ 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_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+    on_enter(area_hover_ptr, card_ptr, ptr);
+}
+
 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)
 {

+ 2 - 0
module_service/area_business_motionless_persion.h

@@ -47,6 +47,8 @@ public:
     }
     static void init(config_file& config);
 
+    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);
     void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);

+ 8 - 1
module_service/area_business_person_attendance.cpp

@@ -29,6 +29,11 @@ area_business_person_attendance::area_business_person_attendance()
 {
 }
 
+void area_business_person_attendance::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+
+}
 
 //记录进入时间等信息,结束考勤,根据离开的时间和距离,判断是否记录一条新的考勤记录
 void area_business_person_attendance::on_enter(const std::shared_ptr<area_hover>&area_hover_ptr,
@@ -44,7 +49,9 @@ void area_business_person_attendance::on_enter(const std::shared_ptr<area_hover>
     {
         //考勤开始
         mine_tool_ptr->m_is_attendance=true;
-        mine_tool_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+        //mine_tool_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+        mine_tool_ptr->m_attendance_start_time=
+                std::chrono::system_clock::time_point(std::chrono::milliseconds(area_hover_ptr->m_enter_time));
 
         //作为一条开始考勤记录保存到数据库
         db_tool::save_attendance(card_ptr, area_hover_ptr);

+ 2 - 0
module_service/area_business_person_attendance.h

@@ -16,6 +16,8 @@ struct area_business_person_attendance:area_business
         return 5;
     }
 
+    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);
 

+ 6 - 0
module_service/area_business_speed_checker.cpp

@@ -29,6 +29,12 @@ area_business_speed_checker::area_business_speed_checker()
 {
 }
 
+void area_business_speed_checker::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+    on_enter(area_hover_ptr, card_ptr, ptr);
+}
+
 void area_business_speed_checker::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)
 {

+ 2 - 0
module_service/area_business_speed_checker.h

@@ -14,6 +14,8 @@ public:
         return 4;
     }
 
+    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);
     void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);

+ 8 - 2
module_service/area_business_work_rate.cpp

@@ -18,6 +18,12 @@ struct work_rate_data:business_data
     }
 };
 
+void area_business_work_rate::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
+                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
+{
+
+}
+
 void area_business_work_rate::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)
 {
@@ -35,7 +41,7 @@ void area_business_work_rate::on_enter(const std::shared_ptr<area_hover>&area_ho
     auto area = std::make_shared<area_data>();
     area->area_id = area_hover_ptr->id();
     area->is_work_area = area_hover_ptr->m_area->m_is_work_area;
-    area->enter_time = tool_time::now_to_seconds();
+    area->enter_time = area_hover_ptr->m_enter_time/1000;
 
     three_rates::get_instance()->enter_area(card, area);
 }
@@ -63,7 +69,7 @@ void area_business_work_rate::on_leave(const std::shared_ptr<area_hover>&area_ho
     auto area = std::make_shared<area_data>();
     area->area_id = area_hover_ptr->id();
     area->is_work_area = area_hover_ptr->m_area->m_is_work_area;
-    area->leave_time = tool_time::now_to_seconds();
+    area->leave_time = area_hover_ptr->m_last_time/1000;
 
     three_rates::get_instance()->leave_area(card, area);
 }

+ 2 - 0
module_service/area_business_work_rate.h

@@ -14,6 +14,8 @@ public:
         return 12;
     }
 
+    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);
     void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);