Browse Source

增加告警显示等级,针对不同性质的用户进行区别显示

lixioayao 6 years ago
parent
commit
169544e01a

+ 4 - 0
area.cpp

@@ -73,10 +73,14 @@ area::area(int id,int limit_count_person, int limit_time_person,double scale,int
      ,m_mapid(mapid)
      ,m_person_count(0)
      ,m_vehicle_count(0)
+     ,m_person_show_count(0)
+     ,m_vehicle_show_count(0)
     {
 		m_area_business_list=area_business::get_instance_list(m_area_type,id);
 		m_event_person_count = false;
 		m_event_vehicle_count = false;
+		m_event_person_show_count = false;
+		m_event_vehicle_show_count = false;
     }
 
 

+ 6 - 0
area.h

@@ -86,12 +86,14 @@ public:
     int m_limit_person_count;
     //是否人卡超员已有告警
     bool m_event_person_count;
+    bool m_event_person_show_count;
 
 	//人卡超时及超员数量(阀值)
     int m_limit_vehicle_second;
     int m_limit_vehicle_count;
     //是否人卡超员已有告警
     bool m_event_vehicle_count;
+    bool m_event_vehicle_show_count;
     double m_scale;
     int32_t m_mapid;
 
@@ -99,6 +101,10 @@ public:
     std::atomic<int> m_person_count;
     ///区域车卡数
     std::atomic<int> m_vehicle_count;
+    ///区域显示人卡数
+    std::atomic<int> m_person_show_count;
+    ///区域显示车卡数
+    std::atomic<int> m_vehicle_show_count;
 
 
     //区域速度门限

+ 6 - 1
common.h

@@ -96,7 +96,12 @@ enum OBJECT_TYPE
     ///标识卡,包括人员、车辆、自组网等
     OT_CARD = 9,
 };
-
+enum EVENT_DIS_TYPE
+{
+    DT_NORMAL=1,
+    DT_SPECIAL=2,
+    DT_COMMON=3
+};
 enum EVENT_TYPE{ // 事件类型
     ET_OVER_COUNT_PERSON = 1,       // 井下人员超员
     ET_OVER_COUNT_VEHICLE = 2,      // 井下车辆超员

+ 31 - 24
event.cpp

@@ -15,8 +15,7 @@
 
 uint64_t ya_event::get_list_id()
 {
-    uint64_t car_id = tool_other::type_id_to_u64(tool_other::id64_to_type(m_obj_id), tool_other::id64_to_id(m_obj_id));
-    return  event_list::to_list_id(m_ev_type, m_obj_type,car_id);
+    return m_id;
 }
 
 
@@ -26,7 +25,7 @@ struct Event
     Event(OBJECT_TYPE oid)
         :m_oid(oid)
     {}
-    void handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,const std::string &desc="");
+    void handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,EVENT_DIS_TYPE edt,const std::string &desc);
     virtual std::shared_ptr<ya_event> on_message(EVENT_TYPE et,uint64_t id,bool f)=0;
     std::shared_ptr<ya_event> create_event(const std::string&obj_id,EVENT_TYPE ev_type);
     virtual ~Event(){}
@@ -73,9 +72,9 @@ void event_tool::make_event_object()
     m_map[OT_CARD] = std::make_shared<card_event>();
 }
 
-void event_tool::handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,const std::string &desc/*=""*/)
+void event_tool::handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,EVENT_DIS_TYPE edt/*=DT_COMMON*/,const std::string &desc/*=""*/)
 {
-    m_map[ot]->handle_alarm_event(et,id,limit_value,cur_value,f,desc);
+    m_map[ot]->handle_alarm_event(et,id,limit_value,cur_value,f,edt,desc);
 }
 
 std::shared_ptr<ya_event> Event::create_event(const std::string&obj_id,EVENT_TYPE ev_type)
@@ -87,10 +86,10 @@ std::shared_ptr<ya_event> Event::create_event(const std::string&obj_id,EVENT_TYP
     return ev_ptr;
 }
 
