zhuyf 3 éve
szülő
commit
8fdb5105f3
16 módosított fájl, 97 hozzáadás és 57 törlés
  1. 2 2
      ant.cpp
  2. 1 0
      area.cpp
  3. 7 2
      card.cpp
  4. 14 7
      card_base.cpp
  5. 11 8
      card_person.cpp
  6. 1 1
      common.h
  7. 2 2
      event.cpp
  8. 6 6
      event.h
  9. 4 0
      his_location.cpp
  10. 1 1
      main.cpp
  11. 2 1
      message.cpp
  12. 14 14
      message.h
  13. 2 2
      mine_business.cpp
  14. 8 2
      module_service/module_mgr.cpp
  15. 5 5
      module_service/module_web.cpp
  16. 17 4
      net-service.cpp

+ 2 - 2
ant.cpp

@@ -587,8 +587,8 @@ void site::create_area()
 }
 void site::clear_event()
 {
-    event_tool::instance()->handle_event(OT_DEVICE_READER,ET_READER_ERROR,id(),READER_TIMEOUT,0,false);
-    event_tool::instance()->handle_event(OT_DEVICE_READER,ET_READER_POWER_BY_BATTERY,id(),0,0,false);
+    event_tool::instance()->handle_event(OT_DEVICE_READER, ET_READER_ERROR, id(), READER_TIMEOUT, 0, false);
+    event_tool::instance()->handle_event(OT_DEVICE_READER, ET_READER_POWER_BY_BATTERY, id(), 0, 0, false);
 }
 
 /*

+ 1 - 0
area.cpp

@@ -560,6 +560,7 @@ std::vector<point> area_list::init_path(std::string &str_0,int area_id)
 	if(str.empty())
 	{
         log_error("area path is empty,area_id=%d.",area_id);
+		return std::vector<point>();
 	}
 	std::vector<point> vp;
 	std::vector<std::string> vs;

+ 7 - 2
card.cpp

@@ -250,11 +250,16 @@ void card_list::load_his_card_postion_staff()
 {
     std::string init_limit_hour = config.get("service.init_limit_hour","48");
 
-    std::string sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, l.power_status,\
+    /*std::string sql = "select l.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, l.power_status,\
             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\
-            and c.state_id=0 and end_time is null ";
+            and c.state_id=0 and end_time is null ";*/
+	std::string sql = "SELECT att.card_id,l.site_id, l.cur_time, l.x, l.y, l.z, l.area_info, l.state, l.power_status, att.start_time, att.end_time  FROM rt_att_staff AS att \
+		LEFT JOIN rt_location AS l ON l.card_id=att.card_id \
+		LEFT JOIN dat_card AS c ON c.card_id=l.card_id \
+		LEFT JOIN dat_staff_extend AS s ON s.card_id=l.card_id \
+		WHERE c.state_id=0 and att.end_time is null ";
     sql += " and timestampdiff(hour ,att.start_time,now()) <= " + init_limit_hour + ";";
 
 	log_info("load_his_card_postion_staff:%s ",sql.c_str());

+ 14 - 7
card_base.cpp

