📄 pms_server.cpp.svn-base
字号:
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 + -