#ifndef MODULE_ATTENDANCE_VEHICLE_H #define MODULE_ATTENDANCE_VEHICLE_H /** *@brief 车辆考勤模块 *车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤 *@author 戴月腾 *@date 2018-08-07 */ #include<unordered_map> #include "module_singleton_base.h" #include "card.h" #include"area.h" /** * @brief 车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤, 单例 */ class module_attendance_vehicle:public singleton_base<module_attendance_vehicle> { private: friend class singleton_base<module_attendance_vehicle>; module_attendance_vehicle() { } public: void on_enter(std::shared_ptr<card_location_base> card_ptr, int index); void on_hover(std::shared_ptr<card_location_base> card_ptr, int index); void on_leave(std::shared_ptr<card_location_base> card_ptr, int index); void on_enter(std::shared_ptr<card_location_base> card_ptr, std::shared_ptr<area_hover>&c); void init_attendance_area_from_db(); ///area_ptr==nullptr 表示接收到 web的删除卡命令 static void save_attendance(std::shared_ptr<card_location_base>& card_ptr, std::shared_ptr<area> area_ptr); private: bool is_not_attendance_area(int area_id, int vehicle_type_id) { return m_map.end() != m_map.find(to_list_id(area_id, vehicle_type_id)); } uint64_t to_list_id(int area_id, int vehicle_type_id) { return (static_cast<uint64_t>(area_id)<<32) | static_cast<uint64_t>(vehicle_type_id); } ///area_id<<32| vehicle_type_id; att_rule_id std::unordered_map<uint64_t, int> m_map; }; #endif // MODULE_ATTENDANCE_VEHICLE_H