Browse Source

移植动态画禁区功能 实现人员禁区告警和呼叫禁区人员,出区域后取消告警和呼叫

chensongchao 6 years ago
parent
commit
efce852bd4

+ 6 - 5
Makefile.am

@@ -9,7 +9,7 @@ SRC_MAIN= ant.cpp area.cpp base64.cpp bindmorecard.cpp card_area.cpp card_base.c
     	  card.cpp card_message_handle.cpp cardMgr.cpp card_path.cpp card_person.cpp crc.cpp geo_hash.cpp \
 		  landmark.cpp line_fit.cpp loc_point.cpp loc_tool.cpp message.cpp message_file.cpp mine.cpp \
 		  net-service.cpp point.cpp select_tool.cpp site_area.cpp special_area.cpp tdoa_sync.cpp visit.cpp \
-		  web-client.cpp worker.cpp ya_event.cpp znet.cpp area_business.cpp ya_setting.cpp
+		  web-client.cpp worker.cpp ya_event.cpp znet.cpp ya_setting.cpp area_business.cpp
 
 SRC_MAIN_EVENT= mine_module/MineCardManager.cpp
 
@@ -17,12 +17,12 @@ CXXFLAGS=-g
 
 AM_SOURCES=$(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN) $(SRC_MAIN_EVENT)
 
-AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -Iwebsocket -Iwebsocket/sio -I./db
+AM_CPPFLAGS=-Wall -pthread -m64 -g -O0 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -Iwebsocket -Iwebsocket/sio -I./db -I../dist/include -I../rapidjson/include
 
-AM_LDFLAGS=-Wall -pthread -m64 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib
+AM_LDFLAGS=-Wall -pthread -m64 -g -O0 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib -L../dist/lib
 
 yals_SOURCES=${AM_SOURCES} main.cpp
-yals_CPPFLAGS=${AM_CPPFLAGS}
+yals_CPPFLAGS=${AM_CPPFLAGS} 
 yals_LDFLAGS=${AM_LDFLAGS}  -lev -lzlog -lrt -lboost_chrono -lboost_system -lboost_thread -lmysqlclient -lthree_rates
 yals_LDADD=db/libyadb.a websocket/libwebsocket.a
 
@@ -38,6 +38,7 @@ test_SOURCES=test.cpp base64.cpp
 test_CPPFLAGS=${AM_CPPFLAGS}
 test_LDFLAGS=${AM_LDFLAGS}  -L. -lzlog -lrt
 
-DEFS=
+DEFS= 
 EXTRA_DIST=
 
+

+ 87 - 0
area.cpp

@@ -375,12 +375,16 @@ void area_list::init_from_db(int id/*=-1*/)
               log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
 
             map.insert({area_id,ap});
+
+            CheckAreaType(ap,area_type_id,0);
         }
         else
         {
             auto tmp_ptr = area_list::instance()->get(id);
             if(tmp_ptr)
             {
+                CheckAreaType(tmp_ptr,area_type_id,tmp_ptr->m_area_type);
+
                 tmp_ptr->update(over_count_person, over_time_person,scale,map_id,area_type_id,
                                 over_count_vehicle,over_time_vehicle);
                 tmp_ptr->m_bound=init_path(path);
@@ -398,6 +402,8 @@ void area_list::init_from_db(int id/*=-1*/)
                   log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
 
                 area_list::instance()->add(id, ap);
+
+                CheckAreaType(ap,area_type_id,0);
             }
 
             log_info("基础数据 增加或修改区域成功:区域id:%d,over_count_person:%d over_time_person:%d,scale:%.2f,map_id:%d\
@@ -415,6 +421,87 @@ void area_list::init_from_db(int id/*=-1*/)
         init_monkeycar_area();
     }
 }
