Browse Source

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

lixioayao 6 years ago
parent
commit
37dd7ae747

+ 1 - 1
module_service/module_area.cpp

@@ -23,7 +23,7 @@ void module_area::on_enter(uint64_t card_id,std::shared_ptr<area_hover>&c,double
 
     std::lock_guard<std::mutex> lock(_mutex);
 
-    c->m_enter_time = std::chrono::system_clock::now();
+    //c->m_enter_time = std::chrono::system_clock::now();
 
     if(CT_PERSON == card_ptr->m_type)//统计人卡
     {

+ 78 - 78
module_service/module_area_over_speed.h

@@ -30,20 +30,20 @@ public:
 
     void on_enter(std::shared_ptr<card> card_ptr,std::shared_ptr<area_hover>&c,double speed)
     {
-        card_ptr->m_speed = speed;
-        c->m_vehicle_area_over_speed_count=0;
-        c->m_vehicle_area_normal_speed_count=0;
-        c->m_is_area_over_speed_vehicle=false;
-
-        auto area_ptr = c->m_area;
-        if(area_ptr->m_limit_speed > speed)//速度正常
-        {
-            c->m_vehicle_area_normal_speed_count++;
-        }
-        else//超速
-        {
-            c->m_vehicle_area_over_speed_count++;
-        }
+//        card_ptr->m_speed = speed;
+//        c->m_vehicle_area_over_speed_count=0;
+//        c->m_vehicle_area_normal_speed_count=0;
+//        c->m_is_area_over_speed_vehicle=false;
+
+//        auto area_ptr = c->m_area;
+//        if(area_ptr->m_limit_speed > speed)//速度正常
+//        {
+//            c->m_vehicle_area_normal_speed_count++;
+//        }
+//        else//超速
+//        {
+//            c->m_vehicle_area_over_speed_count++;
+//        }
     }
 
     void on_hover(std::shared_ptr<card> card_ptr,std::shared_ptr<area_hover>&c,double speed,
@@ -51,70 +51,70 @@ public:
     {
         card_ptr->m_speed = speed;
 
-        auto area_ptr = c->m_area;
-        if(area_ptr->m_limit_speed > speed)//速度正常
-        {
-            c->m_vehicle_area_normal_speed_count++;
-        }
-        else//超速
-        {
-            c->m_vehicle_area_over_speed_count++;
-        }
-
-        //确定超速
-        if(global_constant::AREA_SPEED_COUNT_LIMIT <= c->m_vehicle_area_over_speed_count)
-        {
-            c->m_vehicle_area_over_speed_count=global_constant::AREA_SPEED_COUNT_LIMIT;
-
-            auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_SPEED, ev_map);
-            if(ev_ptr)
-            {
-                ev_ptr->m_limit_value=area_ptr->m_limit_speed;
-                ev_ptr->m_cur_value=card_ptr->m_speed;
-            }
-            else//从没有告警状态转化为告警状态
-            {
-                c->m_is_area_over_speed_vehicle=true;
-                c->m_vehicle_area_normal_speed_count=0;
-
-                auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_AREA_OVER_SPEED);
-
-                tool_other::copy_event(card_ptr, ev_ptr);
-
-                ev_ptr->m_limit_value = area_ptr->m_limit_speed;
-                ev_ptr->m_cur_value = card_ptr->m_speed;
-
-                //保存到数据库
-                tool_db::save_event(ev_ptr);
-
-                tool_other::insert_event(ev_ptr, ev_map);
-            }
-        }
-
-        //确定速度正常
-        if(global_constant::AREA_SPEED_COUNT_LIMIT <= c->m_vehicle_area_normal_speed_count)
-        {
-            c->m_vehicle_area_normal_speed_count=global_constant::AREA_SPEED_COUNT_LIMIT;
-
-            if(c->m_is_area_over_speed_vehicle)
-            {
-                c->m_is_area_over_speed_vehicle = false;
-                c->m_vehicle_area_over_speed_count=0;
-
-                auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_SPEED, ev_map);
-                if(ev_ptr)
-                {
-                    ev_ptr->m_status = ES_END;
-
-                    ev_ptr->m_limit_value = area_ptr->m_limit_speed;
-                    ev_ptr->m_cur_value = speed;
-                    ev_ptr->m_cur_time = std::chrono::system_clock::now();
-
-                    //保存到数据库
-                    tool_db::save_event(ev_ptr);
-                }
-            }
-        }
+//        auto area_ptr = c->m_area;
+//        if(area_ptr->m_limit_speed > speed)//速度正常
+//        {
+//            c->m_vehicle_area_normal_speed_count++;
+//        }
+//        else//超速
+//        {
+//            c->m_vehicle_area_over_speed_count++;
+//        }
+
+//        //确定超速
+//        if(global_constant::AREA_SPEED_COUNT_LIMIT <= c->m_vehicle_area_over_speed_count)
+//        {
+//            c->m_vehicle_area_over_speed_count=global_constant::AREA_SPEED_COUNT_LIMIT;
+
+//            auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_SPEED, ev_map);
+//            if(ev_ptr)
+//            {
+//                ev_ptr->m_limit_value=area_ptr->m_limit_speed;
+//                ev_ptr->m_cur_value=card_ptr->m_speed;
+//            }
+//            else//从没有告警状态转化为告警状态
+//            {
+//                c->m_is_area_over_speed_vehicle=true;
+//                c->m_vehicle_area_normal_speed_count=0;
+
+//                auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_AREA_OVER_SPEED);
+
+//                tool_other::copy_event(card_ptr, ev_ptr);
+
+//                ev_ptr->m_limit_value = area_ptr->m_limit_speed;
+//                ev_ptr->m_cur_value = card_ptr->m_speed;
+
+//                //保存到数据库
+//                tool_db::save_event(ev_ptr);
+
+//                tool_other::insert_event(ev_ptr, ev_map);
+//            }
+//        }
+
+//        //确定速度正常
+//        if(global_constant::AREA_SPEED_COUNT_LIMIT <= c->m_vehicle_area_normal_speed_count)
+//        {
+//            c->m_vehicle_area_normal_speed_count=global_constant::AREA_SPEED_COUNT_LIMIT;
+
+//            if(c->m_is_area_over_speed_vehicle)
+//            {
+//                c->m_is_area_over_speed_vehicle = false;
+//                c->m_vehicle_area_over_speed_count=0;
+
+//                auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_SPEED, ev_map);
+//                if(ev_ptr)
+//                {
+//                    ev_ptr->m_status = ES_END;
+
+//                    ev_ptr->m_limit_value = area_ptr->m_limit_speed;
+//                    ev_ptr->m_cur_value = speed;
+//                    ev_ptr->m_cur_time = std::chrono::system_clock::now();
+
+//                    //保存到数据库
+//                    tool_db::save_event(ev_ptr);
+//                }
+//            }
+//        }
     }
 
     void on_leave(std::shared_ptr<card> card_ptr,std::shared_ptr<area_hover>&c,double speed)

