| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| # writer:ifo  | 
| # @copyright: Copyright (c) 2004, 2010 Xiamen Wangyou Network Technology Co.,Ltd., All rights reserved.  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
|   | 
|   | 
|   | 
| #ÅúÁ¿×¢²áÕʺŠ | 
|   | 
| import os  | 
| import sys  | 
| import md5  | 
| import uuid  | 
| import logging  | 
| import pymongo  | 
| import MangoDBCommon  | 
| import AccountInfo  | 
| from time import localtime  | 
|   | 
| import MongoDBConfig  | 
| import CommFunc  | 
| import tagDSAccountReader  | 
| import tagDBPlayerReader  | 
| import tagRoleItemReader  | 
| import tagRolePetReader  | 
| import tagPetSkillReader  | 
| import tagRoleSkillReader  | 
|   | 
| now = localtime()  | 
| file = "%s-%d-%d-%d.log" % ( "MongoGMAcc", now.tm_year, now.tm_mon, now.tm_mday )  | 
| logging.basicConfig(level=logging.DEBUG,  | 
|                     format='%(name)-12s %(asctime)s %(name)-12s %(levelname)-8s %(message)s',  | 
|                     datefmt='%Y-%m-%dT%H:%M:%S',  | 
|                     filename=file,  | 
|                     filemode='a+')  | 
|   | 
| tagDSAccountReader.ReadConfig("tagDSAccount.txt")  | 
| tagDSAccountConfig = tagDSAccountReader.GetConfig()  | 
|   | 
| tagDBPlayerReader.ReadConfig("tagDBPlayer.txt")  | 
| tagDBPlayerConfig = tagDBPlayerReader.GetConfig()  | 
|   | 
| tagRoleItemReader.ReadConfig("tagRoleItem.txt")  | 
| tagRoleItemConfig = tagRoleItemReader.GetConfig()  | 
|   | 
| tagRolePetReader.ReadConfig("tagRolePet.txt")  | 
| tagRolePetConfig = tagRolePetReader.GetConfig()  | 
|   | 
| tagPetSkillReader.ReadConfig("tagPetSkill.txt")  | 
| tagPetSkillConfig = tagPetSkillReader.GetConfig()  | 
|   | 
| tagRoleSkillReader.ReadConfig("tagRoleSkill.txt")  | 
| tagRoleSkillConfig = tagRoleSkillReader.GetConfig()  | 
|   | 
| class MongoGMAcc:  | 
|       | 
|     def __init__(self):  | 
|         self.connection = 0  | 
|         self.userDb = 0  | 
|         self.regDB = None  | 
|         self.userList = []  | 
|           | 
|     def LoginMongoDB(self,user, pwd, ip = '', port = '', connection = None ):  | 
|         try:  | 
|             if not connection:  | 
|                 connection = pymongo.Connection(ip, port)  | 
|             db = connection.admin  | 
|             return db.authenticate(user, pwd)   | 
|         except Exception,e:  | 
|             print 'Login mongodb failed:user = %s,pwd = %s'%(user, pwd)   | 
|             logging.error('Login mongodb failed:user = %s,pwd = %s'%(user, pwd))  | 
|             return False  | 
|       | 
|     def ConnectServer(self):  | 
|         try:  | 
|             self.connection = pymongo.Connection(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT)  | 
|         except:  | 
|             print 'Connect mongo db server %s:%s failed!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT)  | 
|             logging.error('Connect mongo db server %s:%s failed!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT))  | 
|             return   | 
|           | 
|         print 'Connect mongo db server %s:%s ok!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT)  | 
|         logging.info('Connect mongo db server %s:%s ok!'%(MongoDBConfig.USER_DB_IP, MongoDBConfig.USER_DB_PORT))  | 
|         isTrue,psw = CommFunc.Decrypt(MongoDBConfig.USER_DB_Password)  | 
|           | 
|         if not isTrue:  | 
|             print 'decode psw fail!'  | 
|             logging.error('decode psw fail!')  | 
|             return  | 
|           | 
|         if not self.LoginMongoDB(MongoDBConfig.USER_DB_UserName, psw, connection = self.connection):  | 
|             return   | 
|           | 
|         self.userDb = self.connection[MongoDBConfig.USER_DB_NAME]  | 
|         self.regDB = self.connection[MongoDBConfig.REG_DB_NAME]  | 
|         return True  | 
|           | 
|     def CreateAccountInfo(self,curUser,commentLine):  | 
|           | 
|         rec = AccountInfo.tagDSAccount()  | 
|           | 
|         for i in range(len(commentLine)):  | 
|             print '---',commentLine[i],getattr(curUser,commentLine[i]), '++++'  | 
|             setattr(rec,commentLine[i],getattr(curUser,commentLine[i]))  | 
|               | 
|         accid = getattr(curUser,"ACCID")  | 
|         setattr(rec,"ACCID",accid.strip().lower())  | 
|   | 
|         lastExceptionCnt = MangoDBCommon.getADOExceptionCount()  | 
|         lastSIDErrorCnt = MangoDBCommon.getSIDErrorCnt()  | 
|         if rec.adoLoadC(self.userDb.tagDSAccount):  | 
|             print 'Accid = %s exists!'%accid  | 
|             logging.warning('Accid = %s exists!'%accid)  | 
|             return  | 
|         else:  | 
|             if lastExceptionCnt != MangoDBCommon.getADOExceptionCount():  | 
|                 #Êý¾Ý¿â·ÃÎÊÒì³£  | 
|                 print 'DB access excption!'  | 
|                 logging.error('DB access excption!')  | 
|                 return   | 
|             if lastSIDErrorCnt != MangoDBCommon.getSIDErrorCnt():  | 
|                 #Óû§È·Êµ²»´æÔÚ  | 
|                 print 'accid = %s not found!'%accid  | 
|                 logging.error('accid = %s not found!'%accid)  | 
|                 return   | 
|       | 
|           | 
|         #ÃÜÂë½øÐÐ2´ÎMD5  | 
|         psw = getattr(curUser,"Psw")  | 
|         psw = psw.strip().lower()  | 
|         md5Obj1 = md5.new()  | 
|         md5Obj1.update(psw)  | 
|         psw = md5Obj1.hexdigest()  | 
|           | 
|         md5Obj2 = md5.new()  | 
|         md5Obj2.update(psw)  | 
|         psw = md5Obj2.hexdigest()  | 
|       | 
|         setattr(rec,"Psw",psw.strip().lower())  | 
|           | 
|         if not rec.adoInsertC(self.userDb.tagDSAccount):  | 
|             print 'Reg accid = %s failed!'%accid  | 
|             logging.warning('Reg accid = %s failed!'%accid)  | 
|             return  | 
|           | 
|         print 'Reg accid = %s ok'%accid  | 
|         logging.info('Reg accid = %s ok'%accid)  | 
|           | 
|           | 
|     def hasPlayerByPlayerName(self, db, playerName):  | 
|         collection = db.tagDBPlayer  | 
|         #ÕýÔò±í´ïʽ£¬ÊµÏÖ´óСд²»Ãô¸Ð²éѯ  | 
|         name = '^%s$'%playerName  | 
|         resultCollection = collection.find({'PlayerName':{'$regex':MangoDBCommon.fix_incomingText(playerName), '$options':'i'}, 'IsDeleted':0})  | 
|         return (resultCollection.count() != 0)  | 
|           | 
|     def CreatePlayer(self,curUser,commentLine):  | 
|           | 
|         createPlayer = AccountInfo.tagDBPlayer()  | 
|           | 
|         createPlayer.IsDeleted = 0  | 
|         createPlayer.AccState = 1  | 
|         createPlayer.GMLevel = 90  | 
|         createPlayer.HPRestoreSetting = 20  | 
|         createPlayer.MPRestoreSetting = 20  | 
|         createPlayer.UseGoldType = 2  | 
|         createPlayer.UseSilverType = 4  | 
|         createPlayer.SID = 2266520  | 
|           | 
|         for i in range(len(commentLine)):  | 
|             setattr(createPlayer,commentLine[i],getattr(curUser,commentLine[i]))  | 
|               | 
|         #ÕʺÅͳһתСд  | 
|         accid = getattr(curUser,"AccID")  | 
|         setattr(createPlayer,"AccID",accid.strip().lower())  | 
|   | 
|         self.DBPlayerCollection = self.userDb.tagDBPlayer    | 
|           | 
|         #¼ì²é¸ÃÕʺÅÊÇ·ñÒÑÓÐÓÐЧ½ÇÉ«  | 
|         if createPlayer.adoLoadCEx(self.userDb.tagDBPlayer, {'AccID':createPlayer.AccID, 'IsDeleted':createPlayer.IsDeleted}):  | 
|             print 'player of accid = %s exists!'%createPlayer.AccID  | 
|             logging.warning('player of accid = %s exists!'%createPlayer.AccID)  | 
|             return  | 
|           | 
|         #¼ì²é½ÇÉ«ÃûÊÇ·ñÖØ¸´  | 
|         if self.hasPlayerByPlayerName(self.userDb, createPlayer.PlayerName):  | 
|             print 'player of playerName = %s exists!'%createPlayer.PlayerName  | 
|             logging.warning('player of playerName = %s exists!'%createPlayer.PlayerName)  | 
|             return  | 
|           | 
|         #Éú³É×ÔÔö³¤µÄplayerID  | 
|         createPlayer.PlayerID = MangoDBCommon.seq(self.userDb, 'tagDBPlayer', 'PlayerID', MangoDBCommon.PLAYERID_FEED, MangoDBCommon.PLAYERID_STEP)  | 
|             | 
|         #УÑéͨ¹ý£¬ÍùÊý¾Ý¿âÖвåÈë½ÇÉ«  | 
|         if not createPlayer.adoInsertC(self.userDb.tagDBPlayer):  | 
|             print 'insert player failed!accid = %s'%createPlayer.AccID  | 
|             logging.warning('insert player failed!accid = %s'%createPlayer.AccID)  | 
|             return  | 
|           | 
|         #²åÈë½ÇÉ«³É¹¦  | 
|         #¶ÁÈ¡½ÇÉ«ID  | 
|         if not createPlayer.adoLoad(self.userDb.tagDBPlayer):  | 
|             print 'insert player failed!accid = %s'%createPlayer.AccID  | 
|             logging.warning('insert player failed!accid = %s'%createPlayer.AccID)  | 
|             return  | 
|           | 
|         self.userList.append(createPlayer)  | 
|         print 'insert role ok!accid = %s'%createPlayer.AccID  | 
|         logging.info('insert role ok!accid = %s'%createPlayer.AccID)  | 
|   | 
|   | 
|     def MakeRoleItem(self,curUser,commentLine,userItemDataDict):  | 
|         createItem = AccountInfo.tagRoleItem()  | 
|           | 
|         userDataList = userItemDataDict.get((curUser.Sex,curUser.Job))  | 
|           | 
|         if userDataList == None:  | 
|             print 'not this itemData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID)  | 
|             logging.warning('not this itemData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID))  | 
|             return  | 
|   | 
|         for userData in userDataList:   | 
|             createItem.ItemGUID = str(uuid.uuid1())  | 
|             createItem.PlayerID = curUser.PlayerID  | 
|               | 
|             for i in range(2,len(commentLine)):  | 
|                 setattr(createItem,commentLine[i],getattr(userData,commentLine[i]))  | 
|               | 
|             if not createItem.adoCheckUpdateC(self.userDb.tagRoleItem):  | 
|                 print 'insert Item failed!ItemGUID = %s'%createItem.ItemGUID  | 
|                 logging.warning('insert Item failed!ItemGUID = %s'%createItem.ItemGUID)  | 
|                 continue  | 
|           | 
|             print 'insert Item ok!accid = %s,ItemGUID = %s'%(curUser.AccID,createItem.ItemGUID)  | 
|             logging.info('insert Item ok!accid = %s,ItemGUID = %s'%(curUser.AccID,createItem.ItemGUID))  | 
|           | 
|   | 
|          | 
|     def AddRolePet(self,curUser,commentLine,rolePetDataDict,petSkillCommentLine,petSkillDataDict):  | 
|         createRolePet = AccountInfo.tagRolePet()  | 
|           | 
|         userDataList = rolePetDataDict.get((curUser.Sex,curUser.Job))  | 
|           | 
|         if userDataList == None:  | 
|             print 'not this rolePetData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID)  | 
|             logging.warning('not this rolePetData Sex:%d,Job:%d accid = %s'%(curUser.Sex,curUser.Job,curUser.AccID))  | 
|             return  | 
|   | 
|         for userData in userDataList:   | 
|             createRolePet.PlayerID = curUser.PlayerID  | 
|             createRolePet.PetID = createRolePet.PlayerID*10  | 
|               | 
|             for i in range(2,len(commentLine)):  | 
|                 setattr(createRolePet,commentLine[i],getattr(userData,commentLine[i]))  | 
|               | 
|               | 
|             if not createRolePet.adoCheckUpdate(self.userDb.tagRolePet):  | 
|                 print 'insert RolePet failed!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name)  | 
|                 logging.warning('insert RolePet failed!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name))  | 
|                 continue  | 
|               | 
|             print 'insert RolePet ok!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name)  | 
|             logging.info('insert RolePet ok!PlayerID = %s,Name = %s'%(createRolePet.PlayerID,createRolePet.Name))  | 
|               | 
|             createPetSkill = AccountInfo.tagPetSkill()  | 
|             key = getattr(createRolePet,"NPCID")  | 
|             if petSkillDataDict.has_key(key):  | 
|                 curPetSkill = petSkillDataDict[key]  | 
|                 for j in range(1,len(petSkillCommentLine)):  | 
|                     curPetSkillInfoList = getattr(curPetSkill,petSkillCommentLine[j])  | 
|                     for k in range(len(curPetSkillInfoList)):  | 
|                         createPetSkill.PetID = createRolePet.PetID  | 
|                         createPetSkill.PlayerID = createRolePet.PlayerID  | 
|                         setattr(createPetSkill,petSkillCommentLine[j],curPetSkillInfoList[k])  | 
|                           | 
|                         if not createPetSkill.adoCheckUpdate(self.userDb.tagPetSkill):  | 
|                             print 'insert PetSkill failed!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID)  | 
|                             logging.warning('insert PetSkill failed!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID))  | 
|                             continue  | 
|                               | 
|                         print 'insert PetSkill ok!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID)  | 
|                         logging.info('insert PetSkill ok!PlayerID = %s,Name = %s,SkillID = %s'%(createRolePet.PlayerID,createRolePet.Name,createPetSkill.SkillID))  | 
|                   | 
|     def AddRoleSkill(self,user,commentLine,roleSkillDataDict):  | 
|           | 
|         createRoleSkill = AccountInfo.tagRoleSkill()  | 
|           | 
|         key = getattr(user,"AccID")  | 
|         if roleSkillDataDict.has_key(key):  | 
|             curRoleSkill = roleSkillDataDict[key]  | 
|             for j in range(1,len(commentLine)):  | 
|                 curRoleSkillInfoList = getattr(curRoleSkill,commentLine[j])  | 
|                 for k in range(len(curRoleSkillInfoList)):  | 
|                     createRoleSkill.PlayerID = user.PlayerID  | 
|                     setattr(createRoleSkill,commentLine[j],curRoleSkillInfoList[k])  | 
|           | 
|                     if not createRoleSkill.adoCheckUpdate(self.userDb.tagRoleSkill):  | 
|                         print 'insert RoleSkill failed!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID)  | 
|                         logging.warning('insert RoleSkill failed!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID))  | 
|                         continue   | 
|                       | 
|                     print 'insert RoleSkill ok!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID)  | 
|                     logging.info('insert RoleSkill ok!PlayerID = %s,SkillID = %s'%(createRoleSkill.PlayerID,createRoleSkill.SkillID))        | 
|               | 
|   | 
|   | 
| if __name__ == '__main__':  | 
|       | 
|     newAccount = MongoGMAcc()  | 
|       | 
|     if not newAccount.ConnectServer():  | 
|         os.system('pause')  | 
|       | 
|     UserCount = tagDSAccountConfig.GetRecordCount()  | 
|     CommentLine = tagDSAccountConfig.GetCommentLine()  | 
|     for i in range(UserCount):  | 
|         curUser = tagDSAccountConfig.GetRecordByIndex(i)  | 
|         newAccount.CreateAccountInfo(curUser,CommentLine)  | 
|   | 
|     UserCount = tagDBPlayerConfig.GetRecordCount()  | 
|     CommentLine = tagDBPlayerConfig.GetCommentLine()  | 
|     for i in range(UserCount):  | 
|         curUser = tagDBPlayerConfig.GetRecordByIndex(i)  | 
|         newAccount.CreatePlayer(curUser,CommentLine)    | 
|      | 
|     userItemDataCount = tagRoleItemConfig.GetRecordCount()  | 
|     userItemDataDict={}      | 
|     for i in range(userItemDataCount):  | 
|         curUserItemIndex = tagRoleItemConfig.GetRecordByIndex(i)  | 
|         userItemDataDict.update({(curUserItemIndex.Sex,curUserItemIndex.Job):[]})  | 
|           | 
|     for i in range(userItemDataCount):  | 
|         curUserItemIndex = tagRoleItemConfig.GetRecordByIndex(i)  | 
|         key = (curUserItemIndex.Sex,curUserItemIndex.Job)  | 
|         if userItemDataDict.has_key(key):  | 
|             userItemDataDict[key].append(curUserItemIndex)  | 
|           | 
|     CommentLine = tagRoleItemConfig.GetCommentLine()  | 
|     for user in newAccount.userList:  | 
|         newAccount.MakeRoleItem(user,CommentLine,userItemDataDict)    | 
|         | 
|     rolePetDataCount = tagRolePetConfig.GetRecordCount()  | 
|     rolePetDataDict={}      | 
|     for i in range(rolePetDataCount):  | 
|         curRolePetIndex = tagRolePetConfig.GetRecordByIndex(i)  | 
|         rolePetDataDict.update({(curRolePetIndex.Sex,curRolePetIndex.Job):[]})  | 
|           | 
|     for i in range(rolePetDataCount):  | 
|         curRolePetIndex = tagRolePetConfig.GetRecordByIndex(i)  | 
|         key = (curRolePetIndex.Sex,curRolePetIndex.Job)  | 
|         if rolePetDataDict.has_key(key):  | 
|             rolePetDataDict[key].append(curRolePetIndex)  | 
|               | 
|     petSkillDataCount = tagPetSkillConfig.GetRecordCount()  | 
|     petSkillDataDict={}      | 
|     for i in range(petSkillDataCount):  | 
|         curPetSkillIndex = tagPetSkillConfig.GetRecordByIndex(i)  | 
|         petSkillDataDict.update({curPetSkillIndex.NPCID:curPetSkillIndex})  | 
|       | 
|     CommentLine = tagRolePetConfig.GetCommentLine()    | 
|     PetSkillCommentLine = tagPetSkillConfig.GetCommentLine()    | 
|     for user in newAccount.userList:  | 
|         newAccount.AddRolePet(user,CommentLine,rolePetDataDict,PetSkillCommentLine,petSkillDataDict)    | 
|        | 
|     roleSkillDataCount = tagRoleSkillConfig.GetRecordCount()  | 
|     roleSkillDataDict={}      | 
|     for i in range(roleSkillDataCount):  | 
|         curRoleSkillIndex = tagRoleSkillConfig.GetRecordByIndex(i)  | 
|         roleSkillDataDict.update({curRoleSkillIndex.AccID:curRoleSkillIndex})  | 
|           | 
|     CommentLine = tagRoleSkillConfig.GetCommentLine()         | 
|     for user in newAccount.userList:  | 
|         newAccount.AddRoleSkill(user,CommentLine,roleSkillDataDict)    | 
|               | 
|       |