#!/usr/bin/python # -*- coding: utf-8 -*- # @todo: 玩家物品查询 import CommFunc import ConfigParser import DBOperate import mylog import logging cfg = ConfigParser.ConfigParser() cfg.read("../../InterfaceConfig.php") ServerPath = cfg.get("ServerInfo", "ServerPath") def queryPlayerItemInfo(argvDict): ## 查询玩家物品信息 startDate = argvDict.get("startDate", "") endDate = argvDict.get("endDate", "") recordType = argvDict.get("recordType") if not recordType: print _(u"需指定查询选项") return itemIDList = [] if argvDict.get("itemIDInfo", "") != "": itemIDList = [CommFunc.toInt(itemIDStr) for itemIDStr in argvDict.get("itemIDInfo", "").split(",")] # 查询中心备份的 if CommFunc.isQueryCenterbak(argvDict): queryPlayerItemInfo_CenterBak(startDate, endDate, argvDict, recordType, itemIDList) return playerFind = argvDict.get("playerFind", "") if not playerFind: print _(u"需要指定要查询的玩家") return queryType = argvDict.get("queryType", "") dboper = DBOperate.DBOper(ServerPath) if queryType == "playerName": findDBRet = dboper.findPlayerInfoByName([playerFind]) else: findDBRet = dboper.findPlayerInfoByAccID([playerFind]) dboper.close() if findDBRet and findDBRet.count(): dbPlayer = findDBRet[0] playerID = CommFunc.encode(dbPlayer["PlayerID"]) queryAccID = CommFunc.encode(dbPlayer["AccID"]) playerName = CommFunc.encode(dbPlayer["PlayerName"]) elif queryType == "accID": queryAccID = playerFind playerID = 0 playerName = "" else: print "%s!
%s
" % (_(u"找不到该玩家"), playerFind) return drList = [] needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc, parseLineFunc, drList, queryAccID, recordType, itemIDList) if needQueryCenterbak: argvDict["queryAccID"] = queryAccID bakDataList = CommFunc.queryBackupCenterDR(cfg, argvDict) if bakDataList == None: return drList = bakDataList + drList packTypeNameDict = CommFunc.getCfgKeyNameDict("packType", argvDict) itemNameDict = CommFunc.getCfgKeyNameDict("item", argvDict) useNameDict = CommFunc.getCfgKeyNameDict("item_enent_use", argvDict) giveNameDict = CommFunc.getCfgKeyNameDict("item_enent_give", argvDict) moneyNameDict = CommFunc.getCfgKeyNameDict("money", argvDict) drList = sorted(drList, key=lambda dr:dr["time"], reverse=False) # 按time升序排 for drDict in drList: ItemID = drDict['ItemID'] auctionItemStr = "[%s]" % _(u"拍品") if drDict.get('IsBind') else "" itemName = itemNameDict.get(str(ItemID), "") if itemName: itemName = "%s %s(%s)" % (auctionItemStr, itemName, ItemID) else: itemName = "%s %s(%s)" % (auctionItemStr, _(u"未知物品"), ItemID) drDict['ItemName'] = itemName eventNameCh = "" eventName = drDict['eventName'] ItemCount = drDict['ItemCount'] if "-" in ItemCount: eventNameCh = useNameDict.get(eventName) elif "+" in ItemCount: eventNameCh = giveNameDict.get(eventName) if eventNameCh: drDict['eventName'] = "%s %s" % (eventNameCh, CommFunc.encode(eventName)) if drDict.get("PayPrice", 0) > 0 or drDict.get("CouponMoney", 0) > 0: moneyType = drDict.get("MoneyType", 0) moneyName = moneyNameDict.get(str(moneyType), str(moneyType)) payMoneyInfo = "%s %s:%s" % (_(u"支付"), moneyName, drDict.get("PayPrice", 0)) if drDict.get("CouponMoney", 0) > 0: payMoneyInfo = "%s %s:%s" % (payMoneyInfo, _(u"抵扣"), drDict.get("CouponMoney", 0)) drDict['eventName'] = "%s %s" % (drDict['eventName'], payMoneyInfo) reason_name_son = drDict.get("reason_name_son") if reason_name_son: itemID = reason_name_son itemName = itemNameDict.get(str(itemID), "") if itemName: drDict['eventName'] = "%s %s(%s)" % (drDict['eventName'], itemName, itemID) else: drDict['eventName'] = "%s %s" % (drDict['eventName'], reason_name_son) packType = drDict.get('PackType', "") drDict['PackName'] = packTypeNameDict.get(str(packType), packType) if not playerName and drList: drDict = drList[-1] playerID = drDict.get("PlayerID", playerID) #playerName = CommFunc.encodePych(drDict.get("PlayerName", "")) printStr = "