-void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,const std::string &desc/*=""*/)
+void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,EVENT_DIS_TYPE edt,const std::string &desc)
 {
     std::shared_ptr<ya_event> ev_ptr = nullptr;
-    uint64_t eid = event_list::to_list_id(et,m_oid,id);
+    uint64_t eid = event_list::to_list_id(et,m_oid,id,edt);
     auto event_ptr = event_list::instance()->get(eid);
     if(f)
     {
@@ -115,6 +114,7 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
                 ev_ptr->m_limit_value=limit_value;
                 ev_ptr->m_desc=desc;
                 ev_ptr->m_id=eid;
+                ev_ptr->m_dis_type=edt;
                 //保存告警信息
                 event_list::instance()->add(eid,ev_ptr);
             }
@@ -205,13 +205,13 @@ std::shared_ptr<ya_event> card_event::on_message(EVENT_TYPE et,uint64_t id,bool
         std::string card_id = tool_other::get_string_cardid(id);
         if(!card_ptr)
         {
-            log_info("create_event.can not find card:%s",card_id.c_str());
+            log_error("Create_event.can not find card:%s",card_id.c_str());
             return event_ptr;
         }
         event_ptr=create_event(card_id,et);
         event_ptr->x = card_ptr->x;
         event_ptr->y = card_ptr->y;
-        event_ptr->m_is_display = card_ptr->m_display;
+        //event_ptr->m_is_display = card_ptr->m_display;
 
         auto area_info_map = card_ptr->get_area_tool()->m_area_info;
         if(!area_info_map.empty())
@@ -224,10 +224,10 @@ std::shared_ptr<ya_event> card_event::on_message(EVENT_TYPE et,uint64_t id,bool
     return event_ptr;
 }
 
-std::shared_ptr<ya_event> event_list::get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type)
+std::shared_ptr<ya_event> event_list::get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt)
 {
     uint64_t id64 = tool_other::type_id_to_u64(card_type, card_id);
-    return base::get(to_list_id(ev_type, OT_CARD, id64));
+    return base::get(to_list_id(ev_type, OT_CARD, id64,edt));
 }
 
 void event_list::save_event(std::shared_ptr<ya_event> ev_ptr)
@@ -235,10 +235,10 @@ 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,id, stat, event_type_id, obj_type_id, obj_id, \
+            "INSERT IGNORE INTO his_event_data(event_id,id, stat, event_type_id, obj_type_id, obj_id, dis_type\
             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(),
+            VALUES(%ld,%ld, %d, %d, %d, %s, %d, %d, %d, %.2f, %.2f, %f, %f, '%s', '%s');",
+            ev_ptr->m_ev_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_dis_type,
             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());
 
@@ -248,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, 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,dis_type,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 \
@@ -259,8 +259,9 @@ void event_list::load_his_data_from_db()
                                                  WHEN 10 THEN DATE_SUB(NOW(),INTERVAL 2 DAY) \
                                                  END) \
                                AND cur_time < NOW()\
-                               GROUP BY event_type_id, obj_id) \
-            AND  event_id NOT IN ( SELECT event_id FROM (SELECT * FROM his_event_data WHERE  stat=100) s);";
+                               GROUP BY event_type_id, obj_id,dis_type) \
+            AND  event_id NOT IN ( SELECT event_id FROM his_event_data WHERE  stat=100)\
+            AND event_type_id NOT IN (21,22);";
     std::string Error;
     YADB::CDBResultSet DBRes;
     sDBConnPool.Query(sql,DBRes,Error);
@@ -288,6 +289,9 @@ void event_list::load_his_data_from_db()
             std::string obj_id  = "";
             DBRes.GetField( "obj_id",obj_id, Error );
 
+            int dis_type  = 0;
+            DBRes.GetField( "dis_type",dis_type, Error );
+
             int map_id  = 0;
             DBRes.GetField( "map_id",map_id, Error );
 
@@ -318,6 +322,7 @@ void event_list::load_his_data_from_db()
             ev->m_ev_type = static_cast<EVENT_TYPE>(event_type_id);
 
             ev->m_obj_type = static_cast<OBJECT_TYPE>(obj_type_id);
