lixioayao 6 vuotta sitten
vanhempi
commit
aee817ca91

+ 1 - 0
.gitignore

@@ -10,6 +10,7 @@
 *.in
 *.m4
 *.status
+autom4te.cache/
 autom4te.cache/*
 /.deps/
 /bak/

+ 41 - 7
Makefile

@@ -102,9 +102,12 @@ am__objects_3 = yals-ant.$(OBJEXT) yals-area.$(OBJEXT) \
 	yals-special_area.$(OBJEXT) yals-tdoa_sync.$(OBJEXT) \
 	yals-visit.$(OBJEXT) yals-web-client.$(OBJEXT) \
 	yals-worker.$(OBJEXT) yals-ya_event.$(OBJEXT) \
-	yals-znet.$(OBJEXT) yals-ya_setting.$(OBJEXT)
-am__objects_4 = $(am__objects_1) $(am__objects_2) $(am__objects_3)
-am_yals_OBJECTS = $(am__objects_4) yals-main.$(OBJEXT)
+	yals-znet.$(OBJEXT) yals-ya_setting.$(OBJEXT) \
+	yals-area_business.$(OBJEXT)
+am__objects_4 = yals-MineCardManager.$(OBJEXT)
+am__objects_5 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+	$(am__objects_4)
+am_yals_OBJECTS = $(am__objects_5) yals-main.$(OBJEXT)
 yals_OBJECTS = $(am_yals_OBJECTS)
 yals_DEPENDENCIES = db/libyadb.a websocket/libwebsocket.a
 yals_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(yals_LDFLAGS) \
@@ -244,11 +247,12 @@ SRC_MAIN = ant.cpp area.cpp base64.cpp bindmorecard.cpp mine_business.cpp card_a
     	  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 ya_setting.cpp
+		  web-client.cpp worker.cpp ya_event.cpp znet.cpp ya_setting.cpp area_business.cpp
 
-AM_SOURCES = $(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN)
-AM_CPPFLAGS = -Wall -pthread -m64 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -Iwebsocket -Iwebsocket/sio -I./db 
-AM_LDFLAGS = -Wall -pthread -m64 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib
+SRC_MAIN_EVENT = mine_module/MineCardManager.cpp
+AM_SOURCES = $(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN) $(SRC_MAIN_EVENT)
+AM_CPPFLAGS = -Wall -pthread -m64 -g -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 -g -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_LDFLAGS = ${AM_LDFLAGS}  -lev -lzlog -lrt -lboost_chrono -lboost_system -lboost_thread -lmysqlclient -lthree_rates
@@ -368,8 +372,10 @@ include ./$(DEPDIR)/client-client.Po
 include ./$(DEPDIR)/client-message_file.Po
 include ./$(DEPDIR)/test-base64.Po
 include ./$(DEPDIR)/test-test.Po
+include ./$(DEPDIR)/yals-MineCardManager.Po
 include ./$(DEPDIR)/yals-ant.Po
 include ./$(DEPDIR)/yals-area.Po
+include ./$(DEPDIR)/yals-area_business.Po
 include ./$(DEPDIR)/yals-base64.Po
 include ./$(DEPDIR)/yals-bindmorecard.Po
 include ./$(DEPDIR)/yals-card.Po
@@ -1054,6 +1060,34 @@ yals-ya_setting.obj: ya_setting.cpp
 #	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-ya_setting.obj `if test -f 'ya_setting.cpp'; then $(CYGPATH_W) 'ya_setting.cpp'; else $(CYGPATH_W) '$(srcdir)/ya_setting.cpp'; fi`
 
+yals-area_business.o: area_business.cpp
+	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-area_business.o -MD -MP -MF $(DEPDIR)/yals-area_business.Tpo -c -o yals-area_business.o `test -f 'area_business.cpp' || echo '$(srcdir)/'`area_business.cpp
+	$(am__mv) $(DEPDIR)/yals-area_business.Tpo $(DEPDIR)/yals-area_business.Po
+#	source='area_business.cpp' object='yals-area_business.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-area_business.o `test -f 'area_business.cpp' || echo '$(srcdir)/'`area_business.cpp
+
+yals-area_business.obj: area_business.cpp
+	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-area_business.obj -MD -MP -MF $(DEPDIR)/yals-area_business.Tpo -c -o yals-area_business.obj `if test -f 'area_business.cpp'; then $(CYGPATH_W) 'area_business.cpp'; else $(CYGPATH_W) '$(srcdir)/area_business.cpp'; fi`
+	$(am__mv) $(DEPDIR)/yals-area_business.Tpo $(DEPDIR)/yals-area_business.Po
+#	source='area_business.cpp' object='yals-area_business.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-area_business.obj `if test -f 'area_business.cpp'; then $(CYGPATH_W) 'area_business.cpp'; else $(CYGPATH_W) '$(srcdir)/area_business.cpp'; fi`
+
+yals-MineCardManager.o: mine_module/MineCardManager.cpp
+	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-MineCardManager.o -MD -MP -MF $(DEPDIR)/yals-MineCardManager.Tpo -c -o yals-MineCardManager.o `test -f 'mine_module/MineCardManager.cpp' || echo '$(srcdir)/'`mine_module/MineCardManager.cpp
+	$(am__mv) $(DEPDIR)/yals-MineCardManager.Tpo $(DEPDIR)/yals-MineCardManager.Po
+#	source='mine_module/MineCardManager.cpp' object='yals-MineCardManager.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-MineCardManager.o `test -f 'mine_module/MineCardManager.cpp' || echo '$(srcdir)/'`mine_module/MineCardManager.cpp
+
+yals-MineCardManager.obj: mine_module/MineCardManager.cpp
+	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-MineCardManager.obj -MD -MP -MF $(DEPDIR)/yals-MineCardManager.Tpo -c -o yals-MineCardManager.obj `if test -f 'mine_module/MineCardManager.cpp'; then $(CYGPATH_W) 'mine_module/MineCardManager.cpp'; else $(CYGPATH_W) '$(srcdir)/mine_module/MineCardManager.cpp'; fi`
+	$(am__mv) $(DEPDIR)/yals-MineCardManager.Tpo $(DEPDIR)/yals-MineCardManager.Po
+#	source='mine_module/MineCardManager.cpp' object='yals-MineCardManager.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-MineCardManager.obj `if test -f 'mine_module/MineCardManager.cpp'; then $(CYGPATH_W) 'mine_module/MineCardManager.cpp'; else $(CYGPATH_W) '$(srcdir)/mine_module/MineCardManager.cpp'; fi`
+
 yals-main.o: main.cpp
 	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-main.o -MD -MP -MF $(DEPDIR)/yals-main.Tpo -c -o yals-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
 	$(am__mv) $(DEPDIR)/yals-main.Tpo $(DEPDIR)/yals-main.Po

+ 6 - 4
Makefile.am

@@ -9,13 +9,15 @@ SRC_MAIN= ant.cpp area.cpp base64.cpp bindmorecard.cpp mine_business.cpp card_ar
     	  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 ya_setting.cpp
+		  web-client.cpp worker.cpp ya_event.cpp znet.cpp ya_setting.cpp area_business.cpp
 
-AM_SOURCES=$(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN)
+SRC_MAIN_EVENT= mine_module/MineCardManager.cpp
 
-AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -Iwebsocket -Iwebsocket/sio -I./db 
+AM_SOURCES=$(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN) $(SRC_MAIN_EVENT)
 
-AM_LDFLAGS=-Wall -pthread -m64 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib
+AM_CPPFLAGS=-Wall -pthread -m64 -g -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 -g -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib -L../dist/lib
 
 yals_SOURCES=${AM_SOURCES} main.cpp
 yals_CPPFLAGS=${AM_CPPFLAGS} 

+ 41 - 7
Makefile.in

@@ -102,9 +102,12 @@ am__objects_3 = yals-ant.$(OBJEXT) yals-area.$(OBJEXT) \
 	yals-special_area.$(OBJEXT) yals-tdoa_sync.$(OBJEXT) \
 	yals-visit.$(OBJEXT) yals-web-client.$(OBJEXT) \
 	yals-worker.$(OBJEXT) yals-ya_event.$(OBJEXT) \
-	yals-znet.$(OBJEXT) yals-ya_setting.$(OBJEXT)
-am__objects_4 = $(am__objects_1) $(am__objects_2) $(am__objects_3)
-am_yals_OBJECTS = $(am__objects_4) yals-main.$(OBJEXT)
+	yals-znet.$(OBJEXT) yals-ya_setting.$(OBJEXT) \
+	yals-area_business.$(OBJEXT)
+am__objects_4 = yals-MineCardManager.$(OBJEXT)
+am__objects_5 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+	$(am__objects_4)
+am_yals_OBJECTS = $(am__objects_5) yals-main.$(OBJEXT)
 yals_OBJECTS = $(am_yals_OBJECTS)
 yals_DEPENDENCIES = db/libyadb.a websocket/libwebsocket.a
 yals_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(yals_LDFLAGS) \
@@ -244,11 +247,12 @@ SRC_MAIN = ant.cpp area.cpp base64.cpp bindmorecard.cpp mine_business.cpp card_a
     	  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 ya_setting.cpp
+		  web-client.cpp worker.cpp ya_event.cpp znet.cpp ya_setting.cpp area_business.cpp
 
-AM_SOURCES = $(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN)
-AM_CPPFLAGS = -Wall -pthread -m64 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -Iwebsocket -Iwebsocket/sio -I./db 
-AM_LDFLAGS = -Wall -pthread -m64 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib
+SRC_MAIN_EVENT = mine_module/MineCardManager.cpp
+AM_SOURCES = $(SRC_MONKEYCAR) $(SRC_MODULE_SERVICE) $(SRC_MAIN) $(SRC_MAIN_EVENT)
+AM_CPPFLAGS = -Wall -pthread -m64 -g -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 -g -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_LDFLAGS = ${AM_LDFLAGS}  -lev -lzlog -lrt -lboost_chrono -lboost_system -lboost_thread -lmysqlclient -lthree_rates
@@ -368,8 +372,10 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client-message_file.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-base64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-MineCardManager.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-ant.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-area.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-area_business.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-base64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-bindmorecard.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yals-card.Po@am__quote@
@@ -1054,6 +1060,34 @@ yals-ya_setting.obj: ya_setting.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-ya_setting.obj `if test -f 'ya_setting.cpp'; then $(CYGPATH_W) 'ya_setting.cpp'; else $(CYGPATH_W) '$(srcdir)/ya_setting.cpp'; fi`
 
+yals-area_business.o: area_business.cpp
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-area_business.o -MD -MP -MF $(DEPDIR)/yals-area_business.Tpo -c -o yals-area_business.o `test -f 'area_business.cpp' || echo '$(srcdir)/'`area_business.cpp
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-area_business.Tpo $(DEPDIR)/yals-area_business.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='area_business.cpp' object='yals-area_business.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-area_business.o `test -f 'area_business.cpp' || echo '$(srcdir)/'`area_business.cpp
+
+yals-area_business.obj: area_business.cpp
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-area_business.obj -MD -MP -MF $(DEPDIR)/yals-area_business.Tpo -c -o yals-area_business.obj `if test -f 'area_business.cpp'; then $(CYGPATH_W) 'area_business.cpp'; else $(CYGPATH_W) '$(srcdir)/area_business.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-area_business.Tpo $(DEPDIR)/yals-area_business.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='area_business.cpp' object='yals-area_business.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-area_business.obj `if test -f 'area_business.cpp'; then $(CYGPATH_W) 'area_business.cpp'; else $(CYGPATH_W) '$(srcdir)/area_business.cpp'; fi`
+
+yals-MineCardManager.o: mine_module/MineCardManager.cpp
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-MineCardManager.o -MD -MP -MF $(DEPDIR)/yals-MineCardManager.Tpo -c -o yals-MineCardManager.o `test -f 'mine_module/MineCardManager.cpp' || echo '$(srcdir)/'`mine_module/MineCardManager.cpp
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-MineCardManager.Tpo $(DEPDIR)/yals-MineCardManager.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='mine_module/MineCardManager.cpp' object='yals-MineCardManager.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-MineCardManager.o `test -f 'mine_module/MineCardManager.cpp' || echo '$(srcdir)/'`mine_module/MineCardManager.cpp
+
+yals-MineCardManager.obj: mine_module/MineCardManager.cpp
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-MineCardManager.obj -MD -MP -MF $(DEPDIR)/yals-MineCardManager.Tpo -c -o yals-MineCardManager.obj `if test -f 'mine_module/MineCardManager.cpp'; then $(CYGPATH_W) 'mine_module/MineCardManager.cpp'; else $(CYGPATH_W) '$(srcdir)/mine_module/MineCardManager.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-MineCardManager.Tpo $(DEPDIR)/yals-MineCardManager.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='mine_module/MineCardManager.cpp' object='yals-MineCardManager.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o yals-MineCardManager.obj `if test -f 'mine_module/MineCardManager.cpp'; then $(CYGPATH_W) 'mine_module/MineCardManager.cpp'; else $(CYGPATH_W) '$(srcdir)/mine_module/MineCardManager.cpp'; fi`
+
 yals-main.o: main.cpp
 @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(yals_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT yals-main.o -MD -MP -MF $(DEPDIR)/yals-main.Tpo -c -o yals-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
 @am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/yals-main.Tpo $(DEPDIR)/yals-main.Po

+ 1 - 1
ant.h

@@ -104,7 +104,7 @@ struct ant :point
 
 };
 
-struct site:point
+struct site:point,std::enable_shared_from_this<site>
 {
     static algo_config g_config[];
     int      m_algo;			//TOF:0,TDOA:1

+ 141 - 29
area.cpp

@@ -7,6 +7,7 @@
 #include "point.h"
 #include "monkey_car/monkeycar_area.h"
 #include "landmark.h"
+#include "area_business.h"
 
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/classification.hpp>
@@ -16,30 +17,53 @@
 template<> std::shared_ptr<area_list> 
 single_base<area_list, int, std::shared_ptr<area>>::m_instance=std::make_shared<area_list>();
 
-void area::on_hover(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type)
- {
- 	//check超时
-	log_info("on_hover..%d  areaId:%d",card_id,m_id);
-// 	time_t now = time(NULL);
-// 	if(now-c->m_enter_time>m_limit_time_second && !c->m_is_over_time)
-// 	{
-// 		c->m_is_over_time=true;
-// 		//产生告警
-// 	}
-    module_area::on_hover(card_id,c,type);
- }
-
-void area::on_enter(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type)
+struct underground_area:area
 {
-	log_info("on_enter..%d  areaId:%d",card_id,m_id);
-    module_area::on_enter(card_id,c,type);
+    underground_area(int limit_count_person, int limit_time_person,double scale,int32_t mapid)
+        :area(-1,limit_count_person,limit_time_person,scale,mapid,(1<<1)|(1<<2)|(1<<3)|(1<<4))
+	{
+		m_area_business_list=area_business::get_instance_list(m_area_type);
+	}
+
+	void db_load_card_count()
+	{
+	
+	}
+};
+
+struct ground_area:area
+{
+
+
+
+};
+
+void area::on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c)
+{
+ 	for(auto i:m_area_business_list)
+	{
+		i->on_hover(a,c,a->get_business_data(i->business_type()));
+	}
 }
 
-void area::on_leave(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type)
+void area::on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c)
 {
-	log_info("on_leave..%d  areaId:%d",card_id,m_id);
-    module_area::on_leave(card_id,c,type);
+	log_info("on_enter..%d  areaId:%d",c->m_id,m_id);
+ 	for(auto i:m_area_business_list)
+	{
+		i->on_enter(a,c,a->get_business_data(i->business_type()));
+	}
+}
+
+void area::on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c)
+{
+	log_info("on_leave..%d  areaId:%d",c->m_id,m_id);
+ 	for(auto i:m_area_business_list)
+	{
+		i->on_leave(a,c,a->get_business_data(i->business_type()));
+	}
 }
+
 bool area::in_area(const point & p)
 {
 	if(m_bound.empty())
@@ -351,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);
@@ -374,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\
@@ -391,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()
 {
@@ -477,6 +588,7 @@ std::vector<point> area_list::init_path(std::string &str)
 	}
 	return std::move(vp);
 }
+
 std::shared_ptr<area> area_list::get_area(const point&pt)
 {
 	std::shared_ptr<area> ret=nullptr;
@@ -492,15 +604,14 @@ std::shared_ptr<area> area_list::get_area(const point&pt)
 	return ret;
 }
 
-
-void area_tool::on_point(uint32_t card_id,const point&pt,double speed,int16_t type)
+void area_tool::on_point(const std::shared_ptr<site>&s,std::shared_ptr<card_location_base> c,const point&pt)
 {
-	log_info("on_point...cardid:%d,type:%d",card_id,type);
+	log_info("on_point...cardid:%d,type:%d",c->m_id,c->m_type);
 	//获取地标信息
 	setLandmark(pt);
 	if(m_area_hover != nullptr && m_area_hover->m_area->in_area(pt))
 	{
-		do_hover_biz(card_id,speed,type);
+//		do_hover_biz(card_id,speed,type);
 	}
 	else
 	{
@@ -508,23 +619,24 @@ void area_tool::on_point(uint32_t card_id,const point&pt,double speed,int16_t ty
 		if(area == nullptr)
 		{
 			//这里使用分站区域比较合理
-			log_error("Cardid:%d can not find area..[x:%.2f,y:%.2f]",card_id,pt.x,pt.y);
+//			log_error("Cardid:%d can not find area..[x:%.2f,y:%.2f]",card_id,pt.x,pt.y);
 			return;
 		}
 		if(m_area_hover==nullptr)
 		{
-			m_area_hover = std::make_shared<area_hover>(area,pt,speed);
-			do_enter_biz(card_id,speed,type);
+//			m_area_hover = std::make_shared<area_hover>(area,pt,speed);
+//			do_enter_biz(card_id,speed,type);
 		}
 		else
 		{
-			do_leave_biz(card_id,speed,type);
+//			do_leave_biz(card_id,speed,type);
 
-			m_area_hover.reset(new area_hover(area,pt,speed));
-			do_enter_biz(card_id,speed,type);
+//			m_area_hover.reset(new area_hover(area,pt,speed));
+//			do_enter_biz(card_id,speed,type);
 		}
 	}
 }
+
 void area_hover::setLandmark(const point &pt)
 {
 	set(pt);

+ 76 - 31
area.h

@@ -7,9 +7,16 @@
 #include <point.h>
 #include "common.h"
 #include <write-copy.h>
+
 struct area_hover;
 struct point;
+struct area_business;
+struct business_data;
+struct card_location_base;
 
+/*
+	每个区域对应一个area对象。
+*/
 struct area
 {
     area(int id,int limit_count_person, int limit_time_person,double scale,int32_t mapid,int32_t type)
@@ -24,9 +31,10 @@ struct area
     {
     }
 
-    virtual void on_hover(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type);
-    virtual void on_enter(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type);
-    virtual void on_leave(uint32_t card_id,std::shared_ptr<area_hover>&c,double speed,int32_t type);
+	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c);
+	virtual	void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c);
+	virtual	void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c);
+
     bool in_area(const point & p);
     int id()const
     {
@@ -63,17 +71,33 @@ struct area
         m_limit_vehicle_count=limit_count_vehicle;
         m_limit_vehicle_second=limit_time_vehicle;
     }