%s

" % _(u"物品记录") printStr += "%s: %s
" % (_(u"玩家ID"), playerID) printStr += "%s: %s
" % (_(u"玩家账号"), queryAccID) printStr += "%s: %s
" % (_(u"玩家名称"), playerName) if startDate: printStr += "%s: %s
" % (_(u"开始日期"), startDate) if endDate: printStr += "%s: %s
" % (_(u"结束日期"), endDate) if itemIDList: printStr += "%s: %s
" % (_(u"指定物品ID"), itemIDList) # 表格输出 printStr += CommFunc.editTableHtml(drList, ["ItemName", "ItemCount", "AfterCount", "PackName", "eventName", "ItemGUID", "time"], _(u"编号"), styleInfo={"ItemName":{"align":"right", "title":_(u"物品名")}, "ItemCount":{"align":"right", "title":_(u"变化个数")}, "AfterCount":{"align":"right", "title":_(u"剩余个数")}, "PackName":{"title":_(u"所属背包")}, "eventName":{"align":"left"}, }) # 只会返回最后一个print的内容 print printStr return def queryPlayerItemInfo_CenterBak(startDate, endDate, argvDict, recordType, itemIDList): drList = [] queryAccID = argvDict.get("queryAccID", "") if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc, parseLineFunc, drList, queryAccID, recordType, itemIDList): return return CommFunc.queryBackupCenterOK(drList) def checkDrFileNeedParseFunc(drFileName, *parseArgs, **kv): ''' 检查流向是否需要处理 @param drFileName: 流向文件名 xxx_日期.txt @param *parseArgs: 自定义参数 @return: isNeed, checkNeedParseRetInfo ''' _, _, recordType, _ = parseArgs queryUse = recordType in ["All", "Use"] queryGive = recordType in ["All", "Give"] changeType = "" if queryGive: if drFileName.startswith("GivePlayerItem_"): changeType = "+" if queryUse: if drFileName.startswith("DeleteItem_"): changeType = "-" if not changeType: return False, None return True, changeType def parseLineFunc(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv): ''' 解析流向行内容 @param drName: 流向名 @param dateStr: 对应日期字符串 @param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容 @param line: 本行内容 @param *parseArgs: 自定义参数 ''' changeType = checkNeedParseRetInfo drList, queryAccID, _, itemIDList = parseArgs if queryAccID not in line: # 直接验证账号字符,省去eval消耗 return if itemIDList: isIn = False for itemID in itemIDList: if str(itemID) in line: isIn = True break if not isIn: return drDict = eval(line) accID = drDict["AccID"] if accID != queryAccID: return if itemIDList and drDict["ItemID"] not in itemIDList: return eventName = drName[drName.index("_") + 1:] drDict["ItemCount"] = "%s %s" % (changeType, drDict["ItemCount"]) drDict["eventName"] = CommFunc.encode(eventName) drList.append(drDict) return def main(): CommFunc.setdefaultencoding() argvDict = CommFunc.parse_args() mylog.InitMyLog(argvDict.get("eventType", "")) CommFunc.gettextInstall(argvDict.get("lang", "")) queryPlayerItemInfo(argvDict) return if __name__ == "__main__": try: main() except: CommFunc.printExceptionError()