+            ev->m_dis_type = static_cast<EVENT_DIS_TYPE>(dis_type);
             ev->m_obj_id = tool_other::to13str(obj_id);
             ev->m_cur_time = tool_time::to_time_ex(cur_time);
 
@@ -331,8 +336,8 @@ void event_list::load_his_data_from_db()
             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()
+            log_info("event_list %lld,%lld,%d,%d,%d,%s,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%s"
+                     , ev->m_ev_id,ev->m_id,ev->m_status,ev->m_ev_type,ev->m_obj_type,ev->m_obj_id.c_str(),ev->m_dis_type
                      ,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());
@@ -351,10 +356,11 @@ std::string event_list::evs_to_json(std::vector<std::shared_ptr<ya_event>> arr)
     auto it=arr.begin();
     for(;it!=arr.end();++it)
     {
-        if((*it)->m_is_display)
-        {
-            _ev_to_node(*it, allocator, data);
-        }
+        _ev_to_node(*it, allocator, data);
+       // if((*it)->m_is_display)
+       // {
+       //     _ev_to_node(*it, allocator, data);
+       // }
     }
 
     doc.AddMember(JSON_ROOT_KEY_CMD,JSON_CMD_VALUE_EVENT, allocator);
@@ -374,13 +380,14 @@ void event_list::_ev_to_node(std::shared_ptr<ya_event> ev_ptr,
 {
     rapidjson::Value ev(rapidjson::kObjectType);
 
-    ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->get_id(), allocator);
+    ev.AddMember(JSON_KEY_EVENT_EVENT_ID,ev_ptr->m_ev_id, allocator);
     ev.AddMember(JSON_KEY_EVENT_STATUS,ev_ptr->m_status, allocator);
 
     ev.AddMember(JSON_KEY_EVENT_TYPE_ID,ev_ptr->m_ev_type, allocator);
     ev.AddMember(JSON_KEY_EVENT_OBJ_TYPE_ID,ev_ptr->m_obj_type, allocator);
 
     tool_json::add_member(ev, JSON_KEY_EVENT_OBJ_ID, ev_ptr->m_obj_id, allocator);
+    ev.AddMember(JSON_KEY_EVENT_DIS_TYPE_ID,ev_ptr->m_dis_type, allocator);
     ev.AddMember(JSON_KEY_EVENT_MAP_ID,ev_ptr->m_map_id, allocator);
     ev.AddMember(JSON_KEY_EVENT_AREA_ID,ev_ptr->m_area_id, allocator);
     ev.AddMember(JSON_KEY_EVENT_X,ev_ptr->x, allocator);

+ 15 - 19
event.h

@@ -12,8 +12,6 @@
 #include "common.h"
 struct ya_event
 {
-private:
-    uint64_t m_ev_id;
 public:
     ya_event(uint64_t e_id):m_cur_time(std::chrono::system_clock::now())
     {
@@ -28,12 +26,14 @@ public:
         m_desc = "";
 
         m_status=ES_START;
-        m_is_display=true;
+        //m_is_display=true;
         m_is_sent=false;
     }
     ~ya_event(){}
 public:
     //key of event_list. 
+    uint64_t m_ev_id;
+
     uint64_t m_id;
     ///告警状态,开始、结束
     EVENT_STATUS m_status;
@@ -42,6 +42,7 @@ public:
     EVENT_TYPE m_ev_type;
     ///告警对象类型
     OBJECT_TYPE m_obj_type;
+    EVENT_DIS_TYPE m_dis_type;
     /// 告警对象编号,与告警对象类型对应,如告警对象类型为分站,此字段为分站编号
     std::string m_obj_id;
     ///当前时间,为告警事件的触发时间,如果状态为开始,则表示开始时间,否则为结束时间
@@ -62,7 +63,7 @@ public:
     ///描述
     std::string m_desc;
 
-    bool m_is_display;
+    //bool m_is_display;
     //是否已经发送 ture bu发送, false推送. 推送完置为true
     bool m_is_sent;
 
@@ -73,22 +74,17 @@ public:
 
     ///作为事件map列表的id,方便查找;
     uint64_t get_list_id();
-
-    uint64_t get_id()
-    {
-        return m_ev_id;
-    }
 };
 
 class Event;
 struct event_tool
 {
 	template <class UnaryPredicate>
-	void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,UnaryPredicate p,const std::string &desc="")
+	void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,UnaryPredicate p,EVENT_DIS_TYPE edt=DT_COMMON,const std::string &desc="")
 	{
-		handle_event(ot,et,id,limit_value,cur_value,p(),desc);
+		handle_event(ot,et,id,limit_value,cur_value,p(),edt,desc);
 	}
