1
0
Quellcode durchsuchen

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

chensongchao vor 6 Jahren
Ursprung
Commit
3482a59df9
21 geänderte Dateien mit 183 neuen und 318 gelöschten Zeilen
  1. 4 84
      ant.cpp
  2. 1 1
      ant.h
  3. 8 5
      area.cpp
  4. 2 19
      area.h
  5. 3 3
      area_business.cpp
  6. 66 87
      card.cpp
  7. 1 0
      card.h
  8. 0 1
      card_base.h
  9. 0 5
      card_car.cpp
  10. 0 1
      card_car.h
  11. 1 0
      card_message_handle.cpp
  12. 0 4
      card_person.cpp
  13. 0 1
      card_person.h
  14. 1 1
      main.cpp
  15. 0 17
      module_service/area_business_forbid.cpp
  16. 0 3
      module_service/area_business_forbid.h
  17. 76 71
      net-service.cpp
  18. 1 9
      site_area.cpp
  19. 0 1
      site_area.h
  20. 2 3
      write-copy.h
  21. 17 2
      znet.cpp

+ 4 - 84
ant.cpp

@@ -63,6 +63,7 @@ void sit_list::read_ant_path(int id)
          return ;
      }
 
+    log_info( "read_ant_path. The record count=%ld\n", nCount );
      while ( DBRes.GetNextRecod(Error) )
      {
          int reader_id  = 0;
@@ -103,7 +104,6 @@ void sit_list::read_ant_path(int id)
          {
             sit_.clear_path();
             log_info( "修改path 清空path,分站id=%d\n", id );
-            std_debug( "修改path 清空path,分站id=%d\n", id );
          }
 
          if(pid == 0)
@@ -144,7 +144,6 @@ void sit_list::read_ant_path(int id)
 
      if(-1==id)
      {
-         log_info( "read_ant_path. The record count=%ld\n", nCount );
          for(auto&_s:sit_list::instance()->m_map)
          {
              _s.second->deal_path();
@@ -157,7 +156,6 @@ void sit_list::read_ant_path(int id)
          {
              sit_ptr->deal_path();
              log_info( "修改path成功,分站id=%d\n", id );
-             std_debug( "修改path成功,分站id=%d\n", id );
          }
      }
 }
@@ -193,7 +191,7 @@ void sit_list::init_site(int id)
          return ;
      }
 
-     log_info( "增加或修改 init_site. The record count=%ld\n", nCount );
+     log_info( "init_site. The record count=%ld\n", nCount );
 
      while ( DBRes.GetNextRecod(Error) )
      {
@@ -253,7 +251,6 @@ void sit_list::read_sit_list(int id)
         sql.append(std::to_string(id));
         sql.append(";");
 
-        std_debug("基础数据 增加或修改天线 sql=%s", sql.c_str());
         log_info("基础数据 增加或修改天线 sql=%s", sql.c_str());
     }
 
@@ -267,7 +264,7 @@ void sit_list::read_sit_list(int id)
         return ;
     }
 
-    std::unordered_map<int,std::shared_ptr<site>> map;
+    log_info( "init_antenna. The record count=%ld\n", nCount );
     while ( DBRes.GetNextRecod(Error) )
     {
         int antenna_id = 0;
@@ -296,16 +293,11 @@ void sit_list::read_sit_list(int id)
         {
             std::shared_ptr<site> site_ptr=nullptr;
             site_ptr = sit_list::instance()->get(reader_id);
-            //auto it = map.find(reader_id);
-            //if(it==map.end())
-           // {
-            //    site_ptr = std::make_shared<site>(reader_id);
-             //   map.insert({reader_id,site_ptr});
-            //}
             if(!site_ptr)
               continue;
             site_ptr->m_ant[antid].m_id = antenna_id;
             site_ptr->m_ant[antid].set(x,-y);
+            site_ptr->set_ex();
             log_info("reand_ant..%d,%d,%.2f,%.2f",reader_id,antid,x,y);
         }
         else
@@ -314,22 +306,9 @@ void sit_list::read_sit_list(int id)
             if(site_ptr)
             {
                 site_ptr->m_ant[antid].set(x,-y);
-
                 site_ptr->set_ex();
             }
-
             log_info("基础数据 增加或修改天线成功:天线id:%d,分站id:%d",id,reader_id);
-            std_debug("基础数据 增加或修改天线成功:天线id:%d,分站id:%d",id,reader_id);
-        }
-    }
-
-    if(-1 == id)
-    {
-        log_info( "init_antenna. The record count=%ld\n", nCount );
-        sit_list::instance()->add(map);
-        for(auto&sit_:map)
-        {
-            sit_.second->set_ex();
         }
     }
 }
