daiyueteng 6 years ago
parent
commit
f7c12cdff0

+ 9 - 1
area.cpp

@@ -12,8 +12,8 @@
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/classification.hpp>
 
-#include"module_service/module_area.h"
 #include "area_business.h"
+#include"card.h"
 
 template<> std::shared_ptr<area_list> 
 single_base<area_list, int, std::shared_ptr<area>>::m_instance=std::make_shared<area_list>();
@@ -548,6 +548,14 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
 	m_hover_list=std::move(nlist);
 }
 
+void area_tool::on_leave(const std::shared_ptr<card_location_base>& c)
+{
+    for(auto& t:m_hover_list)
+    {
+        t->m_area->on_leave(t, c);
+    }
+}
+
 void area_hover::setLandmark(const point &pt)
 {
 	set(pt);

+ 1 - 0
area.h

@@ -214,6 +214,7 @@ struct area_tool
 	}
 
 	void on_point(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>& c,const point&pt);
+    void on_leave(const std::shared_ptr<card_location_base>& c);
 
     void setLandmark(const point &pt)
     {

+ 6 - 0
card_base.h

@@ -22,6 +22,7 @@ struct card_pos;
 struct area_hover;
 struct site_area_hover;
 struct site;
+struct area_tool;
 
 namespace YA{struct _CARD_POS_;}
 
@@ -89,6 +90,11 @@ struct card_location_base:card,std::enable_shared_from_this<card_location_base>
     virtual int get_vehicle_type_id(){return  0;}
     virtual std::tuple<time_t,time_t,int,int,int,int,double,double> getLandmark()=0;
 	virtual int get_area()=0;
+    virtual std::shared_ptr<area_tool> get_area_tool()=0;
+    virtual int get_vehicle_category_id()
+    {
+        return -1;
+    }
 
     void on_message(zloop<task*> * loop,const message_locinfo&loc,bool is_history);
     void on_location(const std::vector<point>&vp,const std::vector<loc_message> &lm );

+ 9 - 0
card_car.h

@@ -34,6 +34,15 @@ public:
 	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);
 	virtual int get_area();
     int get_vehicle_type_id();
+    virtual std::shared_ptr<area_tool> get_area_tool()
+    {
+        return m_area_tool;
+    }
+
+    virtual int get_vehicle_category_id()
+    {
+        return m_vehicle_category_id;
+    }
 
 private:
 	void handle_three_rates(const point &pt);

+ 4 - 0
card_person.h

@@ -28,6 +28,10 @@ struct person:card_location_base, card_area
 	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);
     virtual std::tuple<time_t,time_t,int,int,int,int,double,double> getLandmark();
 	virtual int get_area();
+    virtual std::shared_ptr<area_tool> get_area_tool()
+    {
+        return m_area_tool;
+    }
 };
 
 #endif

+ 5 - 1
module_service/area_business_person_attendance.cpp