-
-    std::vector<point> m_bound;
 public:
+	std::vector<area_business*> m_area_business_list;
+public:
+    std::vector<point> m_bound;
     //std::atomic<int> m_card_count;
+	//数据库唯一ID
     int    m_id;
     ///区域类型  AREA_TYPE
+
+	//用户定义的业务类型,BIT集合
+	/*
+	    1:位置[优先级]
+		2:超时[超时时间分钟数]
+		3:超员[人员数量、车辆数量]
+		4:超速[超速值、判断策略N/M]
+		5:人员考勤
+		6:车辆考勤[离开最小,离开最小距离]
+		7:禁区[进入时长]
+		8:猴车区域
+	*/
     int m_area_type;
 
+	//人卡超时及超员数量
     int m_limit_person_second;
     int m_limit_person_count;
 
+	//人卡超时及超员数量
     int m_limit_vehicle_second;
     int m_limit_vehicle_count;
     double m_scale;
@@ -94,6 +118,10 @@ struct area_list:single_base<area_list,int,std::shared_ptr<area>>
     ///id=-1为初始化所有
     void init_from_db(int 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
@@ -105,6 +133,13 @@ struct area_hover
     int landmark_id;
     int landmark_dir;
     double landmark_dis;
+
+	/*
+		记录该业务所关心的需持续使用的数据,每个业务一个指针
+		建议该数据项在on_enter时初始化,on_leave时清除
+	*/
+	std::vector<std::shared_ptr<business_data>> m_data;
+
     area_hover()=default;
     area_hover(std::shared_ptr<area>&area,const point&pt,double speed)
         :m_area(area)
@@ -116,6 +151,16 @@ struct area_hover
         landmark_dis=0;
     }
 
