event.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef __EVENT_HPP__
  2. #define __EVENT_HPP__
  3. #include <memory>
  4. #include <map>
  5. #include "write-copy.h"
  6. class ya_event;
  7. enum EVENT_STATUS
  8. {
  9. ///事件开始
  10. ES_START = 0,
  11. ///呼救已处理状态
  12. ES_DEAL_HELP = 1,
  13. ///事件结束
  14. ES_END = 100
  15. };
  16. enum OBJECT_TYPE
  17. {
  18. ///矿井
  19. OT_MINE = 1,
  20. ///区域
  21. OT_AREA = 2,
  22. ///分站
  23. OT_DEVICE_READER = 4,
  24. ///标识卡,包括人员、车辆、自组网等
  25. OT_CARD = 9,
  26. };
  27. enum EVENT_TYPE{ // 事件类型
  28. ET_AREA_OVER_COUNT_PERSON = 3, // 区域人员超员
  29. ET_AREA_OVER_COUNT_VEHICLE = 4, // 区域车辆超员
  30. ET_READER_ERROR = 6,
  31. ET_CARD_LOW_POWER_SERIOUS = 12, // 电量极低
  32. ET_CARD_AREA_OVER_TIME_PERSON = 15, // 人员区域超时
  33. ET_CARD_AREA_OVER_TIME_VEHICLE = 16, // 车辆区域超时
  34. ET_CARD_OVER_SPEED = 21, // 车辆超速
  35. ET_CARD_HELP = 24, // 人员呼救
  36. CARD_EVENT_COUNT_MAX,
  37. };
  38. class Event;
  39. struct event_tool
  40. {
  41. template <class UnaryPredicate>
  42. void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,UnaryPredicate p)
  43. {
  44. handle_event(ot,et,id,limit_value,cur_value,p());
  45. }
  46. void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f);
  47. static event_tool * instance();
  48. private:
  49. event_tool()
  50. {
  51. make_event_object();
  52. }
  53. void make_event_object();
  54. std::map<OBJECT_TYPE,std::shared_ptr<Event>> m_map;
  55. };
  56. struct event_list:single_base<event_list,uint64_t,std::shared_ptr<ya_event>>
  57. {
  58. public:
  59. static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type,uint64_t obj_id)
  60. {
  61. return (static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)|obj_id;
  62. }
  63. void load_his_data_from_db();
  64. ~event_list(){}
  65. static std::string ev_to_json(std::shared_ptr<ya_event> ev_ptr)
  66. {
  67. std::vector<std::shared_ptr<ya_event>> evs;
  68. evs.push_back(ev_ptr);
  69. return evs_to_json(evs);
  70. }
  71. static std::string evs_to_json(std::vector<std::shared_ptr<ya_event>> arr);
  72. private:
  73. static void ev_to_node(std::shared_ptr<ya_event> ev_ptr,
  74. rapidjson::Document::AllocatorType& allocator,
  75. rapidjson::Value& out_data)
  76. {
  77. rapidjson::Value ev(rapidjson::kObjectType);
  78. ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->get_id(), allocator);
  79. ev.AddMember(JSON_KEY_EVENT_STATUS,ev_ptr->m_status, allocator);
  80. ev.AddMember(JSON_KEY_EVENT_TYPE_ID,ev_ptr->m_ev_type, allocator);
  81. ev.AddMember(JSON_KEY_EVENT_OBJ_TYPE_ID,ev_ptr->m_obj_type, allocator);
  82. tool_json::add_member(ev, JSON_KEY_EVENT_OBJ_ID, ev_ptr->m_obj_id, allocator);
  83. ev.AddMember(JSON_KEY_EVENT_MAP_ID,ev_ptr->m_map_id, allocator);
  84. ev.AddMember(JSON_KEY_EVENT_AREA_ID,ev_ptr->m_area_id, allocator);
  85. ev.AddMember(JSON_KEY_EVENT_X,ev_ptr->x, allocator);
  86. ev.AddMember(JSON_KEY_EVENT_Y,ev_ptr->y, allocator);
  87. ev.AddMember(JSON_KEY_EVENT_LIMIT_VALUE,ev_ptr->m_limit_value, allocator);
  88. ev.AddMember(JSON_KEY_EVENT_CUR_VALUE,ev_ptr->m_cur_value, allocator);
  89. ev.AddMember(JSON_KEY_EVENT_CUR_TIME,tool_time::to_ms(ev_ptr->m_cur_time), allocator);
  90. ev.AddMember(JSON_KEY_EVENT_LANDMARK_ID,ev_ptr->m_landmarkid, allocator);
  91. ev.AddMember(JSON_KEY_EVENT_LANDMARK_DIRECTION,ev_ptr->m_landmarkdirect, allocator);
  92. ev.AddMember(JSON_KEY_EVENT_LANDMARK_DISTANCE,ev_ptr->m_landmarkdist, allocator);
  93. out_data.PushBack(ev, allocator);
  94. }
  95. };
  96. #endif