Browse Source

修复区域core的bug,area_tool 升井的时候不能直接reset

lixioayao 6 years ago
parent
commit
37c874d181
7 changed files with 27 additions and 20 deletions
  1. 1 1
      ant.h
  2. 0 3
      area.cpp
  3. 4 1
      area.h
  4. 3 3
      card_base.cpp
  5. 4 2
      card_person.cpp
  6. 13 8
      mine.h
  7. 2 2
      module_service/area_business_person_attendance.cpp

+ 1 - 1
ant.h

@@ -194,7 +194,7 @@ struct site:point,std::enable_shared_from_this<site>
         return READER_TYPE_ID_UP == m_reader_type_id;
     }
     void create_area();
-    const std::shared_ptr<area>& get_area()const{return m_area;}
+    const std::shared_ptr<area> &get_area()const{return m_area;}
     point get_dstp(const point pt) const
     {
         point tmp;

+ 0 - 3
area.cpp

@@ -539,7 +539,6 @@ void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const poin
       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();
@@ -557,7 +556,6 @@ void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const poin
 	auto a1=areas.begin() ,ae=areas.end();
 
 	std::vector<std::shared_ptr<area_hover>> nlist;
-
 	while (c1!=ce && a1!=ae)
 	{
 		if ((*c1)->id()<(*a1)->id()) //离开区域
@@ -692,7 +690,6 @@ void area_tool::set_area_info(int mapid,int areaid,const point &pt,uint64_t t)
 	int landmark_id = std::get<0>(lm);
 	int landmark_dir = std::get<1>(lm);
 	double landmark_dis = std::get<2>(lm)*m_scale;
-	//log_info("landmark:%d %d %.2f,(%.2f,%.2f),%f",landmark_id,landmark_dir,landmark_dis,pt.x,pt.y,m_scale);
 	std::tuple<int,int,int,double,uint64_t> tinfo=std::make_tuple(areaid,landmark_id,landmark_dir,landmark_dis,t);
 	m_area_info[areaid].swap(tinfo);
 }

+ 4 - 1
area.h

@@ -217,7 +217,10 @@ struct area_tool
 	int m_mapid=-1;
 	double m_scale=2.0;
     std::shared_ptr<site> m_site=nullptr;
-
+    void clear()
+    {
+        m_area_info.clear();
+    }
     void set(const std::shared_ptr<site>& s)
     {
         if(m_site != s)

+ 3 - 3
card_base.cpp

@@ -41,9 +41,9 @@ void card_location_base::on_location(const std::vector<point>&vp,const std::vect
 		x = tool_other::round(pt.x,3);
 		y = tool_other::round(pt.y,3);
 
-		Msg m;
-		m.type=m_type;m.x=(int)x;m.y=(int)y;m.cmd=CMD_HANDLE;m.cardid=m_type<<32|m_id;
-		cardMgr::instance()->tryPut(m);
+		//Msg m;
+		//m.type=m_type;m.x=(int)x;m.y=(int)y;m.cmd=CMD_HANDLE;m.cardid=m_type<<32|m_id;
+		//cardMgr::instance()->tryPut(m);
 
 		double acc = lm[0].m_acc;
         m_acc = lm[0].m_acc;

+ 4 - 2
card_person.cpp

@@ -33,8 +33,10 @@ person::~person()
 }
 void person::clear()
 {
-	m_area_tool.reset(new area_tool);
-	m_mine_tool.reset(new mine_tool);
+	//m_area_tool.reset(new area_tool);
+	//m_mine_tool.reset(new mine_tool);
+    m_mine_tool->clear();
+    m_area_tool->clear();
 	card_location_base::clear();
     uint64_t id = tool_other::type_id_to_u64(m_type,m_id);
     for(std::uint8_t i=0;i<CARD_EVENT_COUNT_MAX;i++)

+ 13 - 8
mine.h

@@ -17,17 +17,22 @@ struct card_location_base;
 struct mine_tool
 {
     mine_tool()
-		:m_over_speed_count(0)
-		,m_normal_speed_count(0)
-		,m_status_call(0)
-        ,m_is_attendance(false)
-		,m_attendance_start_time(std::chrono::seconds(0))
-		,m_is_overtime(false)
-		,m_overtime(std::chrono::seconds(0))
     {
-
+        clear();
     }
 
+    void clear()
+    {
+        m_over_speed_count=0;
+		m_over_speed_count=0;
+		m_normal_speed_count=0;
+		m_status_call=0;
+        m_is_attendance=false;
+		m_attendance_start_time=std::chrono::system_clock::time_point(std::chrono::seconds(0));
+		m_is_overtime=false;
+		m_overtime=std::chrono::system_clock::time_point(std::chrono::seconds(0));
+        
+    }
     int    m_over_speed_count;
     int    m_normal_speed_count;
     ///CALL_NONE(0):没有呼叫,CALL_ING(2):正在呼叫,CALL_SUCCESSED(1):呼叫成功

+ 2 - 2
module_service/area_business_person_attendance.cpp

@@ -54,8 +54,6 @@ void area_business_person_attendance::on_leave(const std::shared_ptr<area_hover>
     //作为一条结束考勤记录保存到数据库
     db_tool::save_attendance(card_ptr, area_hover_ptr);
 
-    auto per = std::dynamic_pointer_cast<person>(card_ptr);
-    per->clear();
 
 
 	YA::_CARD_POS_ cp;
@@ -77,6 +75,8 @@ void area_business_person_attendance::on_leave(const std::shared_ptr<area_hover>
         swsClientMgr.send(JSON_CMD_VALUE_PUSH, tool_json::doc_to_json(doc));
     }
     
+    auto per = std::dynamic_pointer_cast<person>(card_ptr);
+    per->clear();
 }
 
 /**