1
0

event.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #ifndef __EVENT_HPP__
  2. #define __EVENT_HPP__
  3. #include <memory>
  4. enum EVENT_STATUS
  5. {
  6. ///事件开始
  7. ES_START = 0,
  8. ///呼救已处理状态
  9. ES_DEAL_HELP = 1,
  10. ///事件结束
  11. ES_END = 100
  12. };
  13. enum OBJECT_TYPE
  14. {
  15. ///矿井
  16. OT_MINE = 1,
  17. ///区域
  18. OT_AREA = 2,
  19. ///分站
  20. OT_DEVICE_READER = 4,
  21. ///标识卡,包括人员、车辆、自组网等
  22. OT_CARD = 9,
  23. };
  24. enum EVENT_TYPE{ // 事件类型
  25. ET_AREA_OVER_COUNT_PERSON = 3, // 区域人员超员
  26. ET_AREA_OVER_COUNT_VEHICLE = 4, // 区域车辆超员
  27. ET_READER_ERROR = 6,
  28. ET_CARD_LOW_POWER_SERIOUS = 12, // 电量极低
  29. ET_CARD_AREA_OVER_TIME_PERSON = 15, // 人员区域超时
  30. ET_CARD_AREA_OVER_TIME_VEHICLE = 16, // 车辆区域超时
  31. ET_CARD_AREA_FORBIDDEN_PERSON = 19, // 人员进入禁止区域
  32. ET_CARD_AREA_FORBIDDEN_VEHICLE = 20, // 车辆进入禁止区域
  33. ET_CARD_OVER_SPEED = 21, // 车辆超速
  34. ET_CARD_AREA_OVER_SPEED = 22, // 车辆区域超速
  35. ET_CARD_HELP = 24, // 人员呼救
  36. ET_CARD_MOTIONLESS=32,//静止不动告警
  37. ET_VEHICLE_NEAR_GEOFAULT=38,//靠近断层告警
  38. };
  39. class Event;
  40. struct event_tool
  41. {
  42. template <class UnaryPredicate>
  43. void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,Unarypredicate p)
  44. {
  45. handle_event(ot,et,id,limit_value,cur_value,p());
  46. }
  47. void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f);
  48. static event_tool * instance();
  49. private:
  50. event_tool()
  51. {
  52. make_event_object();
  53. }
  54. void make_event_object();
  55. std::map<OBJECT_TYPE,std::shared_ptr<Event>> m_map;
  56. };
  57. struct event_list:single_base<event_list,uint64_t,std::shared_ptr<ya_event>>
  58. {
  59. public:
  60. static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type,uint64_t obj_id)
  61. {
  62. return (static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)|obj_id;
  63. }
  64. void load_his_data_from_db();
  65. ~event_list(){}
  66. static std::string ev_to_json(std::shared_ptr<ya_event> ev_ptr)
  67. {
  68. std::vector<std::shared_ptr<ya_event>> evs;
  69. evs.push_back(ev_ptr);
  70. return evs_to_json(evs);
  71. }
  72. static std::string evs_to_json(std::vector<std::shared_ptr<ya_event>> arr)
  73. {
  74. rapidjson::Document doc(rapidjson::kObjectType);
  75. rapidjson::Value data(rapidjson::kArrayType);
  76. rapidjson::Document::AllocatorType& allocator=doc.GetAllocator();
  77. auto it=arr.begin();
  78. for(;it!=arr.end();++it)
  79. {
  80. if((*it)->m_is_display)
  81. {
  82. ev_to_node(*it, allocator, data);
  83. }
  84. }
  85. doc.AddMember(JSON_ROOT_KEY_CMD,JSON_CMD_VALUE_EVENT, allocator);
  86. doc.AddMember(JSON_ROOT_KEY_VERSION,INTERFACE_VERSION, allocator);
  87. doc.AddMember(JSON_ROOT_KEY_DATA,data, allocator);
  88. rapidjson::StringBuffer sb;
  89. rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
  90. doc.Accept(writer);
  91. return sb.GetString();
  92. }
  93. private:
  94. static void ev_to_node(std::shared_ptr<ya_event> ev_ptr,
  95. rapidjson::Document::AllocatorType& allocator,
  96. rapidjson::Value& out_data)
  97. {
  98. rapidjson::Value ev(rapidjson::kObjectType);
  99. ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->get_id(), allocator);
  100. ev.AddMember(JSON_KEY_EVENT_STATUS,ev_ptr->m_status, allocator);
  101. ev.AddMember(JSON_KEY_EVENT_TYPE_ID,ev_ptr->m_ev_type, allocator);
  102. ev.AddMember(JSON_KEY_EVENT_OBJ_TYPE_ID,ev_ptr->m_obj_type, allocator);
  103. tool_json::add_member(ev, JSON_KEY_EVENT_OBJ_ID, ev_ptr->m_obj_id, allocator);
  104. ev.AddMember(JSON_KEY_EVENT_MAP_ID,ev_ptr->m_map_id, allocator);
  105. ev.AddMember(JSON_KEY_EVENT_AREA_ID,ev_ptr->m_area_id, allocator);
  106. ev.AddMember(JSON_KEY_EVENT_X,ev_ptr->x, allocator);
  107. ev.AddMember(JSON_KEY_EVENT_Y,ev_ptr->y, allocator);
  108. ev.AddMember(JSON_KEY_EVENT_LIMIT_VALUE,ev_ptr->m_limit_value, allocator);
  109. ev.AddMember(JSON_KEY_EVENT_CUR_VALUE,ev_ptr->m_cur_value, allocator);
  110. ev.AddMember(JSON_KEY_EVENT_CUR_TIME,tool_time::to_ms(ev_ptr->m_cur_time), allocator);
  111. ev.AddMember(JSON_KEY_EVENT_LANDMARK_ID,ev_ptr->m_landmarkid, allocator);
  112. ev.AddMember(JSON_KEY_EVENT_LANDMARK_DIRECTION,ev_ptr->m_landmarkdirect, allocator);
  113. ev.AddMember(JSON_KEY_EVENT_LANDMARK_DISTANCE,ev_ptr->m_landmarkdist, allocator);
  114. out_data.PushBack(ev, allocator);
  115. }
  116. };
  117. #endif