+	std::shared_ptr<business_data> get_business_data(int type)
+	{
+		if(type>=(int)m_data.size())
+		{
+			m_data.resize(type+1);
+		}
+
+		return m_data[type];
+	}
+
     int id()const
     {
         return m_area->id();
@@ -151,10 +196,13 @@ struct area_hover
 
 //每张卡包含一个对象
 //在解析出数据点时,调用on_point
+struct site;
 struct area_tool
 {
     std::shared_ptr<area_hover> m_area_hover=nullptr;
-    void on_point(uint32_t card_id,const point&pt,double speed,int16_t type);
+
+	void on_point(const std::shared_ptr<site>&s,std::shared_ptr<card_location_base> c,const point&pt);
+
     void setLandmark(const point &pt)
     {
         if(m_area_hover)
@@ -176,36 +224,33 @@ struct area_tool
         else
             return std::make_tuple(0,0,0,0,0,0,0,0);
 
-    }
-    //检测是否超时
-    void on_timer(int64_t card_id)
-    {
-
     }
 
-    void do_hover_biz(uint32_t card_id,double speed,int16_t type)
-    {
-        m_area_hover->m_area->on_hover(card_id,m_area_hover,speed,type);
-    }
+	void do_hover_biz(uint32_t card_id,double speed,int16_t type)
+	{
+//		m_area_hover->m_area->on_hover(card_id,m_area_hover,speed,type);
+	}
 
-    void do_enter_biz(uint32_t card_id,double speed,int16_t type)
-    {
-        m_area_hover->m_area->on_enter(card_id,m_area_hover,speed,type);
-    }
+	void do_enter_biz(uint32_t card_id,double speed,int16_t type)
+	{
+//		m_area_hover->m_area->on_enter(card_id,m_area_hover,speed,type);
+	}
 
-    void do_leave_biz(uint32_t card_id,double speed,int16_t type)
-    {
-        m_area_hover->m_area->on_leave(card_id,m_area_hover,speed,type);
-    }
+	void do_leave_biz(uint32_t card_id,double speed,int16_t type)
+	{
+//		m_area_hover->m_area->on_leave(card_id,m_area_hover,speed,type);
+	}
 
-    void change_area(uint32_t card_id,double speed,int16_t type,int32_t new_areaid)
-    {
-        do_leave_biz(card_id,speed,type);
-        auto area = area_list::instance()->get(new_areaid);
-        point pt;
-        m_area_hover.reset(new area_hover(area,pt,speed));
-        do_enter_biz(card_id,speed,type);
-    }
+	void change_area(uint32_t card_id,double speed,int16_t type,int32_t new_areaid)
+	{
+#if 0
+		do_leave_biz(card_id,speed,type);
+		auto area = area_list::instance()->get(new_areaid);
+		point pt;
+		m_area_hover.reset(new area_hover(area,pt,speed));
+		do_enter_biz(card_id,speed,type);
+#endif
+	}
 };
 
 #endif

+ 3 - 0
area_beh.h

@@ -0,0 +1,3 @@
+
+
+

+ 306 - 0
area_business.cpp

@@ -0,0 +1,306 @@
+
+#include <assert.h>
+
+#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
+{
+	area_business_factory()
+	{
+	}
+
+	void regist(int type,area_business* ab)
+	{
+		if(type>=(int)m_check_list.size())
+		{
+			m_check_list.resize(type+1);
+		}
+
+		assert(m_check_list[type]);
+
+		m_check_list[type].reset(ab);
+	}
+
+	std::vector<area_business*> get_check_list(int business_type)
+	{
+		std::vector<area_business*> check_list;
+		for(int i=0;i<32;i++)
+		{
+			if(business_type==0)
+				break;
+
+			if((business_type&1)==0)
+				continue;
+
+			check_list.push_back(m_check_list[i].get());
+		}
+
+		return std::move(check_list);
+	}
+
+	std::vector<std::unique_ptr<area_business>> m_check_list;
+	static area_business_factory& instance()
+	{
+		static area_business_factory _instance;
+		return _instance;
+	}
+};
+
+/*
+	确定推送人员信息时的区域,每一个明确需要推送的区域,都要推送
+*/
+struct area_business_post_area:area_business
+{
+	virtual int area_business_type()
+	{
+		return 1;
+	}
+	//将推送区域信息加入人员数据
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//从人员数据中清除区域信息
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	}
+};
+
+/*
+	判断车辆超速,确定超速后记录日志、数据库并告警
+	每张卡在每个区域的超速相关的数据信息记录在 area_hover 对象
+	人员&车辆的代码重用,请自行设计
+*/
+struct area_business_speed_checker:area_business
+{
+	virtual int area_business_type()
+	{
+		return 4;
+	
+	}
+
+	//在ptr对象中初始化超速检测所需的对象
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//根据超速检测的策略,进行超速判断,超速时进行告警
+	//建议使用最近M秒内N秒超时进行判断,M=20,N=15,策略数据记录在ptr中
+	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//清除超速检测所需的对象
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	}
+};
+
+
+/*
+	禁区
+*/
+struct area_business_restricted:area_business
+{
+	virtual int area_business_type()
+	{
+
+		return 7;
+	}
+	//记录进入时间等信息,生成告警
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> )
+	{
+        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_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);
+    }
+};
+
+/*
+	猴车区域
+*/
+struct area_business_monkey_area:area_business
+{
+	virtual int area_business_type()
+	{
+
+		return 8;
+	}
+
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	}
+};
+
+/*
+	车辆考勤
+*/
+struct area_business_car_attendance:area_business
+{
+	virtual int area_business_type()
+	{
+		return 6;
+	
+	}
+	//记录进入时间等信息,结束考勤,根据离开的时间和距离,判断是否记录一条新的考勤记录
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//记录离开考勤区域信息,开始考勤
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	}
+};
+
+/*
+	人员考勤
+*/
+struct area_business_person_attendance:area_business
+{
+	virtual int area_business_type()
+	{
+		return 5;
+	
+	}
+	//记录进入时间等信息,开始考勤
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//记录离开考勤区域信息,结束考勤
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	}
+};
+
+/*
+	判断当前区域a中的人数是否超过设定人数,超过后告警
+	区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新
+	整个井下的超员和某个区域的超员都使用这个代码
+*/
+struct area_business_count_checker:area_business
+{
+	virtual int area_business_type()
+	{
+		return 3;
+	
+	}
+	//增加计数,并进行判断
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//减少计数
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+};
+
+
+/*
+	判断当前区域a中的人卡停留时间
+	人员进入区域时间存储在area_hover对象中,在当前类on_enter/on_leave中进行更新
+	人员&车辆的代码重用,请自行设计
+*/
+struct area_business_person_dwell_checker:area_business
+{
+	virtual int area_business_type()
+	{
+		return 2;
+	}
+	//初始化 ptr 的相关数据项
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+
+	//更新 ptr 的相关数据项,并进行超时判断
+	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
+	{
+	
+	}
+};
+
+
+std::vector<area_business*> area_business::get_instance_list(int business_type)
+{
+	return area_business_factory::instance().get_check_list(business_type);
+}
+

+ 23 - 0
area_business.h

@@ -0,0 +1,23 @@
+#ifndef _area_business_hpp_
+#define _area_business_hpp_
+
+#include <vector>
+#include <memory>
+
+struct business_data
+{
+	virtual ~business_data(){}
+};
+
+struct area_business
+{
+	virtual int business_type()=0;
+
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr){}
+	virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr){}
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr){}
+
+	static std::vector<area_business*> get_instance_list(int business_type);
+};
+#endif
+

+ 17 - 4
card.cpp

@@ -17,7 +17,7 @@
 #include "area.h"
 #include "card.h"
 #include "mine_business.h"
-
+#include "mine_module/MineCardManager.h"
 
 extern config_file config;
 void card_list::init_staffer(int64_t id64)
@@ -76,7 +76,7 @@ void card_list::init_vehicle(int64_t id64)
 
 	if(-1 == id64)
 	{
-		log_info( "init_staffer. The record count=%d\n", map.size() );
+		log_info( "init_vehicle. The record count=%d\n", map.size() );
 		card_list::instance()->add(map);
 	}
 	else
@@ -121,8 +121,21 @@ void card_list::load_his_card_postion_from_db()
         {
             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)
@@ -269,11 +282,11 @@ void card_list::load_his_card_postion_staff()
     YADB::CDBResultSet DBRes;
     sDBConnPool.Query(sql,DBRes,Error);
     if(!Error.empty())
