Browse Source

修改了his_event_data表,以及相关操作,修复宕机的bug

lixioayao 6 years ago
parent
commit
e2eaee78b5
8 changed files with 50 additions and 59 deletions
  1. 20 15
      area.cpp
  2. 1 1
      area.h
  3. 2 1
      card_car.cpp
  4. 22 29
      event.cpp
  5. 2 10
      event.h
  6. 2 2
      mine_business.cpp
  7. 0 1
      web-client.cpp
  8. 1 0
      znet.cpp

+ 20 - 15
area.cpp

@@ -429,7 +429,7 @@ std::vector<point> area_list::init_path(std::string &str)
 	return std::move(vp);
 }
 
-std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<site> s,const std::shared_ptr<card_location_base> &c,const point&pt,int & sarid)
+std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<site>& s,const std::shared_ptr<card_location_base> &c,const point&pt,int & sarid)
 {
 	std::vector<std::shared_ptr<area>> ret;
 
@@ -455,10 +455,12 @@ area_hover::area_hover(const std::shared_ptr<area>&area,const point&pt)
 
 void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const point&pt)
 {
-	log_info("on_point...cardid:%d,type:%d",c->m_id,c->m_type);
-	
+	log_info("on_point...cardid:%d,type:%d,x:%.2f,y:%.2f",c->m_id,c->m_type,pt.x,pt.y);
+    if(pt.empty())	
+      return;
 	int special_area=-1;
 	std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(m_site,c, pt,special_area);
+
 	if(special_area != -1)
 	{
 		areas.clear();
@@ -512,20 +514,23 @@ void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const poin
 	m_hover_list=std::move(nlist);
 
     //更新到数据库
-    std::string strAreaInfo = "";
-    for (std::vector<std::shared_ptr<area_hover>>::iterator itvec = m_hover_list.begin(); itvec != m_hover_list.end(); ++itvec)
+    if(m_site && !m_hover_list.empty())
     {
-        if ((*itvec)->id() >= 0)
-        {
-            char tmpArea[128] = {0};
-            snprintf(tmpArea, 128, "%d,%lu|", (*itvec)->id(), (*itvec)->m_enter_time);
-            strAreaInfo += tmpArea;
-        }
+         std::string strAreaInfo = "";
+         for (std::vector<std::shared_ptr<area_hover>>::iterator itvec = m_hover_list.begin(); itvec != m_hover_list.end(); ++itvec)
+         {
+             if ((*itvec)->id() >= 0)
+             {
+                 char tmpArea[128] = {0};
+                 snprintf(tmpArea, 128, "%d,%lu|", (*itvec)->id(), (*itvec)->m_enter_time);
+                 strAreaInfo += tmpArea;
+             }
+         }
+         char sql[1024] = {0};
+         snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%s, %d, %lf, %lf, %lf, 0, '%s');",
+             tool_other::type_id_to_str(c->m_type, c->m_id).c_str(), m_site->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
+         db_tool::PushAsync(sql);
     }
-    char sql[1024] = {0};
-    snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%s, %d, %lf, %lf, %lf, 0, '%s');",
-        tool_other::type_id_to_str(c->m_type, c->m_id).c_str(), m_site->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
-    db_tool::PushAsync(sql);
 }
 
 void area_tool::on_leave(const std::shared_ptr<card_location_base>& c)

+ 1 - 1
area.h

@@ -112,7 +112,7 @@ struct area_list:single_base<area_list,int,std::shared_ptr<area>>
     area_list();
 
 	//根据分站、所在点找出所在区域列表
-	std::vector<std::shared_ptr<area>> get_area(const std::shared_ptr<site> s,const std::shared_ptr<card_location_base> &c,const point&pt,int &);
+	std::vector<std::shared_ptr<area>> get_area(const std::shared_ptr<site>& s,const std::shared_ptr<card_location_base> &c,const point&pt,int &);
     std::vector<point> init_path(std::string  &str);
     ///id=-1为初始化所有
     void init_from_db(int id=-1);

+ 2 - 1
card_car.cpp

@@ -65,7 +65,8 @@ void car::handle_three_rates(const point &pt)
 
 void car::on_timer()
 {
-	make_package();
+    if(!empty())
+	    make_package();
 }
 int car::get_area()
 {

+ 22 - 29
event.cpp

@@ -110,9 +110,12 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
                 _id = tool_other::card_id_to_u64(cardid);
             }
             ev_ptr=on_message(et,_id,f);