+ 46 - 46
module_service/module_area_timeout.h

@@ -32,7 +32,7 @@ private:
 public:
     void on_enter(std::shared_ptr<card_location_base> card_ptr,std::shared_ptr<area_hover>&c,double speed)
     {
-        c->m_is_area_over_time_person=false;
+        //c->m_is_area_over_time_person=false;
     }
 
     void on_hover(std::shared_ptr<card_location_base> card_ptr,std::shared_ptr<area_hover>&c,double speed,
@@ -40,51 +40,51 @@ public:
     {
         auto area_ptr = c->m_area;
 
-        int seconds = tool_time::elapse_seconds(c->m_enter_time);
-
-        if(seconds > area_ptr->m_limit_time_second)//发生告警
-        {
-            auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON, ev_map);
-            if(ev_ptr)
-            {
-                ev_ptr->m_limit_value=area_ptr->m_limit_time_second;
-                ev_ptr->m_cur_value=seconds;
-            }
-            else//从没有告警状态转化为告警状态
-            {
-                c->m_is_area_over_time_person=true;//发生告警
-                auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON);
-
-                tool_other::copy_event(card_ptr, ev_ptr);
-
-                ev_ptr->m_limit_value = area_ptr->m_limit_time_second;
-                ev_ptr->m_cur_value = seconds;
-
-                //保存到数据库
-                tool_db::save_event(ev_ptr);
-
-                tool_other::insert_event(ev_ptr, ev_map);
-            }
-        }
-        else
-        {
-            if(c->m_is_area_over_time_person)
-            {
-                c->m_is_area_over_time_person = false;
-                auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON, ev_map);
-                if(ev_ptr)
-                {
-                    ev_ptr->m_status = ES_END;
-
-                    ev_ptr->m_limit_value = area_ptr->m_limit_time_second;
-                    ev_ptr->m_cur_value = seconds;
-                    ev_ptr->m_cur_time = std::chrono::system_clock::now();
-
-                    //保存到数据库
-                    tool_db::save_event(ev_ptr);
-                }
-            }
-        }
+        //int seconds = tool_time::elapse_seconds(c->m_enter_time);
+
+//        if(seconds > area_ptr->m_limit_time_second)//发生告警
+//        {
+//            auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON, ev_map);
+//            if(ev_ptr)
+//            {
+//                ev_ptr->m_limit_value=area_ptr->m_limit_time_second;
+//                ev_ptr->m_cur_value=seconds;
+//            }
+//            else//从没有告警状态转化为告警状态
+//            {
+//                c->m_is_area_over_time_person=true;//发生告警
+//                auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON);
+
+//                tool_other::copy_event(card_ptr, ev_ptr);
+
+//                ev_ptr->m_limit_value = area_ptr->m_limit_time_second;
+//                ev_ptr->m_cur_value = seconds;
+
+//                //保存到数据库
+//                tool_db::save_event(ev_ptr);
+
+//                tool_other::insert_event(ev_ptr, ev_map);
+//            }
+//        }
+//        else
+//        {
+//            if(c->m_is_area_over_time_person)
+//            {
+//                c->m_is_area_over_time_person = false;
+//                auto ev_ptr = tool_other::find_event(card_ptr->m_id, ET_CARD_AREA_OVER_TIME_PERSON, ev_map);
+//                if(ev_ptr)
+//                {
+//                    ev_ptr->m_status = ES_END;
+
+//                    ev_ptr->m_limit_value = area_ptr->m_limit_time_second;
+//                    ev_ptr->m_cur_value = seconds;
+//                    ev_ptr->m_cur_time = std::chrono::system_clock::now();
+
+//                    //保存到数据库
+//                    tool_db::save_event(ev_ptr);
+//                }
+//            }
+//        }
     }
 
     void on_leave(std::shared_ptr<card_location_base> card_ptr,std::shared_ptr<area_hover>&c,double speed)