-        log_error("load_his_card_postion_vehicle列表 Error,%s",Error.c_str());
+        log_error("load_his_card_postion_staff列表 Error,%s",Error.c_str());
     uint64_t nCount = DBRes.GetRecordCount( Error );
     if (nCount > 0)
     {
-        log_info( "load_his_card_postion_vehicle. The record count=%ld\n", nCount );
+        log_info( "load_his_card_postion_staff. The record count=%ld\n", nCount );
 
         while ( DBRes.GetNextRecod(Error) )
         {

+ 1 - 1
card_base.cpp

@@ -44,7 +44,7 @@ void card_location_base::on_location(const std::vector<point>&vp,const std::vect
 		//cardMgr::instance()->tryPut(m);
 		double acc = lm[0].m_acc;
 		log_info("useful:card_id:%d,ct:%d,timestamp:%llu, loc_point,x:%.2f,y:%.2f acc:%.2f",m_id,m_ct,m_time,pt.x,pt.y,acc);
-		do_business(pt,acc);
+		do_business(lm.front().m_sit, pt, acc);
 	}
 }
 

+ 11 - 2
card_base.h

@@ -21,9 +21,18 @@ struct location_card;
 struct card_pos;
 struct area_hover;
 struct site_area_hover;
+struct site;
 
 namespace YA{struct _CARD_POS_;}
 
+//m_is_attendance 井上井下状态  0初始状态 1 井上 2 井下 
+enum EAttendanceState
+{
+	 Init 	  = 0,	//0初始状态
+	 MineUp   = 1,	//井上
+	 MineDown = 2	//井下
+};
+
 struct card:point
 {
 	card(uint32_t id,uint16_t dis,uint64_t type,int32_t deptid,int32_t level_id,uint32_t cid)
@@ -54,7 +63,7 @@ struct card:point
 	int32_t  m_level_id;		//部门级别
 };
 
-struct card_location_base:card
+struct card_location_base:card,std::enable_shared_from_this<card_location_base>
 {
     std::unique_ptr<select_tool> m_sel_tool;
     std::unique_ptr<smooth_tool> m_smo_tool;
@@ -64,7 +73,7 @@ struct card_location_base:card
     card_location_base()=default;
     card_location_base(std::string type,uint32_t id,uint16_t dis,int16_t t,int32_t,int32_t,uint32_t );
 
-	virtual void do_business(const point &pt,double acc)=0;
+	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc)=0;
 	virtual bool on_timer()=0;
 	virtual void site_hover(int sid)=0;
     virtual std::shared_ptr<area_hover> get_area_hover()=0;

+ 5 - 3
card_car.cpp

@@ -49,15 +49,15 @@ std::shared_ptr<site_area_hover> car::get_site_area()
 	return m_site_area;
 }
 
-void car::do_business(const point &pt,double acc)
+void car::do_business(const std::shared_ptr<site>&site,const point &pt,double acc)
 {
 	m_acc=acc;
-	m_area_tool->on_point(m_id,pt,m_speed,m_type);
+	m_area_tool->on_point(site,shared_from_this(),pt);
 	m_site_area->on_point(m_id,0,this, m_type);
 	m_mine_tool->on_point(m_id, m_type, m_vehicle_category_id);
 	handle_three_rates(pt);
 	uint64_t id=tool_other::type_id_to_u64(m_type,m_id);
-	mine_business::inst()->make_arg(id,*this,m_time);
+	mine_business::inst()->make_arg(id,pt,m_time);
 }
 
 int car::get_vehicle_type_id()
@@ -92,7 +92,9 @@ int car::statbiz(int32_t special_id)
 			special_id = special_area_list::instance()->get_special_id(m_id,*this,m_vehicle_category_id);
 			log_info("enter_special_area:%.2f,%2.f,id:%d,special_area_id:%d",x,y,m_id,special_id);
 			if(special_id != -1)
+			{
 				m_area_tool->change_area(m_id,m_speed,m_type,special_id);//自动拖车
+			}
 		}
 	}
 	return status;

+ 2 - 1
card_car.h

@@ -12,6 +12,7 @@
 
 struct area_hover;
 struct mine_tool;
+struct site;
 struct site_area_hover;
 
 struct car:card_location_base,card_area
@@ -30,7 +31,7 @@ public:
     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 point &pt,double acc);
+	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);
     int get_vehicle_type_id();
 
 private:

+ 2 - 2
card_message_handle.cpp

@@ -79,11 +79,11 @@ struct one_ct_message_handle
 			log_warn("分站信息缺失,SitId:%d",loc.m_site_id);
 			return;
 		}
-		const site &s=*(sit_list::instance()->get(loc.m_site_id));
+		auto s=sit_list::instance()->get(loc.m_site_id);
 		if(m_msg_list.empty())
 		{
 			m_ct=loc.m_card_ct;
-			m_ac=&s.config();
+			m_ac=&s->config();
 			m_min_timeout=false;
             //这里构造loc_message 保存数据
 			m_msg_list.push_back(loc_message(s,loc.m_tof,loc.m_time_stamp,loc.m_card_id,

+ 7 - 3
card_person.cpp

@@ -14,6 +14,7 @@
 #include "websocket/ws_common.h"
 #include "ya_event.h"
 #include "mine_business.h"
+
 person::person(const std::string &type,uint32_t cardid,uint16_t needdisplay,int16_t t,int32_t deptid,int32_t level_id,uint32_t cid,int wl,const std::string &sname,const std::string &dname)
 	:card_location_base(type,cardid,needdisplay,t,deptid,level_id,cid)
 	,m_workLine(wl)
@@ -84,9 +85,9 @@ std::shared_ptr<site_area_hover> person::get_site_area()
 	return m_site_area;
 }
 
-void person::do_business(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(m_id,pt,m_speed,m_type);
+	m_area_tool->on_point(site,shared_from_this(),pt);
 	m_site_area->on_point(m_id,0,this, m_type);
 	handle_three_rates(pt);
 }
@@ -113,7 +114,10 @@ void person::handle_three_rates(const point & pt)
 }
 
 bool person::on_timer()
-{    
+{
+	//人员井下超时
+    m_mine_tool->on_check_overtime(this->m_id,this->m_type);
+
 	if(!m_mine_tool->is_attendance())
 		return false;
 	YA::_CARD_POS_ cp;

+ 1 - 2
card_person.h

@@ -25,11 +25,10 @@ struct person:card_location_base, card_area
     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 point &pt,double acc);
+	virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc);
     virtual std::tuple<time_t,time_t,int,int,int,int,double,double> getLandmark();
 };
 
 #endif
 
 
-

+ 1 - 1
db/Makefile

@@ -120,7 +120,7 @@ CFLAGS = -g -O2
 CPPFLAGS = 
 CXX = g++
 CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
+CXXFLAGS = -g
 CYGPATH_W = echo
 DEFS = 
 DEPDIR = .deps

+ 2 - 0
db/Makefile.am

@@ -2,6 +2,8 @@ AUTOMAKE_OPTIONS=foreign
 
 noinst_LIBRARIES=libyadb.a
 
+
+CXXFLAGS=-g
 AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11  -I${prefix}/include -I/usr/local/mysql/include -I. -I..
 AM_LDFLAGS =-Wall -pthread -m64 -std=c++11  -L${prefix}/lib  -L/usr/local/mysql/lib
 

+ 1 - 1
db/Makefile.in

@@ -120,7 +120,7 @@ CFLAGS = @CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
+CXXFLAGS = -g
 CYGPATH_W = @CYGPATH_W@
 DEFS = 
 DEPDIR = @DEPDIR@

+ 19 - 19
db/autom4te.cache/requests

@@ -15,58 +15,58 @@
                         'configure.ac'
                       ],
                       {
-                        'AM_PROG_F77_C_O' => 1,
                         '_LT_AC_TAGCONFIG' => 1,
-                        'm4_pattern_forbid' => 1,
+                        'AM_PROG_F77_C_O' => 1,
                         'AC_INIT' => 1,
-                        '_AM_COND_IF' => 1,
+                        'm4_pattern_forbid' => 1,
                         'AC_CANONICAL_TARGET' => 1,
-                        'AC_SUBST' => 1,
+                        '_AM_COND_IF' => 1,
                         'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_FC_SRCEXT' => 1,
+                        'AC_SUBST' => 1,
                         'AC_CANONICAL_HOST' => 1,
+                        'AC_FC_SRCEXT' => 1,
                         'AC_PROG_LIBTOOL' => 1,
                         'AM_PROG_MKDIR_P' => 1,
                         'AM_INIT_AUTOMAKE' => 1,
-                        'AM_PATH_GUILE' => 1,
                         'AC_CONFIG_SUBDIRS' => 1,
+                        'AM_PATH_GUILE' => 1,
                         'AM_AUTOMAKE_VERSION' => 1,
                         'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_CONFIG_LINKS' => 1,
                         'AC_REQUIRE_AUX_FILE' => 1,
-                        'm4_sinclude' => 1,
+                        'AC_CONFIG_LINKS' => 1,
                         'LT_SUPPORTED_TAG' => 1,
+                        'm4_sinclude' => 1,
                         'AM_MAINTAINER_MODE' => 1,
                         'AM_NLS' => 1,
                         'AC_FC_PP_DEFINE' => 1,
                         'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
-                        'AM_MAKEFILE_INCLUDE' => 1,
                         '_m4_warn' => 1,
+                        'AM_MAKEFILE_INCLUDE' => 1,
                         'AM_PROG_CXX_C_O' => 1,
-                        '_AM_MAKEFILE_INCLUDE' => 1,
                         '_AM_COND_ENDIF' => 1,
+                        '_AM_MAKEFILE_INCLUDE' => 1,
                         'AM_ENABLE_MULTILIB' => 1,
                         'AM_PROG_MOC' => 1,
                         'AM_SILENT_RULES' => 1,
                         'AC_CONFIG_FILES' => 1,
-                        'LT_INIT' => 1,
                         'include' => 1,
-                        'AM_GNU_GETTEXT' => 1,
+                        'LT_INIT' => 1,
                         'AM_PROG_AR' => 1,
+                        'AM_GNU_GETTEXT' => 1,
                         'AC_LIBSOURCE' => 1,
-                        'AM_PROG_FC_C_O' => 1,
                         'AC_CANONICAL_BUILD' => 1,
+                        'AM_PROG_FC_C_O' => 1,
                         'AC_FC_FREEFORM' => 1,
-                        'AH_OUTPUT' => 1,
                         'AC_FC_PP_SRCEXT' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
+                        'AH_OUTPUT' => 1,
                         '_AM_SUBST_NOTMAKE' => 1,
-                        'm4_pattern_allow' => 1,
-                        'sinclude' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
                         'AM_PROG_CC_C_O' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
+                        'sinclude' => 1,
+                        'm4_pattern_allow' => 1,
                         'AM_CONDITIONAL' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
                         'AC_CONFIG_HEADERS' => 1,
                         'AC_DEFINE_TRACE_LITERAL' => 1,
                         'AM_POT_TOOLS' => 1,

+ 24 - 17
db/db_api/CDBConnPool.cpp

@@ -65,15 +65,20 @@ namespace YADB
 		}
 
 		__Setting = Setting;
