Browse Source

修复前端推送区域消息处理逻辑bug

lixioayao 6 years ago
parent
commit
9a156ff918
6 changed files with 53 additions and 75 deletions
  1. 20 0
      a.cpp
  2. 1 1
      area.cpp
  3. 4 14
      card_car.cpp
  4. 4 6
      card_person.cpp
  5. 23 48
      module_service/module_meta_date_changed.cpp
  6. 1 6
      module_service/module_meta_date_changed.h

+ 20 - 0
a.cpp

@@ -0,0 +1,20 @@
+#include <unordered_map>
+#include <iostream>
+int main()
+{
+        std::unordered_map<int, std::string> c = {{1, "one"}, {2, "two"}, {3, "three"},
+                                                {4, "four"}, {5, "five"}, {6, "six"}};
+            // 从 c 擦除所有奇数
+            for(auto it = c.begin(); it != c.end(); )
+                      if(it->first % 2 == 1)
+                                    it = c.erase(it);
+                    else
+                                  ++it;
+                c.erase(2);
+                c.erase(2);
+                c.erase(7);
+                for(auto& p : c)
+                          std::cout << p.second << ' '<<std::endl;
+                std::string s="";
+                std::cout << std::stoi(s)<<std::endl;
+}

+ 1 - 1
area.cpp

@@ -339,7 +339,7 @@ void area_list::init_from_db(int id/*=-1*/)
     }
     else
     {
-        sql.append(" AND s.area_id=");
+        sql.append(" AND a.area_id=");
         sql.append(std::to_string(id));
         sql.append(";");
 

+ 4 - 14
card_car.cpp

@@ -84,15 +84,6 @@ void car::make_package()
 {
 	YA::_CARD_POS_ cp;
 	loc_point pt = getSmoothPoint();
-	//const auto lm = m_area_tool->getLandmark();
-	//cp.enter_area_time = std::get<0>(lm);
-	//cp.rec_time = std::get<1>(lm);
-	//uint32_t map_id = std::get<2>(lm);
-	//uint32_t area_id = std::get<3>(lm);
-	//cp.area_id=area_id;
-	//cp.landmark_id = std::get<4>(lm);
-	//cp.lm_direction = std::get<5>(lm);
-	//cp.landmark_dis=std::get<6>(lm);
 	cp.area_info=m_area_tool->m_area_info;	
 	cp.map_id =m_area_tool->m_mapid;
 
@@ -102,11 +93,10 @@ void car::make_package()
 	cp.work_time = m_mine_tool->get_work_time();
 	cp.is_on_duty=m_mine_tool->is_on_duty();
 	upt_card_pos(cp,pt);
-	if(!cp.area_info.empty())
-	{
-		int areaid = cp.area_info.begin()->first;
-		m_his_location_card->push(pt.m_time,pt,areaid,cp.map_id);
-	}
+    int sid=0;
+    if(auto st=m_area_tool->m_site)sid=st->m_area_id;
+	m_his_location_card->push(pt.m_time,pt,sid,cp.map_id);
+
 	uint64_t _now=tool_time::now_to_ms();
 	uint64_t t=_now>m_timeval?_now-m_timeval:m_timeval-_now;
 	if(t>10*1000)

+ 4 - 6
card_person.cpp

@@ -76,7 +76,6 @@ void person::IKSDK_DB(int sid)
 		const char*sql="REPLACE INTO his_att_interface (staff_id,card_id,reader_id,staff_name,dept_name,upt_time,low_power_warn) VALUES (%d,%s,%d,'%s','%s','%s',%d);";
 		snprintf(nsql,256,sql,m_cid,card_id.c_str(),sid,m_stafferName.c_str(),m_deptName.c_str(),st.c_str(),f);
 		db_tool::PushAsync(nsql);
-		logn_info(2,"%s",nsql);
 		m_iris_recognition_timeval = now;
 	}
 }
@@ -128,11 +127,10 @@ void person::on_timer()
 	cp.is_on_duty= m_mine_tool->is_on_duty();
 	upt_card_pos(cp,pt);
 	log_info("on_timer here ...%d,%lld,%.2f,%.2f,%d,%d--",m_id,_time,pt.x,pt.y,cp.map_id,cp.area_info.size());
-	if(!cp.area_info.empty())
-	{
-		int area_id = cp.area_info.begin()->first;
-		m_his_location_card->push(_time,pt,area_id,cp.map_id);
-	}
+    int sid=0;
+    if(auto st=m_area_tool->m_site)sid=st->m_area_id;
+	m_his_location_card->push(_time,pt,sid,cp.map_id);
+
 	uint64_t _now=tool_time::now_to_ms();
 	uint64_t t=_now>m_timeval?_now-m_timeval:m_timeval-_now;
 	if(t>10*1000)

+ 23 - 48
module_service/module_meta_date_changed.cpp

@@ -27,14 +27,14 @@ void module_meta_date_changed::accept(sio::message::ptr const& data)
     }
 
 
-    int64_t id=-1;
-    tool_map::try_get_value(id, JSON_KEY_ID, data);
     std::string szParam = "0";
     tool_map::try_get_value(szParam,JSON_KEY_ID,data);
+    int id = std::stoi(szParam);
 
     std::string op_type="";
     tool_map::try_get_value(op_type, JSON_KEY_OP_TYPE, data);