@@ -353,65 +332,6 @@ void site::on_power_status(bool ac_down)//电源状态
     event_tool::instance()->handle_event(OT_DEVICE_READER,ET_READER_POWER_BY_BATTERY,id(),tool_time::now_to_seconds(),ac_down,m_power_ac_down);
     log_info("[event warning: reader power supply by battery] reader_id: Power %d->%d.",id(),!m_power_ac_down,m_power_ac_down);
 }
-
-#if 0
-void sit_list::init_site()
-{
-    const char *sql = "SELECT reader_id, reader_type_id, dat_reader.map_id, \
-            area_id, device_type_id, dimension, dat_map.scale\
-            FROM dat_reader, dat_map where \
-            dat_reader.map_id=dat_map.map_id and state=0;";
-
-    std::string Error;
-    YADB::CDBResultSet DBRes;
-    sDBConnPool.Query(sql,DBRes,Error);
-    uint64_t nCount = DBRes.GetRecordCount( Error );
-    if (nCount > 0)
-    {
-        log_info( "init_site. The record count=%ld\n", nCount );
-
-        while ( DBRes.GetNextRecod(Error) )
-        {
-            int reader_id  = 0;
-            DBRes.GetField( "reader_id",reader_id, Error );
-
-            auto site_ptr=sit_list::instance()->get(reader_id);
-            if(nullptr==site_ptr)
-            {
-                site_ptr = std::make_shared<site>(reader_id);
-                sit_list::instance()->add(reader_id,site_ptr);
-            }
-
-            int reader_type_id  = 0;
-            DBRes.GetField( "reader_type_id",reader_type_id, Error );
-
-            int map_id  = 0;
-            DBRes.GetField( "map_id",map_id, Error );
-
-            int area_id  = 0;
-            DBRes.GetField( "area_id",area_id, Error );
-
-            int device_type_id  = 0;
-            DBRes.GetField( "device_type_id",device_type_id, Error );
-
-            int dimension  = 0;
-            DBRes.GetField( "dimension",dimension, Error );
-
-            double scale= 0;
-            DBRes.GetField( "scale",scale, Error );
-
-            site_ptr->m_reader_type_id = reader_type_id;
-            site_ptr->m_map_id = map_id;
-            site_ptr->m_area_id = area_id;
-
-            site_ptr->m_device_type_id = device_type_id;
-
-            site_ptr->m_dimension = dimension;
-            site_ptr->m_scale = scale;
-        }
-    }
-}
-#endif
 algo_config site::g_config[]=
 {
 	{ "tof-1",  1, 2, 0.1, 1 },

+ 1 - 1
ant.h

@@ -359,8 +359,8 @@ struct sit_list:single_base<sit_list,int,std::shared_ptr<site>>
     ///id=-1为初始化所有
     void load_from_db(int id=-1)
     {
-        load();
         init_site(id);
+        load();
     }
     void read_sit_list(int id);
     void read_ant_path(int id);

+ 8 - 5
area.cpp

@@ -19,6 +19,7 @@
 #include "site_area.h"
 #include "card.h"
 #include "tool_time.h"
+#include "common_tool.h"
 #include "websocket/ws_common.h"
 #include "websocket/wsClientMgr.h"
 #include "ant.h"
@@ -126,7 +127,6 @@ void area::on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<ca
 		i->on_leave(a,c,x);
 	}
 }
-
 bool area::in_area(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>&c, const point & p,int & sarid)
 {
 	if(m_bound.empty())
@@ -433,7 +433,10 @@ std::vector<point> area_list::init_path(std::string &str)
 std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<site> s,const std::shared_ptr<card_location_base> &c,const point&pt,int & sarid)
 {
 	std::vector<std::shared_ptr<area>> ret;
-		
+
+	if(tool_other::is_person(c->type_())&&s&&s->is_up_site())
+	    return std::move(ret);
+
 	auto map = area_list::instance()->m_map;
 
 	for(const auto &a:map)
@@ -444,7 +447,7 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<sit
 	//区域覆盖不完全地图,很多车辆人行驶在地图外,如何确认.
 	return std::move(ret);
 }