+
+
+//新画禁区功能-给禁区中的卡发送警告及呼叫
+void area_list::CheckAreaType(int area_id,int new_area_type,int old_area_type)
+{
+    auto area_ptr = area_list::instance()->get(area_id);
+    if (!area_ptr) {
+        log_info("区域已经删除:areaid=%d", area_id);
+        return;
+    }
+    CheckAreaType(area_ptr,new_area_type,old_area_type);
+}
+void area_list::CheckAreaType( std::shared_ptr<area> pArea,int new_area_type,int old_area_type)
+{
+    if (nullptr == pArea)
+    {
+        return ;
+    }
+    if (new_area_type != AREA_TYPE::AREA_TYPE_FORBIDDEN && old_area_type != AREA_TYPE::AREA_TYPE_FORBIDDEN)
+    {
+        return;
+    }
+
+    struct local_visit:visitor<std::shared_ptr<card_location_base>>
+    {
+        std::shared_ptr<area> m_area;
+        int m_old_area_type;
+        bool visit(std::shared_ptr<card_location_base> c)
+        {
+            //处理
+            point pt(c->x,c->y,c->z);
+            std::shared_ptr<area> point_area = area_list::instance()->get_area(pt);
+            if (point_area == nullptr)
+            {
+                return true;
+            }
+            //不在区域里
+            if (m_area->m_id != point_area->m_id)
+            {
+                return true;
+            }
+
+            if (m_area->m_area_type == AREA_TYPE::AREA_TYPE_FORBIDDEN)
+            {
+                //发送进入禁区的警告
+                //呼叫
+                std::shared_ptr<area_hover> _area_hover = c->get_area_hover();
+                if (nullptr != _area_hover)
+                {
+                    _area_hover->m_area = m_area;
+                    _area_hover->m_area->on_enter(_area_hover,c);
+                }
+            }
+            else
+            {
+                if (m_old_area_type == AREA_TYPE::AREA_TYPE_FORBIDDEN)
+                {
+                    //之前是禁区,改成非禁区
+                    //发送一个离开禁区的警告
+                    //停止呼叫
+                    std::shared_ptr<area_hover> _area_hover = c->get_area_hover();
+                    if (nullptr != _area_hover)
+                    {
+                        _area_hover->m_area->on_leave(_area_hover,c);
+                    }
+                }
+                else
+                {
+                    return  false;
+                }
+            }
+
+            return true;
+        }
+    };
+    local_visit lv;
+    lv.m_area = pArea;
+    lv.m_old_area_type = old_area_type;
+    card_list::instance()->accept(lv);
+}
+
 #if 0
 void area_list::init_from_db()
 {

+ 4 - 0
area.h

@@ -121,6 +121,10 @@ struct area_list:single_base<area_list,int,std::shared_ptr<area>>
     void init_from_db(int id=-1);
     ///id=-1为初始化所有
     void init_monkeycar_area(int id=-1);
+private:
+    //禁区功能-给禁区中的卡发送警告及呼叫
+    void CheckAreaType(int area_id,int new_area_type,int old_area_type);
+    void CheckAreaType( std::shared_ptr<area> pArea,int new_area_type,int old_area_type);
 };
 
 struct area_hover

+ 58 - 3
area_business.cpp

@@ -3,6 +3,10 @@
 
 #include "card_base.h"
 #include "area_business.h"
+#include "area.h"
+#include "card.h"
+#include "ya_event.h"
+#include "module_service/module_call.h"
 
 struct area_business_factory
 {
@@ -114,10 +118,32 @@ struct area_business_restricted:area_business
 	//记录进入时间等信息
 	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>*ptr)
 	{
-	
+        a->m_enter_point = point(c->x,c->y,c->z);
+        a->m_last_point.set(0,0,0);
+        a->m_last_time = 0;
+        a->m_enter_time = time(nullptr);
+
+        // 发送警告
+        event_ptr evPtr = event_list::instance()->get_event_card(c->m_id,c->m_type,ET_CARD_AREA_FORBIDDEN_PERSON);
+        if (nullptr == evPtr)
+        {
+            event_ptr evPtr = event_list::create_event_card(c->m_id, c->m_type, ET_CARD_AREA_FORBIDDEN_PERSON);
+            event_list::instance()->copy_event(c, evPtr);
+            event_list::instance()->add(evPtr->get_list_id(), evPtr);
+        }
+        evPtr->m_limit_value = 0;
+        evPtr->m_cur_value = 0;
+        evPtr->m_is_display = false;
+        evPtr->m_status = EVENT_STATUS::ES_START ;
+        evPtr->m_cur_time = std::chrono::system_clock::now();
+
+        event_list::save_event(evPtr);
+
+        //呼叫
+        module_call::instance()->system_call_apoint(c->m_id,c->m_type);
 	}
 
