| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #---------------------------------------------------------------------  | 
| #  | 
| #---------------------------------------------------------------------  | 
| ##@package GMCommon  | 
| # GMÃüÁÓú¯Êý  | 
| #  | 
| # @author wdb  | 
| # @date 2012-6-14  | 
| # @version 1.9  | 
| #  | 
| # @note  | 
| # @change: "2012-06-21 15:30" wdb gm¹¤¾ßÔö¼Ó¹¦ÄÜ  | 
| # @change: "2012-07-12 18:00" wdb Ôö¼Ó±àÂëÊôÐÔ  | 
| # @change: "2012-07-12 19:00" wdb gmÁ÷ÏòÔö¼Óʱ¼ä  | 
| # @change: "2012-07-13 15:00" wdb ossͳ¼Æ·â°ü¸Äµ½eventProcessÖР  | 
| # @change: "2012-07-18 11:50" wdb Ôö¼Óʱ¼ä³åÍ»»Ø¸´  | 
| # @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯  | 
| # @change: "2012-09-17 10:30" whx GM¹¤¾ßÐ޸ĴíÎóÌáʾ  | 
| # @change: "2011-09-28 14:30" whx Ôö¼Ó´íÎóÔÒò  | 
| # @change: "2013-01-14 10:30" wdb Í¬²½´íÎóÔÒò  | 
| #---------------------------------------------------------------------  | 
| """Version = 2013-01-14 10:30"""  | 
| #---------------------------------------------------------------------  | 
| #µ¼Èë  | 
| from Common import mylog  | 
| from DBCommon import CommonDefine  | 
| from Collections.CollectionDefine import *  | 
| from MangoDBCommon import (fix_outgoingText, fix_incomingText)  | 
| from EventShell import (EventShellProxy, EventProcess)  | 
| import datetime  | 
| import traceback  | 
| #---------------------------------------------------------------------  | 
| #È«¾Ö±äÁ¿  | 
| #---------------------------------------------------------------------  | 
|   | 
| #gm¹¤¾ß·µ»Ø½á¹ûÀàÐÍ  | 
| (  | 
| Def_Success,   #0 ÃüÁîÖ´ÐÐ  | 
| Def_ParamErr,   # 1²ÎÊý´íÎó  | 
| Def_GMCmdNone,  # 2ÎÞ¸ÃGMÃüÁî  | 
| Def_NoTag,  # 3ÎÞ·¨ÕÒµ½Ä¿±ê  | 
| Def_PlayerOfLine, # 4Íæ¼Ò²»ÔÚÏß   | 
| Def_Unknow,   # 5δ֪´íÎó  | 
| Def_NoNeed,   # 6ÒÑ´¦ÓÚ¸Ã״̬  | 
| Def_InsertFail, # 7²åÈëÊý¾Ýʧ°Ü  | 
| Def_MaxLimit,  # 8ÊýÁ¿¹ý´ó  | 
| Def_TimeConflict,  # 9ʱ¼ä³åÍ»  | 
| Def_InvalidTime,  # 10ʱ¼ä²»ÕýÈ·  | 
| Def_MakeNewCardFail, # 11Éú³ÉÐÂÊÖ¿¨³ö´í  | 
| Def_EncodeFail, # 12±àÂëʱ³ö´í  | 
| Def_GMDBEntranceFail,   # 13GMÃüÁîDBÈë¿Ú½âÎöÖ´Ðгö´í  | 
| Def_GMGSEntranceFail,  # 14GMÃüÁîGameServerÈë¿Ú½âÎöÖ´Ðгö´í  | 
| Def_DeleteIPFail,  # 15ɾ³ý½ûÑÔIPʧ°Ü  | 
| Def_MoneyTypeErr,  # 16½ðÇ®ÀàÐÍ´íÎó  | 
| Def_MsgMaxLenLimit,  # 17³¤¶È¹ý´ó  | 
| Def_InvalidEvent,  # 18ÈÎÎñid²»¿ÉÓà  | 
| Def_ChoseNothing,  # 19ûÓÐÑ¡Ôñ¿ªÆôµÄ»î¶¯  | 
| Def_AddNumError,  # 20¼Ó³ÉÖ»ÄÜΪ´óÓÚ0µÄÕûÊý  | 
| Def_PriceIsNull,  #21½±ÀøÐÅϢΪ¿Õ  | 
| Def_TypeNumErr,   #22ÀàÐÍ´íÎó  | 
| Def_NotOpenAction, #23 »î¶¯Î´¿ªÆô  | 
| Def_ActionOpening, #24 »î¶¯¿ªÆôÖÐ  | 
| Def_TimeIsNone, #25ûÓÐÉèÖÃʱ¼ä   | 
| Def_TimeStarGreaterEnd, #26¿ªÊ¼Ê±¼ä´óÓÚ½áÊøÊ±¼ä  | 
| Def_CurTimeGreaterStarTime,  #27µ±Ç°Ê±¼ä´óÓÚµÈÓÚ¿ªÊ¼Ê±¼ä  | 
| Def_CurTimeGreaterEndTime, # 28µ±Ç°Ê±¼ä´óÓÚ½áÊøÊ±¼ä  | 
| Def_ActionAllreadyOpen, #29 »î¶¯ÒѾÉèÖùýÁË  | 
| Def_GMForbidMergeWar, #30 gmÉèÖÃÕâ¸ö·þ²»²Î¼Ó¿ç·þÈû  | 
| Def_IsNotCrossServer, #31 ¸Ã·þ²»ÊÇ¿ç·þ·þÎñÆ÷  | 
| Def_ServerAlreadyOpen, #32 ÒѾÕýʽ¿ª·þ¹ý  | 
| Def_ServerClose, #33 ·þÎñÆ÷ά»¤ÖÐ  | 
| Def_ServerOpen, #34 ·þÎñÆ÷Õý³£  | 
| Def_ResultTypeMax,   | 
| ) = range(36)  | 
|   | 
|   | 
| (  | 
| Def_DoQueryLogDB,  # ²éѯlogdb  | 
| Def_DoQueryUserDB,  # ²éѯuserdb  | 
| Def_SendToGameServer, # ·¢ËÍGameServer  | 
| ) = range(Def_ResultTypeMax, Def_ResultTypeMax + 3)  | 
|   | 
| #ÊýÖµÉÏÏÞ(20ÒÚ)  | 
| Def_UpperLimit_DWord = 2 * 1000 * 1000 * 1000  | 
|   | 
| # ·Çc++¶¨ÒåµÄÕ˺Å״̬£¬pyÓõÄÕ˺ÅËø¶¨,½ûÑÔ£¬°´Î»ÅÐ¶Ï  | 
| (  | 
| Def_PysForbidByPy,  | 
| Def_PysForbidTalk,  | 
| ) = range(4, 4 + 2 )  | 
|   | 
| Def_GMKey_Type = 'pack_type'  | 
| Def_GMKey_ResultType = 'ResultType'  | 
| Def_GMKey_ResultMsg = 'ResultMsg'  | 
| Def_GMKey_PlayerName = 'playerName'  | 
| Def_GMKey_PlayerAccID = 'accID'  | 
| Def_GMKey_FamilyName = 'familyName'  | 
| Def_GMKey_FamilyID = 'familyID'  | 
| Def_GMKey_PackIndex = 'packIndex'  | 
| Def_GMKey_IP = 'IP'  | 
| Def_GMKey_QueryType = 'queryType'  | 
| Def_GMKey_BroadCastMsg = 'msg'  | 
|   | 
| Def_GMKey_StartTime = 'startTime'  | 
| Def_GMKey_EndTime = 'endTime'  | 
| Def_GMKey_StartDate = 'startDate'  | 
| Def_GMKey_EndDate = 'endDate'  | 
|   | 
| Def_GMKey_Interval = 'interval'  | 
| Def_GMKey_IsDelOthers = 'isDelOthers'  | 
| Def_GMKey_PlayerFind = 'playerFind'  | 
|   | 
| Def_GMKey_FuncKey = 'funcKey'  | 
| #---------------------------------------------------------------------  | 
|   | 
| ## ²éÑ¯Íæ¼Òaccid  | 
| # @param db: dbGameUserÊý¾Ý  | 
| # @param pack: ·â°üÊý¾Ý  | 
| # @param dbLog: dbUser£¬GameLogÊý¾Ý  | 
| # @param playerAccID: Íæ¼ÒÕ˺Š | 
| # @param sendPack: ÊÇ·ñ֪ͨgameserver  | 
| # @return None   | 
| def GetPlayerAccID(dbUser, condition):  | 
|     dbCollect = dbUser[UCN_DBPlayer]  | 
|       | 
|     coll = dbCollect.find(condition)  | 
|     if coll.count() <= 0:  | 
|         # »Ø¸´£¬Î´ÕÒµ½Íæ¼Ò  | 
|         return ''  | 
|       | 
|     accID = coll[0].get('AccID', '')  | 
|     return fix_outgoingText(accID)  | 
|   | 
|   | 
| ## ¸ü¾ßÍæ¼ÒÕ˺ŲéÑ¯Íæ¼ÒÔÚÏß  | 
| # @param dbUser: dbGameUserÊý¾Ý  | 
| # @param pack: ·â°üÊý¾Ý  | 
| # @param dbLog: dbUser£¬GameLogÊý¾Ý  | 
| # @param playerAccID: Íæ¼ÒÕ˺Š | 
| # @param sendPack: ÊÇ·ñ֪ͨgameserver  | 
| # @return None   | 
| def GetPlayerOnLineByAccID(dbLog, playerAccID):  | 
|     logCollect = dbLog[UCN_DBPlayerInfoLog]  | 
|       | 
|     if logCollect.find({'AccID':fix_incomingText(playerAccID), 'IsOnline':1}).count() <= 0:  | 
|         return False  | 
|     return True  | 
|   | 
|   | 
| ##·¢ËÍʼþ¼Ç¼¸ø  | 
| # @param gmType: gmÀàÐÍ  | 
| # @param dataDict: Êý¾Ý  | 
| # @param msg: ¸½¼ÓÐÅÏ¢  | 
| # @return None  | 
| def SendEventPack(gmType, dataDict, msg=''):  | 
|   | 
|     dataDict['GMOperate'] = gmType   # gm ÃüÁî  | 
|     dataDict['Msg'] = msg  | 
|       | 
|     eventTypeStr = 'GMToolOperate'   | 
|     EventProcess.SendEventPackByDict(eventTypeStr, dataDict)  | 
|     return  | 
|   | 
|   | 
| ## ×Ö·û´®×ª»»ÎªÕûÐÍ, Èç¹û²»ÄÜת»», ·µ»ØÄ¬ÈÏÖµ  | 
| #  @param input ×Ö·û´®  | 
| #  @param defValue Ä¬ÈÏÖµ  | 
| #  @return int or Ä¬ÈÏÖµ   | 
| def ToIntDef(input, defValue=0):  | 
|     try:  | 
|         result = int(input)  | 
|               | 
|     except ValueError:  | 
|         return defValue  | 
|       | 
|     return result  | 
|   | 
|   | 
| ##»ñÈ¡Ó뵱ǰʱ¼äÏà²îÌìÊýµÄdatetime¸ñʽÊý¾Ý  | 
| # @param diffDays ²î¾àÌìÊý  | 
| # @return datetime ÀàÐÍÊý¾Ý  | 
| # @remarks ¿Í»§¶Ë·â°üÏìÓ¦  | 
| def GetDatetimeByPlusDays(diffDays):  | 
|     return datetime.datetime.today() + datetime.timedelta(days = diffDays)  |