module_area_over_speed.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include"module_area_over_speed.h"
  2. #include<memory>
  3. #include<string>
  4. #include"area_business.h"
  5. #include"event.h"
  6. #include"log.h"
  7. #include"common_tool.h"
  8. #include"area.h"
  9. struct over_speed_data:business_data
  10. {
  11. over_speed_data()
  12. {
  13. m_over_speed_count=0;
  14. m_normal_speed_count=0;
  15. }
  16. int m_over_speed_count;
  17. int m_normal_speed_count;
  18. };
  19. void module_area_over_speed::on_enter(std::shared_ptr<card_location_base> card_ptr, int index)
  20. {
  21. auto area_hover_ptr = card_ptr->get_area_hover();
  22. if(!area_hover_ptr)
  23. {
  24. log_error("if(!area_hover_ptr)==true");
  25. return;
  26. }
  27. area_hover_ptr->m_data[index] = std::make_shared<over_speed_data>();
  28. double limit = area_hover_ptr->m_area->m_over_speed_vehicle;
  29. if(limit < card_ptr->m_speed)
  30. {
  31. auto ptr = static_cast<over_speed_data*>(area_hover_ptr->m_data[index].get());
  32. ptr->m_over_speed_count++;
  33. }
  34. }
  35. void module_area_over_speed::on_hover(std::shared_ptr<card_location_base> card_ptr, int index)
  36. {
  37. auto area_hover_ptr = card_ptr->get_area_hover();
  38. if(!area_hover_ptr)
  39. {
  40. log_error("if(!area_hover_ptr)==true");
  41. return;
  42. }
  43. auto ptr = static_cast<over_speed_data*>(area_hover_ptr->m_data[index].get());
  44. double limit = area_hover_ptr->m_area->m_over_speed_vehicle;
  45. if(limit < card_ptr->m_speed)//超速
  46. {
  47. ptr->m_over_speed_count++;
  48. }
  49. else//速度正常
  50. {
  51. ptr->m_normal_speed_count++;
  52. }
  53. //确定告警
  54. if(SPEED_COUNT_LIMIT <= ptr->m_over_speed_count)
  55. {
  56. ptr->m_over_speed_count=SPEED_COUNT_LIMIT;
  57. auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_AREA_OVER_SPEED);
  58. if(!ev_ptr)//从没有告警状态转化为告警状态
  59. {
  60. ptr->m_normal_speed_count=0;
  61. }
  62. uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
  63. event_tool::instance()->handle_event(OT_CARD, ET_CARD_AREA_OVER_SPEED, id, limit, card_ptr->m_speed, true);
  64. }
  65. //确定正常
  66. if(SPEED_COUNT_LIMIT <= ptr->m_normal_speed_count)
  67. {
  68. ptr->m_normal_speed_count=SPEED_COUNT_LIMIT;
  69. auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_AREA_OVER_SPEED);
  70. if(ev_ptr && !ev_ptr->is_end())
  71. {
  72. ptr->m_over_speed_count=0;
  73. uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
  74. event_tool::instance()->handle_event(OT_CARD, ET_CARD_AREA_OVER_SPEED, id, limit, card_ptr->m_speed, false);
  75. }
  76. }
  77. }
  78. void module_area_over_speed::on_leave(std::shared_ptr<card_location_base> card_ptr, int index)
  79. {
  80. auto area_hover_ptr = card_ptr->get_area_hover();
  81. if(!area_hover_ptr)
  82. {
  83. log_error("if(!area_hover_ptr)==true");
  84. return;
  85. }
  86. double limit = area_hover_ptr->m_area->m_over_speed_vehicle;
  87. uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
  88. event_tool::instance()->handle_event(OT_CARD, ET_CARD_AREA_OVER_SPEED, id, limit, card_ptr->m_speed, false);
  89. area_hover_ptr->m_data[index] = std::make_shared<over_speed_data>();
  90. }