-	void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,const std::string &desc="");
+	void handle_event(OBJECT_TYPE ot,EVENT_TYPE et,uint64_t id,double limit_value,double cur_value,bool f,EVENT_DIS_TYPE edt=DT_COMMON,const std::string &desc="");
 	static event_tool * instance();
 private:
     event_tool()
@@ -102,21 +98,21 @@ private:
 struct event_list:single_base<event_list,uint64_t,std::shared_ptr<ya_event>>
 {
 public:
-    static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type,uint64_t obj_id)
+    static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type,uint64_t obj_id,EVENT_DIS_TYPE edt)
     {
-        return (static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)|obj_id;
+        return (static_cast<uint64_t>(edt)<<58)|(static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)|obj_id;
     }
 
-    std::shared_ptr<ya_event> get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type);
+    std::shared_ptr<ya_event> get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt=DT_COMMON);
 
-    std::shared_ptr<ya_event> get_event_area(int32_t area_id, EVENT_TYPE ev_type)
+    std::shared_ptr<ya_event> get_event_area(int32_t area_id, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt)
     {
-        return base::get(to_list_id(ev_type, OT_AREA, static_cast<uint64_t>(area_id)));
+        return base::get(to_list_id(ev_type, OT_AREA, static_cast<uint64_t>(area_id),edt));
     }
 
-    std::shared_ptr<ya_event> get_event_reader(int32_t reader_id, EVENT_TYPE ev_type)
+    std::shared_ptr<ya_event> get_event_reader(int32_t reader_id, EVENT_TYPE ev_type,EVENT_DIS_TYPE edt=DT_COMMON)
     {
-        return base::get(to_list_id(ev_type,OT_DEVICE_READER, static_cast<uint64_t>(reader_id)));
+        return base::get(to_list_id(ev_type,OT_DEVICE_READER, static_cast<uint64_t>(reader_id),edt));
     }
 
     static void save_event(std::shared_ptr<ya_event> event_ptr);

+ 3 - 3
mine_business.cpp

@@ -560,7 +560,7 @@ void rear_end_collision_prevented_business::handle_message()
         {
             log_info("vehicle_alarm_time_ %s",vvid.c_str());
             if (vinfo.is_alarm){
-                event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,0,0,false,vvid);
+                event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,0,0,false,DT_COMMON,vvid);
             }
             it_cv = m_CloserVehicle.erase(it_cv);
             continue;
@@ -581,7 +581,7 @@ void rear_end_collision_prevented_business::handle_message()
             {
                 log_info("vehicle_alarm_backfired_timeout %s",vvid.c_str());
                 if(vinfo.is_alarm){
-                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,false,vvid);
+                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,false,DT_COMMON,vvid);
                 }
                 it_cv = m_CloserVehicle.erase(it_cv);
                 continue;
@@ -598,7 +598,7 @@ void rear_end_collision_prevented_business::handle_message()
                 if (!vinfo.is_alarm)
                 {
                     log_info("vehicle_alarm_real_end_timeout_exec %s",vvid.c_str());
-                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,true,vvid);
+                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,true,DT_COMMON,vvid);
                     vinfo.is_alarm = true;
                 }
             }

+ 75 - 59
module_service/area_business_count_checker.cpp

@@ -11,31 +11,35 @@
 	整个井下的超员和某个区域的超员都使用这个代码
 */
 
