#ifndef MODULE_ATTENDANCE_VEHICLE_H #define MODULE_ATTENDANCE_VEHICLE_H /** *@brief 车辆考勤模块 *车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤 *@author 戴月腾 *@date 2018-08-07 */ #include #include #include #include #include #include #include #include "module_const.h" /** * @brief 车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤, 单例 */ class module_attendance_vehicle:public singleton_base { private: friend class singleton_base; module_attendance_vehicle() { } public: void on_enter(std::shared_ptr card_ptr,std::shared_ptr&c,double speed) { auto area_ptr = c->m_area; //从考勤状态转换为结束考勤 if(!tool_other::is_attendance_area(area_ptr->m_id, card_ptr->m_id)) { if(tool_other::is_attendance(card_ptr->m_stat_attendance)) { //考勤结束 card_ptr->m_stat_attendance=AS_NOT_ATTENDANCE; //作为一条结束考勤记录保存到数据库 tool_db::save_attendance(card_ptr); log_debug("车卡考勤结束:area_id=%d,card_id=%d,stat_attendance=%d", area_ptr->m_id,card_ptr->m_id,card_ptr->m_stat_attendance); } } if(tool_other::is_attendance_area(area_ptr->m_id, card_ptr->m_id))//没在考勤状态转换为考勤状态 { 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(); 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); log_debug("车卡考勤开始:area_id=%d,card_id=%d,stat_attendance=%d", area_ptr->m_id,card_ptr->m_id,card_ptr->m_stat_attendance); } } } void on_hover(std::shared_ptr card_ptr,std::shared_ptr&c,double speed) { } void on_leave(std::shared_ptr card_ptr,std::shared_ptr&c,double speed) { } }; typedef std::shared_ptr module_attendance_vehicle_ptr; #endif // MODULE_ATTENDANCE_VEHICLE_H