+ 21 - 13
module_service/module_attendance_person.h

@@ -37,12 +37,13 @@ public:
      * @param card_id
      * @param enter_site
      */
-    void enter_site(uint64_t card_id,int enter_site)
+    void enter_site(uint64_t card_id,int enter_site,uint64_t type,
+                    const std::shared_ptr<area_hover> area_hover_ptr)
     {
-        auto card_ptr=card_list::instance()->get(card_id);
+        auto card_ptr=card_list::instance()->get(tool_other::to_uint64_cardid(type, card_id));
         if(!card_ptr)
         {
-            log_error("卡不存在card_id=%d", card_id);
+            log_error("卡不存在card_id=%ld, type=%ld", card_id, type);
             return;
         }
 
@@ -53,32 +54,38 @@ public:
             return;
         }
 
-        card_ptr->m_site_id = enter_site;
-
         // 从井下切换到井上为考勤结束
-        if(UP_SITE==site_ptr->m_up_down)
+        if(tool_other::is_up_site(site_ptr->m_reader_type_id))
         {
-            if(AS_ATTENDANCE == card_ptr->m_stat_attendance)
+            if(tool_other::is_attendance(card_ptr->m_stat_attendance))
             {
                 //考勤结束
                 card_ptr->m_stat_attendance=AS_NOT_ATTENDANCE;
 
                 //作为一条结束考勤记录保存到数据库
-                tool_db::save_attendance(card_ptr);
+                tool_db::save_attendance(card_ptr, area_hover_ptr);
+
+                log_debug("人卡考勤结束:site_id=%d,reader_type_id=%d,stat_attendance=%d",
+                          site_ptr->m_id,site_ptr->m_reader_type_id,card_ptr->m_stat_attendance);
             }
         }
 
         // 从井上切换到井下为考勤开始