+static void check_event(bool &event_flag,EVENT_TYPE et,EVENT_DIS_TYPE edt,int id)
+{
+    if(!event_flag)
+    {
+        auto ev_p = event_list::instance()->get_event_area(id,et,edt);
+        if (ev_p && !ev_p->is_end())
+            event_flag = true;
+    }
+}
+
 //服务器重启加载数据
 void area_business_count_checker::on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
 {
     if (nullptr == a->m_area )
         return ;
-    if (c->is_person() && !a->m_area->m_event_person_count)
+    if (c->is_person())
     {
         EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
-        auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
-        if (ev_ptr_temp && !ev_ptr_temp->is_end())
-            a->m_area->m_event_person_count = true;
-
+        check_event(a->m_area->m_event_person_count,ev,DT_NORMAL,a->m_area->id());
+        check_event(a->m_area->m_event_person_show_count,ev,DT_SPECIAL,a->m_area->id());
     }
-    else if (c->is_vehicle() && !a->m_area->m_event_vehicle_count)
+    else if (c->is_vehicle())
     {
         EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
-        auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
-        if (ev_ptr_temp && !ev_ptr_temp->is_end())
-        {
-            a->m_area->m_event_vehicle_count = true;
-        }
+        check_event(a->m_area->m_event_vehicle_count,ev,DT_NORMAL,a->m_area->id());
+        check_event(a->m_area->m_event_vehicle_show_count,ev,DT_SPECIAL,a->m_area->id());
     }
     on_enter(a,c,ptr);
 }
-
 //增加计数,并进行判断
 void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
                                            const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
@@ -45,32 +49,42 @@ void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
 	if (c->is_person())
 	{
 		a->m_area->m_person_count ++ ;
+        if(c->m_display)
+		    a->m_area->m_person_show_count ++ ;
         int pc=a->m_area->m_person_count.load();
-		if (pc > a->m_area->m_limit_person_count)
-		{
-			a->m_area->m_event_person_count = true;
-			EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
-			event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),a->m_area->m_limit_person_count,pc,true);
-			log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
-					,ev,a->m_area->id(),a->m_area->m_limit_person_count,pc);
-		}
+        int pc_=a->m_area->m_person_show_count.load();
+        int limit_val=a->m_area->m_limit_person_count;
+        int aid=a->m_area->id();
+	    EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
+        if(pc>limit_val){
+		    event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_person_count=true,DT_NORMAL);
+		    log_info("person_count_enter:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
+        if(pc_>limit_val){
+		    event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_person_show_count=true,DT_SPECIAL);
+		    log_info("person_count_enter_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
 	}
 	else if (c->is_vehicle())
 	{
 		a->m_area->m_vehicle_count ++ ;
+        if(c->m_display)
+		    a->m_area->m_vehicle_show_count ++ ;
         int vc=a->m_area->m_vehicle_count.load();
-		log_info("area_id:%d,v_count:%d",a->m_area->m_id,vc);
-		if (vc > a->m_area->m_limit_vehicle_count)
-		{
-			a->m_area->m_event_vehicle_count = true;
-			EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
-			event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),a->m_area->m_limit_vehicle_count,vc,true);
-			log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
-					,ev,a->m_area->id(),a->m_area->m_limit_vehicle_count,vc);
-		}
+        int vc_=a->m_area->m_vehicle_show_count.load();
+        int limit_val=a->m_area->m_limit_vehicle_count;
+        int aid=a->m_area->id();
+		EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
+        if(vc>limit_val){
+		    event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,vc,a->m_area->m_event_vehicle_count=true,DT_NORMAL);
+		    log_info("vehicle_count_enter:%d,v_count:%d limit:%d",aid,vc,limit_val);
+        }
+        if(vc_>limit_val){
+		    event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,vc_,a->m_area->m_event_vehicle_show_count=true,DT_SPECIAL);
+		    log_info("vehicle_count_enter_show:%d,v_count:%d limit:%d",aid,vc,limit_val);
+        }
 	}
 }
