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