-        if(DOWN_SITE==site_ptr->m_up_down)
+        if(!tool_other::is_up_site(site_ptr->m_reader_type_id))
         {
-            if(AS_ATTENDANCE != card_ptr->m_stat_attendance)
+            if(!tool_other::is_attendance(card_ptr->m_stat_attendance))
             {
                 //考勤开始
                 card_ptr->m_stat_attendance=AS_ATTENDANCE;
-                card_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+                //card_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+                std::time_t start= card_ptr->m_time/1000;
+                card_ptr->m_attendance_start_time=std::chrono::system_clock::from_time_t(start);
 
                 //作为一条开始考勤记录保存到数据库
-                tool_db::save_attendance(card_ptr);
+                tool_db::save_attendance(card_ptr, area_hover_ptr);
+
+                log_debug("人卡考勤开始:site_id=%d,reader_type_id=%d,stat_attendance=%d",
+                          site_ptr->m_id,site_ptr->m_reader_type_id,card_ptr->m_stat_attendance);
             }
         }
     }
@@ -88,7 +95,8 @@ public:
      * @param card_id
      * @param enter_site
      */
-    void leave_site(uint64_t card_id,int enter_site)
+    void leave_site(uint64_t card_id,int enter_site,uint64_t type,
+                    const std::shared_ptr<area_hover> area_hover_ptr)
     {
 
     }

+ 21 - 21
module_service/module_attendance_vehicle.h

@@ -31,35 +31,35 @@ private:
 public:
     void on_enter(std::shared_ptr<card_location_base> card_ptr,std::shared_ptr<area_hover>&c,double speed)
     {
-        card_ptr->m_attendance_start_time=std::chrono::system_clock::now();
+        //card_ptr->m_attendance_start_time=std::chrono::system_clock::now();
     }
 
     void on_hover(std::shared_ptr<card_location_base> card_ptr,std::shared_ptr<area_hover>&c,double speed,
                   event_map& ev_map)
     {
-        auto area_ptr = c->m_area;
+//        auto area_ptr = c->m_area;
 
-        //从考勤状态转换为结束考勤
-        if(AT_NOT_ATTENDANCE == area_ptr->m_area_type)
-        {
-            if(AS_ATTENDANCE == card_ptr->m_stat_attendance)
-            {
-                card_ptr->m_stat_attendance = AS_NOT_ATTENDANCE;
+//        //从考勤状态转换为结束考勤
+//        if(AT_NOT_ATTENDANCE == area_ptr->m_area_type)
+//        {
+//            if(AS_ATTENDANCE == card_ptr->m_stat_attendance)
+//            {
+//                card_ptr->m_stat_attendance = AS_NOT_ATTENDANCE;
 
-                //作为一条结束考勤记录保存到数据库
-                tool_db::save_attendance(card_ptr);
-            }
-        }
-        else //没在考勤状态转换为考勤状态
-        {
-            if(AS_ATTENDANCE != card_ptr->m_stat_attendance)
-            {
-                card_ptr->m_stat_attendance = AS_ATTENDANCE;
+//                //作为一条结束考勤记录保存到数据库
+//                tool_db::save_attendance(card_ptr);
+//            }
+//        }
+//        else //没在考勤状态转换为考勤状态
+//        {
+//            if(AS_ATTENDANCE != card_ptr->m_stat_attendance)
+//            {
+//                card_ptr->m_stat_attendance = AS_ATTENDANCE;
 
-                //作为一条考勤记录保存到数据库
-                tool_db::save_attendance(card_ptr);
-            }
-        }
+//                //作为一条考勤记录保存到数据库
+//                tool_db::save_attendance(card_ptr);
+//            }
+//        }
     }
 
 

