#!/usr/bin/python
|
# -*- coding: utf-8 -*-
|
# @todo: CTGReportAll 充值分析报告所有汇总
|
|
import CommFunc
|
import ConfigParser
|
|
import logging
|
import mylog
|
import json
|
|
# ==================== 配置 ====================
|
cfg = ConfigParser.ConfigParser()
|
cfg.read("../../InterfaceConfig.php")
|
ServerPath = cfg.get("ServerInfo", "ServerPath")
|
# 需要处理的流向名及顺序列表
|
DRNameList = ["CTGOK"]
|
# ==================== 配置 ====================
|
|
|
def getCTGReportInfo(argvDict):
|
logging.info("getCTGReportInfo %s" % argvDict)
|
startDate = argvDict.get("startDate", "")
|
endDate = argvDict.get("endDate", "")
|
|
CTGReportOrderTypeList = eval(CommFunc.getSPConfig(
|
argvDict, "Config", "CTGReportOrderType", "[1]"))
|
|
reportInfo = {}
|
payOrderInfo = {}
|
# 查询中心备份的
|
if CommFunc.isQueryCenterbak(argvDict):
|
queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList)
|
return
|
|
needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, reportInfo, payOrderInfo, CTGReportOrderTypeList, drNameList=DRNameList)
|
|
#logging.info("1 reportInfo %s" % reportInfo)
|
#logging.info("needQueryCenterbak %s" % needQueryCenterbak)
|
if needQueryCenterbak:
|
retBak = CommFunc.queryBackupCenterDR(cfg, argvDict)
|
if retBak == None:
|
return
|
reportInfoBak, payOrderInfoBak = retBak
|
#logging.info("reportInfoBak %s" % reportInfoBak)
|
#logging.info("payOrderInfoBak %s" % payOrderInfoBak)
|
for orderInfo, bakData in reportInfoBak.items():
|
orderInfo = str(orderInfo)
|
|
if orderInfo not in reportInfo:
|
reportInfo[orderInfo] = bakData
|
else:
|
retData = reportInfo[orderInfo]
|
reportInfo[orderInfo]["payCount"] = retData.get(
|
"payCount", 0) + bakData.get("payCount", 0)
|
|
for orderInfo, bakData in payOrderInfoBak.items():
|
orderInfo = str(orderInfo)
|
|
if orderInfo not in payOrderInfo:
|
payOrderInfo[orderInfo] = bakData
|
else:
|
retData = payOrderInfo[orderInfo]
|
payOrderInfo[orderInfo]["payCount"] = retData.get(
|
"payCount", 0) + bakData.get("payCount", 0)
|
|
#logging.info("2 reportInfo %s" % reportInfo)
|
ret = {"OK": 1, "reportInfo": reportInfo, "payOrderInfo": payOrderInfo}
|
print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
|
return
|
|
|
def queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList):
|
# 查询中心服务器备份充值信息
|
reportInfoBak = {}
|
payOrderInfoBak = {}
|
if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, reportInfoBak, payOrderInfoBak, CTGReportOrderTypeList, drNameList=DRNameList):
|
return
|
return CommFunc.queryBackupCenterOK([reportInfoBak, payOrderInfoBak])
|
|
|
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, payOrderInfo, CTGReportOrderTypeList = parseArgs
|
|
drDict = eval(line)
|
|
payOrderType = drDict.get("payOrderType", 1)
|
if payOrderType not in CTGReportOrderTypeList:
|
return
|
|
if "orderInfo" not in drDict:
|
return
|
|
orderInfo = drDict["orderInfo"]
|
orderCoin = drDict.get("orderCoin", 0)
|
isBuyOrderInfo = drDict.get("isBuyOrderInfo", 0)
|
orderMoneyType = drDict.get("orderMoneyType", 0)
|
orderMoneyValue = drDict.get("orderMoneyValue", 0)
|
|
if isBuyOrderInfo:
|
retData = payOrderInfo.get(orderInfo, {})
|
payOrderInfo[orderInfo] = {
|
"orderMoneyType": orderMoneyType,
|
"orderMoneyValue": orderMoneyValue,
|
"payOrderType": payOrderType,
|
"orderCoin": orderCoin,
|
"payCount": retData.get("payCount", 0) + 1,
|
}
|
return
|
|
retData = reportInfo.get(orderInfo, {})
|
reportInfo[orderInfo] = {
|
"payOrderType": payOrderType,
|
"orderCoin": orderCoin,
|
"payCount": retData.get("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()
|