Browse Source

修改车卡考勤

daiyueteng 6 years ago
parent
commit
a0ce8ebf66

+ 40 - 2
module_service/area_business_car_attendance.cpp

@@ -36,7 +36,8 @@ void area_business_car_attendance::on_enter(const std::shared_ptr<area_hover>&ar
 
     //save_attendance(card_ptr, area_hover_ptr);
     auto mine_tool_ptr = card_ptr->get_mine_tool();
-    if(!mine_tool_ptr->m_is_attendance)
+    if(!mine_tool_ptr->m_is_attendance
+            || !is_attendance_area(area_hover_ptr->m_area->m_id, card_ptr->get_vehicle_type_id()))
     {
         return;
     }
@@ -73,7 +74,8 @@ void area_business_car_attendance::on_leave(const std::shared_ptr<area_hover>&ar
 
     //没在考勤状态转换为考勤状态
     auto mine_tool_ptr = card_ptr->get_mine_tool();
-    if(!mine_tool_ptr->m_is_attendance)
+    if(!mine_tool_ptr->m_is_attendance
+            && is_attendance_area(area_hover_ptr->m_area->m_id, card_ptr->get_vehicle_type_id()))
     {
         //考勤开始
         mine_tool_ptr->m_is_attendance = true;
@@ -86,5 +88,41 @@ void area_business_car_attendance::on_leave(const std::shared_ptr<area_hover>&ar
         //                         card_ptr->m_id, card_ptr->m_type,
         //                         area_ptr->m_id,mine_tool_ptr->m_stat_attendance);
     }
+}
 
+void area_business_car_attendance::init_attendance_area_from_db()
+{
+    const char *sql = "select a.area_id, a.att_rule_id,  vt.vehicle_type_id \
+            from dat_att_rule_area a, dat_att_rule_vehicle_type  vt, dat_att_rule r\
+            where a.att_rule_id=vt.att_rule_id and a.att_rule_id=r.att_rule_id;";
+    std::string Error;
+    YADB::CDBResultSet DBRes;
+    sDBConnPool.Query(sql,DBRes,Error);
+    if(!Error.empty())
+        log_error("初始化attendance_area Error,%s",Error.c_str());
+    uint64_t nCount = DBRes.GetRecordCount( Error );
+    if(int64_t(nCount) <= 0)
+    {
+        log_error("初始化attendance_area Error,%s",Error.c_str());
+    }
+
+    log_info( "init_attendance_area_from_db. The record count=%ld\n", nCount );
+
+    m_map.clear();
+    while ( DBRes.GetNextRecod(Error) )
+    {
+        int area_id  = 0;
+        DBRes.GetField( "area_id",area_id, Error );
+
+        int att_rule_id  = 0;
+        DBRes.GetField( "att_rule_id",att_rule_id, Error );
+
+        int vehicle_type_id  = 0;
+        DBRes.GetField( "vehicle_type_id",vehicle_type_id, Error );
+
+        m_map.insert(std::make_pair(to_list_id(area_id, vehicle_type_id), att_rule_id));
+    }
 }
+
+std::unordered_map<uint64_t, int> area_business_car_attendance::m_map;
+

+ 16 - 0
module_service/area_business_car_attendance.h

@@ -3,6 +3,7 @@
 
 
 #include"area_business.h"
+#include"unordered_map"
 
 
 class area_business_car_attendance:public area_business
@@ -21,5 +22,20 @@ public:
     void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr);
 
     //static void save_attendance(const std::shared_ptr<card_location_base>& card_ptr, const std::shared_ptr<area_hover> area_hover_ptr){}
+    static void init_attendance_area_from_db();
+
+private:
+    static bool is_attendance_area(int area_id, int vehicle_type_id)
+    {
+        return  m_map.end() != m_map.find(to_list_id(area_id, vehicle_type_id));
+    }
+
+    static uint64_t to_list_id(int area_id, int vehicle_type_id)
+    {
+        return (static_cast<uint64_t>(area_id)<<32) | static_cast<uint64_t>(vehicle_type_id);
+    }
+
+    ///area_id<<32| vehicle_type_id; att_rule_id
+    static std::unordered_map<uint64_t, int> m_map;
 };
 #endif // AREA_BUSINESS_CAR_ATTENDANCE_H

+ 1 - 1
module_service/module_mgr.cpp

@@ -32,7 +32,7 @@ void module_mgr::start()
 {
     area_business_geofault::init_geofault_from_db();
     area_business_speed_checker::init_vehicle_category_from_db();
-    //area_business_car_attendance::init_attendance_area_from_db();
+    area_business_car_attendance::init_attendance_area_from_db();
 
     module_web::instance()->start();
     module_call::instance()->start();