#!/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<br/>" % startDate
|
if endDate:
|
printStr += _(u"结束日期") + ": %s<br/>" % 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()
|