-area_hover::area_hover(std::shared_ptr<area>&area,const point&pt)
+area_hover::area_hover(const std::shared_ptr<area>&area,const point&pt)
 	:m_area(area)
 {
     m_enter_time=m_last_time=tool_time::now_to_ms();
@@ -525,8 +528,8 @@ void area_tool::on_point(const std::shared_ptr<site>&s,const std::shared_ptr<car
         }
     }
     char sql[1024] = {0};
-    snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%lu, %d, %lf, %lf, %lf, 0, '%s');",
-        tool_other::type_id_to_u64(c->m_type, c->m_id), s->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
+    snprintf(sql, 1024, "REPLACE INTO rt_location (card_id, site_id, x, y, z, state, area_info) VALUES (%s, %d, %lf, %lf, %lf, 0, '%s');",
+        tool_other::type_id_to_str(c->m_type, c->m_id).c_str(), s->id(), pt.x, pt.y, pt.z, strAreaInfo.c_str());
     db_tool::PushAsync(sql);
 }
 

+ 2 - 19
area.h

@@ -27,8 +27,7 @@ struct area
 
   	virtual void on_hover(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
 	virtual	void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
-    virtual	void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
-    //服务器重启加载数据
+	virtual	void on_leave(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
     virtual	void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c);
 
     virtual bool in_area(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>&c, const point & p,int &);
@@ -135,7 +134,7 @@ struct area_hover
 	std::vector<std::shared_ptr<business_data>> m_data;
 
     area_hover()=default;
-    area_hover(std::shared_ptr<area>&area,const point&pt);
+    area_hover(const std::shared_ptr<area>&area,const point&pt);
    	std::shared_ptr<business_data>&get_business_data(int type)
 	{
 		if(type>=(int)m_data.size())
@@ -186,22 +185,6 @@ struct area_tool
 	std::map<int,std::tuple<int,int,int,double,uint64_t>> m_area_info;
 	int m_mapid=-1;
 	double m_scale=2.0;
-	//返回第一个,人卡第一个全部是井下0
-	std::shared_ptr<area_hover> get_area_first()const
-	{
-		if(m_hover_list.empty())
-			return nullptr;
-
-		return m_hover_list.front();
-	}
-
-	void init_area(std::shared_ptr<area>&a,const point&pt,const std::shared_ptr<card_location_base> &c)
-	{
-		m_hover_list.clear();
-		m_hover_list.push_back(std::make_shared<area_hover>(a,pt));
-		a->on_enter(m_hover_list.back(), c);
-	}
-
 	void on_point(const std::shared_ptr<site>&s,const std::shared_ptr<card_location_base>& c,const point&pt);
     void on_leave(const std::shared_ptr<card_location_base>& c);
 

+ 3 - 3
area_business.cpp

@@ -9,9 +9,9 @@
 #include "area_business_person_attendance.h"
 #include "area_business_post_area.h"
 #include "area_business_speed_checker.h"
-#include"area_business_motionless_persion.h"
-#include"area_business_geofault.h"
-#include"area_business_work_rate.h"
+#include "area_business_motionless_persion.h"
+#include "area_business_geofault.h"
+#include "area_business_work_rate.h"
 
 
 

+ 66 - 87
card.cpp

@@ -10,7 +10,6 @@
 #include "db/db_card.h"
 #include "db/db_api/CDBSingletonDefine.h"
 #include "db/db_api/CDBResultSet.h"
-
 #include "tool_time.h"
 #include "mine.h"
 #include "log.h"
@@ -118,50 +117,11 @@ void card_list::load_his_card_postion_from_db()
 {
     load_his_card_postion_vehicle();
     load_his_card_postion_staff();
-
-    for(auto&iter: m_map)
-    {
-        auto card_ptr = iter.second;
-        auto mine_tool_ptr = card_ptr->get_mine_tool();
-        if(mine_tool_ptr->m_is_attendance)
-        {
-            auto str = tool_time::to_str_ex( tool_time::to_ms(mine_tool_ptr->m_attendance_start_time));
-            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)
-    {
-        auto area_ptr = iter.second;
-        if(area_ptr->m_person_count)
-        {
-            log_info("加载区域人数: 区域id=%d,区域人数=%d",area_ptr->m_id, area_ptr->m_person_count.load());
-        }
-
-        if(area_ptr->m_vehicle_count)
-        {
-            log_info("加载区域车数: 区域id=%d,区域车数=%d",area_ptr->m_id, area_ptr->m_vehicle_count.load());
-        }
-    }
 }
 
 void card_list::load_his_card_postion_vehicle()
 {
-    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
+    const char *sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
             att.start_time, att.end_time \
             from rt_location l, rt_att_vehicle att, dat_card c, dat_vehicle_extend v \
             where l.card_id = c.card_id and l.card_id = att.card_id and l.card_id=v.card_id \
@@ -178,18 +138,19 @@ void card_list::load_his_card_postion_vehicle()
 
         while ( DBRes.GetNextRecod(Error) )
         {
-             std::string card_id  = "";
+            std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            uint32_t id = tool_other::id64_to_id(card_id);
-            int type = tool_other::id64_to_type(card_id);
-            auto temp_ptr = card_list::instance()->get(tool_other::type_id_to_u64(type, id));
-            if(!temp_ptr || !temp_ptr->is_vehicle())
+            uint64_t c_id = tool_other::card_id_to_u64(card_id);
+            auto card_ptr = card_list::instance()->get(c_id);
+
+            if(!card_ptr)
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,%s",card_id.c_str());
                 continue;
             }
 
-            auto card_ptr = static_cast<car*>(temp_ptr.get());
+            int site_id = -1;
+            DBRes.GetField( "site_id",site_id, Error );
 
             double x = 0;
             DBRes.GetField( "x",x, Error );
@@ -215,9 +176,27 @@ void card_list::load_his_card_postion_vehicle()
             std::string end_time  = "";
             DBRes.GetField( "end_time",end_time, Error );
 
-            card_ptr->x = x;
-            card_ptr->y = y;
-            card_ptr->z = z;
+            std::string cur_time  = "";
+            DBRes.GetField( "cur_time",cur_time, Error );
+            
+            card_ptr->m_time = tool_time::to_time(cur_time)*1000;
+            card_ptr->set(x,y,z);
+
+            if(end_time.empty())
+            {
+                auto mine_tool_ptr = card_ptr->get_mine_tool();
+                mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
+                mine_tool_ptr->m_is_attendance = true;
+                log_info("vehicle加载考勤,考勤开始时间: %s, 卡id=%s", start_time.c_str(), card_id.c_str());
+            }
+
+            auto area_tool=card_ptr->get_area_tool();
+            auto sit_ptr=sit_list::instance()->get(site_id);
+            if(sit_ptr)
+            {
+                auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+            }
 
             //解析area_info
             const char * split = "|";
@@ -237,22 +216,13 @@ void card_list::load_his_card_postion_vehicle()
                     log_error("load_vehicle...area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-
-                if(end_time.empty())
-                {
-                    auto mine_tool_ptr = card_ptr->get_mine_tool();
-                    mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
-                    mine_tool_ptr->m_is_attendance = true;
-                }
-
-                card_ptr->m_time = tool_time::now_to_ms();
-
+                log_info("load_vehicle_area:%s,%d,%lu",card_id.c_str(),area_id,enter_time);
                 //要放到最后
                 auto area_hover_ptr = std::make_shared<area_hover>();
                 area_hover_ptr->m_area = area;
                 area_hover_ptr->m_enter_time = enter_time;
-                card_ptr->m_area_tool->m_hover_list.push_back(area_hover_ptr);
-                area_hover_ptr->m_area->on_load_his(area_hover_ptr, temp_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+                area->on_load_his(area_hover_ptr, card_ptr);
             }
         }
     }
@@ -260,7 +230,7 @@ void card_list::load_his_card_postion_vehicle()
 
 void card_list::load_his_card_postion_staff()
 {
-    const char *sql = "select l.card_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
+    const char *sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, \
             att.start_time, att.end_time \
             from rt_location l, rt_att_staff att, dat_card c, dat_staff_extend s \
             where l.card_id = c.card_id and l.card_id = att.card_id and l.card_id=s.card_id\
@@ -280,22 +250,21 @@ void card_list::load_his_card_postion_staff()
             std::string end_time  = "";
             DBRes.GetField( "end_time",end_time, Error );
             if(!end_time.empty()) // 已升井,不再读入
-            {
                 continue;
-            }
 
             std::string card_id  = "";
             DBRes.GetField( "card_id",card_id, Error );
-            uint32_t id = tool_other::id64_to_id(card_id);
-            int type = tool_other::id64_to_type(card_id);
-            auto temp_ptr = card_list::instance()->get(tool_other::type_id_to_u64(type, id));
-            if(!temp_ptr || !temp_ptr->is_person())
+            uint64_t c_id = tool_other::card_id_to_u64(card_id);
+            auto card_ptr = card_list::instance()->get(c_id);
+
+            if(!card_ptr)
             {
-                log_error("全局卡列表中找不到卡,卡id=%d,卡type=%d", id, type);
+                log_error("全局卡列表中找不到卡,%s", card_id.c_str());
                 continue;
             }
 
-            auto card_ptr = static_cast<person*>(temp_ptr.get());
+            int site_id = -1;
+            DBRes.GetField( "site_id",site_id, Error );
 
             double x = 0;
             DBRes.GetField( "x",x, Error );
@@ -318,9 +287,27 @@ void card_list::load_his_card_postion_staff()
             std::string start_time  = "";
             DBRes.GetField( "start_time",start_time, Error );
 
-            card_ptr->x = x;
-            card_ptr->y = y;
-            card_ptr->z = z;
+            std::string cur_time  = "";
+            DBRes.GetField( "cur_time",cur_time, Error );
+            
+            card_ptr->set(x,y,z);
+            card_ptr->m_time = tool_time::to_time(cur_time)*1000;
+
+            if(end_time.empty())
+            {
+                auto mine_tool_ptr = card_ptr->get_mine_tool();
+                mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
+                mine_tool_ptr->m_is_attendance = true;
+                log_info("person加载考勤,考勤开始时间: %s, 卡id=%s", start_time.c_str(), card_id.c_str());
+            }
+
+            auto area_tool=card_ptr->get_area_tool();
+            auto sit_ptr=sit_list::instance()->get(site_id);
+            if(sit_ptr)
+            {
+                auto area_hover_ptr = std::make_shared<area_hover>(sit_ptr->get_area(),*card_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+            }
 
             //解析area_info
             const char * split = "|";
@@ -340,22 +327,14 @@ void card_list::load_his_card_postion_staff()
                     log_error("area_list 找不到区域:区域id=%d", area_id);
                     continue;
                 }
-
-                if(end_time.empty())
-                {
-                    auto mine_tool_ptr = card_ptr->get_mine_tool();
-                    mine_tool_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time);
-                    mine_tool_ptr->m_is_attendance = true;
-                }
-
-                card_ptr->m_time = tool_time::now_to_ms();
+                log_info("load_person_area:%s,%d,%lu",card_id.c_str(),area_id,enter_time);
 
                 //要放到最后
                 auto area_hover_ptr = std::make_shared<area_hover>();
                 area_hover_ptr->m_area = area;
                 area_hover_ptr->m_enter_time = enter_time;
-                card_ptr->m_area_tool->m_hover_list.push_back(area_hover_ptr);
-                area_hover_ptr->m_area->on_load_his(area_hover_ptr, temp_ptr);
+                area_tool->m_hover_list.push_back(area_hover_ptr);
+                area->on_load_his(area_hover_ptr, card_ptr);
             }
         }
     }
