Pārlūkot izejas kodu

Merge branch 'master' of http://local.beijingyongan.com:3000/linux-dev/ya-serv

-----
zzj 5 gadi atpakaļ
vecāks
revīzija
31ca92f113
4 mainītis faili ar 26 papildinājumiem un 16 dzēšanām
  1. 9 4
      area.cpp
  2. 3 2
      card_base.h
  3. 2 2
      card_person.cpp
  4. 12 8
      module_service/area_business_person_attendance.cpp

+ 9 - 4
area.cpp

@@ -188,6 +188,7 @@ void area::on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<ca
 }
 bool area::in_area(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>&c, const point & p,int & sarid)
 {
+    return false;
 	if(m_bound.empty())
 	  return false;
 	int counter = 0;
@@ -535,8 +536,12 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<sit
 	for(const auto &a:map)
 		if(a.second->in_area(s,c,pt,sarid))
 			ret.push_back(a.second);
-    if(s)
+    if(s){
         ret.push_back(s->get_area());
+        int area_id=s->m_area_id;
+		if(auto area_=area_list::instance()->get(area_id))
+            ret.push_back(area_);
+    }
 	//区域覆盖不完全地图,很多车辆人行驶在地图外,如何确认.
 	return std::move(ret);
 }
@@ -550,8 +555,8 @@ area_hover::area_hover(const std::shared_ptr<area>&area,const point&pt)
 void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const point&pt)
 {
 	log_info("on_point...cardid:%d,type:%d,x:%.2f,y:%.2f",c->m_id,c->m_type,pt.x,pt.y);
-    if(pt.empty())	
-      return;
+    if(pt.empty())	return;
+
 	int special_area=-1;
 	std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(m_site,c, pt,special_area);
 	if(special_area != -1)
@@ -667,7 +672,7 @@ void area_tool::on_point(const std::shared_ptr<card_location_base>& c,const poin
 
 void area_tool::on_leave(const std::shared_ptr<card_location_base>& c)
 {
-    for(auto& t:m_hover_list)
+    for(const auto& t:m_hover_list)
     {
         t->m_area->on_leave(t, c);
     }

+ 3 - 2
card_base.h

@@ -76,10 +76,11 @@ struct card_location_base:card,std::enable_shared_from_this<card_location_base>
 	time_t m_help_last_time=0;
 	int    m_help_bit=0;
 
-	void inc_upmine_flag()
+	void inc_upmine_flag(int flag)
 	{
-		++m_upmine_flag;
+		m_upmine_flag=flag;
 	}
+    int upmine_flag(){return m_upmine_flag.load();}
 
     card_location_base()=default;
     card_location_base(const std::string&type,uint32_t id,uint16_t dis,int16_t t,int32_t,int32_t,uint32_t );

+ 2 - 2
card_person.cpp

@@ -164,8 +164,8 @@ void person::on_timer()
 	if(m_upmine_flag.load())
 	{
 		log_info("up_mine:upmine_flag=%d",m_upmine_flag.load());
-		m_upmine_flag=0;
 		m_area_tool->on_leave(shared_from_this());
+		m_upmine_flag=0;
 	}
 }
 //***********************************************
@@ -197,7 +197,7 @@ void person::print_card_detained()
                     m_type,m_id,m_area_tool->get_site_id(),enter_time.c_str(),min/60,min%60,x,y,dist<limit_dist?"True":"False",last_time.c_str(),lmin/60,lmin%60,event_power?"Ture":"False",alarm_time.c_str());
         //超过设置的时长后,开始自动升井
         if(work_time > static_cast<uint64_t>(person::m_auto_up_mine_time*60*60*1000))
-            inc_upmine_flag();
+            inc_upmine_flag(2);
     }
 }
 point person::getSmoothPoint(uint64_t& t)

+ 12 - 8
module_service/area_business_person_attendance.cpp

@@ -41,21 +41,25 @@ void area_business_person_attendance::on_hover(const std::shared_ptr<area_hover>
 //记录离开考勤区域信息,开始考勤
 void area_business_person_attendance::on_leave(const std::shared_ptr<area_hover>&area_hover_ptr,const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data> ptr)
 {
-    if(!card_ptr->is_person())
-        return;
+    if(!card_ptr->is_person())return;
     auto mine_tool_ptr = card_ptr->get_mine_tool();
-    if(!mine_tool_ptr->m_is_attendance)
-        return;
+    if(!mine_tool_ptr->m_is_attendance)return;
 
     log_info("on_leave_person_att:%d",card_ptr->m_id);
     //考勤结束
     mine_tool_ptr->m_is_attendance=false;
-
+	if(card_ptr->upmine_flag()){
+        auto start = mine_tool_ptr->m_attendance_start_time;
+        std::string start_time = tool_time::to_str(start);
+        std::string card_id = tool_other::type_id_to_str(card_ptr->m_type,card_ptr->m_id);
+        char nsql[512]{0};
+        const char *sql = "update rpt_att_staff set is_auto=%d where card_id=%s and start_time='%s';";
+        snprintf(nsql,512,sql,card_ptr->upmine_flag(),card_id.c_str(),start_time.c_str());
+        db_tool::PushAsync(nsql);
+    }
     //作为一条结束考勤记录保存到数据库
     db_tool::save_attendance(card_ptr, area_hover_ptr);
 
-
-
 	YA::_CARD_POS_ cp;
 	cp.Type=card_ptr->m_type;
 	cp.ID = card_ptr->m_id;
@@ -110,7 +114,7 @@ void area_business_person_attendance::handle_up_mine(sio::message::ptr const& da
         if(card_ptr && STATUS_LOST == card_ptr->m_biz_stat)
         {
             log_info("handle_up_card:%s 手工升井,处理",s_card_id.c_str());
-            card_ptr->inc_upmine_flag();
+            card_ptr->inc_upmine_flag(1);
         }
         else
             log_warn("handle_up_card:%s,手动升井的卡找不到,或者该卡不在盲区",s_card_id.c_str());