1
0
Quellcode durchsuchen

增加虚拟告警功能 && 告警id协议从bigint改为string

lixioayao vor 5 Jahren
Ursprung
Commit
63ada929f1
4 geänderte Dateien mit 33 neuen und 13 gelöschten Zeilen
  1. 26 8
      event.cpp
  2. 2 2
      event.h
  3. 2 1
      message.cpp
  4. 3 2
      worker.cpp

+ 26 - 8
event.cpp

@@ -250,10 +250,15 @@ void event_list::save_event(const std::shared_ptr<ya_event> &ev_ptr)
     db_tool::PushAsync(sql);
 }
 
-void event_list::load_his_data_from_db()
+void event_list::load_his_data_from_db(bool init /*=true*/)
 {
+    if(!init){
+        std::time_t t=time(0);
+        if(t-m_last_time<15)return;
+        m_last_time=t;
+    }
     std::unordered_map<uint64_t, std::shared_ptr<ya_event>> map;
-    const char *sql = "SELECT event_id, id,stat,event_type_id,obj_type_id,obj_id,dis_type,map_id,area_id,\
+    std::string sql("SELECT event_id, id,stat,event_type_id,obj_type_id,obj_id,dis_type,map_id,area_id,\
             limit_value,cur_value,x,y, cur_time FROM his_event_data \
             WHERE event_id IN (SELECT MAX(event_id) FROM his_event_data \
                                WHERE cur_time > (CASE obj_type_id \
@@ -266,10 +271,12 @@ void event_list::load_his_data_from_db()
                                AND cur_time < NOW()\
                                GROUP BY event_type_id, obj_id,dis_type) \
             AND  event_id NOT IN ( SELECT event_id FROM his_event_data WHERE  stat=100)\
-            AND event_type_id NOT IN (21,22,31,36);";
+            AND event_type_id NOT IN (21,22,31,36);");
+    if(!init)
+        sql="SELECT event_id, id,stat,event_type_id,obj_type_id,obj_id,dis_type,map_id,area_id,limit_value,cur_value,x,y, cur_time FROM his_event_data WHERE cur_time > date_sub(NOW(),interval 20 second) and source=1 order by stat;";
     std::string Error;
     YADB::CDBResultSet DBRes;
-    sDBConnPool.Query(sql,DBRes,Error);
+    sDBConnPool.Query(sql.c_str(),DBRes,Error);
     if(!Error.empty())
         log_error("初始化事件列表 Error,%s",Error.c_str());
     uint64_t nCount = DBRes.GetRecordCount( Error );
@@ -321,8 +328,17 @@ void event_list::load_his_data_from_db()
             int stat  = 0;
             DBRes.GetField( "stat",stat, Error );
 
+            std::shared_ptr<ya_event> ev=nullptr;
+            bool flag=false;
+            if(!init){
+                ev=event_list::instance()->get(id);
+                if(!ev) ev = std::make_shared<ya_event>(event_id);
+                else flag=true;
+            }
+            else{
+                ev = std::make_shared<ya_event>(event_id);
+            }
 
-            std::shared_ptr<ya_event> ev = std::make_shared<ya_event>(event_id);
             ev->m_status = static_cast<EVENT_STATUS>(stat);
             ev->m_ev_type = static_cast<EVENT_TYPE>(event_type_id);
 
@@ -339,6 +355,7 @@ void event_list::load_his_data_from_db()
             ev->x = x;
             ev->y = y;
             ev->m_id = id;
+            ev->m_is_sent=false;
             //这里当是卡告警的时候,对m_event数据进行赋值
             //方便清理
             //备注防追尾告警和一人多卡告警可能不适用,后续整理
@@ -357,8 +374,8 @@ void event_list::load_his_data_from_db()
             if(ev->m_ev_type==ET_READER_POWER_BY_BATTERY)
                 if(auto r=sit_list::instance()->get(std::stoi(obj_id)))
                     r->m_power_ac_down=true;
-            
-            map.insert(std::make_pair(id, ev));
+            if(!flag) 
+                map.insert(std::make_pair(id, ev));
             log_info("event_list %lld,%lld,%d,%d,%d,%s,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%s"
                      , ev->m_ev_id,ev->m_id,ev->m_status,ev->m_ev_type,ev->m_obj_type,ev->m_obj_id.c_str(),ev->m_dis_type
                      ,ev->m_map_id,ev->m_area_id,ev->m_limit_value,ev->m_cur_value
@@ -399,7 +416,8 @@ void event_list::_ev_to_node(std::shared_ptr<ya_event> ev_ptr,
 {
     rapidjson::Value ev(rapidjson::kObjectType);
 
-    ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->m_id, allocator);
+    //ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->m_id, allocator);
+    tool_json::add_member(ev, JSON_KEY_EVENT_EVENT_ID, std::to_string(ev_ptr->m_id), allocator);
     ev.AddMember(JSON_KEY_EVENT_STATUS,ev_ptr->m_status, allocator);
 
     ev.AddMember(JSON_KEY_EVENT_TYPE_ID,ev_ptr->m_ev_type, allocator);

+ 2 - 2
event.h

@@ -117,7 +117,7 @@ public:
 
     static void save_event(const std::shared_ptr<ya_event> &event_ptr);
 
-    void load_his_data_from_db();
+    void load_his_data_from_db(bool init=true);
 
     ~event_list(){}
 
@@ -133,6 +133,6 @@ private:
     static void _ev_to_node(std::shared_ptr<ya_event> ev_ptr,
                             rapidjson::Document::AllocatorType& allocator,
                             rapidjson::Value& out_data);
-
+    std::time_t     m_last_time{0};
 };
 #endif

+ 2 - 1
message.cpp

@@ -109,8 +109,9 @@ std::vector<task*> message_locinfo::load_opt(zistream&is)
 	m.zero_this();
 
 	uint8_t  b;
+    uint16_t card_id;
 	//卡类型、卡号、CT、电池状态
-	is>>b>>m.m_card_id>>m.m_card_ct;
+	is>>b>>card_id>>m.m_card_ct;
 	m.m_card_type=b&0xF;
 	m.m_batty_status=b>>4;
     m.m_card_id = card_id;

+ 3 - 2
worker.cpp

@@ -18,6 +18,7 @@
 #include "clock.h"
 #include "mine_business.h"
 #include "bulletin_broad_show.h"
+#include "event.h"
 
 loop_thread::loop_thread ()
 {
@@ -98,8 +99,7 @@ struct timer_worker_thread: loop_thread
 
 		int v = card_list::instance()->version();
 		card_list_visit clv;
-		if(v != version)
-		{
+		if(v != version){
 			version=v;
 			clv._flag=true;
 			mine_business::inst()->clear_vehicle();
@@ -107,6 +107,7 @@ struct timer_worker_thread: loop_thread
 		card_list::instance()->accept(clv);
 		bulletin_broad_show::inst()->run_bulletin_board();
 		mine_business::inst()->run_business();
+        event_list::instance()->load_his_data_from_db(false);
 
 		log_info("timer_worker_thread use time:%ldus", clock.count_us());
 	}