@@ -370,7 +349,7 @@ void card_list::on_message(zloop<task*> *loop,const message_locinfo&loc,bool is_
 		log_warn("数据库中未定义该卡的信息,card_id=%d, card_type=%d,cardid:%lld",loc.m_card_id,loc.m_card_type,cardid);
 		return;
 	}
-	log_info("card message:site=%d,ant=%d,card=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d,stamp=%llu",
+	log_info("card_message:site=%d,ant=%d,card=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d,stamp=%llu",
 			loc.m_site_id,loc.m_ant_id,loc.m_card_id,loc.m_tof,loc.m_rav,loc.m_acc,loc.m_rssi,loc.m_time_stamp);
 
 	c->on_message(loop,loc,is_history);

+ 1 - 0
card.h

@@ -2,6 +2,7 @@
 #define _CARD_HPP_
 #include <thread>
 #include <ev++.h>
+
 #include "card_base.h"
 #include "write-copy.h"
 

+ 0 - 1
card_base.h

@@ -82,7 +82,6 @@ struct card_location_base:card,std::enable_shared_from_this<card_location_base>
 	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc)=0;
 	virtual void on_timer()=0;
 	virtual void site_hover(int sid)=0;
-    virtual std::shared_ptr<area_hover> get_area_hover()=0;
     virtual std::shared_ptr<mine_tool> get_mine_tool()=0;
     virtual std::shared_ptr<site_area_hover> get_site_area()=0;
     virtual void clear();