-	//卡在猴车区域移动
+	//卡在区域移动
 	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
 	{
 	
@@ -125,7 +151,36 @@ struct area_business_restricted:area_business
 
 	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
 	{
-	}
+        a->m_last_point = point(c->x,c->y,c->z);
+        a->m_last_time = time(nullptr);
+
+        // 发送警告
+        int oldStatus = -1;
+        event_ptr evPtr = event_list::instance()->get_event_card(c->m_id,c->m_type,ET_CARD_AREA_FORBIDDEN_PERSON);
+        if (nullptr == evPtr)
+        {
+            event_ptr evPtr = event_list::create_event_card(c->m_id, c->m_type, ET_CARD_AREA_FORBIDDEN_PERSON);
+            event_list::instance()->copy_event(c, evPtr);
+            event_list::instance()->add(evPtr->get_list_id(), evPtr);
+            oldStatus = EVENT_STATUS::ES_END;
+        } else{
+            if (evPtr->m_status != EVENT_STATUS::ES_END)
+            {
+                oldStatus = EVENT_STATUS::ES_END;
+            }
+        }
+        evPtr->m_limit_value = 0;
+        evPtr->m_cur_value = 0;
+        evPtr->m_is_display = false;
+        evPtr->m_status = EVENT_STATUS::ES_END ;
+        evPtr->m_cur_time = std::chrono::system_clock::now();
+        if (oldStatus != -1)
+        {
+            event_list::save_event(evPtr);
+        }
+        //取消呼叫
+        module_call::instance()->system_cancel_call_apoint(c->m_id,c->m_type);
+    }
 };
 
 /*

+ 93 - 0
module_service/module_call.cpp

@@ -536,3 +536,96 @@ void module_call::get_user_all_call_cards(call_user_ptr& user_ptr,
 }
 
 
+/**
+* @brief 系统自动发送呼叫给指定的卡
+*/
+void module_call::system_call_apoint(int card_id,int card_type)
+{
+    int call_type = -1, call_level = -1, call_time_interval=-1;
+    uint32_t call_time_out = 0;
+    std::string user_name = "system_apoint";
+
+    std::vector<call_card_ptr> result_arr;//结果集
+
+    call_user_ptr user_ptr;
+    std::lock_guard<std::mutex> lock(_mutex);
+    auto user_map_ptr = _map.find(user_name);
+    if(_map.end() == user_map_ptr)//没有这个用户就新建并加入
+    {
+        user_ptr=call_user_ptr(new call_user());
+        _map[user_name]=user_ptr;
+    }
+    else//有这个用户
+    {
+        user_ptr=user_map_ptr->second;
+    }
+
+    //更新用户信息
+    user_ptr->call_time=std::chrono::system_clock::now();
+    user_ptr->call_time_out=call_time_out;
+    user_ptr->call_time_interval = call_time_interval;
+    user_ptr->call_type_id=call_type;
+    user_ptr->call_level_id=call_level;
+    user_ptr->user_name=user_name;
+
+    call_card_ptr c_card_ptr(new call_card());
+    c_card_ptr->cardid = card_id;
+    c_card_ptr->cardtype = card_type;
+    copy(user_ptr, c_card_ptr);
+    c_card_ptr->call_state = CALL_ING;
+
+    user_ptr->cards[c_card_ptr->cardid]=c_card_ptr;
+
+    for(auto& it:user_ptr->cards)//添加到结果集中
+    {
+        result_arr.push_back(it.second);
+    }
+    log_info("发起呼叫 cardid=%d, cardtype=%d", card_id,card_type);
+
+    //组装json发送给web
+    response_accept_call(result_arr);
+}
+/**
+ * @brief 系统自动发送呼叫给指定的卡
+ */
+void module_call::system_cancel_call_apoint(int card_id,int card_type)
+{
+    int call_type = -1;//, call_level = -1;
+    std::string user_name = "system_apoint";
+    int64_t call_time;
+
+    call_user_ptr result_user_ptr(new call_user());
+    result_user_ptr->call_type_id=call_type;
+    //    result_user_ptr->call_level_id=call_level;
+    result_user_ptr->call_time = std::chrono::system_clock::time_point(std::chrono::milliseconds(call_time));
+    result_user_ptr->user_name=user_name;
+
+    std::lock_guard<std::mutex> lock(_mutex);
+
+    call_user_ptr user_ptr(new call_user());
+    auto it_map = _map.find(user_name);
+    if(_map.end()!=it_map)//呼叫用户
+    {
+        user_ptr=it_map->second;
+    }
+    if (user_ptr->cards.find(card_id) == user_ptr->cards.end())
+    {
+        return ;
+    }
+    call_card_ptr c_card_ptr(new call_card());
+    c_card_ptr->cardid = card_id;
+    c_card_ptr->cardtype = card_type;
+
+    result_user_ptr->cards[c_card_ptr->cardid]=c_card_ptr;//增加到结果集中
+
+    user_ptr->cards.erase(c_card_ptr->cardid);//删除这个卡
+
+    log_info("取消呼叫: cardid=%d, cardtype=%d", card_id,card_type);
+    // 没有呼叫信息,删除该用户记录
+    if(user_ptr->cards.empty())
+    {
+        _map.erase(user_name);
+    }
+
+    response_accept_cancel(result_user_ptr);
+}

+ 9 - 0
module_service/module_call.h

@@ -193,7 +193,16 @@ public:
     std::string accept_login();
 
     void rev_from_card_resp(std::shared_ptr<card_location_base> card_ptr);
+
+    /**
+     * @brief 系统自动发送呼叫给指定的卡
+     */
+    void system_call_apoint(int card_id,int card_type);
     /**
+     * @brief 系统自动发送呼叫给指定的卡
+     */
+    void system_cancel_call_apoint(int card_id,int card_type);
+    /**int card_id,int card_type
      * @brief
      */
     void init(config_file& config)

+ 258 - 0
module_service/module_meta_date_changed.cpp

@@ -4,6 +4,122 @@
 #include"ant.h"
 
 
