⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pms_server.cpp.svn-base

📁 sigmadesign smp8623 gui source code ,bingo
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
			END_DB()		}	//	pthread_mutex_lock(&ctxt.synh_lock);		ctxt.synh_data.clear();	//	pthread_mutex_unlock(&ctxt.synh_lock);	}	normalize_string(GuestName);	if(GuestNo == 0 || GuestName.empty())	{//		std::ostringstream msg;//		msg << "Неуспешна заявка за напускане на гост в стая "<<RoomNo;////		write_event(4, msg);	}	else	{	//	pthread_mutex_lock(&ctxt.synh_lock);		ctxt.synh_data.insert(std::make_pair(GuestNo, new synh_room_data_t(GuestName, GuestLang)));	//	pthread_mutex_unlock(&ctxt.synh_lock);	}	ctxt.SF_RoomNo = RoomNo;	pthread_mutex_unlock(&ctxt.synh_lock);}void check_in(std::string& req){	std::string RNo = "0";	int GuestNo = 0;	std::string GuestName = "";	std::string GLang = "0";	std::vector<int> TZones;	std::vector<int> TargetT;	std::vector<int> GuestT_EmptyRoom;	std::vector<int> Mode;	int bSinhronInProcess = 0;	DECODE_BEGIN(req)		EXTRACT("RN(\\w+)", 				RNo)		EXTRACT("G\\#(\\d+)", 				GuestNo)		EXTRACT("GN([\\x20-\\x7B\\x7D-\\xFF]+)", 	GuestName)		EXTRACT("GL(\\w+)",					GLang)		if(pcrecpp::RE("SF").FullMatch(message_real))		{			bSinhronInProcess = 1;		}	DECODE_END()	BEGIN_DB()		int RoomNo = get_room_id(qr, RNo);		std::cout<<"RoomNo="<<RoomNo<<std::endl;		if(RoomNo == 0)		{			END_DB_RETURN()			return;		}		int GuestLang = guest_to_int(GLang);		std::cout<<"GuestLang="<<GuestLang<<std::endl;		normalize_string(GuestName);		std::string ip = get_rc_ip(qr, RoomNo);		std::map<string, linked_ptr<room_status_t> >::iterator i = ctxt.rooms.find(ip);		if(i == ctxt.rooms.end())		{			END_DB_RETURN()			return;		}		if(GuestNo == 0 || GuestName.empty())		{			std::ostringstream msg;			msg << "Неуспешна заявка за настаняване на гост в стая "<<RoomNo;			//std::cout<<msg.str()<<std::endl;			write_event(4, msg);			END_DB_RETURN()			return;		}		if(bSinhronInProcess)		{			//std::cout<<"init synch data\n";			init_synch_room_data(RoomNo, GuestNo, GuestName, GuestLang);		}		else		{			//std::cout<<"guest in no synch\n";			bool bFirst = true;			if(get_guest_in_room(qr, RoomNo) != 0) bFirst = false;			TRANSACTION_BEGIN(*conn)				std::ostringstream room_guest_q;				room_guest_q << "INSERT INTO RoomGuest (RoomID, GuestNo, GuestName) VALUES(" << RoomNo <<"," << GuestNo << ",'" << GuestName << "')";				DB_EXECUTE(room_guest_q.str().c_str());				if(bFirst)				{					std::ostringstream tzone_q;					tzone_q << "SELECT TZoneID, DefaultGuestT,DefaultGuestT_EmptyRoom,Mode FROM RoomTZone WHERE RoomID=" << RoomNo;					mysqlpp::StoreQueryResult tzone_res = DB_STORE(tzone_q.str().c_str());					{						std::ostringstream update_q;						update_q << "UPDATE Room SET GuestNo=" << GuestNo <<", GuestName='" << GuestName << "', LangID=" << GuestLang << ", LastChange='" << get_date_time << "', WakeUp='0000-00-00 00:00:01' WHERE RoomID=" << RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "UPDATE RoomTZone SET TargetT=DefaultGuestT WHERE RoomID=" << RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					for(uint16 i = 0; i < tzone_res.num_rows(); i++)					{						TZones.push_back(tzone_res[i][0]);						TargetT.push_back(tzone_res[i][1]);						GuestT_EmptyRoom.push_back(tzone_res[i][2]);						Mode.push_back(tzone_res[i][3]);					}					if(ctxt.conf->auto_inet)					{						//std::cout<<"gen inet\n";						gen_inet(1, RoomNo, 0, "", 0);					}				}			TRANSACTION_END()			if(bOK)			{				if(ctxt.conf->using_rc)				{				int Season = get_season(qr);				for(uint16 i = 0; i < TZones.size(); i++)				{					std::ostringstream clmt;					clmt.fill('0');					clmt << "CLMT:" << std::setw(2) << TZones[i] - 1 << Season << std::setw(2) << TargetT[i] << std::setw(2) << GuestT_EmptyRoom[i] << Mode[i] << "*";					std::string ip = get_rc_ip(qr, RoomNo);					send_to_rc(ip, clmt);				}				}			}			else			{				std::ostringstream msg;				msg << "Неуспешна заявка за настаняване на гост в стая "<<RoomNo;				write_event(4, msg);			}		}	END_DB()}void bms_delete_keys(int RNo){	std::ostringstream ReqText;	ReqText << "KD|RN"<<RNo<<"|";	int KCID = 1;	std::string KeyCardID;	int ReqID = 0;	int EmpID = 0;	int PReqNo = 0;	std::vector<int> RCs;	BEGIN_DB()		{			std::ostringstream update_q;			update_q << "INSERT INTO KeycardReq (ReqType, KCID, ReqText, ReqDate) VALUES (2, "<<KCID<<", '"<<ReqText.str()<<"', '"<<get_date_time<<"')";	//		PRQ(update_q);			DB_EXECUTE(update_q.str().c_str());		}		mysqlpp::StoreQueryResult maxreq_res = DB_STORE("SELECT MAX(ReqID) FROM KeycardReq WHERE ReqType=2;");		if(maxreq_res.num_rows() > 0)		{			ReqID = (int) maxreq_res[0][0];		}		else {			END_DB_RETURN()			return;		}		std::ostringstream keycard_q;		keycard_q << "SELECT hex(KeyID) As KeyN FROM Keycard Where KHRoomID=" << RNo <<" AND KHTypeID IN(";		if(ctxt.conf->guest_TypeId.size() > 0)		{			for(uint16 i = 0; i < ctxt.conf->guest_TypeId.size() - 1; i++)			{				keycard_q << ctxt.conf->guest_TypeId[i] << ",";			}			keycard_q << ctxt.conf->guest_TypeId[ctxt.conf->guest_TypeId.size()-1] << ")";		}		else			keycard_q << "FALSE)";		logger(INFO, "DeleteKeys %s\n", keycard_q.str().c_str());	//	PRQ(keycard_q);		mysqlpp::StoreQueryResult keycard_res = DB_STORE(keycard_q.str().c_str());		if(keycard_res.num_rows() > 0)		{			for(uint16 j = 0; j < keycard_res.num_rows(); j++)			{				KeyCardID = keycard_res[j][0].c_str();				TRANSACTION_BEGIN(*conn)					std::ostringstream roomid_q;					roomid_q << "SELECT RoomID FROM KeycardRoom WHERE KeyID=0x"<<KeyCardID;	//				PRQ(roomid_q);					mysqlpp::StoreQueryResult roomid_res = DB_STORE(roomid_q.str().c_str());					for(uint16 i = 0; i < roomid_res.num_rows(); i++)					{						RCs.push_back(roomid_res[i][0]);					}					{						std::ostringstream insert_q;						insert_q << "INSERT INTO KeycardReq (ReqType, KCID, ReqText, ReqDate, EmpID, ParentReqID) VALUES (1, "<<KCID<<", '"<<ReqText.str()<<"', '"<<get_date_time<<"', "<<EmpID<<", "<<PReqNo<<")";						DB_EXECUTE(insert_q.str().c_str());					}					mysqlpp::StoreQueryResult maxid_1_res = DB_STORE("SELECT MAX(ReqID) FROM KeycardReq WHERE ReqType=1");					if(maxid_1_res.num_rows() > 0)					{						int ReqNo = (int)maxid_1_res[0][0];						{							std::ostringstream insert_q;							insert_q << "DELETE FROM Keycard WHERE KeyID=0x"<<KeyCardID;							DB_EXECUTE(insert_q.str().c_str());						}						{							std::ostringstream insert_q;							insert_q << "DELETE FROM KeycardRoom WHERE KeyID=0x" << KeyCardID;							DB_EXECUTE(insert_q.str().c_str());						}						{							std::ostringstream insert_q;							insert_q << "UPDATE KeycardLog SET EndReqID="<<ReqNo<<", End='"<<get_date_time<<"' WHERE KeyID=0x"<<KeyCardID<<" AND (EndReqID=0)";							logger(INFO, "Update KeycarLog pms guest out %s\n", insert_q.str().c_str());							DB_EXECUTE(insert_q.str().c_str());						}						{							std::ostringstream insert_q;							insert_q << "UPDATE KeycardRoomLog SET EndReqID="<<ReqNo<<", End='"<<get_date_time<<"' WHERE KeyID=0x"<<KeyCardID<<" AND (EndReqID=0)";							DB_EXECUTE(insert_q.str().c_str());						}					}				TRANSACTION_END()				if(bOK)				{					if(ctxt.conf->using_rc)					{						std::ostringstream blnk;					blnk.fill('0');					blnk<<"BLNK:"<<std::hex<<std::uppercase<<std::setw(16)<<KeyCardID<<"*";					for(uint16 i = 0; i < RCs.size(); i ++)					{						std::string ip = get_rc_ip(qr, RCs[i]);						pthread_mutex_lock(&ctxt.rooms[ip]->lock);						ctxt.rooms[ip]->key_map_send[KeyCardID] = true;															//send_to_rc(affected_rcs[i], message);						pthread_mutex_unlock(&ctxt.rooms[ip]->lock);						//send_to_rc(ip, blnk);					}					}				}			}		}	END_DB()}void check_out(std::string& req){	std::string RNo = "0";	int GuestNo = 0;	std::vector<int> TZones;	std::vector<int> TargetT;	std::vector<int> GuestT_EmptyRoom;	std::vector<int> Mode;	DECODE_BEGIN(req)		EXTRACT("RN(\\w+)", 				RNo)		EXTRACT("G\\#(\\d+)", 				GuestNo)	DECODE_END()	bool bUpdateR = false;	bool bBusyRoom = false;	int GuestNo_New = 0;	std::string GuestName_New;	BEGIN_DB()		int RoomNo = get_room_id(qr, RNo);		if(RoomNo == 0 || GuestNo == 0)		{			std::ostringstream msg;			msg << "Неуспешна заявка за напускане на гост в стая "<< RNo;			write_event(4, msg);			END_DB_RETURN()			return;		}		TRANSACTION_BEGIN(*conn)			{				std::ostringstream delete_q;				delete_q << "DELETE FROM RoomGuest WHERE RoomID=" << RoomNo <<" AND GuestNo=" << GuestNo;//				PRQ(delete_q);				DB_EXECUTE(delete_q.str().c_str());			}			if(get_guest_in_room(qr, RoomNo) == GuestNo) bUpdateR = true;			if(bUpdateR)			{				std::ostringstream guestno_q;				guestno_q << "SELECT GuestNo, GuestName FROM RoomGuest WHERE RoomID=" << RoomNo << " ORDER BY GuestNo LIMIT 1";	//			PRQ(guestno_q);				mysqlpp::StoreQueryResult guestno_res = DB_STORE(guestno_q.str().c_str());				if(guestno_res.num_rows() > 0)				{					GuestNo_New = (int) guestno_res[0][0];					GuestName_New = guestno_res[0][1].c_str();					bBusyRoom = true;				}				if(bBusyRoom)				{					std::ostringstream update_q;					update_q << "UPDATE Room SET GuestNo=" << GuestNo_New <<", GuestName='"<<GuestName_New<<"',  LastChange='"<<get_date_time<<"' WHERE RoomID="<<RoomNo<<" AND GuestNo="<<GuestNo;					DB_EXECUTE(update_q.str().c_str());				}				else				{					std::ostringstream roomtzone_q;					roomtzone_q << "SELECT TZoneID, DefaultFreeT, Mode FROM RoomTZone WHERE RoomID=" << RoomNo;					mysqlpp::StoreQueryResult roomtzone_res = DB_STORE(roomtzone_q.str().c_str());					{						std::ostringstream update_q;						update_q << "UPDATE Room SET GuestNo=0, GuestName='', LangID=0, LastChange='"<<get_date_time<<"', PIN='', WakeUp='0000-00-00 00:00:00' WHERE RoomID="<<RoomNo<<" AND GuestNo="<<GuestNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "UPDATE RoomTZone SET TargetT=DefaultFreeT WHERE RoomID="<<RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "UPDATE RoomStatus SET GreenIndic=0, RedIndic=0 WHERE RoomID=" << RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "DELETE FROM Message WHERE RoomID=" << RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "UPDATE MoviePay SET IsActive='FALSE' WHERE RoomID="<<RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					{						std::ostringstream update_q;						update_q << "UPDATE InternetPay SET IsActive='FALSE' WHERE RoomID=" << RoomNo;						DB_EXECUTE(update_q.str().c_str());					}					for(uint16 i = 0; i < roomtzone_res.num_rows() ; i ++)					{						TZones.push_back((int) roomtzone_res[i][0]);						TargetT.push_back((int) roomtzone_res[i][1]);						Mode.push_back((int) roomtzone_res[i][2]);					}				}			}		TRANSACTION_END()		if(bOK)		{			if(ctxt.conf->using_eraseonlast)			{				bms_delete_keys(RoomNo);			}		}		else		{			std::ostringstream msg;			msg << "Неуспешна заявка за напускане на гост в стая "<<RoomNo;			write_event(4, msg);		}		if(!bBusyRoom && ctxt.conf->using_rc)		{			int Season = get_season(qr);			for(uint16 i = 0; i < TZones.size(); i++)			{				std::ostringstream clmt;				clmt.fill('0');				clmt << "CLMT:" << std::setw(2) << TZones[i] - 1 << Season << std::setw(2) << TargetT[i] << std::setw(2) << TargetT[i] << Mode[i] << "*";				std::string ip = get_rc_ip(qr, RoomNo);				send_to_rc(ip, clmt);			}		}	END_DB()}void guest_change(std::string& req){	std::string RNo;	int GuestNo = 0;	std::string GuestName;	std::string GLang = "-1";	int OldRoomNo = 0;	int GuestShare = 0;	std::vector<int> TZones;	std::vector<int> TargetT;	DECODE_BEGIN(req)		EXTRACT("RN(\\w+)", 				RNo)		EXTRACT("G\\#(\\d+)", 				GuestNo)		EXTRACT("GN([\\x20-\\x7B\\x7D-\\xFF]+)", 	GuestName)		EXTRACT("GL(\\w+)", 				GLang)		EXTRACT("RO(\\d+)", 				OldRoomNo)		EXTRACT("GS(\\d+)", 				GuestShare)	DECODE_END()	BEGIN_DB()		int RoomNo = get_room_id(qr, RNo);		int GuestLang = guest_to_int(GLang);		if(GuestNo != 0)		{			{				std::ostringstream update_q;				update_q << "UPDATE Room SET GuestNo="<<GuestNo<<" WHERE RoomID=" << RoomNo;				DB_EXECUTE(update_q.str().c_str());			}			{				std::ostringstream update_q;				update_q << "UPDATE RoomTZone SET TargetT=DefaultGuestT WHERE RoomID=" << RoomNo;				DB_EXECUTE(update_q.str().c_str());			}		}		normalize_string(GuestName);		if(!GuestName.empty())		{			std::ostringstream update_q;			update_q << "UPDATE Room SET GuestName='"<<GuestName<<"' WHERE RoomID=" << RoomNo;			DB_EXECUTE(update_q.str().c_str());		}		if(GuestLang != -1)		{			std::ostringstream update_q;			update_q << "UPDATE Room SET LangID="<<GuestLang<<" WHERE RoomID=" << RoomNo;			DB_EXECUTE(update_q.str().c_str());		}	END_DB()}void bill_info(std::string& req){	std::string of = req;	std::string RNo;	int GuestNo = 0;	int DepCode = 0;	int Amount = 0;	std::string Date;	std::string Time;	std::string Description;	DECODE_BEGIN(req)		EXTRACT("RN(\\w+)", 				RNo)		EXTRACT("G\\#(\\d+)", 				GuestNo)		EXTRACT("DC(\\d+)", 				DepCode)		EXTRACT("BI(\\d+)", 				Amount)		EXTRACT("DA(\\w+)", 				Date)		EXTRACT("TI(\\w+)", 				Time)		EXTRACT("(BD[\\x20-\\x7B\\x7D-\\xFF]+)", 	Description)	DECODE_END()	BEGIN_DB()		int RoomNo = get_room_id(qr, RNo);		pthread_mutex_lock(&ctxt.php_lock);		std::map<int, linked_ptr<php_status_t> >::iterator i = ctxt.php.find(RoomNo);		if(i != ctxt.php.end())		{			std::ostringstream msg;			msg << "XI|RN"<<RoomNo<<"|DC"<<DepCode<<"|BI"<<Amount<<"|"<<Description<<"|DA"<<Date<<"|TI"<<Time<<"|\r\n";			send(i->second->handle, msg.str().c_str(), msg.str().length(), 0);		}		pthread_mutex_unlock(&ctxt.php_lock);	END_DB()}void bill_total(std::string& req){	std::string RNo;	int GuestNo = 0;	int Amount = 0;	std::string Date;	std::string Time;	DECODE_BEGIN(req)		EXTRACT("RN(\\w+)", 				RNo)		EXTRACT("G\\#(\\d+)", 				GuestNo)		EXTRACT("BA(\\d+)", 				Amount)		EXTRACT("DA([\\w]+)", 	Date)		EXTRACT("TI([\\w]+)", 	Time)	DECODE_END()	BEGIN_DB()		int RoomNo = get_room_id(qr, RNo);		pthread_mutex_lock(&ctxt.php_lock);		std::map<int, linked_ptr<php_status_t> >::iterator i = ctxt.php.find(RoomNo);		if(i != ctxt.php.end())		{			std::ostringstream msg;			msg << "XB|RN"<<RoomNo<<"|BA"<<Amount<<"|DA"<<Date<<"|TI"<<Time<<"|\r\n";			send(i->second->handle, msg.str().c_str(), msg.str().length(), 0);		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -