#!/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!<br/>%s<br/>" % (_(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 = "<font color='red'>%s %s(%s)</font>" % (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 = "<center><p>%s</p></center>" % _(u"物品记录")
|
printStr += "%s: %s<br/>" % (_(u"玩家ID"), playerID)
|
printStr += "%s: %s<br/>" % (_(u"玩家账号"), queryAccID)
|
printStr += "%s: %s<br/>" % (_(u"玩家名称"), playerName)
|
|
if startDate:
|
printStr += "%s: %s<br/>" % (_(u"开始日期"), startDate)
|
if endDate:
|
printStr += "%s: %s<br/>" % (_(u"结束日期"), endDate)
|
|
if itemIDList:
|
printStr += "%s: %s<br/>" % (_(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()
|