+///基础数据
+void module_meta_date_changed::accept(sio::message::ptr const& data)
+{
+    std::string name="";
+    if(!tool_map::try_get_value(name, JSON_KEY_NAME, data))
+    {
+        log_error("web发来的数据: 基础数据找不到name字段");
+        return;
+    }
+
+    std_debug("基础数据 receive meta_data_changed: %s", name.c_str());
+
+    int64_t id=-1;
+    tool_map::try_get_value(id, JSON_KEY_ID, data);
+
+    std::string op_type="";
+    tool_map::try_get_value(op_type, JSON_KEY_OP_TYPE, data);
+
+    if(-1 != id && !op_type.empty())
+    {
+        EDIT_TYPE_ID edit_type_id;
+        if(!try_get_edit_type_id(op_type, edit_type_id))
+        {
+            log_error("web发来的数据: 基础数据op_type字段错误:op_type=%s", op_type.c_str());
+            return;
+        }
+
+        if(JSON_KEY_NAME_VEHICLE == name || JSON_KEY_NAME_VEHICLE_EXTEND == name)
+        {
+            deal_call_edit_vehicle(id, edit_type_id);
+        }
+        else if(JSON_KEY_NAME_STAFF == name || JSON_KEY_NAME_STAFF_EXTEND == name)
+        {
+            deal_call_edit_staff(id, edit_type_id);
+        }
+        else if(JSON_KEY_NAME_CARD == name)
+        {
+            deal_call_edit_card(id, edit_type_id);
+        }
+        else if(JSON_KEY_NAME_AREA == name)
+        {
+            deal_call_edit_area(id, edit_type_id);
+        }
+        else if(JSON_KEY_NAME_READER == name)
+        {
+            deal_call_edit_reader(id, edit_type_id);
+        }
+        else if ("antenna" == name)
+        {
+            deal_call_edit_antenna(id,edit_type_id);
+        }
+        else if(JSON_KEY_NAME_PATH == name)
+        {
+            deal_call_edit_path(id, edit_type_id);
+        }
+        else if(JSON_KEY_NAME_MAP == name)
+        {
+            deal_call_edit_map(id, edit_type_id);
+        }
+        else if (JSON_KEY_NAME_LIGHT == name)
+        {
+            deal_call_edit_light(id,edit_type_id);///待实现
+        }
+        else if ("lights_group" == name)
+        {
+            deal_call_edit_lights_group(id,edit_type_id);///待实现
+        }
+        else
+        {
+            log_error("web发来的数据: 基础数据name字段错误:name=%s", name.c_str());
+        }
+    }
+    else
+    {
+        if(JSON_KEY_NAME_SETTING == name)
+        {
+            //阈值限制接口
+            init_setting(); ///待实现
+        }
+        else
+        {
+            log_error("web发来的数据: 基础数据name字段错误:name=%s", name.c_str());
+        }
+    }
+}
+
+///3.清除卡相关信息,区域相关,分站相关,考勤相关,清除定时器,
+///速度,状态 呼救 呼叫 告警相关。即保留基础信息,其他的重置。
+void module_meta_date_changed::clear_card(std::shared_ptr<card_location_base> card_ptr)
+{
+    //删除
+    card_ptr->del_card_pos();
+    // 升井 删除所有报警信息
+    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
+    {
+        if (i == EVENT_TYPE::ET_CARD_LOW_POWER_SERIOUS)
+        {
+            continue;
+        }
+
+        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);
+
+            ev_ptr->m_status = ES_END;
+
+            event_list::save_event(ev_ptr);
+        }
+    }
+
+    card_ptr->clear();
+}
+
+
 void module_meta_date_changed::deal_call_edit_vehicle(int64_t id64, EDIT_TYPE_ID edit_type_id)
 {
     if(ET_INSERT == edit_type_id || ET_UPDATE == edit_type_id)
@@ -206,3 +322,145 @@ void module_meta_date_changed::remove_card(uint32_t id, int32_t type)
     card_list::instance()->remove(card_id);
     log_info("基础数据, 在全局列表中删除卡成功, id=%d, type=%d", id, type);
 }