-            ev_ptr->m_cur_value=cur_value;
-            ev_ptr->m_limit_value=limit_value;
-            ev_ptr->m_desc=desc;
+            if(ev_ptr){
+                ev_ptr->m_cur_value=cur_value;
+                ev_ptr->m_limit_value=limit_value;
+                ev_ptr->m_desc=desc;
+                ev_ptr->m_id=eid;
+            }
             //保存告警信息
             event_list::instance()->add(eid,ev_ptr);
         }
@@ -216,9 +219,6 @@ std::shared_ptr<ya_event> card_event::on_message(EVENT_TYPE et,uint64_t id,bool
             auto lm = area_info_map.begin()->second;
             event_ptr->m_area_id = std::get<0>(lm);
             event_ptr->m_map_id = card_ptr->get_area_tool()->m_mapid;
-            event_ptr->m_landmarkid = std::get<1>(lm);
-            event_ptr->m_landmarkdist = std::get<3>(lm);
-            event_ptr->m_landmarkdirect = std::get<2>(lm);
         }
     }
     return event_ptr;
@@ -235,14 +235,12 @@ void event_list::save_event(std::shared_ptr<ya_event> ev_ptr)
     char sql[LENGTH_SQL] = {0};
     std::string _time = tool_time::to_str_ex(ev_ptr->m_cur_time);
     sprintf(sql,
-            "INSERT IGNORE INTO his_event_data(event_id, stat, event_type_id, obj_type_id, obj_id, \
-            map_id, area_id, limit_value, cur_value, x, y, cur_time, description, \
-            landmark_id, landmark_dist,direction_mapper_id )\
-            VALUES(%ld, %d, %d, %d, %s, %d, %d, %.2f, %.2f, %f, %f, '%s', '%s', %d, %10.3f, %d);",
-    ev_ptr->get_id(), ev_ptr->m_status, ev_ptr->m_ev_type, ev_ptr->m_obj_type, ev_ptr->m_obj_id.c_str(),
+            "INSERT IGNORE INTO his_event_data(event_id,id, stat, event_type_id, obj_type_id, obj_id, \
+            map_id, area_id, limit_value, cur_value, x, y, cur_time, description) \
+            VALUES(%ld,%ld, %d, %d, %d, %s, %d, %d, %.2f, %.2f, %f, %f, '%s', '%s');",
+            ev_ptr->get_id(),ev_ptr->m_id,ev_ptr->m_status, ev_ptr->m_ev_type, ev_ptr->m_obj_type, ev_ptr->m_obj_id.c_str(),
             ev_ptr->m_map_id, ev_ptr->m_area_id, ev_ptr->m_limit_value, ev_ptr->m_cur_value, ev_ptr->x, ev_ptr->y,
-            _time.c_str(), ev_ptr->m_desc.c_str(),
-            ev_ptr->m_landmarkid, ev_ptr->m_landmarkdist, ev_ptr->m_landmarkdirect);
+            _time.c_str(), ev_ptr->m_desc.c_str());
 
     db_tool::PushAsync(sql);
 }