+ 0 - 5
card_car.cpp

@@ -30,11 +30,6 @@ void car::site_hover(int sid)
 	m_site_area->on_point(m_id,sid,0, m_type);
 }
 
-std::shared_ptr<area_hover> car::get_area_hover()
-{
-	return m_area_tool->get_area_first();
-}
-
 std::shared_ptr<mine_tool> car::get_mine_tool()
 {
 	return m_mine_tool;

+ 0 - 1
card_car.h

@@ -27,7 +27,6 @@ public:
 	~car();
 
 	virtual void site_hover(int sid);
-    virtual std::shared_ptr<area_hover> get_area_hover();
     virtual std::shared_ptr<mine_tool> get_mine_tool();
     virtual std::shared_ptr<site_area_hover> get_site_area();
 	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);

+ 1 - 0
card_message_handle.cpp

@@ -113,6 +113,7 @@ struct one_ct_message_handle
         auto v = m_msg_list;
 
 		std::vector<point> rc=std::move(m_loc_tool.calc_location(v));
+		log_info("calc_location:%d size:%d",m_card->m_id,rc.size());
         
 		if(!rc.empty()) m_card->on_location(std::move(rc),v);
 

+ 0 - 4
card_person.cpp

@@ -76,10 +76,6 @@ void person::IKSDK_DB(int sid)
 		}
 	}
 }