+
+bool module_meta_date_changed::try_get_edit_type_id(const std::string& op_type, EDIT_TYPE_ID& out_edit_type_id)
+{
+    if(JSON_KEY_OP_TYPE_UPDATE == op_type)
+    {
+        out_edit_type_id = ET_UPDATE;
+    }
+    else if(JSON_KEY_OP_TYPE_DELETE == op_type)
+    {
+        out_edit_type_id = ET_DELETE;
+    }
+    else if(JSON_KEY_OP_TYPE_INSERT == op_type)
+    {
+        out_edit_type_id = ET_INSERT;
+    }
+    else
+    {
+        return false;
+    }
+
+    return true;
+}
+
+bool module_meta_date_changed::is_monkeycar_area(int area_id)
+{
+    char sql[1024] = {'\0'};
+    sprintf(sql,"select monkeycar_areaid from dat_monkeycar_base_info where monkeycar_areaid=%d;", area_id);
+    std::string Error;
+    YADB::CDBResultSet DBRes;
+    sDBConnPool.Query(sql,DBRes,Error);
+    int64_t nCount = DBRes.GetRecordCount( Error );
+
+    log_info("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
+    std_debug("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
+
+    return  (nCount > 0);
+}
+
+///删除区域所有报警信息
+void module_meta_date_changed::delete_area_event(std::shared_ptr<area> area_ptr)
+{
+    for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
+    {
+        auto ev_ptr = event_list::instance()->get_event_area(area_ptr->id(), static_cast<EVENT_TYPE>(i));
+        if(ev_ptr && !ev_ptr->is_end()) //
+        {
+            event_list::copy_event(area_ptr, ev_ptr);
+
+            ev_ptr->m_status = ES_END;
+
+            event_list::save_event(ev_ptr);
+        }
+    }
+}
+
+void module_meta_date_changed::delete_antenna(int id)
+{
+    int sitid=-8;
+    auto map = sit_list::instance()->m_map;
+    for(auto&it:map)
+    {
+        auto sit_ptr = it.second;
+        if(sit_ptr->m_ant[0].m_id == id)
+        {
+            sitid=sit_ptr->m_id;
+            sit_ptr->delete_antenna(0);
+            break;
+        }
+        if(sit_ptr->m_ant[1].m_id == id)
+        {
+            sitid=sit_ptr->m_id;
+            sit_ptr->delete_antenna(1);
+            break;
+        }
+    }
+
+    if(sitid==-8)
+    {
+        std_debug("天线已经删除了,在分站列表中找不到该天线:天线id=%d", id);
+        log_info("天线已经删除了,在分站列表中找不到该天线:天线id=%d", id);
+    }
+    else
+    {
+        std_debug("删除天线成功:天线id=%d,分站id=%d", id, sitid);
+        log_info("删除天线成功:天线id=%d,分站id=%d", id, sitid);
+    }
+}
+
+bool module_meta_date_changed::is_cur_map(int id)
+{
+    return cur_map_id()==id;
+}
+
+int module_meta_date_changed::cur_map_id()
+{
+    auto tmp = area_list::instance()->m_map;
+    for(auto&it:tmp)
+    {
+        if(0!=it.second->m_mapid)
+        {
+            return it.second->m_mapid;
+        }
+    }
+
+    return -1;
+}
+
+void module_meta_date_changed::update_map_info(int id)
+{
+    std::string sql = "SELECT scale FROM dat_map WHERE map_id=";
+
+    sql.append(std::to_string(id));
+    sql.append(";");
+
+    std_debug("修改地图 sql=%s", sql.c_str());
+    log_info("修改地图 sql=%s", sql.c_str());
+
+    std::string Error;
+    YADB::CDBResultSet DBRes;
+    sDBConnPool.Query(sql.c_str(),DBRes,Error);
+    int nCount = DBRes.GetRecordCount( Error );
+    if (nCount < 1)
+    {
+        log_error("修改地图失败,数据库中找不到: map_id=%d", id);
+        return ;
+    }
+
+    double scale  = 0;
+    DBRes.GetField( "scale",scale, Error );
+
+    auto area = area_list::instance()->m_map;
+    for(auto& it : area)
+    {
+        it.second->m_scale = scale;
+    }
+
+    auto site = sit_list::instance()->m_map;
+    for(auto& it : site)
+    {
+        it.second->m_scale = scale;
+    }
+}

+ 9 - 243
module_service/module_meta_date_changed.h

@@ -34,119 +34,11 @@ private:
     ///'rules', 'drivingface_vehicle', 'dat_handup_vehicle', 'lights_binding'
 public:
     ///基础数据
-    void accept(sio::message::ptr const& data)
-    {
-        std::string name="";
-        if(!tool_map::try_get_value(name, JSON_KEY_NAME, data))
-        {
-            log_error("web发来的数据: 基础数据找不到name字段");
-            return;
-        }
-
-        std_debug("基础数据 receive meta_data_changed: %s", name.c_str());
-
-        int64_t id=-1;
-        tool_map::try_get_value(id, JSON_KEY_ID, data);
-
-        std::string op_type="";
-        tool_map::try_get_value(op_type, JSON_KEY_OP_TYPE, data);
-
-        if(-1 != id && !op_type.empty())
-        {
-            EDIT_TYPE_ID edit_type_id;
-            if(!try_get_edit_type_id(op_type, edit_type_id))
-            {
-                log_error("web发来的数据: 基础数据op_type字段错误:op_type=%s", op_type.c_str());
-                return;
-            }
-
-            if(JSON_KEY_NAME_VEHICLE == name || JSON_KEY_NAME_VEHICLE_EXTEND == name)
-            {
-                deal_call_edit_vehicle(id, edit_type_id);
-            }
-            else if(JSON_KEY_NAME_STAFF == name || JSON_KEY_NAME_STAFF_EXTEND == name)
-            {
-                deal_call_edit_staff(id, edit_type_id);
-            }
-            else if(JSON_KEY_NAME_CARD == name)
-            {
-                deal_call_edit_card(id, edit_type_id);
-            }
-            else if(JSON_KEY_NAME_AREA == name)
-            {
-                deal_call_edit_area(id, edit_type_id);
-            }
-            else if(JSON_KEY_NAME_READER == name)
-            {
-                deal_call_edit_reader(id, edit_type_id);
-            }
-            else if ("antenna" == name)
-            {
-                deal_call_edit_antenna(id,edit_type_id);
-            }
-            else if(JSON_KEY_NAME_PATH == name)
-            {
-                deal_call_edit_path(id, edit_type_id);
-            }
-            else if(JSON_KEY_NAME_MAP == name)
-            {
-                deal_call_edit_map(id, edit_type_id);
-            }
-            else if (JSON_KEY_NAME_LIGHT == name)
-            {
-                deal_call_edit_light(id,edit_type_id);///待实现
-            }
-            else if ("lights_group" == name)
-            {
-                deal_call_edit_lights_group(id,edit_type_id);///待实现
-            }
-            else
-            {
-                log_error("web发来的数据: 基础数据name字段错误:name=%s", name.c_str());
-            }
-        }
-        else
-        {
-            if(JSON_KEY_NAME_SETTING == name)
-            {
-                //阈值限制接口
-                init_setting(); ///待实现
-            }
-            else
-            {
-                log_error("web发来的数据: 基础数据name字段错误:name=%s", name.c_str());
-            }
-        }
-    }
+    void accept(sio::message::ptr const& data);
 
     ///3.清除卡相关信息,区域相关,分站相关,考勤相关,清除定时器,
     ///速度,状态 呼救 呼叫 告警相关。即保留基础信息,其他的重置。
-    static void clear_card(std::shared_ptr<card_location_base> card_ptr)
-    {
-        //删除
-        card_ptr->del_card_pos();
-        // 升井 删除所有报警信息
-        for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
-        {
-            if (i == EVENT_TYPE::ET_CARD_LOW_POWER_SERIOUS)
-            {
-                continue;
-            }
-
-            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);
-
-                ev_ptr->m_status = ES_END;
-
-                event_list::save_event(ev_ptr);
-            }
-        }
-
-        card_ptr->clear();
-    }
+    static void clear_card(std::shared_ptr<card_location_base> card_ptr);
 
 private:
     ///id64格式为:10000001016
