#!/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", "")
|
payOrderTypeGroup = argvDict.get("payOrderTypeGroup", "")
|
|
CTGReportOrderTypeList = eval(CommFunc.getSPConfig(
|
argvDict, "Config", "CTGReportOrderType", "[1]"))
|
|
reportInfo = {} # {key:{orderInfo:{k:v, ...}, ...}, ...}
|
# 查询中心备份的
|
if CommFunc.isQueryCenterbak(argvDict):
|
queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList)
|
return
|
|
needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, reportInfo, CTGReportOrderTypeList, payOrderTypeGroup, 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 = retBak[0]
|
# logging.info("reportInfoBak %s" % reportInfoBak)
|
for key, orderInfoDictBak in reportInfoBak.items():
|
if key not in reportInfo:
|
reportInfo[key] = orderInfoDictBak
|
continue
|
orderInfoDict = reportInfo[key]
|
for orderInfo, bakData in orderInfoDictBak.items():
|
orderInfo = str(orderInfo)
|
if orderInfo not in orderInfoDict:
|
orderInfoDict[orderInfo] = bakData
|
else:
|
retData = orderInfoDict[orderInfo]
|
for k, v in bakData.items():
|
if k == "orderCoin":
|
continue;
|
retData[k] = retData.get(k, 0) + v
|
# logging.info("2 reportInfo %s" % reportInfo)
|
ret = {"OK": 1, "reportInfo": reportInfo}
|
print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
|
return
|
|
|
def queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList):
|
# 查询中心服务器备份充值信息
|
reportInfoBak = {}
|
payOrderTypeGroup = argvDict.get("payOrderTypeGroup", "")
|
if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, reportInfoBak, CTGReportOrderTypeList, payOrderTypeGroup, 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, payOrderTypeGroup = 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)
|
key = str(payOrderType) if payOrderTypeGroup else ""
|
if key not in reportInfo:
|
reportInfo[key] = {}
|
orderInfoDict = reportInfo[key]
|
if orderInfo not in orderInfoDict:
|
orderInfoDict[orderInfo] = {}
|
retData = orderInfoDict[orderInfo]
|
retData["orderCoin"] = orderCoin
|
retData["payCount"] = retData.get("payCount", 0) + 1
|
payOrderTypeKey = "payOrderType%s" % payOrderType
|
retData[payOrderTypeKey] = retData.get(payOrderTypeKey, 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()
|