#!/usr/bin/python
# -*- coding: utf-8 -*-
# @todo: CTGReport 充值分析报告
import CommFunc
import ConfigParser
import operator
import logging
import mylog
#==================== 配置 ====================
cfg = ConfigParser.ConfigParser()
cfg.read("../../InterfaceConfig.php")
ServerPath = cfg.get("ServerInfo", "ServerPath")
# 需要处理的流向名及顺序列表
DRNameList = ["CTGOK"]
#==================== 配置 ====================
class ValueObj():
def __init__(self):
return
def getCTGReportInfo(argvDict):
startDate = argvDict.get("startDate", "")
endDate = argvDict.get("endDate", "")
CTGReportOrderTypeList = eval(CommFunc.getSPConfig(argvDict, "Config", "CTGReportOrderType", "[1]"))
reportInfo = {}
# 查询中心备份的
if CommFunc.isQueryCenterbak(argvDict):
queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList)
return
needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
parseLineFunc, reportInfo, CTGReportOrderTypeList, drNameList=DRNameList)
if needQueryCenterbak:
reportInfoBak = CommFunc.queryBackupCenterDR(cfg, argvDict)
if reportInfoBak == None:
return
for orderInfo, bakData in reportInfoBak.items():
orderInfo = str(orderInfo)
if orderInfo not in reportInfo:
vObj = ValueObj()
setattr(vObj, "payOrderType", bakData.get("payOrderType", 1))
setattr(vObj, "orderInfo", orderInfo)
setattr(vObj, "orderCoin", bakData.get("orderCoin", 0))
setattr(vObj, "payCount", bakData.get("payCount", 0))
reportInfo[orderInfo] = vObj
else:
vObj = reportInfo[orderInfo]
setattr(vObj, "payCount", getattr(vObj, "payCount", 0) + bakData.get("payCount", 0))
# 排序
sortList = reportInfo.values()
for vObj in sortList:
payOrderType = getattr(vObj, "payOrderType", 1)
setattr(vObj, "payOrderType", CommFunc.getPayOrderTypeName(payOrderType))
setattr(vObj, "orderCoin", CommFunc.coinToY(getattr(vObj, "orderCoin", 0), CommFunc.getPayOrderCoinRate(payOrderType)))
sortList.sort(key=operator.attrgetter("payCount"), reverse=True)
printStr = ""
if startDate:
printStr += _(u"开始日期") + ": %s
" % startDate
if endDate:
printStr += _(u"结束日期") + ": %s
" % endDate
# 表格输出
printStr += CommFunc.editTableHtml(sortList, ["orderInfo", "payCount", "payOrderType", "orderCoin"], _(u"排名"),
styleInfo={"orderInfo":{"align":"left", "title":_(u"商品编号")},
"payCount":{"align":"left", "title":_(u"购买次数")},
"payOrderType":{"align":"left", "title":_(u"货币类型")},
"orderCoin":{"align":"right", "title":_(u"价格")},
})
# 只会返回最后一个print的内容
print printStr
return
def queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList):
## 查询中心服务器备份充值信息
reportInfoBak = {}
if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
parseLineFunc, reportInfoBak, CTGReportOrderTypeList, drNameList=DRNameList):
return
return CommFunc.queryBackupCenterOK(reportInfoBak)
def checkDrFileNeedParseFunc(drFileName, *parseArgs, **kv):
''' 检查流向是否需要处理
@param drFileName: 流向文件名 xxx_日期.txt
@param *parseArgs: 自定义参数
@return: isNeed, checkNeedParseRetInfo
'''
#因为指定了 drNameList , 所以默认返回True
return True, None
def parseLineFunc(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv):
''' 解析流向行内容
@param drName: 流向名
@param dateStr: 对应日期字符串
@param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容
@param line: 本行内容
@param *parseArgs: 自定义参数
'''
reportInfo, CTGReportOrderTypeList = parseArgs
drDict = eval(line)
payOrderType = drDict.get("payOrderType", 1)
if payOrderType not in CTGReportOrderTypeList:
return
orderInfo = drDict["orderInfo"]
orderCoin = drDict["orderCoin"]
if orderInfo not in reportInfo:
reportInfo[orderInfo] = ValueObj()
vObj = reportInfo[orderInfo]
setattr(vObj, "payOrderType", payOrderType)
setattr(vObj, "orderInfo", orderInfo)
setattr(vObj, "orderCoin", orderCoin)
setattr(vObj, "payCount", getattr(vObj, "payCount", 0) + 1)
return
##=================================================================================================
def main():
CommFunc.setdefaultencoding()
argvDict = CommFunc.parse_args()
mylog.InitMyLog(argvDict.get("eventType", ""))
CommFunc.gettextInstall(argvDict.get("lang", ""))
getCTGReportInfo(argvDict)
return
if __name__ == "__main__":
try:
main()
except:
CommFunc.printExceptionError()