@@ -250,7 +248,7 @@ void event_list::save_event(std::shared_ptr<ya_event> ev_ptr)
 void event_list::load_his_data_from_db()
 {
     std::unordered_map<uint64_t, std::shared_ptr<ya_event>> map;
-    const char *sql = "SELECT event_id, stat,event_type_id,obj_type_id,obj_id,map_id,area_id,\
+    const char *sql = "SELECT event_id, id,stat,event_type_id,obj_type_id,obj_id,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 \
@@ -271,13 +269,16 @@ void event_list::load_his_data_from_db()
     uint64_t nCount = DBRes.GetRecordCount( Error );
     if (nCount > 0)
     {
-        log_info( "init_vehicle_category. The record count=%ld\n", nCount );
+        log_info( "init_event_list. The record count=%ld\n", nCount );
 
         while ( DBRes.GetNextRecod(Error) )
         {
-            long long event_id  = 0;
+            long long int event_id  = 0;
             DBRes.GetField( "event_id",event_id, Error );
 
+            long long int id  = 0;
+            DBRes.GetField( "id",id, Error );
+
             int event_type_id  = 0;
             DBRes.GetField( "event_type_id",event_type_id, Error );
 
@@ -327,15 +328,11 @@ void event_list::load_his_data_from_db()
             ev->m_area_id = area_id;
             ev->x = x;
             ev->y = y;
-
-            map.insert(std::make_pair(event_id, ev));
-        }
-
-        for(auto&iter: m_map)
-        {
-            auto ev = iter.second;
-            log_info("event list %lld,%d,%d,%d,%s,%d,%d,%f,%f,%f,%f,%s"
-                     , ev->get_id(),ev->m_status,ev->m_ev_type,ev->m_obj_type,ev->m_obj_id.c_str()
+            ev->m_id = id;
+            
+            map.insert(std::make_pair(id, ev));
+            log_info("event_list %lld,%lld,%d,%d,%d,%s,%d,%d,%.2f,%.2f,%.2f,%.2f,%s"
+                     , ev->get_id(),ev->m_id,ev->m_status,ev->m_ev_type,ev->m_obj_type,ev->m_obj_id.c_str()
                      ,ev->m_map_id,ev->m_area_id,ev->m_limit_value,ev->m_cur_value
                      ,ev->x,ev->y
                      ,tool_time::to_str_ex(ev->m_cur_time).c_str());
@@ -393,10 +390,6 @@ void event_list::_ev_to_node(std::shared_ptr<ya_event> ev_ptr,
     ev.AddMember(JSON_KEY_EVENT_CUR_VALUE,ev_ptr->m_cur_value, allocator);
     ev.AddMember(JSON_KEY_EVENT_CUR_TIME,tool_time::to_ms(ev_ptr->m_cur_time), allocator);
 
-    ev.AddMember(JSON_KEY_EVENT_LANDMARK_ID,ev_ptr->m_landmarkid, allocator);
-    ev.AddMember(JSON_KEY_EVENT_LANDMARK_DIRECTION,ev_ptr->m_landmarkdirect, allocator);
-    ev.AddMember(JSON_KEY_EVENT_LANDMARK_DISTANCE,ev_ptr->m_landmarkdist, allocator);
-
     out_data.PushBack(ev, allocator);
 }
 

+ 2 - 10
event.h

@@ -75,9 +75,6 @@ public:
         m_limit_value = 0;
         m_cur_value = 0;
         m_desc = "";
-        m_landmarkid = 0;
-        m_landmarkdirect = 0;
-        m_landmarkdist = 0;
 
         m_status=ES_START;
         m_is_display=true;
@@ -85,6 +82,8 @@ public:
     }
     ~ya_event(){}
 public:
+    //key of event_list. 
+    uint64_t m_id;
     ///告警状态,开始、结束
     EVENT_STATUS m_status;
 
@@ -112,13 +111,6 @@ public:
     ///描述
     std::string m_desc;
 
-    /// 地标信息
-    int m_landmarkid;
-    /// 与地标的距离
-    double m_landmarkdist;
-    /// 所处地标的方向
-    int m_landmarkdirect;
-    //是否显示
     bool m_is_display;
     //是否已经发送 ture bu发送, false推送. 推送完置为true
     bool m_is_sent;

+ 2 - 2
mine_business.cpp

@@ -64,13 +64,13 @@ struct card_sensor
     void make_reverse_condition(int16_t antid,uint16_t ct,double d)
     {
         dist[antid]=d;
-        if(ct == ct){
+        if(this->ct == ct){
             sum++;
             int b=-1;
             if (dist[0]>dist[1]) b=0 ;else b =1;
             if(b==bigger) count++; //合格的点
         }
-        ct = ct;
+        this->ct = ct;
     }
     void set(const point &p0,const point &p1,int id)
     {

+ 0 - 1
web-client.cpp

@@ -1,7 +1,6 @@
 
 #include <thread>
 #include <memory>
-#include <memory>
 #include <ev++.h>
 
 #include "zio.h"

+ 1 - 0
znet.cpp

@@ -439,6 +439,7 @@ struct sock_client:fd_io,client_ex
 
 	bool check_crc(const char*b,size_t mlen)
 	{
+        return true;
 		uint16_t crc=b[mlen-2];
 		crc<<=8;
 		crc|=b[mlen-1];