@@ -180,147 +72,21 @@ private:
 
     void remove_card(uint32_t id, int32_t type);
 
-    bool try_get_edit_type_id(const std::string& op_type, EDIT_TYPE_ID& out_edit_type_id)
-    {
-        if(JSON_KEY_OP_TYPE_UPDATE == op_type)
-        {
-            out_edit_type_id = ET_UPDATE;
-        }
-        else if(JSON_KEY_OP_TYPE_DELETE == op_type)
-        {
-            out_edit_type_id = ET_DELETE;
-        }
-        else if(JSON_KEY_OP_TYPE_INSERT == op_type)
-        {
-            out_edit_type_id = ET_INSERT;
-        }
-        else
-        {
-            return false;
-        }
-
-        return true;
-    }
-
-    bool is_monkeycar_area(int area_id)
-    {
-        char sql[1024] = {'\0'};
-        sprintf(sql,"select monkeycar_areaid from dat_monkeycar_base_info where monkeycar_areaid=%d;", area_id);
-        std::string Error;
-        YADB::CDBResultSet DBRes;
-        sDBConnPool.Query(sql,DBRes,Error);
-        int64_t nCount = DBRes.GetRecordCount( Error );
+    bool try_get_edit_type_id(const std::string& op_type, EDIT_TYPE_ID& out_edit_type_id);
 
-        log_info("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
-        std_debug("monkeycar_area区域查询:nCount=%d,sql=%s", nCount, sql);
-
-        return  (nCount > 0);
-    }
+    bool is_monkeycar_area(int area_id);
 
     ///删除区域所有报警信息
-    static void delete_area_event(std::shared_ptr<area> area_ptr)
-    {
-        for(int i=0; i < CARD_EVENT_COUNT_MAX; i++ )
-        {
-            auto ev_ptr = event_list::instance()->get_event_area(area_ptr->id(), static_cast<EVENT_TYPE>(i));
-            if(ev_ptr && !ev_ptr->is_end()) //
-            {
-                event_list::copy_event(area_ptr, ev_ptr);
-
-                ev_ptr->m_status = ES_END;
+    static void delete_area_event(std::shared_ptr<area> area_ptr);
 
-                event_list::save_event(ev_ptr);
-            }
-        }
-    }
-
-    void delete_antenna(int id)
-    {
-        int sitid=-8;
-        auto map = sit_list::instance()->m_map;
-        for(auto&it:map)
-        {
-            auto sit_ptr = it.second;
-            if(sit_ptr->m_ant[0].m_id == id)
-            {
-                sitid=sit_ptr->m_id;
-                sit_ptr->delete_antenna(0);
-                break;
-            }
-            if(sit_ptr->m_ant[1].m_id == id)
-            {
-                sitid=sit_ptr->m_id;
-                sit_ptr->delete_antenna(1);
-                break;
-            }
-        }
+    void delete_antenna(int id);
 
-        if(sitid==-8)
-        {
-            std_debug("天线已经删除了,在分站列表中找不到该天线:天线id=%d", id);
-            log_info("天线已经删除了,在分站列表中找不到该天线:天线id=%d", id);
-        }
-        else
-        {
-            std_debug("删除天线成功:天线id=%d,分站id=%d", id, sitid);
-            log_info("删除天线成功:天线id=%d,分站id=%d", id, sitid);
-        }
-    }
+    bool is_cur_map(int id);
 
-    bool is_cur_map(int id)
-    {
-        return cur_map_id()==id;
-    }
+    int cur_map_id();
 
-    int cur_map_id()
-    {
-        auto tmp = area_list::instance()->m_map;
-        for(auto&it:tmp)
-        {
-            if(0!=it.second->m_mapid)
-            {
-                return it.second->m_mapid;
-            }
-        }
+    void update_map_info(int id);
 
-        return -1;
-    }
-
-    void update_map_info(int id)
-    {
-        std::string sql = "SELECT scale FROM dat_map WHERE map_id=";
-
-        sql.append(std::to_string(id));
-        sql.append(";");
-
-        std_debug("修改地图 sql=%s", sql.c_str());
-        log_info("修改地图 sql=%s", sql.c_str());
-
-        std::string Error;
-        YADB::CDBResultSet DBRes;
-        sDBConnPool.Query(sql.c_str(),DBRes,Error);
-        int nCount = DBRes.GetRecordCount( Error );
-        if (nCount < 1)
-        {
-            log_error("修改地图失败,数据库中找不到: map_id=%d", id);
-            return ;
-        }
-
-        double scale  = 0;
-        DBRes.GetField( "scale",scale, Error );
-
-        auto area = area_list::instance()->m_map;
-        for(auto& it : area)
-        {
-            it.second->m_scale = scale;
-        }
-
-        auto site = sit_list::instance()->m_map;
-        for(auto& it : site)
-        {
-            it.second->m_scale = scale;
-        }
-    }
 };
 
 #endif // MODULE_META_DATE_CHANGED_H

