Pārlūkot izejas kodu

增加电量低告警业务,修改告警列表id

daiyueteng 6 gadi atpakaļ
vecāks
revīzija
747dd263d4

+ 8 - 7
CMakeLists.txt

@@ -75,20 +75,21 @@ set(SRC_MODULE
 
     "module_service/module_mine.h"
     "module_service/module_over_speed_vehicle.h"
+    "module_service/module_other_alarm.h"
     )
 
 add_executable(${PROJECT_NAME} "main.cpp" ${SRC_YASL}  ${SRC_MODULE})
 
 target_link_libraries (${PROJECT_NAME}  zlog rt ev boost_chrono boost_system boost_thread mysqlclient)
 
-file(COPY data_reader_antenna.txt DESTINATION ${PROJECT_BINARY_DIR})
-file(COPY path_tof.txt DESTINATION ${PROJECT_BINARY_DIR})
+#file(COPY data_reader_antenna.txt DESTINATION ${PROJECT_BINARY_DIR})
+#file(COPY path_tof.txt DESTINATION ${PROJECT_BINARY_DIR})
 
-file(COPY /root/projection/out/bin/logger DESTINATION ${PROJECT_BINARY_DIR})
-file(COPY /root/projection/out/etc DESTINATION ${PROJECT_SOURCE_DIR})
-file(COPY /root/projection/out/log DESTINATION ${PROJECT_SOURCE_DIR})
-file(COPY /root/projection/out/include/log.h DESTINATION ${PROJECT_SOURCE_DIR})
-file(COPY /root/projection/out/include/config_file.h DESTINATION ${PROJECT_SOURCE_DIR})
+#file(COPY /root/projection/out/bin/logger DESTINATION ${PROJECT_BINARY_DIR})
+#file(COPY /root/projection/out/etc DESTINATION ${PROJECT_SOURCE_DIR})
+#file(COPY /root/projection/out/log DESTINATION ${PROJECT_SOURCE_DIR})
+#file(COPY /root/projection/out/include/log.h DESTINATION ${PROJECT_SOURCE_DIR})
+#file(COPY /root/projection/out/include/config_file.h DESTINATION ${PROJECT_SOURCE_DIR})
 
 
 

+ 1 - 1
CMakeLists.txt.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.7.0, 2018-10-10T14:40:31. -->
+<!-- Written by QtCreator 4.7.0, 2018-10-11T16:29:55. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>

+ 13 - 10
card.cpp

@@ -158,19 +158,22 @@ struct card_message_handle
 			return;
 		}
 		//
-		m_card->site_hover(loc.m_site_id);
+        m_card->site_hover(loc.m_site_id);
 
         if(loc.m_batty_status == 2)
         {
-            //m_card->do_status(STA_TYPE::STATUS_LOW_POWER_);
-            m_card->do_status(STATUS_POWER_LOWER);
+            m_card->do_status(STATUS_POWER_LOWER_SERIOUS);
         }
-        else if(loc.m_callinfo & 0x80)
+        else
+        {
+            m_card->do_status(STATUS_POWER_NOMARL);
+        }
+
+        if(loc.m_callinfo & 0x80)
         {
-            //m_card->do_status(STA_TYPE::STATUS_HELP_);
             m_card->do_status(STATUS_HELP);
         }
-        else if((loc.m_callinfo & 0x01) || (loc.m_callinfo & 0x02))
+        if((loc.m_callinfo & 0x01) || (loc.m_callinfo & 0x02))
         {
             m_card->do_status(STATUS_CALL);
         }
@@ -937,7 +940,7 @@ int  card_location_base::get_stat()
     {
         return STATUS_LOST;
     }
-    else if(auto ev_ptr = event_list::instance()->get(m_id, ET_CARD_HELP))
+    else if(auto ev_ptr = event_list::instance()->get_event_card(m_id, m_type, ET_CARD_HELP))
     {
         return  (ES_DEAL_HELP == ev_ptr->m_status) ?  STATUS_HELP_DEALED : STATUS_HELP;
     }
@@ -945,12 +948,12 @@ int  card_location_base::get_stat()
     {
         return  STATUS_CALL;
     }
-    else if(event_list::instance()->get(
-                m_id, is_person()? ET_CARD_AREA_OVER_TIME_PERSON: ET_CARD_AREA_OVER_TIME_VEHICLE))
+    else if(event_list::instance()->get_event_card(m_id, m_type,
+                is_person()? ET_CARD_AREA_OVER_TIME_PERSON: ET_CARD_AREA_OVER_TIME_VEHICLE))
     {
         return  STATUS_AREA_OVER_TIME;
     }
-    else if(event_list::instance()->get(m_id, ET_CARD_OVER_SPEED))
+    else if(event_list::instance()->get_event_card(m_id, m_type, ET_CARD_OVER_SPEED))
     {
         return  STATUS_OVER_SPEED;
     }

+ 2 - 1
common.h