-
 void area_business_count_checker::on_hover(const std::shared_ptr<area_hover>&a,
                                            const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
 {
@@ -81,42 +95,44 @@ void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
                                            const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
 {
 	if (nullptr == a->m_area )
-	{
 		return ;
-	}
-	int limitVal = 0;
-	int curVal = 0;
-	bool tmp_event = false;
-	EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON;
 	if (c->is_person())
 	{
 		a->m_area->m_person_count -- ;
-		limitVal = a->m_area->m_limit_person_count;
-		curVal = a->m_area->m_person_count.load();
-		tmp_event = a->m_area->m_event_person_count;
-		ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
-		if(tmp_event && curVal <= limitVal)
-		{
-			a->m_area->m_event_person_count = false;
-			log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
-					,ev,a->m_area->id(),limitVal,curVal);
-			event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
-		}
+        if(c->m_display)
+		    a->m_area->m_person_show_count -- ;
+        int pc=a->m_area->m_person_count.load();
+        int pc_=a->m_area->m_person_show_count.load();
+        int limit_val=a->m_area->m_limit_person_count;
+        int aid=a->m_area->id();
+	    EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
+		if(a->m_area->m_event_person_count&& pc <= limit_val){
+			event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_person_count=false,DT_NORMAL);
+		    log_info("person_count_leave:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
+		if(a->m_area->m_event_person_show_count&& pc_ <= limit_val){
+			event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_person_show_count=false,DT_SPECIAL);
+		    log_info("person_count_leave_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
 	}
 	else if (c->is_vehicle())
 	{
-		a->m_area->m_vehicle_count -- ;
-		limitVal = a->m_area->m_limit_vehicle_count;
-		curVal = a->m_area->m_vehicle_count.load();
-		tmp_event = a->m_area->m_event_vehicle_count;
-		ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
-		if(tmp_event && curVal <= limitVal)
-		{
-			a->m_area->m_event_vehicle_count = false;
-			log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
-					,ev,a->m_area->id(),limitVal,curVal);
-			event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
-		}
+        a->m_area->m_vehicle_count -- ;
+        if(c->m_display)
+		    a->m_area->m_vehicle_show_count -- ;
+        int pc=a->m_area->m_vehicle_count.load();
+        int pc_=a->m_area->m_vehicle_show_count.load();
+        int limit_val=a->m_area->m_limit_vehicle_count;
+        int aid=a->m_area->id();
+		EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
+		if(a->m_area->m_event_vehicle_count&& pc <= limit_val){
+			event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_vehicle_count=false,DT_NORMAL);
+		    log_info("vehicle_count_leave:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
+		if(a->m_area->m_event_vehicle_show_count&& pc_ <= limit_val){
+			event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_vehicle_show_count=false,DT_SPECIAL);
+		    log_info("vehicle_count_leave_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
+        }
 	}
 }
 

+ 1 - 1
module_service/area_business_geofault.cpp

@@ -58,7 +58,7 @@ void area_business_geofault::on_enter(const std::shared_ptr<area_hover>&area_hov
         ptr_temp->m_far_geofault_count++;
     }
 
-    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_VEHICLE_NEAR_GEOFAULT);
+    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_VEHICLE_NEAR_GEOFAULT,DT_COMMON);
     ptr_temp->m_is_warning = (nullptr != ev_ptr_temp && !ev_ptr_temp->is_end());
 }
 

+ 1 - 1
module_service/area_business_motionless_persion.cpp

@@ -54,7 +54,7 @@ void area_business_motionless_persion::on_enter(const std::shared_ptr<area_hover
     auto ptr_temp = std::make_shared<motionless_data>();
     ptr = ptr_temp;
 
-    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_MOTIONLESS);
+    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_MOTIONLESS,DT_COMMON);
     ptr_temp->m_is_warning = (nullptr != ev_ptr_temp && !ev_ptr_temp->is_end());
 }
 

+ 1 - 1
module_service/area_business_person_dwell_checker.cpp

