#!/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)    
 | 
              
 | 
      
 |