-std::shared_ptr<area_hover> person::get_area_hover()
-{
-	return m_area_tool->get_area_first();
-}
 
 std::shared_ptr<mine_tool> person::get_mine_tool()
 {

+ 0 - 1
card_person.h

@@ -23,7 +23,6 @@ struct person:card_location_base, card_area
     point getSmoothPoint(uint64_t& t);
 
     virtual void site_hover(int sid);
-    virtual std::shared_ptr<area_hover> get_area_hover();
     virtual std::shared_ptr<mine_tool> get_mine_tool();
     virtual std::shared_ptr<site_area_hover> get_site_area();
     virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);

+ 1 - 1
main.cpp

@@ -63,8 +63,8 @@ struct Init_Setting
         //auto s = special_area_list::instance()->get_special_id(1013,point(4727,-254),2);
         //std_info("test special_area:%d",s);
 		mine_business::inst()->load();
-        card_list::instance()->load_his_card_postion_from_db();
         event_list::instance()->load_his_data_from_db();
+        card_list::instance()->load_his_card_postion_from_db();
         db_para dp;	
         dp.Host=DBSetting.Host;
         dp.User=DBSetting.User;

+ 0 - 17
module_service/area_business_forbid.cpp

@@ -7,23 +7,6 @@
 #include "card.h"
 #include "module_call.h"
 
