Browse Source

add commit && 增加告警显示地标信息。库表需要增加 && 电量前端展示的功能

lixioayao 5 years ago
parent
commit
ef9c579623
5 changed files with 53 additions and 19 deletions
  1. 2 2
      card_base.cpp
  2. 27 7
      card_person.cpp
  3. 16 8
      event.cpp
  4. 3 1
      event.h
  5. 5 1
      tool_time.h

+ 2 - 2
card_base.cpp

@@ -88,7 +88,7 @@ void card_location_base::do_status(int st)
 
 
     module_mgr::do_status((STATUS_CARD)st, m_id, m_type);
     module_mgr::do_status((STATUS_CARD)st, m_id, m_type);
 }
 }
-
+//写入历史轨迹
 void card_location_base::make_his_location(uint64_t t,const point & pt,bool bclose /*= false*/)
 void card_location_base::make_his_location(uint64_t t,const point & pt,bool bclose /*= false*/)
 {
 {
 	int area_id=0,map_id=0,site_id=0;
 	int area_id=0,map_id=0,site_id=0;
@@ -102,7 +102,7 @@ void card_location_base::make_his_location(uint64_t t,const point & pt,bool bclo
     log_info("make_his_location: card_id: %d,map_id: %d,area_id: %d,site_id: %d",m_id,map_id,area_id,site_id);
     log_info("make_his_location: card_id: %d,map_id: %d,area_id: %d,site_id: %d",m_id,map_id,area_id,site_id);
 	m_his_location_card->push(t,pt,area_id,map_id,site_id,bclose);
 	m_his_location_card->push(t,pt,area_id,map_id,site_id,bclose);
 }
 }
-
+//坐标点输入业务入口
 void card_location_base::on_location(const std::vector<point>&vp,const std::vector<loc_message> &lm )
 void card_location_base::on_location(const std::vector<point>&vp,const std::vector<loc_message> &lm )
 {
 {
 	loc_point pt = m_sel_tool->select_solution(vp,lm);
 	loc_point pt = m_sel_tool->select_solution(vp,lm);

+ 27 - 7
card_person.cpp

@@ -19,6 +19,7 @@
 #include <config_file.h>
 #include <config_file.h>
 #include "cardMgr.h"
 #include "cardMgr.h"
 #include "card.h"
 #include "card.h"
+#include "db_api/CDBSingletonDefine.h"
 extern config_file config;
 extern config_file config;
 int person::m_limit_detained_time=-1;
 int person::m_limit_detained_time=-1;
 int person::m_auto_up_mine_time=-1;
 int person::m_auto_up_mine_time=-1;
@@ -31,7 +32,9 @@ person::person(const std::string &type,uint32_t cardid,uint16_t needdisplay,int1
 	,m_deptName(dname)
 	,m_deptName(dname)
 {
 {
     if(person::m_auto_up_mine_time==-1){
     if(person::m_auto_up_mine_time==-1){
+        //显示超时的界限 h
         person::m_limit_detained_time=config.get("service.detained_time",10);
         person::m_limit_detained_time=config.get("service.detained_time",10);
+        //打印输出超过该时长的数据信息
         person::m_auto_up_mine_time=config.get("service.auto_up_mine_time",20);
         person::m_auto_up_mine_time=config.get("service.auto_up_mine_time",20);
         person::m_person_cards_flag=config.get("service.person_cards_flag",0);
         person::m_person_cards_flag=config.get("service.person_cards_flag",0);
     }
     }
@@ -45,7 +48,7 @@ person::~person()
 void person::clear()
 void person::clear()
 {
 {
     make_his_location(m_time,*this,true);
     make_his_location(m_time,*this,true);
-
+    //初始化区域和井下部分基础信息
     m_mine_tool->clear();
     m_mine_tool->clear();
     m_area_tool->clear();
     m_area_tool->clear();
     //清除部分信息
     //清除部分信息
@@ -68,7 +71,7 @@ void person::clear()
     	cardMgr::instance()->tryPut(m);
     	cardMgr::instance()->tryPut(m);
     }
     }
 }
 }
-
+//设置区域和地标信息
 void person::set_area_info(int mapid,double scale,int areaid,uint64_t t,int type)
 void person::set_area_info(int mapid,double scale,int areaid,uint64_t t,int type)
 {
 {
 	m_area_tool->set_area_info(mapid,scale,areaid,*this,t,type);
 	m_area_tool->set_area_info(mapid,scale,areaid,*this,t,type);
@@ -77,7 +80,7 @@ void person::site_hover(int sid)
 {
 {
 	IKSDK_DB(sid);
 	IKSDK_DB(sid);
 }
 }
-//虹膜识别入库功能	
+//虹膜识别入库功能 输入到his_att_interface表.目前主要最小系统输入这个表,与井口闸机联动
 void person::IKSDK_DB(int sid)
 void person::IKSDK_DB(int sid)
 {
 {
 	time_t now = time(0);
 	time_t now = time(0);
@@ -111,19 +114,21 @@ std::shared_ptr<mine_tool> person::get_mine_tool()
 }
 }
 void person::do_business(const std::shared_ptr<site>&site,const point &pt,double acc)
 void person::do_business(const std::shared_ptr<site>&site,const point &pt,double acc)
 {
 {
+    //区域相关逻辑驱动
 	m_area_tool->on_point(shared_from_this(),pt);
 	m_area_tool->on_point(shared_from_this(),pt);
+    //处理历史轨迹
     make_his_location(m_time,pt);
     make_his_location(m_time,pt);
 	m_timeval=m_time;
 	m_timeval=m_time;
+    //三率数据处理
 	handle_three_rates(pt);
 	handle_three_rates(pt);
     //一人多卡数据输入
     //一人多卡数据输入
-
     if(m_person_cards_flag){
     if(m_person_cards_flag){
 	    Msg m;
 	    Msg m;
 	    m.type=m_type;m.x=(int)x;m.y=(int)y;m.cmd=CMD_HANDLE;m.cardid=m_type<<32|m_id;
 	    m.type=m_type;m.x=(int)x;m.y=(int)y;m.cmd=CMD_HANDLE;m.cardid=m_type<<32|m_id;
 	    cardMgr::instance()->tryPut(m);
 	    cardMgr::instance()->tryPut(m);
     }
     }
 }
 }
-
+//设置人员上猴车
 void person::reset(std::shared_ptr<monkey_person> mp)
 void person::reset(std::shared_ptr<monkey_person> mp)
 {
 {
 	m_monkeyPerson = mp;
 	m_monkeyPerson = mp;
@@ -140,7 +145,7 @@ void person::handle_three_rates(const point & pt)
 	cp.work_type_id=m_worktype_id;
 	cp.work_type_id=m_worktype_id;
 	put_three_rates(cp);
 	put_three_rates(cp);
 }
 }
-
+//定时推送到web函数,
 void person::on_timer()
 void person::on_timer()
 {
 {
     if(!m_mine_tool->m_is_attendance)
     if(!m_mine_tool->m_is_attendance)
@@ -217,6 +222,7 @@ void person::print_card_detained()
             inc_upmine_flag(2);
             inc_upmine_flag(2);
     }
     }
 }
 }
+//获取web输入坐标点
 point person::getSmoothPoint(uint64_t& t)
 point person::getSmoothPoint(uint64_t& t)
 {
 {
 	point pt;
 	point pt;
@@ -236,12 +242,16 @@ point person::getSmoothPoint(uint64_t& t)
 	}
 	}
 	return pt;
 	return pt;
 }
 }
+//人员显示输入
 void person::get_card(bool f)
 void person::get_card(bool f)
 {
 {
 	if (!m_mine_tool->m_is_attendance)
 	if (!m_mine_tool->m_is_attendance)
 		return ;
 		return ;
 	mine_business::inst()->fetch_add(m_display);
 	mine_business::inst()->fetch_add(m_display);
 }
 }
+//新协议处理逻辑。
+//0-4包为一组处理
+//其中0-1为充电时间  2-3 为放电时间 4为电量标识
 #define CHARGE_MASK     0X03
 #define CHARGE_MASK     0X03
 #define DISCHARGE_MASK  0X0C
 #define DISCHARGE_MASK  0X0C
 #define POWER_MASK      0X10
 #define POWER_MASK      0X10
@@ -267,12 +277,22 @@ void person::handle_message(uint16_t ct,uint8_t &value)
     //新卡继续往下走,获取数据
     //新卡继续往下走,获取数据
     uint16_t cttmp = ct/5;
     uint16_t cttmp = ct/5;
     if(m_ctflag != cttmp){
     if(m_ctflag != cttmp){
+        uint8_t power=m_power;
         if((m_index&CHARGE_MASK) == CHARGE_MASK) 
         if((m_index&CHARGE_MASK) == CHARGE_MASK) 
             m_charge_value=(m_value[0]<<8)|m_value[1];
             m_charge_value=(m_value[0]<<8)|m_value[1];
         if((m_index&DISCHARGE_MASK) == DISCHARGE_MASK)
         if((m_index&DISCHARGE_MASK) == DISCHARGE_MASK)
             m_discharge_value=(m_value[2]<<8)|m_value[3];
             m_discharge_value=(m_value[2]<<8)|m_value[3];
         if((m_index&POWER_MASK) == POWER_MASK)
         if((m_index&POWER_MASK) == POWER_MASK)
-            m_power=m_value[4]>>4;
+            power=m_value[4]>>4;
+        //插入sql
+        if(power !=m_power){
+            m_power=power;
+            char nsql[128]={0};
+            const char*sql="insert into his_card_batlog (card_id,time,percent) values (%d,'%s',%d);";
+            snprintf(nsql,128,sql,m_id,tool_time::now_to_str().c_str(),m_power*10);
+            sDBConnPool.PushAsync(nsql);
+            logn_info(2,"%s",nsql);
+        }
         logn_info(3,"card_id:%d,充电时间:%u,放电时间:%u,电量%d%",m_id,m_charge_value,m_discharge_value,m_power*10);
         logn_info(3,"card_id:%d,充电时间:%u,放电时间:%u,电量%d%",m_id,m_charge_value,m_discharge_value,m_power*10);
         m_index=0;m_ctflag=cttmp;memset(&m_value,0,sizeof(m_value));
         m_index=0;m_ctflag=cttmp;memset(&m_value,0,sizeof(m_value));
     }
     }

+ 16 - 8
event.cpp

@@ -220,11 +220,19 @@ std::shared_ptr<ya_event> card_event::on_message(EVENT_TYPE et,uint64_t id,bool
         event_ptr->x = card_ptr->x;
         event_ptr->x = card_ptr->x;
         event_ptr->y = card_ptr->y;
         event_ptr->y = card_ptr->y;
         //event_ptr->m_is_display = card_ptr->m_display;
         //event_ptr->m_is_display = card_ptr->m_display;
-
-	    if(auto site_ptr=card_ptr->get_area_tool()->m_site)
-        {
-            event_ptr->m_area_id = site_ptr->m_area_id;
-            event_ptr->m_map_id = site_ptr->m_map_id;
+        
+	    if(const auto area_ptr=card_ptr->get_area_tool()) {
+            const auto area_info = area_ptr->m_area_info; 
+            if(!area_info.empty()){
+                const auto x=area_info.cbegin()->second;
+                event_ptr->landmark_id=std::get<1>(x);
+                event_ptr->landmark_dir=std::get<2>(x);
+                event_ptr->landmark_dis=std::get<3>(x);
+            }
+            if(const auto site_ptr=area_ptr->m_site){
+                event_ptr->m_area_id = site_ptr->m_area_id;
+                event_ptr->m_map_id = site_ptr->m_map_id;
+            }
         }
         }
     }
     }
     return event_ptr;
     return event_ptr;
@@ -242,11 +250,11 @@ void event_list::save_event(const std::shared_ptr<ya_event> &ev_ptr)
     std::string _time = tool_time::to_str_ex(ev_ptr->m_cur_time);
     std::string _time = tool_time::to_str_ex(ev_ptr->m_cur_time);
     sprintf(sql,
     sprintf(sql,
             "INSERT IGNORE INTO his_event_data(event_id,id, stat, event_type_id, obj_type_id, obj_id, dis_type,\
             "INSERT IGNORE INTO his_event_data(event_id,id, stat, event_type_id, obj_type_id, obj_id, dis_type,\
-            map_id, area_id, limit_value, cur_value, x, y, cur_time, description) \
-            VALUES(%ld,%ld, %d, %d, %d, %s, %d, %d, %d, %.2f, %.2f, %f, %f, '%s', '%s');",
+            map_id, area_id, limit_value, cur_value, x, y, cur_time, description,landmark_id,landmark_dir,landmark_dist) \
+            VALUES(%ld,%ld, %d, %d, %d, %s, %d, %d, %d, %.2f, %.2f, %f, %f, '%s', '%s',%d,%d,%.2f);",
             ev_ptr->m_ev_id,ev_ptr->m_id,ev_ptr->m_status, ev_ptr->m_ev_type, ev_ptr->m_obj_type, ev_ptr->m_obj_id.c_str(),ev_ptr->m_dis_type,
             ev_ptr->m_ev_id,ev_ptr->m_id,ev_ptr->m_status, ev_ptr->m_ev_type, ev_ptr->m_obj_type, ev_ptr->m_obj_id.c_str(),ev_ptr->m_dis_type,
             ev_ptr->m_map_id, ev_ptr->m_area_id, ev_ptr->m_limit_value, ev_ptr->m_cur_value, ev_ptr->x, ev_ptr->y,
             ev_ptr->m_map_id, ev_ptr->m_area_id, ev_ptr->m_limit_value, ev_ptr->m_cur_value, ev_ptr->x, ev_ptr->y,
-            _time.c_str(), ev_ptr->m_desc.c_str());
+            _time.c_str(), ev_ptr->m_desc.c_str(),ev_ptr->landmark_id,ev_ptr->landmark_dir,ev_ptr->landmark_dis);
 
 
     db_tool::PushAsync(sql);
     db_tool::PushAsync(sql);
 }
 }

+ 3 - 1
event.h

@@ -63,9 +63,11 @@ public:
     ///描述
     ///描述
     std::string m_desc;
     std::string m_desc;
 
 
-    //bool m_is_display;
     //是否已经发送 ture bu发送, false推送. 推送完置为true
     //是否已经发送 ture bu发送, false推送. 推送完置为true
     bool m_is_sent;
     bool m_is_sent;
+    uint8_t landmark_id=0;
+    uint8_t landmark_dir=0;
+    double landmark_dis=0;
 
 
     bool is_end()
     bool is_end()
     {
     {

+ 5 - 1
tool_time.h

@@ -118,7 +118,11 @@ public:
         time(&now);
         time(&now);
         return static_cast<int>(std::difftime(now, start));
         return static_cast<int>(std::difftime(now, start));
     }
     }
-
+    static std::string now_to_str()
+    {
+        std::time_t t=time(0);
+        return to_str(t);
+    }
     //"%Y-%m-%d %H:%M:%S"
     //"%Y-%m-%d %H:%M:%S"
     static std::string to_str(const std::time_t &time)
     static std::string to_str(const std::time_t &time)
     {
     {