+ 4 - 3
monkey_car/monkeycar_area.cpp

@@ -30,7 +30,7 @@ std::shared_ptr<monkey_person> monkey_area::find(uint32_t cardid)
 
 void monkey_area::on_hover(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type)
 {
-	area::on_hover(card_id,c,speed,type);
+	//area::on_hover(card_id,c,speed,type);
 	//人卡走下面的业务
 	if(type != 1)
 	  return;
@@ -48,7 +48,8 @@ void monkey_area::on_hover(int64_t card_id,std::shared_ptr<area_hover>&c,double
 }
 void monkey_area::on_enter(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type)
 {
-	area::on_enter(card_id,c,speed,type);
+	//std::shared_ptr<card_location_base> card = card_list::instance()->get(tool_other::type_id_to_u64(type, card_id));
+	//area::on_enter(card_id,c,speed,type);
 
 	if(type != 1)
 	  return;
@@ -56,7 +57,7 @@ void monkey_area::on_enter(int64_t card_id,std::shared_ptr<area_hover>&c,double
 }
 void monkey_area::on_leave(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type)
 {
-	area::on_leave(card_id,c,speed,type);
+	//area::on_leave(card_id,c,speed,type);
 	if(type != 1)
 	  return;
 	on_card_leave(card_id);

+ 17 - 17
websocket/constdef.h

@@ -22,7 +22,7 @@
 #define JSON_ROOT_KEY_STATISTIC_AREA "area"
 #define JSON_ROOT_KEY_STATISTIC_LEVEL "occupation_level"
 
-// 采集端接收接口
+// 锟缴硷拷锟剿斤拷锟秸接匡拷
 #define JSON_CMD_VALUE_CLEAR_CARD "clear_card"
 #define JSON_CMD_VALUE_DEAL_HELP "helpme_done"   //deal_help
 #define JSON_CMD_VALUE_DEAL_HELP_RESPONSE "helpme_done_rsp"   //deal_help
@@ -32,7 +32,7 @@
 #define JSON_CMD_VALUE_CALL_CARD_START "call_card_start"
 #define JSON_CMD_VALUE_CALL_CARD_CANCEL "call_card_cancel"
 #define  JSON_CMD_VALUE_LEADER_ARRANGE "leader_arrange"
-//呼叫命令
+//锟斤拷锟斤拷锟斤拷锟斤拷
 #define JSON_CMD_VALUE_CALL_CARD_REQUEST "call_card_req"
 #define JSON_CMD_VALUE_CALL_CARD_RESPONSE "call_card_resp"
 #define JSON_CMD_VALUE_CALL_CARD_CANCEL_REQUEST "call_card_cancel_req"
@@ -94,35 +94,35 @@
 #define JSON_KEY_EDIT_CARD_ID "cardid"
 #define JSON_KEY_EDIT_EDIT_TYPE_ID "edittype"
 
-// 采集端调用接口
+// 锟缴硷拷锟剿碉拷锟矫接匡拷
 #define JSON_CMD_VALUE_LOGIN "login"
 #define JSON_CMD_VALUE_LOGOUT "logout"
 #define JSON_KEY_USERNAME "user_name"
 #define JSON_KEY_PASSWORD "user_pass"
 #define JSON_VALUE_USERNAME "COLLECTOR"
 #define JSON_VALUE_PASSWORD "666666"  //"666666"
-#define JSON_KEY_CARD_ID "card_id" //"卡号"
+#define JSON_KEY_CARD_ID "card_id" //"锟斤拷锟斤拷"
 #define JSON_KEY_CARD_TYPE_ID "card_type_id"
-#define JSON_KEY_REC_TIME "rec_time" // "接收时间"
-#define JSON_KEY_DOWN_TIME "down_time" // "入井时间"
-#define JSON_KEY_WORK_TIME "work_time" // "工作时间"
-#define JSON_KEY_ENTER_AREA_TIME "enter_area_time" // "进入区域时间"
+#define JSON_KEY_REC_TIME "rec_time" // "锟斤拷锟斤拷时锟斤拷"
+#define JSON_KEY_DOWN_TIME "down_time" // "锟诫井时锟斤拷"
+#define JSON_KEY_WORK_TIME "work_time" // "锟斤拷锟斤拷时锟斤拷"
+#define JSON_KEY_ENTER_AREA_TIME "enter_area_time" // "锟斤拷锟斤拷锟斤拷锟斤拷时锟斤拷"
 #define JSON_KEY_CORDINATE_X "x"
 #define JSON_KEY_CORDINATE_Y "y"
 #define JSON_KEY_CORDINATE_Z "z"
 #define JSON_KEY_STATE "state" // "状态"
-#define JSON_KEY_STATE_MOVING "state_moving" // 运动状态
-#define JSON_KEY_STATE_BIZ "state_biz" // 业状态
-#define JSON_KEY_MAP_ID "map_id" // "地图编号"
+#define JSON_KEY_STATE_MOVING "state_moving" // 锟剿讹拷状态
+#define JSON_KEY_STATE_BIZ "state_biz" // 业锟斤拷状态
+#define JSON_KEY_MAP_ID "map_id" // "锟斤拷图锟斤拷锟�"
 #define JSON_KEY_DEPT_ID "dept_id"
-#define JSON_KEY_SPEED "speed"	//速度
+#define JSON_KEY_SPEED "speed"	//锟劫讹拷
 #define JSON_KEY_LANDMARK_ID "landmark_id"
 #define JSON_KEY_DIRECTORY_ID "landmark_direction_id"
 #define JSON_KEY_LANDMARK_DIS "landmark_distance"
 
 // id, name, type, map_id
-#define JSON_KEY_AREA_ID "area_id" // "区域编号"
-#define JSON_KEY_AREA_IS_SPECIAL "is_special_area" // "区域名称"
+#define JSON_KEY_AREA_ID "area_id" // "锟斤拷锟斤拷锟斤拷"
+#define JSON_KEY_AREA_IS_SPECIAL "is_special_area" // "锟斤拷锟斤拷锟斤拷锟斤拷"
 // down_mine,up_mine
 #define JSON_CMD_VALUE_DOWN_MINE "down_mine"
 #define JSON_CMD_VALUE_UP_MINE "up_mine"
@@ -136,7 +136,7 @@
 // pos_map
 #define JSON_CMD_VALUE_POS_MAP "pos_map"
 
-// 告警事件
+// 锟芥警锟铰硷拷
 #define JSON_KEY_EVENT_EVENT_ID "event_id"
 #define JSON_KEY_EVENT_STATUS "status"
 #define JSON_KEY_EVENT_TYPE_ID "type_id"
@@ -178,14 +178,14 @@
 #define JSON_KEY_ALARM_LIGHT_GROUP_NAME	"light_group_name"
 
 #define JSON_KEY_ALARM_TRAFFIC_RED_LIGHT "traffic_red_light"
-// 掘进面
+// 锟斤拷锟斤拷锟�
 #define JSON_KEY_DRIVINGFACE_DIS "driving_face_moving_dis"
 #define JSON_KEY_DRIVINGFACE_WARNING_POINT_ID "driving_face_warning_point_id"
 #define JSON_KEY_DRIVINGFACE_WARNING_POINT_DIS "driving_face_warning_point_dis"
 
 #define JSON_KEY_DRIVINGFACE_CURSHIFT_LENGTH "drivingface_curshift_length"
 
-//人上车状态
+//锟斤拷锟较筹拷状态
 #define JSON_KEY_PERSON_ON_CAR "person_on_car"
 #define JSON_CMD_REQ_ALL_PERSON_ON_CAR "req_all_person_on_car"
 #define JSON_CMD_RESP_ALL_PERSON_ON_CAR "resp_all_person_on_car"

+ 4 - 0
ya_event.h

@@ -48,6 +48,10 @@ enum EVENT_TYPE{ // 事件类型
 
     ET_CARD_AREA_OVER_TIME_PERSON = 15, // 人员区域超时
     ET_CARD_AREA_OVER_TIME_VEHICLE = 16, // 车辆区域超时
+    ET_CARD_AREA_LIMIT_PERSON = 17, // 人员进入限制区域
+    ET_CARD_AREA_LIMIT_VEHICLE = 18, // 车辆进入限制区域
+    ET_CARD_AREA_FORBIDDEN_PERSON = 19,  // 人员进入禁止区域
+    ET_CARD_AREA_FORBIDDEN_VEHICLE = 20, // 车辆进入禁止区域
     ET_CARD_OVER_SPEED = 21, // 车辆超速
     ET_CARD_HELP = 24, // 人员呼救