@@ -12,7 +12,7 @@ void area_business_person_dwell_checker::on_load_his(const std::shared_ptr<area_
     if(!c->is_person())
       return;
     EVENT_TYPE evType = a->m_area->is_mine() ? EVENT_TYPE::ET_CARD_OVER_TIME_PERSON : EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
-    auto ev_ptr_temp = event_list::instance()->get_event_card(c->m_id,c->m_type,evType);
+    auto ev_ptr_temp = event_list::instance()->get_event_card(c->m_id,c->m_type,evType,DT_COMMON);
     if (ev_ptr_temp && !ev_ptr_temp->is_end())
         c->set_event_flag(evType);
 }

+ 1 - 1
module_service/area_business_speed_checker.cpp

@@ -32,7 +32,7 @@ void area_business_speed_checker::on_load_his(const std::shared_ptr<area_hover>&
     on_enter(area_hover_ptr, card_ptr, ptr);
 
     EVENT_TYPE ev_type =area_hover_ptr->m_area->is_mine()?ET_CARD_OVER_SPEED: ET_CARD_AREA_OVER_SPEED;
-    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
+    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type,DT_COMMON);
     auto ptr_temp = std::dynamic_pointer_cast<over_speed_data>(ptr);
     ptr_temp->m_is_warning = (ev_ptr_temp && !ev_ptr_temp->is_end());
     if(ptr_temp->m_is_warning)

+ 3 - 2
module_service/module_call_help.cpp

@@ -43,7 +43,7 @@ void module_call_help::accept_web_deal_help(sio::message::ptr const& data)
     {
         log_info("处理呼救,card_id=%d, type=%d,  ev_id=%d", id, type, ev_id);
 
-        auto ev_ptr = event_list::instance()->get_event_card(id, type, ET_CARD_HELP);
+        auto ev_ptr = event_list::instance()->get_event_card(id, type, ET_CARD_HELP,DT_COMMON);
         if(ev_ptr && ES_DEAL_HELP != ev_ptr->m_status)
         {
             ev_ptr->m_status = ES_DEAL_HELP;
@@ -70,7 +70,8 @@ std::string module_call_help::get_json_help()
     auto it_ev=tmp.begin();
     for(;it_ev!=tmp.end();++it_ev)
     {
-        if(!it_ev->second->m_is_display || ET_CARD_HELP != it_ev->second->m_ev_type)
+        //if(!it_ev->second->m_is_display || ET_CARD_HELP != it_ev->second->m_ev_type)
+        if(ET_CARD_HELP != it_ev->second->m_ev_type)
         {
             continue;
         }

+ 2 - 1
websocket/constdef.h

@@ -142,6 +142,7 @@
 #define JSON_KEY_EVENT_TYPE_ID "type_id"
 #define JSON_KEY_EVENT_OBJ_TYPE_ID "obj_type_id"
 #define JSON_KEY_EVENT_OBJ_ID "obj_id"
+#define JSON_KEY_EVENT_DIS_TYPE_ID "dis_type_id"
 #define JSON_KEY_EVENT_MAP_ID "map_id"
 #define JSON_KEY_EVENT_AREA_ID "area_id"
 #define JSON_KEY_EVENT_X "x"
@@ -190,4 +191,4 @@
 #define JSON_CMD_REQ_ALL_PERSON_ON_CAR "req_all_person_on_car"
 #define JSON_CMD_RESP_ALL_PERSON_ON_CAR "resp_all_person_on_car"
 
-#endif // !_SERVER_CONST_DEF_H_
+#endif // !_SERVER_CONST_DEF_H_

+ 4 - 4
websocket/jsonBuilder.cpp

@@ -434,10 +434,10 @@ namespace YA
 		for ( mit_card = CardPosList.begin(); mit_card != CardPosList.end(); mit_card++ )
 		{
 			//不显示的卡不往前端推送
-			if ( !mit_card->second.display )
-			{
-				continue;
-			}
+			//if ( !mit_card->second.display )
+			//{
+			//	continue;
+			//}
 
 			rapidjson::Value DetailItem;
 			if ( !__BuildDetail( mit_card->second, Allocator, DetailItem ) )