@@ -23,7 +23,8 @@ enum STA_TYPE
 enum STATUS_CARD
 {
 	STATUS_NORMAL=0,
-    STATUS_POWER_LOWER = 1,			//电量低
+    STATUS_POWER_LOWER_SERIOUS = 2, //电量极低
+    STATUS_POWER_NOMARL = 3,
 	STATUS_OVER_SPEED=8,
 	STATUS_AREA_OVER_TIME=16,
 	STATUS_HELP=128,

+ 4 - 4
module_service/module_area_over_count.h

@@ -48,7 +48,7 @@ public:
         {
             std::lock_guard<std::mutex> lock(__lock);
 
-            auto ev_ptr = event_list::instance()->get(static_cast<uint32_t>(area_ptr->id()), ev_type);
+            auto ev_ptr = event_list::instance()->get_event_area(area_ptr->id(), ev_type);
             if(ev_ptr)
             {
                 event_list::copy_event(card_ptr, ev_ptr);
@@ -58,7 +58,7 @@ public:
             }
             else//从没有告警状态转化为告警状态
             {
-                ev_ptr = event_list::create_event_not_card(OT_AREA, area_ptr->id(), ev_type);
+                ev_ptr = event_list::create_event_area(area_ptr->id(), ev_type);
 
                 event_list::copy_event(card_ptr, ev_ptr);
 
@@ -104,8 +104,8 @@ public:
         if(limit > cur_value)//没有超员
         {
             //取消告警状态
-            auto ev_ptr = event_list::instance()->get(static_cast<uint32_t>(area_ptr->id()), ev_type);
-            if(ev_ptr)
+            auto ev_ptr = event_list::instance()->get_event_area(area_ptr->id(), ev_type);
+            if(ev_ptr && !ev_ptr->is_end())
             {
                 std::lock_guard<std::mutex> lock(__lock);
                 if(ev_ptr->is_end())

+ 3 - 3
module_service/module_area_timeout.h

@@ -57,7 +57,7 @@ public:
 
         if(seconds > limit)//发生告警
         {
-            auto ev_ptr = event_list::instance()->get(card_ptr->m_id, ev_type);
+            auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
             if(ev_ptr)
             {
                 event_list::copy_event(card_ptr, ev_ptr);
@@ -98,8 +98,8 @@ public:
             ev_type = ET_CARD_AREA_OVER_TIME_VEHICLE;
         }
 
-        auto ev_ptr = event_list::instance()->get(card_ptr->m_id, ev_type);
-        if(ev_ptr)//有超时告警就删除
+        auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
+        if(ev_ptr && !ev_ptr->is_end())//有超时告警就删除
         {
             event_list::copy_event(card_ptr, ev_ptr);
 

+ 3 - 2
module_service/module_attendance_person.h

@@ -171,8 +171,9 @@ private:
                 continue;
             }
 
-            auto ev_ptr = event_list::instance()->get(card_ptr->m_id, static_cast<EVENT_TYPE>(i));
-            if(ev_ptr) //
+            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);
 

+ 2 - 2
module_service/module_call_help.h

@@ -38,7 +38,7 @@ public:
      */
     void rev_from_card_help(std::shared_ptr<card_location_base> card_ptr)
     {
-        auto ev_ptr = event_list::instance()->get(card_ptr->m_id, ET_CARD_HELP);
+        auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_HELP);
         if(!ev_ptr)
         {
             auto ev_ptr = event_list::create_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_HELP);
@@ -76,7 +76,7 @@ public:
             std_debug("处理呼救,card_id=%d, type=%d,  ev_id=%d", id, type, ev_id);
             log_info("处理呼救,card_id=%d, type=%d,  ev_id=%d", id, type, ev_id);
 
-            auto ev_ptr = event_list::instance()->get(id, ET_CARD_HELP);
+            auto ev_ptr = event_list::instance()->get_event_card(id, type, ET_CARD_HELP);
             if(ev_ptr && ES_DEAL_HELP != ev_ptr->m_status)
             {
                 event_list::copy_event(card_ptr, ev_ptr);

+ 10 - 1
module_service/module_mgr.h

@@ -15,6 +15,7 @@
 #include"module_call_help.h"
 #include"module_call.h"
 #include"module_over_speed_vehicle.h"
+#include"module_other_alarm.h"
 
 class module_mgr: public singleton_base<module_mgr>
 {
@@ -69,10 +70,18 @@ public:
         {
             module_call_help::instance()->rev_from_card_help(card_ptr);
         }
-        else if(STATUS_CALL == st)
+        if(STATUS_CALL == st)
         {
             module_call::instance()->rev_from_card_resp(card_ptr);
         }
+        if(STATUS_POWER_LOWER_SERIOUS == st)
+        {
+            module_other_alarm::power_lower_serious(card_ptr);
+        }
+        if(STATUS_POWER_NOMARL == st)
+        {
+            module_other_alarm::power_nomarl(card_ptr);
+        }
     }
 
 //private:

+ 65 - 0
module_service/module_other_alarm.h

@@ -0,0 +1,65 @@
+#ifndef MODULE_OTHER_ALARM_H
+#define MODULE_OTHER_ALARM_H
+/**
+ * @brief 简要说明
+ * @author 戴月腾
+ * @date 2018-10-11
+ */
+
+#include <string>
+#include <memory>
+#include <atomic>
+#include <mutex>
+#include <map>
+#include "module_const.h"
+
+
+class module_other_alarm:public singleton_base<module_other_alarm>
+{
+private:
+    friend class singleton_base<module_other_alarm>;
+    module_other_alarm()
+    {
+    }
+
+public:
+    static void power_lower_serious(std::shared_ptr<card_location_base> card_ptr)
+    {
+        auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_LOW_POWER_SERIOUS);
+        if(ev_ptr)
+        {
+            event_list::copy_event(card_ptr, ev_ptr);
+        }
+        else//从没有告警状态转化为告警状态
+        {
+            ev_ptr = event_list::create_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_LOW_POWER_SERIOUS);
+
+            event_list::copy_event(card_ptr, ev_ptr);
+
+            //保存到数据库
+            event_list::save_event(ev_ptr);
+
+            event_list::instance()->add(ev_ptr->get_list_id(),ev_ptr);
+
+            log_info("电量极低告警开始:卡id=%d,卡type=%d", card_ptr->m_id, card_ptr->m_type);
+        }
+    }
+
+    static void power_nomarl(std::shared_ptr<card_location_base> card_ptr)
+    {
+        auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_LOW_POWER_SERIOUS);
+        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);
+
+            log_info("电量极低告警结束:卡id=%d,卡type=%d", card_ptr->m_id, card_ptr->m_type);
+        }
+    }
+};
+
+#endif // MODULE_OTHER_ALARM_H

+ 3 - 3
module_service/module_over_speed_vehicle.h

@@ -43,7 +43,7 @@ public:
         {
             mine_tool_ptr->m_over_speed_count=SPEED_COUNT_LIMIT;
 
-            auto ev_ptr = event_list::instance()->get(card_ptr->m_id, ET_CARD_OVER_SPEED);
+            auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_OVER_SPEED);
             if(ev_ptr)
             {
                 event_list::copy_event(card_ptr, ev_ptr);
@@ -78,8 +78,8 @@ public:
         {
             mine_tool_ptr->m_normal_speed_count=SPEED_COUNT_LIMIT;
 
-            auto ev_ptr = event_list::instance()->get(card_ptr->m_id, ET_CARD_OVER_SPEED);
-            if(ev_ptr)
+            auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_OVER_SPEED);
+            if(ev_ptr && !ev_ptr->is_end())
             {
                 mine_tool_ptr->m_over_speed_count=0;
 

+ 2 - 1
ya_event.cpp

@@ -3,7 +3,8 @@
 
 uint64_t ya_event::get_list_id()
 {
-    return event_list::to_list_id(static_cast<uint32_t>(std::stoi(m_obj_id.substr(3))), m_ev_type);
+    return event_list::to_list_id(m_ev_type, m_obj_type,
+           tool_other::id64_to_type(m_obj_id), tool_other::id64_to_id(m_obj_id));
 }
 
 void event_list::load_his_data_from_db()

+ 14 - 8
ya_event.h

@@ -141,16 +141,17 @@ typedef std::shared_ptr<event_map> event_map_ptr;
 struct event_list:single_base<event_list,uint64_t,std::shared_ptr<ya_event>>
 {
 public:
-    ///作为事件map列表的id,方便查找;(ev_type<<32| obj_id)
-    static uint64_t to_list_id(uint32_t obj_id, EVENT_TYPE ev_type)
+    ///作为事件map列表的id,方便查找;(ev_type<<48 | obj_type<<40 |  obj_id_type<<32 | obj_id)
+    static uint64_t to_list_id(EVENT_TYPE ev_type, OBJECT_TYPE obj_type, int obj_id_type, uint32_t obj_id)
     {
-        return (static_cast<uint64_t>(ev_type)<<32)|static_cast<uint64_t>(obj_id);
+        return (static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)
+                |(static_cast<uint64_t>(obj_id_type)<<32)|static_cast<uint64_t>(obj_id);
     }
 
-    ///创建与卡无关的警告
-    static event_ptr create_event_not_card(OBJECT_TYPE obj_type, int obj_id, EVENT_TYPE ev_type)
+    ///创建区域警告
+    static event_ptr create_event_area(int area_id, EVENT_TYPE ev_type)
     {
-        return create_event(obj_type, obj_id, 0, ev_type);
+        return create_event(OT_AREA, area_id, 0, ev_type);
     }
 
     ///创建与卡有关的警告,需要卡类型
@@ -179,9 +180,14 @@ public:
         }
     }
 
-    std::shared_ptr<ya_event> get(uint32_t obj_id, EVENT_TYPE ev_type)
+    std::shared_ptr<ya_event> get_event_card(uint32_t card_id, int card_type, EVENT_TYPE ev_type)
     {
-        return base::get(to_list_id(obj_id, ev_type));
+        return base::get(to_list_id(ev_type, OT_CARD, card_type, card_id));
+    }
+
+    std::shared_ptr<ya_event> get_event_area(int32_t area_id, EVENT_TYPE ev_type)
+    {
+        return base::get(to_list_id(ev_type, OT_AREA, 0, static_cast<uint32_t>(area_id)));
     }
 
     void load_his_data_from_db();