-		for ( int i = 0; i < __Setting.PoolSize; i++ )
+		//检查连接池中是否已有连接数量
+		if ((int)__IdleConnList.size() < __Setting.PoolSize)
 		{
-			CDBConnect* pConn = __CreateIdleConn( szError );
-			if ( !pConn )
+			for ( int i = 0; i < __Setting.PoolSize; i++ )
 			{
-				return false;
-			}
+				CDBConnect* pConn = __CreateIdleConn( szError );
+				if ( !pConn )
+				{
+					return false;
+				}
+			}	
 		}
-		if (bAsync)
+		// 是否已创建异步线程
+		if (bAsync || !__Running)
 		{
 			//创建异步执行线程
 			__CreateAsyncThrdConn();
@@ -141,7 +146,7 @@ namespace YADB
 					return 0;
 				}
 
-				__IdleConnList.pop_front();				//zzj, ERROR!!,应该是pop_back吧
+				__IdleConnList.pop_front();
 				__BusyConnList.push_back( pConn );
 			}
 			else
@@ -151,7 +156,7 @@ namespace YADB
 			}
 		}
 
-		//验证看数据库连接是否还有效 //zzj, 新建的链接不需要测试
+		//验证看数据库连接是否还有效
 		if ( pConn )
 		{
 			if ( pConn->ConnctionTest( Error ) != 0 )
@@ -172,7 +177,6 @@ namespace YADB
 		return pConn;
 	}
 
-	//zzj, 建议使用栈展开的方式 自动回收
 	void CDBConnPool::GiveBack( CDBConnect * pConn )
 	{
 		std::unique_lock<std::mutex> lock( __mtx );
@@ -284,6 +288,7 @@ namespace YADB
 
 	void CDBConnPool::__StartAsyncThrd()
 	{
+		__Running = true;
 		boost::thread thrd( boost::bind( &CDBConnPool::_AsyncThreadFunc, this, this ) );
 		thrd.detach();
 	}
@@ -291,6 +296,8 @@ namespace YADB
 	void CDBConnPool::__CreateAsyncThrdConn()
 	{
 		std::string ConnErr;
+		//先断开之前的连接
+		this->__DestroyAsyncThrdConn();
 
 		_DB_CONN_SETTING_ ConnSetting = static_cast< _DB_CONN_SETTING_ >(__Setting);
 		CDBConnect* pConn = new CDBConnect();
@@ -327,7 +334,7 @@ namespace YADB
     }
 
     bool CDBConnPool::Query( const char *szSql, CDBResultSet& DBRes,std::string& Error )
-	{
+    {
 		CDBConnect *pConn = GetDBConnect( Error );
 		if ( 0 == pConn )
 		{
@@ -335,9 +342,9 @@ namespace YADB
 		}
 
 		MYSQL_RES* pRes = pConn->Query( szSql, Error );
-		GiveBack( pConn );
-		return DBRes.Bind( pRes, Error );
-	}
+	GiveBack( pConn );
+        return DBRes.Bind( pRes, Error );
+    }
     
     MYSQL_RES* CDBConnPool::Query( const char *szSql, std::string& Error)
     {
@@ -351,15 +358,15 @@ namespace YADB
         return pRes;
     }
     my_ulonglong CDBConnPool::ExecuteSql( const char *szSql, std::string& Error )
-	{
-		CDBConnect *pConn = GetDBConnect( Error );
+    {
+    	CDBConnect *pConn = GetDBConnect( Error );
 		if ( 0 == pConn )
 		{
 			return -1;
 		}
-		my_ulonglong nRet = pConn->ExecuteSql( szSql, Error );
+	my_ulonglong nRet = pConn->ExecuteSql( szSql, Error );
 		GiveBack( pConn );
 		return nRet;
 		//return pConn->ExecuteSql( szSql, Error );
-	}
+    }
 }

+ 1 - 1
db/db_api/CDBConnPool.h

@@ -44,7 +44,7 @@ namespace YADB
 		std::list<CDBConnect*> __IdleConnList;//没有使用的数据库连接列表
 		_DB_POOL_SETTING_ __Setting;//数据库连接池设置
 		std::mutex __mtx;//互斥量
-		boost::atomic<bool> __Running{ true };//线程是否运行的标识
+		boost::atomic<bool> __Running{ false };//线程是否运行的标识 默认未开启,等创建线程后开启
 		boost::atomic<bool> __IsExited{ false };//线程是否已退出的标识
 		CDBConnect* __pAsyncDBConn;//异步执行线程用的数据库连接
 	private:

+ 4 - 4
db/db_card.cpp

@@ -7,9 +7,9 @@
 #include "db_api/CDBSingletonDefine.h"
 
 #include "../card_base.h"
-#include "../common.h"
 #include "../card_person.h"
-#include "../common_tool.h"
+#include "../common.h"
+//#include "../common_tool.h"
 extern config_file config;
 namespace db_card
 {
@@ -198,12 +198,12 @@ namespace db_card
 
             std::shared_ptr<card_location_base> clb =
                     std::make_shared<person>(strategy,vsid,need_display,card_type_id,dept_id,occupation_level_id,staff_id,work_line,staffer_name,dept_name);
-            uint64_t cardid = tool_other::type_id_to_u64(vsid,card_type_id);
+            uint64_t cardid = getId(vsid,card_type_id);
             log_info("cardId:%llu,id:%d dept_id:%d,need_display:%d,card:%s:work_line:%d,staff_id:%d,type:%d,staffer_name:%s,dept_name:%s",
                      cardid,vsid,dept_id,need_display,card_id.c_str(),work_line,staff_id,card_type_id,staffer_name.c_str(),dept_name.c_str());
 			map.insert({cardid,clb});
 		}
-
+		log_info("here......");
 		return map;
 	}
 }

+ 9 - 2
db/db_tool.cpp

@@ -8,7 +8,7 @@
 
 #include "tool_time.h"
 #include "db_tool.h"
-#include "../common_tool.h"
+//#include "../common_tool.h"
 namespace db_tool
 {
     void PushAsync(const char* sql)
@@ -19,6 +19,13 @@ namespace db_tool
         }
     }
 
+	static std::string type_id_to_str(int32_t type,uint32_t id)
+	{
+		char sql[15] = {0};
+		snprintf(sql, 15,"%03d%010d", type, id);
+		return std::string(sql);
+	}
+
     void save_attendance(const std::shared_ptr<card_location_base>& card_ptr)
     {
         char sql[LENGTH_SQL] = {0};
@@ -53,7 +60,7 @@ namespace db_tool
         }
 
         sprintf(sql, "CALL %s(%s, %d, '%s', '%s', %d, %d, %.3f);", call.c_str(),
-               tool_other::type_id_to_str(card_ptr->m_type,card_ptr->m_id).c_str(),
+               type_id_to_str(card_ptr->m_type,card_ptr->m_id).c_str(),
                 card_ptr->m_id, start_str.c_str(), end_str.c_str(),
                 landmarkid, landmarkdirect, landmarkdist);
 

BIN
db/libyadb.a


+ 3 - 5
loc_message.h

@@ -3,7 +3,7 @@
 #include "ant.h"
 struct loc_message
 {
-    site     m_sit;
+    std::shared_ptr<site> m_sit;
     uint64_t m_num_ticks; //tof时间片m_tof或tdoa相对root时间
     uint64_t m_loc_time;
     uint32_t m_card_id;
@@ -21,12 +21,10 @@ struct loc_message
 	}
 	int tool_index()const
 	{
-		return m_sit.index();
+		return m_sit->index();
 	}
 
