123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /*
- * @file
- * @brief
- * @version
- * @author
- * @date
- * @note
- * @warning
- * @bug
- * @copyright
- * */
- #ifndef __EVENT_HPP__
- #define __EVENT_HPP__
- #include <memory>
- #include <chrono>
- #include <map>
- #include <rapidjson/document.h>
- #include <rapidjson/writer.h>
- #include <rapidjson/stringbuffer.h>
- #include <rapidjson/prettywriter.h>
- #include <write-copy.h>
- #include "common.h"
- struct ya_event
- {
- public:
- ya_event(uint64_t e_id):m_cur_time(std::chrono::system_clock::now())
- {
- m_ev_id = e_id;
- m_obj_id = "";
- m_map_id = 0;
- m_area_id = 0;
- x = 0;
- y = 0;
- m_limit_value = 0;
- m_cur_value = 0;
- m_desc = "";
- m_status=ES_START;
- //m_is_display=true;
- m_is_sent=false;
- }
- ~ya_event(){}
- public:
- //key of event_list.
- uint64_t m_ev_id;
- uint64_t m_id;
- ///告警状态,开始、结束
- EVENT_STATUS m_status;
- ///告警类型
- EVENT_TYPE m_ev_type;
- ///告警对象类型
- OBJECT_TYPE m_obj_type;
- EVENT_DIS_TYPE m_dis_type;
- /// 告警对象编号,与告警对象类型对应,如告警对象类型为分站,此字段为分站编号
- std::string m_obj_id;
- ///当前时间,为告警事件的触发时间,如果状态为开始,则表示开始时间,否则为结束时间
- std::chrono::system_clock::time_point m_cur_time;
- ///告警所在地图
- int m_map_id;
- ///告警所在区域
- int m_area_id;
- ///位置
- double x;
- ///位置
- double y;
- ///告警阈值
- double m_limit_value;
- ///当前值
- double m_cur_value;
- ///描述
- std::string m_desc;
- //是否已经发送 ture bu发送, false推送. 推送完置为true
- bool m_is_sent;
- uint8_t landmark_id=0;
- uint8_t landmark_dir=0;
- double landmark_dis=0;
- bool is_end()
- {
- return ES_END == m_status;
- }
- ///作为事件map列表的id,方便查找;
- uint64_t get_list_id();
- };
- class Event;
- struct event_tool
- {
- template <class UnaryPredicate>
- void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,UnaryPredicate p,EVENT_DIS_TYPE edt=DT_COMMON,const std::string &desc="")
- {
- handle_event(ot,et,id,limit_value,cur_value,p(),edt,desc);
- }
- void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,EVENT_DIS_TYPE edt=DT_COMMON,const std::string &desc="");
- static event_tool * instance();
- event_tool()
- {
- make_event_object();
- }
- private:
- void make_event_object();
- std::map<OBJECT_TYPE,std::shared_ptr<Event>> m_map;
- };
- struct event_list:single_base<event_list,uint64_t,std::shared_ptr<ya_event>>
- {
- public:
- static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type,uint64_t obj_id,EVENT_DIS_TYPE edt)
- {
- return (static_cast<uint64_t>(edt)<<58)|(static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)|obj_id;
- }
- std::shared_ptr<ya_event> get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt=DT_COMMON);
- std::shared_ptr<ya_event> get_event_area(int32_t area_id, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt)
- {
- return base::get(to_list_id(ev_type, OT_AREA, static_cast<uint64_t>(area_id),edt));
- }
- std::shared_ptr<ya_event> get_event_reader(int32_t reader_id, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt=DT_COMMON)
- {
- return base::get(to_list_id(ev_type,OT_DEVICE_READER, static_cast<uint64_t>(reader_id),edt));
- }
- static void save_event(const std::shared_ptr<ya_event> &event_ptr);
- void load_his_data_from_db(bool init=true);
- ~event_list(){}
- static std::string ev_to_json(std::shared_ptr<ya_event> ev_ptr)
- {
- std::vector<std::shared_ptr<ya_event>> evs;
- evs.push_back(ev_ptr);
- return evs_to_json(evs);
- }
- static std::string evs_to_json(std::vector<std::shared_ptr<ya_event>> arr);
- private:
- static void _ev_to_node(std::shared_ptr<ya_event> ev_ptr,
- rapidjson::Document::AllocatorType& allocator,
- rapidjson::Value& out_data);
- };
- #endif
|