+ 2 - 2
module_service/module_call.cpp

@@ -464,7 +464,7 @@ void module_call::get_user_all_call_cards(call_user_ptr& user_ptr,
             call_card_ptr card_ptr(new call_card());
             copy(user_ptr, card_ptr);
             card_ptr->cardid = g_it->second->m_id;
-            card_ptr->stationid=g_it->second->m_site_id;
+            //card_ptr->stationid=g_it->second->m_site_id;
 
             card_ptr->call_state=status;
 
@@ -490,7 +490,7 @@ void module_call::get_user_all_call_cards(call_user_ptr& user_ptr,
         }
 
         //更新卡的分站id
-        iter_card->second->stationid = g_card->second->m_site_id;
+        //iter_card->second->stationid = g_card->second->m_site_id;
 
         uint32_t seconds = tool_time::elapse_seconds(iter_card->second->call_time);
         if(seconds > iter_card->second->call_time_out*60)//呼叫超时

+ 32 - 32
module_service/module_call_help.h

@@ -34,25 +34,25 @@ public:
      */
     void rev_help(std::shared_ptr<card> card_ptr)
     {
-        if(ES_START != card_ptr->m_stat_call_help)
-        {
-            card_ptr->m_stat_call_help = ES_START;
-            //保存到数据库
-            auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_HELP);
+//        if(ES_START != card_ptr->m_stat_call_help)
+//        {
+//            card_ptr->m_stat_call_help = ES_START;
+//            //保存到数据库
+//            auto ev_ptr = tool_other::create_event(OT_CARD, card_ptr->m_id, ET_CARD_HELP);
 
-            tool_other::copy_event(card_ptr, ev_ptr);
+//            tool_other::copy_event(card_ptr, ev_ptr);
 
-//            ev_ptr->status = ES_START;
-//            ev_ptr->cur_time = std::chrono::system_clock::now();
+////            ev_ptr->status = ES_START;
+////            ev_ptr->cur_time = std::chrono::system_clock::now();
 
-            //保存到数据库
-            tool_db::save_event(ev_ptr);
-            //转发给web
-            swsClientMgr.send(JSON_CMD_VALUE_PUSH, tool_json::ev_to_json(ev_ptr));
+//            //保存到数据库
+//            tool_db::save_event(ev_ptr);
+//            //转发给web
+//            swsClientMgr.send(JSON_CMD_VALUE_PUSH, tool_json::ev_to_json(ev_ptr));
 
-            std::lock_guard<std::mutex> lock(_mutex);
-            tool_other::insert_event(ev_ptr, _map);
-        }
+//            std::lock_guard<std::mutex> lock(_mutex);
+//            tool_other::insert_event(ev_ptr, _map);
+//        }
     }
 
     /**
@@ -61,27 +61,27 @@ public:
      */
     void accept_deal_help(std::map<std::string, sio::message::ptr> data_map)
     {
-        uint32_t cardid = data_map[JSON_KEY_ID]->get_int();
-        //uint64_t ev_id = data_map[JSON_KEY_EVENT_EVENT_ID]->get_int();
+//        uint32_t cardid = data_map[JSON_KEY_ID]->get_int();
+//        //uint64_t ev_id = data_map[JSON_KEY_EVENT_EVENT_ID]->get_int();
 
-        auto card_ptr = card_list::instance()->get(tool_other::to_uint64_cardid(CT_PERSON, cardid));
-        if(card_ptr)
-        {
-            card_ptr->m_stat_call_help = ES_DEAL_HELP;
-
-            std::lock_guard<std::mutex> lock(_mutex);
-            auto ev_ptr = tool_other::find_event(cardid, ET_CARD_HELP, _map);
-            if(ev_ptr)
-            {
-                ev_ptr->m_status = ES_DEAL_HELP;
-                tool_db::save_event(ev_ptr);
-            }
-        }
-//        else
+//        auto card_ptr = card_list::instance()->get(tool_other::to_uint64_cardid(CT_PERSON, cardid));
+//        if(card_ptr)
 //        {
+//            card_ptr->m_stat_call_help = ES_DEAL_HELP;
+
 //            std::lock_guard<std::mutex> lock(_mutex);
-//            _map.erase(ev_id);
+//            auto ev_ptr = tool_other::find_event(cardid, ET_CARD_HELP, _map);
+//            if(ev_ptr)
+//            {
+//                ev_ptr->m_status = ES_DEAL_HELP;
+//                tool_db::save_event(ev_ptr);
+//            }
 //        }
+////        else
+////        {
+////            std::lock_guard<std::mutex> lock(_mutex);
+////            _map.erase(ev_id);
+////        }
     }
 
     /**

+ 64 - 30
module_service/module_const.h

@@ -292,9 +292,29 @@ class tool_other
 {
 public:
 
-    static uint64_t to_uint64_cardid(uint32_t type, uint32_t id)
+    static bool is_person(int32_t type)
     {
-        return (static_cast<uint64_t>(type)<<32)|id; ////// (类型<<32)|卡号
+        return CT_PERSON == type;
+    }
+
+    static bool is_vehicle(int32_t type)
+    {
+        return CT_VEHICLE == type;
+    }
+
+    static bool is_up_site(int32_t reader_type_id)
+    {
+        return READER_TYPE_ID_UP == reader_type_id;
+    }
+
+    static bool is_attendance(int32_t stat_attendance)
+    {
+        return AS_ATTENDANCE == stat_attendance;
+    }
+
+    static uint64_t to_uint64_cardid(uint64_t type, uint64_t id)
+    {
+        return (type<<32)|id; ////// (类型<<32)|卡号
     }
 
     static uint64_t to_event_list_id(int obj_id, EVENT_TYPE ev_type)
@@ -325,14 +345,14 @@ public:
         ev_ptr->x = card_ptr->x;
         ev_ptr->y = card_ptr->y;
 
-        if(nullptr!=card_ptr->m_area_hover)
-        {
-           ev_ptr->m_area_id =  card_ptr->m_area_hover->m_area->id();
-        }
+//        if(nullptr!=card_ptr->m_area_hover)
+//        {
+//           ev_ptr->m_area_id =  card_ptr->m_area_hover->m_area->id();
+//        }
 
-        ev_ptr->m_landmarkid = card_ptr->m_landmarkid;
-        ev_ptr->m_landmarkdist = card_ptr->m_landmarkdist;
-        ev_ptr->m_landmarkdirect = card_ptr->m_landmarkdirect;
+//        ev_ptr->m_landmarkid = card_ptr->m_landmarkid;
+//        ev_ptr->m_landmarkdist = card_ptr->m_landmarkdist;
+//        ev_ptr->m_landmarkdirect = card_ptr->m_landmarkdirect;
     }
 
     static event_ptr find_event(int obj_id, EVENT_TYPE ev_type, const event_map& ev_map)
@@ -384,45 +404,59 @@ public:
         PushAsync(sql);
     }
 
-    static void save_attendance(const std::shared_ptr<card_location_base> card_ptr)
+    static void save_attendance(const std::shared_ptr<card_location_base> card_ptr,
+                                const std::shared_ptr<area_hover> area_hover_ptr)
     {
         char sql[LENGTH_SQL] = {0};
 
         std::string call("add_att_staff");
-        if(CT_VEHICLE==card_ptr->m_type)//车卡
+        if(tool_other::is_vehicle(card_ptr->m_type))//车卡
         {
             call="add_att_vehicle";
         }
 
-        auto tt = card_ptr->m_attendance_start_time;
-        if(AS_ATTENDANCE != card_ptr->m_stat_attendance)//考勤结束时间
+        auto start = card_ptr->m_attendance_start_time;
+        auto end = card_ptr->m_attendance_start_time;
+        if(!tool_other::is_attendance(card_ptr->m_stat_attendance))//考勤结束时间
         {
-            tt = std::chrono::system_clock::now();
+            std::time_t end_t= card_ptr->m_time/1000;
+            end = std::chrono::system_clock::from_time_t(end_t);
         }
 
-        std::string _time = tool_time::to_str(tt);
+        std::string start_str = tool_time::to_str(start);
+        std::string end_str = tool_time::to_str(end);
+
+        int landmarkid = 0;
+        int landmarkdirect=0;
+        double landmarkdist=0;
+        if(area_hover_ptr)
+        {
+            landmarkid = area_hover_ptr->landmark_id;
+            landmarkdirect = area_hover_ptr->landmark_dir;
+            landmarkdist = area_hover_ptr->landmark_dis;
+        }
 
-        sprintf(sql, "CALL %s(%ld, %d, '%s', '%s', %d, %d, %.3f);", call.c_str(),
-                card_ptr->m_id, card_ptr->m_type, _time.c_str(), _time.c_str(),
-                card_ptr->m_landmarkid, card_ptr->m_landmarkdirect, card_ptr->m_landmarkdist);
+        sprintf(sql, "CALL %s(%d, %d, '%s', '%s', %d, %d, %.3f);", call.c_str(),
+                card_ptr->m_id, card_ptr->m_type, start_str.c_str(), end_str.c_str(),
+                landmarkid, landmarkdirect, landmarkdist);
 
         PushAsync(sql);
     }
 
     static void save_his_raw_data(const std::shared_ptr<card> card_ptr)
     {
-        char sql[LENGTH_SQL] = {0};
-        std::string _time = tool_time::to_str(card_ptr->m_deal_time);
-
-        sprintf(sql,
-                "INSERT IGNORE INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
-                fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
-                VALUES(%d, %d, %d, %d, %d, %ld, %4.f, %d, %d, %d, '%s', '%s');",
-                card_ptr->m_id, card_ptr->m_site_id, card_ptr->m_antenna_id,
-                card_ptr->m_reader_tickcount, card_ptr->m_time_stamp,
-                card_ptr->m_flying_time, card_ptr->m_distance, card_ptr->m_ranging_type, card_ptr->m_power_state,
-                card_ptr->m_accelerate_state,
-                card_ptr->m_str_his_time.c_str(), card_ptr->m_str_rec_time.c_str());
+//        char sql[LENGTH_SQL] = {0};
+//        std::string _time = tool_time::to_str(card_ptr->m_deal_time);
+
+//        sprintf(sql,
+//                "INSERT IGNORE INTO his_raw_data(card_id, reader_id, antenna_id, reader_stamp, card_stamp, \
+//                fly_time, distance, ranging_type, power_state, accelerate, his_time, rec_time ) \
+//                VALUES(%d, %d, %d, %d, %d, %ld, %4.f, %d, %d, %d, '%s', '%s');",
+//                card_ptr->m_id, card_ptr->m_site_id, card_ptr->m_antenna_id,
+//                card_ptr->m_reader_tickcount, card_ptr->m_time_stamp,
+//                card_ptr->m_flying_time, card_ptr->m_distance, card_ptr->m_ranging_type, card_ptr->m_power_state,
+//                card_ptr->m_accelerate_state,
+//                card_ptr->m_str_his_time.c_str(), card_ptr->m_str_rec_time.c_str());
     }