1
0

area_business.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include <assert.h>
  2. #include "log.h"
  3. #include "area_business.h"
  4. #include "area_business_car_attendance.h"
  5. #include "area_business_card_enter_or_leave.h"
  6. #include "area_business_count_checker.h"
  7. #include "area_business_forbid.h"
  8. #include "area_business_person_dwell_checker.h"
  9. #include "area_business_person_attendance.h"
  10. #include "area_business_post_area.h"
  11. #include "area_business_speed_checker.h"
  12. #include "area_business_motionless_persion.h"
  13. #include "area_business_geofault.h"
  14. #include "area_business_work_rate.h"
  15. struct area_business_factory
  16. {
  17. void regist(int type,area_business* ab)
  18. {
  19. type-=1;
  20. ab->m_business_type=type;
  21. if(type>=(int)m_check_list.size())
  22. {
  23. m_check_list.resize(type+1);
  24. }
  25. assert(!m_check_list[type]);
  26. m_check_list[type].reset(ab);
  27. }
  28. std::vector<area_business*> get_check_list(int business_type,int area_id)
  29. {
  30. std::vector<area_business*> check_list;
  31. for(int i=0;i<32;i++)
  32. {
  33. if(business_type==0)
  34. break;
  35. if((business_type&1)==0)
  36. {
  37. business_type >>= 1;
  38. continue;
  39. }
  40. business_type >>= 1;
  41. if(!m_check_list[i])
  42. {
  43. log_error("区域业务项目不存在:%d,area_id=%d",i,area_id);
  44. continue;
  45. }
  46. check_list.push_back(m_check_list[i].get());
  47. }
  48. return std::move(check_list);
  49. }
  50. static area_business_factory& instance()
  51. {
  52. static area_business_factory _instance;
  53. return _instance;
  54. }
  55. private:
  56. std::vector<std::unique_ptr<area_business>> m_check_list;
  57. area_business_factory()
  58. {
  59. regist(1,new area_business_post_area);
  60. regist(2,new area_business_person_dwell_checker);
  61. regist(3,new area_business_count_checker);
  62. regist(4,new area_business_speed_checker);
  63. regist(5,new area_business_person_attendance);
  64. regist(6,new area_business_car_attendance);
  65. regist(7,new area_business_forbid);
  66. //regist(8,new area_business_monkey_area);
  67. regist(8,new area_business_card_enter_or_leave);
  68. regist(9, new area_business_motionless_persion);
  69. regist(10, new area_business_geofault);
  70. regist(11, new area_business_work_rate);
  71. }
  72. };
  73. std::vector<area_business*> area_business::get_instance_list(int business_type,int area_id)
  74. {
  75. return area_business_factory::instance().get_check_list(business_type,area_id);
  76. }