@@ -42,14 +42,14 @@ card_location_base::card_location_base(const std::string&type,uint32_t id,uint16
 
 void card_location_base::do_status(int st)
 {
-	time_t now=time(0);
-	bool   help_flag=false;
+	time_t now = time(0);
+	bool   help_flag = false;
 
 	if((m_help_bit & 1) && (st & STATUS_HELP))
 	{
 		//      1111111111
 		//               ^
-		m_help_last_time=now;
+		m_help_last_time = now;
 	}
 	else if((m_help_bit & 1) && (st & STATUS_HELP)==0)
 	{
@@ -112,7 +112,12 @@ void card_location_base::make_his_location(uint64_t t,const point & pt,bool bclo
         scale   = site_ptr->m_scale;
 	}
  
-	//m_his_location_card->push(t,pt,area_id,map_id,site_id,bclose);
+	auto mine_ptr = get_mine_tool();
+	if(m_time < mine_ptr->get_down_time())
+	{
+		return;
+	}
+	m_his_location_card->push(t, pt, area_id, map_id, site_id, bclose);
     m_his_location_card->insert(t, pt, area_id, map_id, site_id, scale);
 }
 
@@ -135,10 +140,12 @@ void card_location_base::on_location(const std::vector<point>&vp,const std::vect
         m_acc = lm[0].m_acc;
 		log_info("useful loc point: type=%d, card=%d, site=%d, ct=%d, timestamp=%llu, x=%f, y=%f, speed=%.2f, acc=%.2f",m_type,m_id,sid,m_ct,m_time,x,y, m_speed, acc);
 		do_business(lm.front().m_sit, pt, acc);
+		int val = (lm[0].m_rav?STATUS_HELP:STATUS_NORMAL);
+		do_status(val);
     }
 	else
 	{
-		log_warn("坐标不可用:site=%d,type=%d,card=%d,ct=%d,x=%f,y=%f",sid,m_type,m_id,m_ct,pt.x,pt.y);
+		log_warn("坐标不可用:site=%d, type=%d, card=%d, ct=%d, x=%f, y=%f", sid, m_type, m_id, m_ct, pt.x, pt.y);
 	}
 }
 
@@ -219,9 +226,9 @@ void card_location_base::on_message(zloop<task*>* loop, message_pdoa_locinfo& lo
 	area_tool->set_site(site_ptr);
 
     // 此条件用于解决井下有的基站不能送出电量值时,会将卡的电量值按0输出,这种情况,默认卡的电量为初始值或之前值
-    if(loc.m_batty_status > 0){
+    //if(loc.m_batty_status > 0){
         m_battery_value = loc.m_batty_status;       // 电量值
-    }
+    //}
 
     handle_message(loc.m_card_ct, loc.m_batty_status);
     if(site_ptr->is_up_site()){

+ 11 - 8
card_person.cpp

@@ -126,9 +126,9 @@ void person::IKSDK_DB(int sid)
 		std::string st	    = tool_time::to_str(now);
 
 		char nsql[256]={0};
-		const char*sql="REPLACE INTO his_att_interface (staff_id,card_id,reader_id,staff_name,dept_id,dept_name,upt_time,low_power_warn)"
-				 " VALUES (%d,%s,%d,'%s',%d,'%s','%s',%d);";
-		snprintf(nsql,256,sql,m_cid,card_id.c_str(),sid,m_stafferName.c_str(),m_deptid,m_deptName.c_str(),st.c_str(),f);
+		const char*sql="REPLACE INTO his_att_interface (staff_id,card_id,reader_id,staff_name,dept_id,dept_name,upt_time,low_power_warn, power_status)"
+				 " VALUES (%d,%s,%d,'%s',%d,'%s','%s',%d,%d);";
+		snprintf(nsql,256,sql,m_cid,card_id.c_str(),sid,m_stafferName.c_str(),m_deptid,m_deptName.c_str(),st.c_str(),f, m_battery_value*10);
 
 		db_tool::PushAsync(nsql);
 		m_iris_recognition_timeval = now;
@@ -158,16 +158,17 @@ void person::do_business(const std::shared_ptr<site>&site,const point &pt,double
     log_info("[person_att] %d is attendance: %d", m_id, (m_mine_tool->m_is_attendance?1:0));
     make_his_location(m_time, pt);
 	m_timeval = m_time;
-    //三率数据处理
+	
+	//三率数据处理
 	//handle_three_rates(pt);
     //一人多卡数据输入
     if(m_person_cards_flag){
 	    Msg m;
 	    m.type = m_type;
-        m.x=(int)x;
-        m.y=(int)y;
+        m.x = (int)x;
+        m.y = (int)y;
         m.cmd = CMD_HANDLE;
-        m.cardid=m_type<<32|m_id;
+        m.cardid = m_type<<32|m_id;
 	    cardMgr::instance()->tryPut(m);
     }
 }
@@ -374,7 +375,9 @@ void person::handle_message(uint16_t ct,uint8_t &value)
             logn_info(2,"%s",nsql);
         }
         log_info("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));
     }
     uint8_t remainder=ct%5;
     m_value[remainder]=value;

+ 1 - 1
common.h

@@ -146,7 +146,7 @@ enum EVENT_TYPE{
 	ET_COALING_DRIVING_DRIVER = 37,         // 工作面(采煤面和掘进面)司机与车卡告警;
     ET_VEHICLE_NEAR_GEOFAULT=38,            // 靠近断层告警
 	ET_READER_LOCATION_REVERSAL=39,         // 掘进面天线反向告警
-    ET_PERSON_VEHICLE_ANTI_COLLISION=40,    // 人车防碰撞
+    ET_PERSON_VEHICLE_ANTI_COLLISION=41,    // 人车防碰撞
     CARD_EVENT_COUNT_MAX
 };
 

+ 2 - 2
event.cpp

@@ -1,5 +1,5 @@
 #include "event.h"
-#include<string>
+#include <string>
 #include "ant.h"
 #include "area.h"
 #include "card.h"
@@ -113,7 +113,7 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
         {
             uint64_t _id=id;
             //log_info("Create_Event:desc[%s],id:%d,et:%d",desc.c_str(),id,et);
-            if((et==ET_UWB_MORE_CARD||et == ET_VEHICLE_REAR_END)&&!desc.empty())//防追尾告警特殊处理
+            if((et == ET_UWB_MORE_CARD||et == ET_VEHICLE_REAR_END) && !desc.empty())//防追尾告警特殊处理
             {
                 std::string cardid = desc.substr(0,desc.find_first_of('&'));
                 _id = tool_other::card_id_to_u64(cardid);

+ 6 - 6
event.h

@@ -14,12 +14,12 @@
 #define __EVENT_HPP__
 #include <memory>
 #include <chrono>
-#include<map>
-#include<rapidjson/document.h>
-#include<rapidjson/writer.h>
-#include<rapidjson/stringbuffer.h>
-#include<rapidjson/prettywriter.h>
-#include<write-copy.h>
+#include <map>
+#include <rapidjson/document.h>
+#include <rapidjson/writer.h>
+#include <rapidjson/stringbuffer.h>
+#include <rapidjson/prettywriter.h>
+#include <write-copy.h>
 #include "common.h"
 
 struct ya_event

+ 4 - 0
his_location.cpp

@@ -272,6 +272,10 @@ void location_card::insert()
 void location_card::update(const point &p,uint64_t timestamp,int flag/*=0*/,int dflag/*=0*/)
 {
     //std::string tabName=getTabName();
+	if(timestamp <= 0){
+		return;
+	}
+
     char nsql[512]={0};
     const char * sql = "update his_location set last_time='%s',speed=%.3f,direction=%f,location_flag=%d where obj_id=%d and begin_time='%s' and last_time is null;";
     double dist = m_p.dist(p);

+ 1 - 1
main.cpp

@@ -92,7 +92,7 @@ struct Init_Setting
         //special_area_list::instance()->init_from_db();
 		mine_business::inst()->load();
         card_list::instance()->load_his_card_postion_from_db();
-        event_list::instance()->load_his_data_from_db();
+        event_list::instance()->load_his_data_from_db(true);
         if(three_rates_flag){
             db_para dp;	
             dp.Host     = DBSetting.Host;

+ 2 - 1
message.cpp

@@ -359,8 +359,9 @@ void message_pdoa_locinfo::load(zistream& is)
     //角速度值:人卡车卡表示含义不同
     is>>b;
     if(m_card_type == 1){
-        // 1表示呼救;2表示呼叫
+        // 1表示呼救
         m_callinfo = ((b&0x80) >> 7);
+		m_rav = m_callinfo;
     }else{
         m_rav = ((b&0x80)?-1.:1.)*(b&0x7F)*3;
     }

+ 14 - 14
message.h

@@ -105,20 +105,20 @@ struct message_tdoa_locinfo:task{
 //	分站传上来的卡定位数据,包括tof,tdoa
 struct message_locinfo:task
 {
-	uint64_t m_time_stamp;  // 分站时间戳
-	time_t   m_site_time;   // 分站时间
-	uint64_t m_tof;         // 卡tof值
-	uint32_t m_site_id;     // 分站号
-	uint32_t m_card_type;   // 卡类型
-	uint32_t m_card_id;     // 卡id
-	uint16_t m_card_ct;     // 卡报文时间戳
-	uint8_t  m_batty_status;//  电池状态
-	uint8_t  m_callinfo;    // 0x80-呼救,0x01-一般呼叫,0x02-紧急呼叫
-	int8_t  m_rav;         // 角速度
-	uint8_t  m_acc;         // 加速度
-	uint8_t  m_ant_id;      // 天线号
-	uint16_t m_sync_ct;     // 同步序列号 
-	int16_t  m_rssi;        //
+	uint64_t m_time_stamp;		// 分站时间戳
+	time_t   m_site_time;		// 分站时间
+	uint64_t m_tof;				// 卡tof值
+	uint32_t m_site_id;			// 分站号
+	uint32_t m_card_type;		// 卡类型
+	uint32_t m_card_id;			// 卡id
+	uint16_t m_card_ct;			// 卡报文时间戳
+	uint8_t  m_batty_status;	//  电池状态
+	uint8_t  m_callinfo;		// 0x80-呼救,0x01-一般呼叫,0x02-紧急呼叫
+	int8_t  m_rav;				// 角速度
+	uint8_t  m_acc;				// 加速度
+	uint8_t  m_ant_id;			// 天线号
+	uint16_t m_sync_ct;			// 同步序列号 
+	int16_t  m_rssi;			// 信号功率强度
 
     //优化协议
     float m_distance;

+ 2 - 2
mine_business.cpp

@@ -283,8 +283,8 @@ void mine_business::record_staffer_num()
  * */
 void mine_business::load()
 {
-    m_reverse_alarm_ptr->load_sensor(); 
-    m_reverse_alarm_ptr->load_working_sensor(); 
+    //m_reverse_alarm_ptr->load_sensor(); 
+    //m_reverse_alarm_ptr->load_working_sensor(); 
 }
 void mine_business::handle_reverse_alarm()
 {

+ 8 - 2
module_service/module_mgr.cpp

@@ -87,15 +87,20 @@ void module_mgr::do_status(STATUS_CARD st, uint32_t card_id, int32_t type)
         return;
     }
 
+	// 人员呼救
     if((STATUS_HELP & st) != 0)
     {
-        module_call_help::instance()->rev_from_card_help(card_ptr);
+		// STATUS_HELP 0x80
+		module_call_help::instance()->rev_from_card_help(card_ptr);
     }
+	
+	// 人员呼叫
     if((STATUS_CALL & st) != 0)
     {
         module_call::instance()->rev_from_card_resp(card_ptr);
     }
-
+	
+	// 电量极低
     if((STATUS_POWER_LOWER_SERIOUS & st) != 0)
     {
         if(!card_ptr->get_event_flag(ET_CARD_LOW_POWER_SERIOUS))
@@ -105,6 +110,7 @@ void module_mgr::do_status(STATUS_CARD st, uint32_t card_id, int32_t type)
         }
     }
 
+	// 电量正常
     if((STATUS_POWER_NOMARL & st) != 0)
     {
         if(card_ptr->get_event_flag(ET_CARD_LOW_POWER_SERIOUS))

+ 5 - 5
module_service/module_web.cpp

@@ -114,10 +114,10 @@ void module_web::response_login()
     }
 
     //所有红绿灯信息
-    str = traffic_light_manager::instance()->get_light_state();
+    /*str = traffic_light_manager::instance()->get_light_state();
     if(!str.empty()){
         tool_json::push_back(nodes, str, allocator);
-    }
+    }*/
 
     // 防碰撞告警
     str = module_call::instance()->get_json_anti_collision();
@@ -146,7 +146,7 @@ void module_web::response_login()
 void module_web::run()
 {
     std::vector<std::shared_ptr<ya_event>> arr;
-    _get_all_events(arr,true);
+    _get_all_events(arr);
 
     if(!arr.empty())//发送给web端
     {
@@ -157,11 +157,11 @@ void module_web::run()
     }
 
     // 向web端发送呼救数据
-    std::string help = module_call_help::get_json_help();
+    /*std::string help = module_call_help::get_json_help();
     if(!help.empty())
     {
         swsClientMgr.send(JSON_CMD_VALUE_PUSH, help);
-    }
+    }*/
 }
 
 /*

+ 17 - 4
net-service.cpp

@@ -241,7 +241,7 @@ void net_service::on_message(const std::shared_ptr<client> &clt,const char*data,
                         pdoa = tool_other::get_pdoa(m.m_poa, site_ptr->m_pdoa_offset);
                         logn_info(3, "[pdoa] site_id=%d, card_id=%d, ct=%d, dist=%.3f, rav=%d, poa1=%.4f, poa2=%.4f, poa3=%.4f, pdoa=%.4f, pdoa_offset=%.4f", site_id, m.m_card_id, m.m_card_ct, dist, m.m_rav, m.m_poa[0], m.m_poa[1], m.m_poa[2], pdoa, site_ptr->m_pdoa_offset);
                      
-                        if(m.m_poa[1] == 10.0){
+                        if(m.m_poa[1] == 10.0 || dist < 0.0001 ){
                             continue;
                         }
                         m_loc_worker->request(t);
@@ -474,12 +474,25 @@ int32_t net_service::parse_data_anchor_opt(const std::shared_ptr<client>& clt, z
         return -1;
     }*/
 
+   	site_ptr->m_device_type_id = (power>>3)&0x07;
+
     if(!check_message_time(clt, site_ptr, &site_tm, site_ct, power)){
+		// 分站时间异常,直接校时
+		switch(site_ptr->m_device_type_id)
+		{
+		case 0:
+			can_cali_time(clt, site_id);
+			break;
+		case 1:
+			net_cali_time(clt);
+		default:
+			net_cali_time(clt);
+			break;
+		}
+	
 		return -1;
 	}
 
-    site_ptr->m_device_type_id = (power>>3)&0x07;
-
     if(clt->type()!=2){
         site_ptr->set_client(clt);
         site_ptr->on_power_status((power&1)==0);
@@ -487,7 +500,7 @@ int32_t net_service::parse_data_anchor_opt(const std::shared_ptr<client>& clt, z
 
 	uint64_t tt = site_time_stamp;
     tt *= 1000;
-    logn_info(1,"分站数据:site_id: %d, site_ct: %d, time_t: %llu, time: %s, power: %d", site_id, site_ct, tt, tool_time::to_str_ex(tt).c_str(), power);
+    logn_info(1,"分站数据:site_id: %d, site_ct: %d, time_t: %llu, time: %s, power: %d, device_type: %d", site_id, site_ct, tt, tool_time::to_str_ex(tt).c_str(), power, site_ptr->m_device_type_id);
 
     return site_id;
 }