@@ -116,7 +116,11 @@ void area_business_person_attendance::up_mine(std::shared_ptr<card_location_base
     rapidjson::Document::AllocatorType& allocator=doc.GetAllocator();
 
     _to_json_card_up_one(card_ptr, datas, allocator);
-    module_meta_date_changed::clear_card(card_ptr);
+    //module_meta_date_changed::clear_card(card_ptr);
+
+    auto rea_tool = card_ptr->get_area_tool();
+    rea_tool->on_leave(card_ptr);
+    card_ptr->clear();
 
     //升井json发给web
     if(datas.Size() > 0)

+ 40 - 35
module_service/module_meta_date_changed.cpp

@@ -101,32 +101,36 @@ void module_meta_date_changed::accept(sio::message::ptr const& data)
 ///速度,状态 呼救 呼叫 告警相关。即保留基础信息,其他的重置。
 void module_meta_date_changed::clear_card(std::shared_ptr<card_location_base> card_ptr)
 {
-    //删除
-    //card_ptr->del_card_pos();
-    // 升井 删除所有报警信息
-    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
-    {
-        if (i == EVENT_TYPE::ET_CARD_LOW_POWER_SERIOUS)
-        {
-            continue;
-        }
-
-        uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
-        event_tool::instance()->handle_event(OT_CARD, static_cast<EVENT_TYPE>(i), id, 0, 0, false);
+    auto rea_tool = card_ptr->get_area_tool();
+    rea_tool->on_leave(card_ptr);
+    card_ptr->clear();
 
-//        auto ev_ptr = event_list::instance()->get_event_card(
-//                card_ptr->m_id, card_ptr->m_type, static_cast<EVENT_TYPE>(i));
-//        if(ev_ptr && !ev_ptr->is_end()) //
+//    //删除
+//    //card_ptr->del_card_pos();
+//    // 升井 删除所有报警信息
+//    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
+//    {
+//        if (i == EVENT_TYPE::ET_CARD_LOW_POWER_SERIOUS)
 //        {
-//            event_list::copy_event(card_ptr, ev_ptr);
+//            continue;
+//        }
 
-//            ev_ptr->m_status = ES_END;
+//        uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
+//        event_tool::instance()->handle_event(OT_CARD, static_cast<EVENT_TYPE>(i), id, 0, 0, false);
+
+////        auto ev_ptr = event_list::instance()->get_event_card(
+////                card_ptr->m_id, card_ptr->m_type, static_cast<EVENT_TYPE>(i));
+////        if(ev_ptr && !ev_ptr->is_end()) //
+////        {
+////            event_list::copy_event(card_ptr, ev_ptr);
+
+////            ev_ptr->m_status = ES_END;
+
+////            event_list::save_event(ev_ptr);
+////        }
+//    }
 
-//            event_list::save_event(ev_ptr);
-//        }
-    }
 
-    card_ptr->clear();
 }
 
 
@@ -311,23 +315,24 @@ void module_meta_date_changed::remove_card(uint32_t id, int32_t type)
         return;
     }
 
-    auto area_hover_ptr = card_ptr->get_area_hover();
-    if(area_hover_ptr && 0!=area_hover_ptr->id() && 0!=area_hover_ptr->mapid())
-    {
-        module_area::on_leave(card_ptr->m_id, area_hover_ptr, card_ptr->m_type);
-    }
+//    auto area_hover_ptr = card_ptr->get_area_hover();
+//    if(area_hover_ptr && 0!=area_hover_ptr->id() && 0!=area_hover_ptr->mapid())
+//    {
+//        module_area::on_leave(card_ptr->m_id, area_hover_ptr, card_ptr->m_type);
+//    }
 
-    if(card_ptr->is_person())
-    {
-        module_attendance_person::up_mine(card_ptr, nullptr);
-    }
-    else
-    {
-        module_attendance_vehicle::save_attendance(card_ptr, nullptr);
+//    if(card_ptr->is_person())
+//    {
+//        module_attendance_person::up_mine(card_ptr, nullptr);
+//    }
+//    else
+//    {
+//        module_attendance_vehicle::save_attendance(card_ptr, nullptr);
 
-        module_meta_date_changed::clear_card(card_ptr);
-    }
+//        module_meta_date_changed::clear_card(card_ptr);
+//    }
 
+    module_meta_date_changed::clear_card(card_ptr);
     // 避免状态重置
     card_list::instance()->remove(card_id);
     log_info("基础数据, 在全局列表中删除卡成功, id=%d, type=%d", id, type);

+ 4 - 4
module_service/module_mgr.cpp

@@ -7,7 +7,7 @@
 #include"area_business_speed_checker.h"
 #include"module_other_alarm.h"
 #include"area_business_car_attendance.h"
-#include"module_motionless_persion.h"
+#include"area_business_motionless_persion.h"
 #include"area_business_geofault.h"
 #include"log.h"
 #include"common_tool.h"
@@ -20,7 +20,7 @@ void module_mgr::init(config_file& config, std::map<std::string, YA::MSG_HANDLE_
     module_web::instance()->init(config, MsgFuncList);
     module_call::instance()->init(config);
 
-    module_motionless_persion::instance()->init(config);
+    area_business_motionless_persion::init(config);
     area_business_geofault::init(config);
 }
 
@@ -35,7 +35,7 @@ void module_mgr::start()
 
     module_web::instance()->start();
     module_call::instance()->start();
-    module_motionless_persion::instance()->start();
+    //module_motionless_persion::instance()->start();
 }
 
 /**
@@ -45,7 +45,7 @@ void module_mgr::stop()
 {
     module_web::instance()->stop();
     module_call::instance()->stop();
-    module_motionless_persion::instance()->stop();
+    //module_motionless_persion::instance()->stop();
 }
 
 void module_mgr::do_status(STATUS_CARD st, uint32_t card_id, int32_t type)