-    if((-1 != id || szParam != "0") && !op_type.empty())
+
+    if(!szParam.empty() && !op_type.empty())
     {
         EDIT_TYPE_ID edit_type_id;
         if(!try_get_edit_type_id(op_type, edit_type_id))
@@ -42,8 +42,8 @@ void module_meta_date_changed::accept(sio::message::ptr const& data)
             log_error("web发来的数据: 基础数据op_type字段错误:op_type=%s", op_type.c_str());
             return;
         }
-		log_info("基础数据 receive meta_data_changed: %s, id=%d-%s, op_type=%d"
-		        , name.c_str(), id,szParam.c_str() , edit_type_id);
+		log_info("基础数据 receive meta_data_changed: %s, id=%s, op_type=%d"
+		        , name.c_str(), szParam.c_str() , edit_type_id);
 
         if(JSON_KEY_NAME_VEHICLE == name || JSON_KEY_NAME_VEHICLE_EXTEND == name)
         {
@@ -59,7 +59,7 @@ void module_meta_date_changed::accept(sio::message::ptr const& data)
         }
         else if(JSON_KEY_NAME_AREA == name)
         {
-            deal_call_edit_area(id, edit_type_id);
+            deal_call_edit_area(szParam, edit_type_id);
         }
         else if(JSON_KEY_NAME_READER == name)
         {
@@ -176,30 +176,22 @@ void module_meta_date_changed::deal_call_edit_card(std::string & id64, EDIT_TYPE
     }
 }
 
-void module_meta_date_changed::deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id)
+void module_meta_date_changed::deal_call_edit_area(const std::string& id, EDIT_TYPE_ID edit_type_id)
 {
+    int aid=std::stoi(id);
     if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
     {
-        if(is_monkeycar_area(id))
-        {
-            area_list::instance()->init_monkeycar_area(id);
-        }
-        else
-        {
-            area_list::instance()->init_from_db(id);
-        }
+        area_list::instance()->init_from_db(aid);
     }
     else if(ET_DELETE == edit_type_id)
     {
-        auto area_ptr = area_list::instance()->get(id);
-        if(!area_ptr)
-        {
-            log_info("区域已经删除:areaid=%d", id);
-            return;
-        }
-        //删除告警
-        delete_area_event(area_ptr);
-        area_list::instance()->remove(id);
+        area_list::instance()->remove(aid);
+       // auto area_ptr = area_list::instance()->get(aid);
+       // if(!area_ptr)
+       // {
+       //     log_info("区域已经删除:areaid=%d", aid);
+       //     return;
+       // }
     }
 }
 
@@ -211,8 +203,6 @@ void module_meta_date_changed::deal_call_edit_reader(int id, EDIT_TYPE_ID edit_t
     }
     else if(ET_DELETE == edit_type_id)
     {
-        //删除告警
-
         sit_list::instance()->remove(id);
     }
 }
@@ -383,29 +373,14 @@ bool module_meta_date_changed::try_get_edit_type_id(const std::string& op_type,
     return true;
 }
 
-bool module_meta_date_changed::is_monkeycar_area(int area_id)
-{
-    char sql[1024] = {'\0'};
-    sprintf(sql,"select monkeycar_areaid from dat_monkeycar_base_info where monkeycar_areaid=%d;", area_id);
-    std::string Error;
-    YADB::CDBResultSet DBRes;
-    sDBConnPool.Query(sql,DBRes,Error);
-    int64_t nCount = DBRes.GetRecordCount( Error );
-
-    log_info("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
-    std_debug("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
-
-    return  (nCount > 0);
-}
-
 ///删除区域所有报警信息
-void module_meta_date_changed::delete_area_event(std::shared_ptr<area> area_ptr)
-{
-    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
-    {
-        event_tool::instance()->handle_event(OT_AREA, static_cast<EVENT_TYPE>(i), area_ptr->id(), 0, 0, false);
-    }
-}
+//void module_meta_date_changed::delete_area_event(std::shared_ptr<area> area_ptr)
+//{
+//    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
+//    {
+//        event_tool::instance()->handle_event(OT_AREA, static_cast<EVENT_TYPE>(i), area_ptr->id(), 0, 0, false);
+//    }
+//}
 
 void module_meta_date_changed::delete_antenna(int id)
 {

+ 1 - 6
module_service/module_meta_date_changed.h

@@ -59,7 +59,7 @@ private:
 
     void deal_call_edit_antenna(int id,EDIT_TYPE_ID edit_type_id);
 
-    void deal_call_edit_area(int id, EDIT_TYPE_ID edit_type_id);
+    void deal_call_edit_area(const std::string & id, EDIT_TYPE_ID edit_type_id);
 
     void deal_call_edit_map(int id, EDIT_TYPE_ID edit_type_id);
 
@@ -80,11 +80,6 @@ private:
 
     bool try_get_edit_type_id(const std::string& op_type, EDIT_TYPE_ID& out_edit_type_id);
 
-    bool is_monkeycar_area(int area_id);
-
-    ///删除区域所有报警信息
-    static void delete_area_event(std::shared_ptr<area> area_ptr);
-
     void delete_antenna(int id);
 
     bool is_cur_map(int id);