module_attendance_vehicle.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef MODULE_ATTENDANCE_VEHICLE_H
  2. #define MODULE_ATTENDANCE_VEHICLE_H
  3. /**
  4. *@brief 车辆考勤模块
  5. *车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤
  6. *@author 戴月腾
  7. *@date 2018-08-07
  8. */
  9. #include<unordered_map>
  10. #include "module_singleton_base.h"
  11. #include "card.h"
  12. #include"area.h"
  13. /**
  14. * @brief 车辆进入某些特定区域,结束考勤;从特定区域进入其他区域,开始考勤, 单例
  15. */
  16. class module_attendance_vehicle:public singleton_base<module_attendance_vehicle>
  17. {
  18. private:
  19. friend class singleton_base<module_attendance_vehicle>;
  20. module_attendance_vehicle()
  21. {
  22. }
  23. public:
  24. void on_enter(std::shared_ptr<card_location_base> card_ptr, int index);
  25. void on_hover(std::shared_ptr<card_location_base> card_ptr, int index);
  26. void on_leave(std::shared_ptr<card_location_base> card_ptr, int index);
  27. void on_enter(std::shared_ptr<card_location_base> card_ptr, std::shared_ptr<area_hover>&c);
  28. void init_attendance_area_from_db();
  29. ///area_ptr==nullptr 表示接收到 web的删除卡命令
  30. static void save_attendance(std::shared_ptr<card_location_base>& card_ptr, std::shared_ptr<area> area_ptr);
  31. private:
  32. bool is_not_attendance_area(int area_id, int vehicle_type_id)
  33. {
  34. return m_map.end() != m_map.find(to_list_id(area_id, vehicle_type_id));
  35. }
  36. uint64_t to_list_id(int area_id, int vehicle_type_id)
  37. {
  38. return (static_cast<uint64_t>(area_id)<<32) | static_cast<uint64_t>(vehicle_type_id);
  39. }
  40. ///area_id<<32| vehicle_type_id; att_rule_id
  41. std::unordered_map<uint64_t, int> m_map;
  42. };
  43. #endif // MODULE_ATTENDANCE_VEHICLE_H