-
-
-    loc_message(site s,uint64_t num_ticks,uint64_t timestamp,
+    loc_message(std::shared_ptr<site> s,uint64_t num_ticks,uint64_t timestamp,
                 uint32_t cardid,int32_t ct,int8_t type,int8_t antid,
                 int16_t rav,int16_t acc,uint16_t sync_ct,uint16_t rssi)
         :m_sit(s)

+ 2 - 2
loc_point.cpp

@@ -88,7 +88,7 @@ int loc_point::cl()const
 
 void loc_point::set_source(const loc_message&li,const loc_message&li2)
 {
-    m_sid = li.m_sit.m_id;
+    m_sid = li.m_sit->m_id;
 	m_cid = li.m_card_id;
     m_time=std::min(li.m_loc_time,li2.m_loc_time);
     m_ct=li.m_card_ct;
@@ -101,8 +101,8 @@ void loc_point::set_source(const loc_message&li,const loc_message&li2)
 
 void loc_point::set_source(const loc_message&li)
 {
+    m_sid = li.m_sit->m_id;
 	m_cid = li.m_card_id;
-    m_sid = li.m_sit.m_id;
     m_time=li.m_loc_time;
     m_ct=li.m_card_ct;
     m_acc=li.m_acc *10;// 1270.;

+ 8 - 7
loc_tool.cpp

@@ -57,17 +57,18 @@ std::vector<point> loc_tool_tof_1_base::calc_location(std::vector<loc_message>&l
     int32_t last_ct = -1;
     std::vector<point> vec;
     std::vector<loc_message> lm;
-    for(auto rit = locm.crbegin();rit != locm.crend();rit++)
+    for(auto rit = locm.rbegin();rit != locm.rend();rit++)
     {
-        site s = rit->m_sit;
-        if(s.is_path_empty() || rit->m_num_ticks == 0)
+//        site s = rit->m_sit;
+
+        if(rit->m_sit->is_path_empty() || rit->m_num_ticks == 0)
           continue;
         if(last_ct == -1)
           last_ct = rit->m_card_ct;
         else if(last_ct != rit->m_card_ct)
           continue;
-		double dist_tof=rit->m_num_ticks*15.65*2.996*1e-4/s.m_scale;
-        auto v = s.solving(rit->m_ant_id,dist_tof);
+		double dist_tof=rit->m_num_ticks*15.65*2.996*1e-4/rit->m_sit->m_scale;
+        auto v = rit->m_sit->solving(rit->m_ant_id,dist_tof);
         lm.insert(lm.begin(),*rit);
         vec.insert(std::end(vec),std::begin(v),std::end(v));
     }
@@ -136,13 +137,13 @@ std::vector<point> loc_tool_main::calc_location(std::vector<loc_message>&locm)
     if(locm2[0].tool_index() > tool_index)
         flag = true;
     std::vector<point> rc;
-    if(flag && (locm2[0].m_sit.config().best_msg_cnt<=(int)locm2.size()))
+    if(flag && (locm2[0].m_sit->config().best_msg_cnt<=(int)locm2.size()))
     {
 		int index=locm2[0].tool_index();
 		rc = std::move(g_tool[index]->calc_location(locm2));
         locm.swap(locm2);
     }
-    else if(locm1[0].m_sit.config().best_msg_cnt<=(int)locm1.size())
+    else if(locm1[0].m_sit->config().best_msg_cnt<=(int)locm1.size())
 	{
 	    rc = std::move(g_tool[tool_index]->calc_location(locm1));
         locm.swap(locm1);

+ 3 - 3
main.cpp

@@ -36,8 +36,8 @@ struct Init_Setting
         std_info("json_interval:%d",send_interval);
         std::vector<std::string> url_list;
         url_list.push_back(url);
-        wsClientMgr_init(url_list,send_interval);//init websocket
-
+        //wsClientMgr_init(url_list,send_interval);//init websocket
+		getchar();
         YADB::_DB_POOL_SETTING_ DBSetting;
 
         DBSetting.Host = config.get("db.host","127.0.0.1");
@@ -49,6 +49,7 @@ struct Init_Setting
         DBSetting.PoolSize = config.get("db.pool_size",30);
         _mysql_init(DBSetting);
 
+		getchar();
 		CYaSetting::Init_sys_setting();
 
         sit_list::instance()->load_from_db();
@@ -173,7 +174,6 @@ int main(int argc ,char * argv[])
         return 0;
     }
 
-
     log_init("../etc/log.ini");
     if(config.open("../etc/config.ini"))
         return -1;

+ 21 - 12
mine.cpp

@@ -1,21 +1,30 @@
 #include "mine.h"
 #include <module_service/module_mine.h>
 #include "common_tool.h"
+#include "mine_module/MineCardManager.h"
 
 void mine_tool::on_point(uint32_t card_id, int32_t type, int vehicle_category_id)
 {
     module_mine::on_point(card_id, type, vehicle_category_id);
 }
-	uint64_t mine_tool::get_down_time()
-	{
-		return tool_time::to_ms(m_attendance_start_time);
-	}
-	uint64_t mine_tool::get_work_time()
-	{
-		return tool_time::elapse_ms(m_attendance_start_time)	;
-	}
-	int32_t mine_tool::is_on_duty()
-	{
-		return get_down_time()>tool_time::morning_of_today_ms();
-	}
+
+//检查井下超时
+void mine_tool::on_check_overtime(uint32_t card_id, int32_t type)
+{
+	CMineCardManager::instance()->OnPersonInMineOverTime(card_id,type);
+
+}
+
+uint64_t mine_tool::get_down_time()
+{
+	return tool_time::to_ms(m_attendance_start_time);
+}
+uint64_t mine_tool::get_work_time()
+{
+	return tool_time::elapse_ms(m_attendance_start_time)	;
+}
+int32_t mine_tool::is_on_duty()
+{
+	return get_down_time()>tool_time::morning_of_today_ms();
+}
 

+ 12 - 0
mine.h

@@ -11,6 +11,9 @@
 #include <log.h>
 #include <chrono>
 #include "common.h"
+#include <memory>
+
+struct card_location_base;
 struct mine_tool
 {
     mine_tool()
@@ -19,6 +22,8 @@ struct mine_tool
 		,m_status_call(0)
 		,m_stat_attendance(AS_INIT)
 		,m_attendance_start_time(std::chrono::seconds(0))
+		,m_is_overtime(false)
+		,m_overtime(std::chrono::seconds(0))
     {
 
     }
@@ -32,8 +37,15 @@ struct mine_tool
     int m_stat_attendance;
     ///考勤开始时间
     std::chrono::system_clock::time_point m_attendance_start_time;
+    //井下是否超时
+    bool m_is_overtime;
+    //井下超时时间
+    std::chrono::system_clock::time_point m_overtime;
 
     void on_point(uint32_t card_id, int32_t type, int vehicle_category_id);
+
+    //检查井下超时
+    void on_check_overtime(uint32_t card_id, int32_t type);
 	uint64_t get_down_time();
 	uint64_t get_work_time();
 	int32_t is_on_duty();

+ 277 - 0
mine_module/MineCardManager.cpp

@@ -0,0 +1,277 @@
+#include "MineCardManager.h"
+#include "ya_setting.h"
+#include "common_tool.h"
+#include "mine.h"
+
+CMineCardManager::CMineCardManager()
+{
+    m_minecards = std::make_shared<mine_card_info>();
+}
+
+std::shared_ptr<mine_card_info> CMineCardManager::GetMineCards() 
+{
+    return m_minecards;
+}
+
+ /**
+     * @brief 获取事件ID
+     **/
+uint64_t CMineCardManager::GetMineEventId(int evType)
+{
+    return event_list::to_list_id(static_cast<EVENT_TYPE>(evType),OT_MINE,0,0);
+}
+
+bool CMineCardManager::Exist(SET_CARDID &list,uint64_t id)
+{
+    if (list.find(id) == list.end())
+    {
+        return false;
+    }
+    return true;
+}
+
+bool CMineCardManager::Exist(SET_CARDID &list,int card_id,int card_type)
+{
+    return Exist(list,tool_other::type_id_to_u64(card_type,card_id));
+}
+
+/**
+ * @brief 创建警告开始事件
+ * @param evType 警告类型
+ * @param limitVal 限制数据(阀门值)
+ * @param curVal 当前数据
+ **/
+void CMineCardManager::StartEvent(int evType,int limitVal,int curVal)
+{
+    int oldState = EVENT_STATUS::ES_END;
+    uint64_t evid = this->GetMineEventId(evType);
+    auto ev_ptr = event_list::instance()->get(evid);
+    if (nullptr != ev_ptr)
+    {
+        oldState = ev_ptr->m_status;
+    }
+    else
+    {
+        ev_ptr = event_list::instance()->create_event_mine(0,(EVENT_TYPE)evType);
+        if (nullptr == ev_ptr)
+        {
+            //打印日志
+            log_error("CMineCardManager::StartEvent: Create Event Fail.evid=%%llu evType=%d,evState=ES_START ",evid,evType);
+            return ;
+        }
+        ev_ptr->m_obj_id = "0";
+        event_list::instance()->add(ev_ptr->get_list_id(),ev_ptr);
+    }
+    ev_ptr->m_status = EVENT_STATUS::ES_START;	
+    ev_ptr->m_cur_value= curVal;
+    ev_ptr->m_limit_value = limitVal;
+    ev_ptr->m_is_display = false;
+    ev_ptr->m_cur_time = std::chrono::system_clock::now();;
+    if (oldState == EVENT_STATUS::ES_END)
+    {
+        event_list::instance()->save_event(ev_ptr);
+    }
+    if (evType < MAX_MINE_EVENT_NUM)
+    {
+        m_evlist[evType] = evid;
+    }
+    log_info("CMineCardManager::StartEvent: Create Success .id=%%llu -%%llu  evType=%d,evState=ES_START ",evid,ev_ptr->get_list_id(),evType);
+}
+
+/**
+ * @brief 取消警告事件
+ * @param evType 警告类型
+ * @param curVal 当前数据
+ **/
+void CMineCardManager::CancelEvent(int evType,int curVal)
+{
+    uint64_t evid = this->GetMineEventId(evType);
+    auto ev_ptr = event_list::instance()->get(evid);
+    if (nullptr == ev_ptr)
+    {
+        //打印日志
+        log_errno("CMineCardManager::CancelEvent: Not Find Event.id=%%llu  evType=%d,evState=ES_END ",evid,evType);
+        return ;
+    }
+    if (ev_ptr->m_status == EVENT_STATUS::ES_END)
+    {
+        return ;
+    }
+    ev_ptr->m_status = EVENT_STATUS::ES_END;	
+    ev_ptr->m_cur_value= curVal;
+    ev_ptr->m_is_display = false;
+    ev_ptr->m_cur_time = std::chrono::system_clock::now();;
+    event_list::instance()->save_event(ev_ptr);
+    if (evType < MAX_MINE_EVENT_NUM)
+    {
+        m_evlist[evType] = 0;
+    }
+    log_info("CMineCardManager::CancelEvent: Success .id=%%llu  evType=%d,evState=ES_END ",evid,evType);
+}
+
+/**
+ * @brief 人员下井
+ * @param card 卡
+ **/
+void CMineCardManager::OnPersonDown(std::shared_ptr<card> card,bool bInit/* = false*/)
+{
+    if (nullptr == card)
+    {
+        return ;
+    }
+     //设置卡的状态
+    card->m_is_attendance = EAttendanceState::MineDown;
+   
+    uint64_t key = tool_other::type_id_to_u64(card->m_id,card->m_type);
+    if (this->Exist(m_minecards->m_down_person,key))
+    {
+        return ;
+    }   
+     //移除升井中的状态
+    m_minecards->m_up_person.erase(key);
+    //加入到井下列表中
+    m_minecards->m_down_person.insert(key);
+    if(!bInit)
+    {
+        //井下超员判断
+        this->OnPersonOvercrowdingWarning();
+    }
+}
+    /**
+ * @brief 人员升井
+ * @param card 卡
+ **/
+void CMineCardManager::OnPersonUp(std::shared_ptr<card> card)
+{
+    if (nullptr == card)
+    {
+        return ;
+    }
+    card->m_is_attendance = EAttendanceState::MineUp;
+    uint64_t key = tool_other::type_id_to_u64(card->m_id,card->m_type);
+    if (this->Exist(m_minecards->m_up_person,key))
+    {
+        return ;
+    }   
+     //移除井下列表
+    m_minecards->m_down_person.erase(key);
+    //加入到升井列表中
+    m_minecards->m_up_person.insert(key);
+    
+    int max_person = CYaSetting::m_sys_setting.over_count_person;
+    //井下超员判断--取消
+    if (max_person != 0 && (int)m_minecards->m_down_person.size() < max_person )
+    {
+        this->CancelEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,(int)m_minecards->m_down_person.size());
+    }
+    
+}
+
+/**
+ * @brief 人员超员警告
+**/
+void CMineCardManager::OnPersonOvercrowdingWarning()
+{
+    int max_person = CYaSetting::m_sys_setting.over_count_person;
+    //井下超员判断
+    if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person )
+    {
+        std::string log = "";
+        for (uint64_t id : m_minecards->m_down_person)
+        {
+            std::shared_ptr<card_location_base> pitcard = card_list::instance()->get(id);
+            if (nullptr != pitcard)
+            {
+                log += tool_other::type_id_to_str(pitcard->m_type,pitcard->m_id);
+                log += "&";
+            }
+        }
+        //打印日志
+        log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
+
+        this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size());
+    }
+}
+
+/**
+* @brief 人员井下超时
+**/
+void CMineCardManager::OnPersonInMineOverTime(int card_id,int card_type)
+{
+    std::shared_ptr<card_location_base> card = card_list::instance()->get(tool_other::type_id_to_u64(card_type, card_id));
+    if (nullptr == card)
+    {
+        return ;
+    }
+
+    std::shared_ptr<mine_tool> mine = card->get_mine_tool();
+    if(nullptr == mine )
+    {
+        return ;
+    }
+
+    int sec= tool_time::to_ms(std::chrono::system_clock::now()) - mine->get_work_time();
+    if (!mine->m_is_overtime && sec > (int)CYaSetting::m_sys_setting.over_time_person)
+    {
+        //人员超时
+        mine->m_is_overtime = true;
+        mine->m_overtime = std::chrono::system_clock::now();
+    }
+    else if (mine->m_is_overtime && sec < (int)CYaSetting::m_sys_setting.over_time_person)
+    {
+        mine->m_is_overtime = false;
+        mine->m_overtime = std::chrono::system_clock::now();
+    }
+    else
+    {
+        return ;
+    }
+
+    // 发送警告
+    event_ptr evPtr = event_list::instance()->get_event_card(card->m_id,card->m_type,ET_CARD_OVER_TIME_PERSON);
+    if (nullptr == evPtr)
+    {
+        event_ptr evPtr = event_list::create_event_card(card->m_id, card->m_type, ET_CARD_OVER_TIME_PERSON);
+        event_list::instance()->copy_event(card, 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 = mine->m_is_overtime ? ES_START : ES_END;
+    evPtr->m_cur_time = std::chrono::system_clock::now();
+
+    event_list::save_event(evPtr);
+
+    log_info("OnPersonInMineOverTime: send Event=ET_CARD_OVER_TIME_PERSON card=id,eventState=%d",card->m_id,evPtr->m_status);
+}
+    /**
+ * @brief 车下井
+ * @param card 卡
+ **/
+void CMineCardManager::OnVehicleDown(std::shared_ptr<card> card,bool bInit/* = false*/)
+{
+    if (nullptr == card)
+    {
+        return ;
+    }
+}
+    /**
+ * @brief 车升井
+ * @param card 卡
+ **/
+void CMineCardManager::OnVehicleUp(std::shared_ptr<card> card)
+{
+    if (nullptr == card)
+    {
+        return ;
+    }
+}
+
+ /**
+ * @brief 车辆超员警告
+ **/
+void CMineCardManager::OnVehicleOvercrowdingWarning()
+{
+
+}

+ 92 - 0
mine_module/MineCardManager.h

@@ -0,0 +1,92 @@
+/*
+** 井中卡的数据:人员下井 ,人员升进,车下井升井数据
+** 对应的操作,井下人员超时,井下超员等
+*/
+#ifndef __MINECARDMANAGER_H
+#define __MINECARDMANAGER_H
+
+#include "minestruct.h"
+#include "card.h"
+#include "module_service/module_const.h"
+
+//井下警告类型数量
+#define MAX_MINE_EVENT_NUM 3
+
+class CMineCardManager : public singleton_base<CMineCardManager>
+{
+private:
+    friend class singleton_base<CMineCardManager>;
+    CMineCardManager();
+
+private:
+    std::shared_ptr<mine_card_info> m_minecards;
+
+    //井下警告列表ID(下标为实践类型)
+    uint64_t m_evlist[MAX_MINE_EVENT_NUM];
+private:
+    /**
+     * @brief 获取事件ID
+     **/
+    uint64_t GetMineEventId(int evType);
+    /**
+     * @brief 判断是否已存在
+     **/
+    bool Exist(SET_CARDID &list,uint64_t id);
+    bool Exist(SET_CARDID &list,int card_id,int card_type);
+     /**
+     * @brief 创建警告事件
+     * @param evType 警告类型
+     * @param limitVal 限制数据(阀门值)
+     * @param curVal 当前数据
+     **/
+    void StartEvent(int evType,int limitVal,int curVal);
+    /**
+     * @brief 取消警告事件
+     * @param evType 警告类型
+     * @param curVal 当前数据
+     **/
+    void CancelEvent(int evType,int curVal);
+public:
+    //TODO: 获取信息
+    std::shared_ptr<mine_card_info> GetMineCards() ;
+    /**
+     * @brief 人员下井,超员警告
+     * @param card 卡
+     * @param bInit 是否初始化(程序启动加载井下人员)
+     **/
+    void OnPersonDown(std::shared_ptr<card> card,bool bInit = false);
+     /**
+     * @brief 人员升井,取消超员警告
+     * @param card 卡
+     **/
+    void OnPersonUp(std::shared_ptr<card> card);
+     /**
+     * @brief 人员超员警告
+     **/
+    void OnPersonOvercrowdingWarning();
+
+    /**
+     * @brief 人员井下超时
+     **/
+    void OnPersonInMineOverTime(int card_id,int card_type);
+public:
+     /**
+     * @brief 车下井 ,车辆超员警告
+     * @param card 卡
+     * @param bInit 是否初始化(程序启动加载井下车辆)
+     **/
+    void OnVehicleDown(std::shared_ptr<card> card,bool bInit = false);
+     /**
+     * @brief 车升井,车辆超员警告取消
+     * @param card 卡
+     **/
+    void OnVehicleUp(std::shared_ptr<card> card);
+    /**
+     * @brief 车辆超员警告
+     **/
+    void OnVehicleOvercrowdingWarning();
+
+
+};
+
+#endif //__MINECARDMANAGER_H

+ 16 - 0
mine_module/minestruct.h

@@ -0,0 +1,16 @@
+#pragma once
+
+#include <set>
+#include <stdint.h>
+
+// 卡在card_list的掩码由
+typedef std::set<uint64_t> SET_CARDID;
+
+struct mine_card_info
+{
+    SET_CARDID m_down_vehicle; // 井下车辆
+    SET_CARDID m_up_vehicle; // 升井车辆
+	SET_CARDID m_down_person;  // 井下人员
+	SET_CARDID m_up_person; // 升井人员
+	SET_CARDID m_down_adhoc;   //井下自组网卡
+};

+ 9 - 0
module_service/module_attendance_person.h

@@ -22,6 +22,7 @@
 #include"module_const.h"
 #include"module_area.h"
 #include "module_meta_date_changed.h"
+#include "mine_module/MineCardManager.h"
 
 /**
  * @brief 主要是针对人卡进行考勤,人卡从井上切换到井下为考勤开始,人卡从井下切换到井上为考勤结束
@@ -46,6 +47,8 @@ public:
         if(site_ptr->is_up_site())
         {
             up_mine(card_ptr, site_ptr);
+            //检查井下是否超员--是否需要取消
+            CMineCardManager::instance()->OnPersonUp(card_ptr);
         }
         else// 从井上切换到井下为考勤开始
         {
@@ -64,6 +67,9 @@ public:
                          card_ptr->m_id, card_ptr->m_type,
                          site_ptr->m_id,site_ptr->m_reader_type_id,mine_tool_ptr->m_stat_attendance);
             }
+
+            //检查井下是否超员
+            CMineCardManager::instance()->OnPersonDown(card_ptr);
         }
     }
 
@@ -168,6 +174,9 @@ public:
                     db_tool::save_attendance(card_ptr);
                 }
 
+                //检查井下是否超员--是否需要取消
+                CMineCardManager::instance()->OnPersonUp(card_ptr);
+
                 auto area_hover_ptr = card_ptr->get_area_hover();
                 if(area_hover_ptr && 0!=area_hover_ptr->id() && 0!=area_hover_ptr->mapid())
                 {

+ 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

+ 1 - 1
module_service/module_mine.h

@@ -29,7 +29,7 @@ public:
 
         if(card_ptr->is_person())//人卡
         {
-
+            
         }
 
         if(card_ptr->is_vehicle())//车卡

+ 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);

+ 4 - 0
monkey_car/monkeycar_area.h

@@ -27,6 +27,10 @@ public:
 	{}
 	std::shared_ptr<monkey_person> find(uint32_t cardid);
 
+    virtual void on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c){}
+	virtual void on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c){}
+	virtual void on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_base>&c){}
+
     virtual void on_hover(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type);
     virtual void on_enter(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type);
     virtual void on_leave(int64_t card_id,std::shared_ptr<area_hover>&c,double speed,uint64_t type);

+ 1 - 1
select_tool.cpp

@@ -34,7 +34,7 @@ loc_point select_point_object::select_solution_impl(const std::vector<point> vp,
     }
     if(flag)
     {
-        if(!select_solution(vp,&lm[0].m_sit,lp))
+        if(!select_solution(vp,lm[0].m_sit.get(),lp))
         {
             m_cur_fit.reset();
             return lp;

+ 7 - 0
select_tool.h

@@ -7,6 +7,7 @@
 #include "ant.h"
 #include "card_path.h"
 #include "loc_message.h"
+#include <zexception.h>
 struct solpoint:point
 {
 	solpoint()
@@ -1137,6 +1138,8 @@ struct smooth_tool_drivingface_car_1:smooth_tool
 	virtual void smooth_dist(point &pt, double t, int ct, const site*sit, point dstp, loc_point *m_lp = nullptr){}
 };
 //---------------------------------
+
+DEF_EXCEPTION (no_tool);
 struct select_tool_manage
 {
    void create_tool(const std::string &s,std::unique_ptr <select_tool> &set,std::unique_ptr <smooth_tool> &smt)
@@ -1163,6 +1166,10 @@ struct select_tool_manage
 			//set.reset(new select_tool_drivingface_car_1());
 			//smt.reset(new smooth_tool_drivingface_car_1(set));
         }
+		else
+		{
+			THROW_EXCEPTION(no_tool,"未定义%s的策略,需要在config.ini中定义",s.c_str());
+		}
    }
    static select_tool_manage * instance();
 };

+ 1 - 1
tool_time.h

@@ -77,7 +77,7 @@ public:
         uint64_t pos = str.length()-3;
 
         time_t t_;
-        tm tm_;
+        tm tm_={0};
         strptime(str.substr(0,pos).c_str(), "%Y-%m-%d %H:%M:%S", &tm_); //将字符串转换为tm时间
         t_ = mktime(&tm_); //将tm时间转换为秒时间
 

+ 2 - 0
websocket/Makefile.am

@@ -2,6 +2,8 @@ AUTOMAKE_OPTIONS=foreign
 
 noinst_LIBRARIES=libwebsocket.a
 
+CXXFLAGS=-g
+
 AM_CPPFLAGS=-Wall -pthread -m64 -std=c++11  -I${prefix}/include -I. -I.. -I./sio
 AM_LDFLAGS =-Wall -pthread -m64 -std=c++11  -L${prefix}/lib  
 

+ 0 - 145
websocket/autom4te.cache/requests

@@ -1,145 +0,0 @@
-# This file was generated.
-# It contains the lists of macros which have been traced.
-# It can be safely removed.
-
-@request = (
-             bless( [
-                      '0',
-                      1,
-                      [
-                        '/usr/share/autoconf'
-                      ],
-                      [
-                        '/usr/share/autoconf/autoconf/autoconf.m4f',
-                        '/usr/share/aclocal-1.12/amversion.m4',
-                        '/usr/share/aclocal-1.12/auxdir.m4',
-                        '/usr/share/aclocal-1.12/cond.m4',
-                        '/usr/share/aclocal-1.12/depend.m4',
-                        '/usr/share/aclocal-1.12/depout.m4',
-                        '/usr/share/aclocal-1.12/init.m4',
-                        '/usr/share/aclocal-1.12/install-sh.m4',
-                        '/usr/share/aclocal-1.12/lead-dot.m4',
-                        '/usr/share/aclocal-1.12/make.m4',
-                        '/usr/share/aclocal-1.12/missing.m4',
-                        '/usr/share/aclocal-1.12/options.m4',
-                        '/usr/share/aclocal-1.12/runlog.m4',
-                        '/usr/share/aclocal-1.12/sanity.m4',
-                        '/usr/share/aclocal-1.12/silent.m4',
-                        '/usr/share/aclocal-1.12/strip.m4',
-                        '/usr/share/aclocal-1.12/substnot.m4',
-                        '/usr/share/aclocal-1.12/tar.m4',
-                        'configure.ac'
-                      ],
-                      {
-                        'm4_pattern_forbid' => 1,
-                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
-                        '_AM_SET_OPTION' => 1,
-                        'AC_DEFUN' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'AM_MISSING_HAS_RUN' => 1,
-                        'AM_SUBST_NOTMAKE' => 1,
-                        'AM_MISSING_PROG' => 1,
-                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'AC_DEFUN_ONCE' => 1,
-                        'AM_PROG_INSTALL_STRIP' => 1,
-                        '_m4_warn' => 1,
-                        'AM_SANITY_CHECK' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'include' => 1,
-                        '_AM_PROG_TAR' => 1,
-                        'AM_AUX_DIR_EXPAND' => 1,
-                        'AM_DEP_TRACK' => 1,
-                        '_AM_SET_OPTIONS' => 1,
-                        'AM_RUN_LOG' => 1,
-                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        '_AM_IF_OPTION' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        '_AM_AUTOCONF_VERSION' => 1,
-                        'm4_pattern_allow' => 1,
-                        '_AM_MANGLE_OPTION' => 1,
-                        'AM_SET_LEADING_DOT' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'AM_SET_DEPDIR' => 1,
-                        '_AM_DEPENDENCIES' => 1,
-                        'm4_include' => 1,
-                        'AM_PROG_INSTALL_SH' => 1,
-                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
-                        'AU_DEFUN' => 1,
-                        'AM_MAKE_INCLUDE' => 1
-                      }
-                    ], 'Autom4te::Request' ),
-             bless( [
-                      '1',
-                      1,
-                      [
-                        '/usr/share/autoconf'
-                      ],
-                      [
-                        '/usr/share/autoconf/autoconf/autoconf.m4f',
-                        'aclocal.m4',
-                        'configure.ac'
-                      ],
-                      {
-                        '_LT_AC_TAGCONFIG' => 1,
-                        'AM_PROG_F77_C_O' => 1,
-                        'm4_pattern_forbid' => 1,
-                        'AC_INIT' => 1,
-                        '_AM_COND_IF' => 1,
-                        'AC_CANONICAL_TARGET' => 1,
-                        'AC_SUBST' => 1,
-                        'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_FC_SRCEXT' => 1,
-                        'AC_CANONICAL_HOST' => 1,
-                        'AC_PROG_LIBTOOL' => 1,
-                        'AM_PROG_MKDIR_P' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AM_PATH_GUILE' => 1,
-                        'AC_CONFIG_SUBDIRS' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_REQUIRE_AUX_FILE' => 1,
-                        'AC_CONFIG_LINKS' => 1,
-                        'm4_sinclude' => 1,
-                        'LT_SUPPORTED_TAG' => 1,
-                        'AM_MAINTAINER_MODE' => 1,
-                        'AM_NLS' => 1,
-                        'AC_FC_PP_DEFINE' => 1,
-                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
-                        'AM_MAKEFILE_INCLUDE' => 1,
-                        '_m4_warn' => 1,
-                        'AM_PROG_CXX_C_O' => 1,
-                        '_AM_COND_ENDIF' => 1,
-                        '_AM_MAKEFILE_INCLUDE' => 1,
-                        'AM_ENABLE_MULTILIB' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'AM_PROG_MOC' => 1,
-                        'AC_CONFIG_FILES' => 1,
-                        'LT_INIT' => 1,
-                        'include' => 1,
-                        'AM_PROG_AR' => 1,
-                        'AM_GNU_GETTEXT' => 1,
-                        'AC_LIBSOURCE' => 1,
-                        'AM_PROG_FC_C_O' => 1,
-                        'AC_CANONICAL_BUILD' => 1,
-                        'AC_FC_FREEFORM' => 1,
-                        'AH_OUTPUT' => 1,
-                        'AC_FC_PP_SRCEXT' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
-                        'sinclude' => 1,
-                        'AM_PROG_CC_C_O' => 1,
-                        'm4_pattern_allow' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'AC_CONFIG_HEADERS' => 1,
-                        'AC_DEFINE_TRACE_LITERAL' => 1,
-                        'AM_POT_TOOLS' => 1,
-                        'm4_include' => 1,
-                        '_AM_COND_ELSE' => 1,
-                        'AC_SUBST_TRACE' => 1
-                      }
-                    ], 'Autom4te::Request' )
-           );
-

+ 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"

+ 1 - 1
ya_event.cpp

@@ -30,7 +30,7 @@ void event_list::load_his_data_from_db()
     uint64_t nCount = DBRes.GetRecordCount( Error );
     if (nCount > 0)
     {
-        log_info( "init_vehicle_category. The record count=%ld\n", nCount );
+        log_info( "load_his_data_from_db. The record count=%ld\n", nCount );
 
         while ( DBRes.GetNextRecod(Error) )
         {

+ 16 - 1
ya_event.h

@@ -34,13 +34,24 @@ enum EVENT_STATUS
 };
 
 enum EVENT_TYPE{ // 事件类型
+    ET_UNKNOWN = 0,
+	ET_OVER_COUNT_PERSON = 1, // 井下人员超员pit_module/CPicardmanager
+	ET_OVER_COUNT_VEHICLE = 2,    // 井下车辆超员pit_module/CPicardmanager
+
     ET_AREA_OVER_COUNT_PERSON = 3,	// 区域人员超员
     ET_AREA_OVER_COUNT_VEHICLE = 4,	// 区域车辆超员
 	ET_READER_ERROR = 6,
     ET_CARD_LOW_POWER_SERIOUS = 12, // 电量极低
 
+    ET_CARD_OVER_TIME_PERSON = 13, // 人员井下超时pit_module/CPicardmanager
+	ET_CARD_OVER_TIME_VEHICLE = 14, // 车辆井下超时pit_module/CPicardmanager
+
     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, // 人员呼救
 
@@ -151,7 +162,11 @@ public:
         return (static_cast<uint64_t>(ev_type)<<48)|(static_cast<uint64_t>(obj_type)<<40)
                 |(static_cast<uint64_t>(obj_id_type)<<32)|static_cast<uint64_t>(obj_id);
     }
-
+    ///创建井下警告
+    static event_ptr create_event_mine(int objid, EVENT_TYPE ev_type)
+    {
+        return create_event(OT_MINE, objid, 0, ev_type);
+    } 
     ///创建区域警告
     static event_ptr create_event_area(int area_id, EVENT_TYPE ev_type)
     {

+ 1 - 0
ya_setting.cpp

@@ -48,3 +48,4 @@ bool CYaSetting::Init_sys_setting()
 
     return true;
 }
+

+ 35 - 0
zexception.h

@@ -0,0 +1,35 @@
+#ifndef _zexception_hpp_
+#define _zexception_hpp_
+
+#include <stdarg.h>
+#include <exception>
+#include <string>
+
+#define DEF_EXCEPTION(clsname)\
+class clsname##_exception:public std::exception\
+{\
+	std::string m_what;\
+public:\
+    clsname##_exception(const std::string&msg) throw():m_what(msg) { } \
+    ~clsname##_exception() throw()  { } \
+	const char* what() const throw() { return m_what.c_str(); }\
+};
+
+inline const char*eformat(char*buf,const char*fmt,...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	vsprintf(buf,fmt,ap);
+	va_end(ap);
+
+	return buf;
+}
+#define THROW_EXCEPTION(clsname,fmt,...)	{\
+	char ___fmt0[512]; \
+	char ___buf[2048]; \
+	sprintf(___fmt0,"[%s:%d]%s",__FILE__,__LINE__,fmt);\
+	eformat(___buf,fmt,##__VA_ARGS__);\
+	throw clsname##_exception(___buf);\
+}
+
+#endif