Browse Source

初始化井下超员警告判断

chensongchao 6 years ago
parent
commit
a8f40e184b
4 changed files with 73 additions and 28 deletions
  1. 17 2
      card.cpp
  2. 39 19
      mine_module/MineCardManager.cpp
  3. 16 6
      mine_module/MineCardManager.h
  4. 1 1
      ya_event.cpp

+ 17 - 2
card.cpp

@@ -21,6 +21,8 @@
 #include "visit.h"
 #include "his_location.h"
 #include "three_rates.h"
+#include "mine_module/MineCardManager.h"
+
 extern config_file config;
 //一张卡一个ct的所有不同天线的信息
 struct one_ct_message_handle
@@ -856,8 +858,21 @@ void card_list::load_his_card_postion_from_db()
             auto str = tool_time::to_str_ex( tool_time::to_ms(mine_tool_ptr->m_attendance_start_time));
             std_debug("加载考勤,考勤开始时间: %s, 卡id=%d,卡type=%d", str.c_str(), card_ptr->m_id, card_ptr->m_type);
             log_info("加载考勤,考勤开始时间: %s, 卡id=%d,卡type=%d", str.c_str(), card_ptr->m_id, card_ptr->m_type);
+
+            //还在考勤中表示,还在井下(初始化话数据)
+            if(card_ptr->is_person())
+            {
+                CMineCardManager::instance()->OnPersonDown(card_ptr,true);
+            }
+            if(card_ptr->is_vehicle())
+            {
+                CMineCardManager::instance()->OnVehicleDown(card_ptr,true);
+            }
         }
     }
+    //初始化后检查是否超员
+    CMineCardManager::instance()->OnPersonOvercrowdingWarning();
+    CMineCardManager::instance()->OnVehicleOvercrowdingWarning();
 
     auto area_map = area_list::instance()->m_map;
     for(auto&iter: area_map)
@@ -1006,11 +1021,11 @@ void card_list::load_his_card_postion_staff()
     YADB::CDBResultSet DBRes;
     sDBConnPool.Query(sql,DBRes,Error);
     if(!Error.empty())
-        log_error("load_his_card_postion_vehicle列表 Error,%s",Error.c_str());
+        log_error("load_his_card_postion_staff列表 Error,%s",Error.c_str());
     uint64_t nCount = DBRes.GetRecordCount( Error );
     if (nCount > 0)
     {
-        log_info( "load_his_card_postion_vehicle. The record count=%ld\n", nCount );
+        log_info( "load_his_card_postion_staff. The record count=%ld\n", nCount );
 
         while ( DBRes.GetNextRecod(Error) )
         {

+ 39 - 19
mine_module/MineCardManager.cpp

@@ -112,7 +112,7 @@ void CMineCardManager::CancelEvent(int evType,int curVal)
  * @brief 人员下井
  * @param card 卡
  **/
-void CMineCardManager::OnPersonDown(std::shared_ptr<card> card)
+void CMineCardManager::OnPersonDown(std::shared_ptr<card> card,bool bInit/* = false*/)
 {
     if (nullptr == card)
     {
@@ -130,24 +130,10 @@ void CMineCardManager::OnPersonDown(std::shared_ptr<card> card)
     m_minecards->m_up_person.erase(key);
     //加入到井下列表中
     m_minecards->m_down_person.insert(key);
-    int max_person = CYaSetting::m_sys_setting.over_count_person;
-    //井下超员判断
-    if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person )
+    if(!bInit)
     {
-        std::string log = "";
-        for (uint64_t id : m_minecards->m_down_person)
-        {
-            std::shared_ptr<card_location_base> pitcard = card_list::instance()->get(id);
-            if (nullptr != pitcard)
-            {
-                log += card_list::to_id64_str(pitcard->m_type,pitcard->m_id);
-                log += "&";
-            }
-        }
-        //打印日志
-        log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
-
-        this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size());
+        //井下超员判断
+        this->OnPersonOvercrowdingWarning();
     }
 }
     /**
@@ -178,12 +164,38 @@ void CMineCardManager::OnPersonUp(std::shared_ptr<card> card)
         this->CancelEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,(int)m_minecards->m_down_person.size());
     }
     
+}
+
+/**
+ * @brief 人员超员警告
+**/
+void CMineCardManager::OnPersonOvercrowdingWarning()
+{
+    int max_person = CYaSetting::m_sys_setting.over_count_person;
+    //井下超员判断
+    if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person )
+    {
+        std::string log = "";
+        for (uint64_t id : m_minecards->m_down_person)
+        {
+            std::shared_ptr<card_location_base> pitcard = card_list::instance()->get(id);
+            if (nullptr != pitcard)
+            {
+                log += card_list::to_id64_str(pitcard->m_type,pitcard->m_id);
+                log += "&";
+            }
+        }
+        //打印日志
+        log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
+
+        this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size());
+    }
 }
     /**
  * @brief 车下井
  * @param card 卡
  **/
-void CMineCardManager::OnVehicleDown(std::shared_ptr<card> card)
+void CMineCardManager::OnVehicleDown(std::shared_ptr<card> card,bool bInit/* = false*/)
 {
     if (nullptr == card)
     {
@@ -200,4 +212,12 @@ void CMineCardManager::OnVehicleUp(std::shared_ptr<card> card)
     {
         return ;
     }
+}
+
+ /**
+ * @brief 车辆超员警告
+ **/
+void CMineCardManager::OnVehicleOvercrowdingWarning()
+{
+
 }

+ 16 - 6
mine_module/MineCardManager.h

@@ -50,25 +50,35 @@ public:
     //TODO: 获取信息
     std::shared_ptr<mine_card_info> GetMineCards() ;
     /**
-     * @brief 人员下井
+     * @brief 人员下井,超员警告
      * @param card 卡
+     * @param bInit 是否初始化(程序启动加载井下人员)
      **/
-    void OnPersonDown(std::shared_ptr<card> card);
+    void OnPersonDown(std::shared_ptr<card> card,bool bInit = false);
      /**
-     * @brief 人员升井
+     * @brief 人员升井,取消超员警告
      * @param card 卡
      **/
     void OnPersonUp(std::shared_ptr<card> card);
      /**
-     * @brief 车下井
+     * @brief 人员超员警告
+     **/
+    void OnPersonOvercrowdingWarning();
+     /**
+     * @brief 车下井 ,车辆超员警告
      * @param card 卡
+     * @param bInit 是否初始化(程序启动加载井下车辆)
      **/
-    void OnVehicleDown(std::shared_ptr<card> card);
+    void OnVehicleDown(std::shared_ptr<card> card,bool bInit = false);
      /**
-     * @brief 车升井
+     * @brief 车升井,车辆超员警告取消
      * @param card 卡
      **/
     void OnVehicleUp(std::shared_ptr<card> card);
+    /**
+     * @brief 车辆超员警告
+     **/
+    void OnVehicleOvercrowdingWarning();
 };
 
 #endif //__MINECARDMANAGER_H

+ 1 - 1
ya_event.cpp

@@ -30,7 +30,7 @@ void event_list::load_his_data_from_db()
     uint64_t nCount = DBRes.GetRecordCount( Error );
     if (nCount > 0)
     {
-        log_info( "init_vehicle_category. The record count=%ld\n", nCount );
+        log_info( "load_his_data_from_db. The record count=%ld\n", nCount );
 
         while ( DBRes.GetNextRecod(Error) )
         {