-struct forbid_data:business_data
-{
-    forbid_data()
-    {
-    }
-};
-
-area_business_forbid::area_business_forbid()
-{
-}
-
-void area_business_forbid::on_load_his(const std::shared_ptr<area_hover>&area_hover_ptr,
-                                            const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
-{
-
-}
-
 //记录进入时间等信息,生成告警
 void area_business_forbid::on_enter(const std::shared_ptr<area_hover>&a,
                                     const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)

+ 0 - 3
module_service/area_business_forbid.h

@@ -6,13 +6,10 @@
 class area_business_forbid : public area_business
 {
 public:
-    area_business_forbid();
-
     virtual int area_business_type()
     {
         return 7;
     }
-    void on_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);
 
     //记录进入时间等信息,生成告警
     void on_enter(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr);

+ 76 - 71
net-service.cpp

@@ -47,83 +47,88 @@ void net_service::on_timer()
 
 void net_service::on_message(std::shared_ptr<client> clt,const char*data,size_t len)
 {
-	logn_bin(1,clt->name().c_str(),data,len);//输出二进制日志
-
-	zistream is(data,len-2);
-	uint16_t cmd;
-	is>>skip(2)>>cmd;
-	switch(cmd)
+	try
 	{
-		case CHAR_LOCATEDATA_TOF_EXTEND://tof-扩展
-			{
-				uint32_t site_id;
-				uint8_t  power;
-				is>>site_id>>skip(11)>>power;
-                auto site_ptr = sit_list::instance()->get(static_cast<int32_t>(site_id));
-                if(!site_ptr)
-                {
-                    log_error("在全局分站列表中找不到分站:分站id=%d", site_id);
-                    break;
-                }
-                site_ptr->set_client(clt);
-                site_ptr->on_power_status((power&1)==0);
-
-				struct timeval tv;
-				gettimeofday(&tv,NULL);
-				uint64_t t = tv.tv_sec*1000 + tv.tv_usec/1000;
-				int index=0;
-				while(!is.eof())
+		zistream is(data,len-2);
+		uint16_t cmd;
+		is>>skip(2)>>cmd;
+		switch(cmd)
+		{
+			case CHAR_LOCATEDATA_TOF_EXTEND://tof-扩展
 				{
-					uint64_t tstamp = t -1000 + 50 + index* 45;
-					index++;
-					task*t=task::alloc<message_locinfo>();
-					message_locinfo&m=t->body<message_locinfo>();
-					m.load(is,false);
-					m.m_time_stamp=tstamp;
-					m.m_site_id=site_id;
-					//t_site->m_site_data = 0;
+					uint32_t site_id;
+					uint8_t  power;
+					is>>site_id>>skip(11)>>power;
+					auto site_ptr = sit_list::instance()->get(static_cast<int32_t>(site_id));
+					if(!site_ptr)
+					{
+						log_error("在全局分站列表中找不到分站:分站id=%d", site_id);
+						break;
+					}
+					site_ptr->set_client(clt);
+					site_ptr->on_power_status((power&1)==0);
 
-					t->m_cmd_code=cmd;
-					t->m_hash_id=m.m_card_id;
-					m_loc_worker->request(t);
-					if(m.m_card_type==5)
-						mine_business::inst()->make_reverse_condition(m.m_card_type,m.m_card_id,m.m_ant_id,m.m_card_ct,m.m_tof,m.m_site_id);
+					struct timeval tv;
+					gettimeofday(&tv,NULL);
+					uint64_t t = tv.tv_sec*1000 + tv.tv_usec/1000;
+					int index=0;
+					while(!is.eof())
+					{
+						uint64_t tstamp = t -1000 + 50 + index* 45;
+						index++;
+						task*t=task::alloc<message_locinfo>();
+						message_locinfo&m=t->body<message_locinfo>();
+						m.load(is,false);
+						m.m_time_stamp=tstamp;
+						m.m_site_id=site_id;
+						//t_site->m_site_data = 0;
+
+						t->m_cmd_code=cmd;
+						t->m_hash_id=m.m_card_id;
+						m_loc_worker->request(t);
+						if(m.m_card_type==5)
+							mine_business::inst()->make_reverse_condition(m.m_card_type,m.m_card_id,m.m_ant_id,m.m_card_ct,m.m_tof,m.m_site_id);
+					}
+				}
+				break;
+			case CHAR_LOCATEDATA_TDOA_EXTEND://tdoa
+				{
+					uint32_t site_id;
+					is>>site_id>>skip(12);
+					while(!is.eof())
+					{
+						task*t=task::alloc<message_locinfo>();
+						message_locinfo&m=t->body<message_locinfo>();
+						m.load(is,true);
+						m.m_site_id=site_id;
+						t->m_cmd_code=cmd;
+						t->m_hash_id=m.m_card_id;
+						m_sync_worker->translate(m);
+						m_loc_worker->request(t);
+					}
 				}
-			}
-			break;
-		case CHAR_LOCATEDATA_TDOA_EXTEND://tdoa
-			{
-				uint32_t site_id;
-				is>>site_id>>skip(12);
-				while(!is.eof())
+				break;
+			case CHAR_TDOA_READER_SYNC_TIME://time sync
 				{
-					task*t=task::alloc<message_locinfo>();
-					message_locinfo&m=t->body<message_locinfo>();
-					m.load(is,true);
-					m.m_site_id=site_id;
-					t->m_cmd_code=cmd;
-					t->m_hash_id=m.m_card_id;
-					m_sync_worker->translate(m);
-					m_loc_worker->request(t);
+					message_tdoasync m;
+					m.load(is);
+					m_sync_worker->on_message(m);
 				}
-			}
-			break;
-		case CHAR_TDOA_READER_SYNC_TIME://time sync
-			{
-				message_tdoasync m;
-				m.load(is);
-				m_sync_worker->on_message(m);
-			}
-			//site_message::on_sync(this,t.m_param1);
-			break;
-		case CHAR_LOCATEDATAHIS_TOF_EXTEND://tof his
-		case CHAR_LOCATEDATAHIS_TDOA_EXTEND://tdoa his
-			break;
-		case CHAR_CTRL_READER_CMD://ctrl site message
-			break;
-		case CHAR_ADHOC://自组网数据
-			break;
+				//site_message::on_sync(this,t.m_param1);
+				break;
+			case CHAR_LOCATEDATAHIS_TOF_EXTEND://tof his
+			case CHAR_LOCATEDATAHIS_TDOA_EXTEND://tdoa his
+				break;
+			case CHAR_CTRL_READER_CMD://ctrl site message
+				break;
+			case CHAR_ADHOC://自组网数据
+				break;
+		}
+	}
+	catch(const std::exception&e)
+	{
+		log_error("parse site message error,will close the connection:%s",clt->name().c_str());
+		clt->close();
 	}
 }
 
-

+ 1 - 9
site_area.cpp

@@ -52,12 +52,4 @@ void site_area_hover::leave_site(uint32_t card_id,int enter_site,int32_t type)
 {
 
 }
-int site_area_hover::get_att_type() const 
-{
-	int id = -1;
-		const auto &s = sit_list::instance()->get(m_site_id);
-		if(s)
-			if(s->m_reader_type_id == READER_TYPE_ID_DOWN)
-				id=0;
-		return id;
-}
+

+ 0 - 1
site_area.h

@@ -31,7 +31,6 @@ private:
 	point  m_enter_point,m_last_point;
 
 public:
-	int get_att_type() const;
     int site_id() const
     {
         return m_site_id;

+ 2 - 3
write-copy.h

@@ -122,7 +122,7 @@ struct safe_shared_ptr
 	std::atomic<int> m_mutex;
 	std::shared_ptr<T> m_ptr;
 
-	safe_shared_ptr(std::shared_ptr<T> ptr)
+	explicit safe_shared_ptr(std::shared_ptr<T> ptr)
 	{
 		m_mutex=0;
 		m_ptr=ptr;
@@ -151,7 +151,6 @@ struct safe_shared_ptr
 		unlock();
 		return ret;
 	}
-
 private:
 	void lock()
 	{
@@ -216,7 +215,7 @@ struct single_base:write_copy_base<T,K,V>
     }
 };
 
-template<typename T,typename K,typename V> safe_shared_ptr<T> single_base<T,K,V>::m_instance=std::make_shared<T>();
+template<typename T,typename K,typename V> safe_shared_ptr<T> single_base<T,K,V>::m_instance{std::make_shared<T>()};
 
 #endif
 

+ 17 - 2
znet.cpp

@@ -18,6 +18,8 @@
 #include <worker.h>
 
 #include "config_file.h"
+#include "crc.h"
+
 extern config_file config;
 struct client_ex:client
 {
@@ -332,10 +334,16 @@ struct sock_client:fd_io,client_ex
 			if(m_clen<msg_len)
 				break;
 
+			logn_bin(1,name().c_str(),m_b,msg_len);//输出二进制日志
 			if(check_crc(m_b,msg_len))
+			{
 				on_message(m_b,msg_len);
+			}
 			else
-				log_errno("check_crc_error.");
+			{
+				log_errno("check_crc_error,socket close... site=%s.",m_name.c_str());
+				return -1;
+			}
 
 			memmove(m_b,&m_b[msg_len],m_clen-msg_len);
 			m_clen-=msg_len;
@@ -431,7 +439,14 @@ struct sock_client:fd_io,client_ex
 
 	bool check_crc(const char*b,size_t mlen)
 	{
-		return true;
+		uint16_t crc=b[mlen-2];
+		crc<<=8;
+		crc|=b[mlen-1];
+
+		if(do_crc((unsigned char*)b,mlen)==crc)
+			return true;
+
+		return false;
 	}
 
 	void on_message(const char*m,int mlen)