Browse Source

修改手动升井逻辑,修改卡map_id从分站直接获取。

zzj 6 years ago
parent
commit
babeb78706
8 changed files with 47 additions and 17 deletions
  1. 20 6
      area.h
  2. 2 2
      card.cpp
  3. 4 2
      card_base.cpp
  4. 8 0
      card_base.h
  5. 3 3
      card_car.cpp
  6. 8 2
      card_person.cpp
  7. 1 1
      event.cpp
  8. 1 1
      select_tool.cpp

+ 20 - 6
area.h

@@ -8,6 +8,7 @@
 #include <point.h>
 #include "common.h"
 #include <write-copy.h>
+#include <ant.h>
 #include <set>
 #include <map>
 
@@ -206,24 +207,37 @@ struct area_hover
 struct site;
 struct task;
 struct area_tool
-{
+{ 
+private:
+	int m_mapid=-1;
+public:
+
+	int get_mapid()const
+	{
+		return m_mapid;
+	}
+
+	double m_scale=2.0;
 	//卡所在的所有area的列表,以id排序小->大
 	std::vector<std::shared_ptr<area_hover>> m_hover_list;
 
 	//推送卡位置时需要推送的所在区域id列表
 	std::map<int,std::tuple<int,int,int,double,uint64_t>> m_area_info;
-	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)
+
+    void set_site(const std::shared_ptr<site>& s)
     {
-        if(m_site != s)
-          m_site=s;
+		if(s == nullptr || m_site == s)
+			return;
+
+        m_site=s;
+		m_mapid=m_site->m_map_id;
     }
+
 	void on_change_business(const std::shared_ptr<card_location_base>& c, const task&t);
 	void on_point(const std::shared_ptr<card_location_base>& c,const point&pt);
     void on_leave(const std::shared_ptr<card_location_base>& c);

+ 2 - 2
card.cpp

@@ -198,7 +198,7 @@ void card_list::load_his_card_postion_vehicle()
             {
                 auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
                 area_tool->m_hover_list.push_back(area_hover_ptr);
-                area_tool->set(sit_ptr);
+                area_tool->set_site(sit_ptr);
             }
 
             //解析area_info
@@ -310,7 +310,7 @@ void card_list::load_his_card_postion_staff()
             {
                 auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
                 area_tool->m_hover_list.push_back(area_hover_ptr);
-                area_tool->set(sit_ptr);
+                area_tool->set_site(sit_ptr);
             }
 
             //解析area_info

+ 4 - 2
card_base.cpp

@@ -67,11 +67,13 @@ void card_location_base::on_message(zloop<task*> * loop,const message_locinfo&lo
 		return;
 	}
 
+
+	auto area_tool=get_area_tool();
+	area_tool->set_site(site_ptr);
+
 	if(site_ptr->is_up_site())
 	{
         log_info("%d被井上分站[%d]收到",m_id,site_ptr->id());
-		auto area_tool=get_area_tool();
-		area_tool->set(site_ptr);
 		area_tool->on_point(shared_from_this(),point(1,1));
 
 		this->site_hover(loc.m_site_id);

+ 8 - 0
card_base.h

@@ -3,6 +3,7 @@
 
 #include <vector>
 #include <memory>
+#include <atomic>
 #include "point.h"
 #include "common.h"
 
@@ -70,6 +71,13 @@ struct card_location_base:card,std::enable_shared_from_this<card_location_base>
 	std::unique_ptr<card_message_handle> m_message_handle;
 	std::unique_ptr<location_card> m_his_location_card;
 
+	std::atomic<int> m_upmine_flag{0};
+
+	void inc_upmine_flag()
+	{
+		++m_upmine_flag;
+	}
+
     card_location_base()=default;
     card_location_base(const std::string&type,uint32_t id,uint16_t dis,int16_t t,int32_t,int32_t,uint32_t );
 

+ 3 - 3
card_car.cpp

@@ -35,7 +35,7 @@ void car::set_area_info(int mapid,double scale,int areaid,uint64_t t,int type)
 void car::do_business(const std::shared_ptr<site>&site,const point &pt,double acc)
 {
 	m_acc=acc;
-    m_area_tool->set(site);
+    m_area_tool->set_site(site);
 	m_area_tool->on_point(shared_from_this(),pt);
 	m_timeval=m_time;
 	m_mine_tool->on_point(m_id, m_type, m_vehicle_category_id);
@@ -58,7 +58,7 @@ void car::handle_three_rates(const point &pt)
 	//const auto lm = m_area_tool->getLandmark();
 //	cp.enter_time = std::get<0>(lm)*1000;
 //	cp.area_id = std::get<3>(lm);
-	cp.map_id = m_area_tool->m_mapid;
+	cp.map_id = m_area_tool->get_mapid();
 	cp.vibration=m_acc;
 	put_three_rates(cp);
 }
@@ -85,7 +85,7 @@ void car::make_package()
 	YA::_CARD_POS_ cp;
 	loc_point pt = getSmoothPoint();
 	cp.area_info=m_area_tool->m_area_info;	
-	cp.map_id =m_area_tool->m_mapid;
+	cp.map_id =m_area_tool->get_mapid();
 
 	int32_t biz_stat=m_biz_stat;
 	cp.biz_stat=biz_stat;

+ 8 - 2
card_person.cpp

@@ -90,7 +90,7 @@ std::shared_ptr<mine_tool> person::get_mine_tool()
 
 void person::do_business(const std::shared_ptr<site>&site,const point &pt,double acc)
 {
-    m_area_tool->set(site);
+    m_area_tool->set_site(site);
 	m_area_tool->on_point(shared_from_this(),pt);
 	m_timeval=m_time;
 	handle_three_rates(pt);
@@ -122,7 +122,7 @@ void person::on_timer()
 	point pt = getSmoothPoint(_time);
     
 	cp.area_info=m_area_tool->m_area_info;	
-	cp.map_id =m_area_tool->m_mapid;
+	cp.map_id =m_area_tool->get_mapid();
 
 	cp.biz_stat = m_biz_stat;
 	cp.down_time = m_mine_tool->get_down_time();
@@ -141,6 +141,12 @@ void person::on_timer()
 		m_area_tool->on_point(shared_from_this(),pt);
 		m_biz_stat=get_stat();
 	}
+
+	if(m_upmine_flag.load())
+	{
+		m_upmine_flag.store(0);
+		m_area_tool->on_leave(shared_from_this());
+	}
 }
 
 point person::getSmoothPoint(uint64_t& t)

+ 1 - 1
event.cpp

@@ -218,7 +218,7 @@ 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_map_id = card_ptr->get_area_tool()->get_mapid();
         }
     }
     return event_ptr;

+ 1 - 1
select_tool.cpp

@@ -158,7 +158,7 @@ bool select_point_object::select_solution(const std::vector<point> &vp,const sit
        std::array<solpoint,4> res;
        for(int i=0;i<2;i++)
 	   {
-           int x = i==0?3:2;
+           int x = i+2;
 			double d=vp[i].dist(vp[x]);
 			if(d<sit->ant_dist()*3)
 			{