hxp
2024-11-20 d5d1b5ac2467c87800cd0d12433e72352391b46d
10284 【后台】 优化充值分析,支持勾选按支付类型分组查询;
2个文件已修改
266 ■■■■■ 已修改文件
Server/eventdata/CTGReportAll.py 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
serverinfo/ctgreportall.php 172 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/eventdata/CTGReportAll.py
@@ -22,51 +22,45 @@
    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 = {}
    payOrderInfo = {}
    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, payOrderInfo, CTGReportOrderTypeList, drNameList=DRNameList)
                                                   parseLineFunc, reportInfo, CTGReportOrderTypeList, payOrderTypeGroup, drNameList=DRNameList)
    #logging.info("1 reportInfo %s" % reportInfo)
    #logging.info("needQueryCenterbak %s" % needQueryCenterbak)
    # 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}
        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
@@ -74,11 +68,11 @@
def queryCenterBak(startDate, endDate, argvDict, CTGReportOrderTypeList):
    # 查询中心服务器备份充值信息
    reportInfoBak = {}
    payOrderInfoBak = {}
    payOrderTypeGroup = argvDict.get("payOrderTypeGroup", "")
    if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
                                       parseLineFunc, reportInfoBak, payOrderInfoBak, CTGReportOrderTypeList, drNameList=DRNameList):
                                       parseLineFunc, reportInfoBak, CTGReportOrderTypeList, payOrderTypeGroup, drNameList=DRNameList):
        return
    return CommFunc.queryBackupCenterOK([reportInfoBak, payOrderInfoBak])
    return CommFunc.queryBackupCenterOK([reportInfoBak])
def checkDrFileNeedParseFunc(drFileName, *parseArgs, **kv):
@@ -100,7 +94,7 @@
    @param *parseArgs: 自定义参数
    '''
    reportInfo, payOrderInfo, CTGReportOrderTypeList = parseArgs
    reportInfo, CTGReportOrderTypeList, payOrderTypeGroup = parseArgs
    drDict = eval(line)
@@ -113,27 +107,17 @@
    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,
    }
    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
# =================================================================================================
serverinfo/ctgreportall.php
@@ -19,10 +19,11 @@
// 默认当天
$startDate = array_key_exists("startDate", $_POST) ? $_POST["startDate"] : \CommFunc\CalcToStrDateTime("-7 days", "Y-m-d");
$endDate = array_key_exists("endDate", $_POST) ? $_POST["endDate"] : date("Y-m-d");
$payOrderTypeGroup = $_POST["payOrderTypeGroup"];
$reportInfo = null;
$payOrderInfo = null;
$errorServerInfo = array();
$payOrderTypes = array();
if (array_key_exists("submit", $_POST)) {
    $_POST["eventType"] = "CTGReportAll";
    $_POST["queryAllData"] = "on"; // 设置可查询备份数据
@@ -32,56 +33,64 @@
    if (isset($retInfo)) {
        // \Logging\LogInfo("返回查询结果: " .  print_r($retInfo, true));
        $reportInfo = array();
        $payOrderInfo = array();
        foreach ($retInfo as $serverName => $ret) {
            if (is_array($ret) && $ret["OK"] == 1) {
                foreach ($ret["reportInfo"] as $orderInfo => $retData) {
                    if (!array_key_exists($orderInfo, $reportInfo)) {
                        $reportInfo[$orderInfo] = $retData;
                    } else {
                        $reportInfo[$orderInfo]["payCount"] = $reportInfo[$orderInfo]["payCount"] + $retData["payCount"];
                foreach ($ret["reportInfo"] as $key => $orderInfoDict) {
                    if (!array_key_exists($key, $reportInfo)) {
                        $reportInfo[$key] = array();
                    }
                    $repOrderInfoDict = $reportInfo[$key];
                    foreach ($orderInfoDict as $orderInfo => $retData) {
                        if (!array_key_exists($orderInfo, $repOrderInfoDict)) {
                            $repOrderInfoDict[$orderInfo] = $retData;
                        } else {
                            $retDataTotal = $repOrderInfoDict[$orderInfo];
                            foreach ($retData as $k => $v) {
                                if ($k == "orderCoin") {
                                    continue;
                                }
                                $retDataTotal[$k] = ($retDataTotal[$k] ? $retDataTotal[$k] : 0) + $v;
                            }
                            $repOrderInfoDict[$orderInfo] = $retDataTotal;
                        }
                        foreach ($repOrderInfoDict[$orderInfo] as $k => $v) {
                            if (\CommFunc\startsWith($k, "payOrderType")) {
                                $payOrderTypes[$k] = intval(substr($k, strlen("payOrderType")));
                            }
                        }
                    }
                    $reportInfo[$key] = $repOrderInfoDict;
                }
                foreach ($ret["payOrderInfo"] as $orderInfo => $retData) {
                    if (!array_key_exists($orderInfo, $payOrderInfo)) {
                        $payOrderInfo[$orderInfo] = $retData;
                    } else {
                        $payOrderInfo[$orderInfo]["payCount"] = $payOrderInfo[$orderInfo]["payCount"] + $retData["payCount"];
                    }
                foreach ($reportInfo as $key => $repOrderInfoDict) {
                    //排序 根据 payCount 倒序排序  SORT_ASC 和 SORT_DESC
                    array_multisort(array_column($repOrderInfoDict, 'payCount'), SORT_DESC, $repOrderInfoDict);
                    $reportInfo[$key] = $repOrderInfoDict;
                }
            } else {
                $errorServerInfo[$serverName] = $ret;
            }
        }
        //排序 根据 payCount 倒序排序  SORT_ASC 和 SORT_DESC
        array_multisort(array_column($reportInfo, 'payCount'), SORT_DESC, $reportInfo);
        array_multisort(array_column($payOrderInfo, 'payCount'), SORT_DESC, $payOrderInfo);
    }
}
// \Logging\LogInfo("reportInfo: " .  print_r($reportInfo, true));
// \Logging\LogInfo("errorServerInfo: " .  print_r($errorServerInfo, true));
// \Logging\LogInfo("payOrderTypes: " .  print_r($payOrderTypes, true));
//显示表格字段配置 key-参数名,value-说明
$tableArray = array(
    "Num" => array("编号", "5%", "center"),
    "orderInfo" => array("商品编号", "10%", "center"),
    "payOrderType" => array("订单类型", "5%", "center"),
    "orderCoin" => array("商品价格", "5%", "center"),
    "payCount" => array("购买次数", "5%", "center"),
    "orderInfo" => array("商品编号", "5%", "center"),
    "orderCoin" => array("orderCoin", "5%", "center"),
    "payCount" => array("总次数", "5%", "center"),
);
$payOrderTableArray = array(
    "Num" => array("编号", "5%", "center"),
    "orderInfo" => array("商品编号", "10%", "center"),
    "payOrderType" => array("订单类型", "5%", "center"),
    "orderCoin" => array("商品价格", "5%", "center"),
    "orderMoneyType" => array("购买货币", "5%", "center"),
    "orderMoneyValue" => array("货币价格", "5%", "center"),
    "payCount" => array("购买次数", "5%", "center"),
);
$moneyNameInfo = \CommFunc\getCfgKeyNameContent("money", true);
if (!$payOrderTypeGroup) {
    ksort($payOrderTypes);
    foreach ($payOrderTypes as $k => $payOrderType) {
        $payName = \CommFunc\getPayOrderTypeName($payOrderType);
        $tableArray[$k] = array($payName . "次数", "5%", "center");
    }
}
?>
@@ -104,6 +113,7 @@
        <input type="text" name="startDate" id="startDate" onclick="new Calendar().show(this);" readonly value="<?php echo $startDate; ?>" size="8" />
        ~
        <input type="text" name="endDate" id="endDate" onclick="new Calendar().show(this);" readonly value="<?php echo $endDate; ?>" size="8" />
        <input type="checkbox" name="payOrderTypeGroup" <?php echo $payOrderTypeGroup ? "checked" : "" ?> />按支付类型分组<br />
        <hr />
        <?php
        if (count($errorServerInfo)) {
@@ -125,74 +135,48 @@
        <?php
        if (isset($reportInfo)) {
            echo "<table width=\"30%\" border frame=box rules=all>";
            echo "<caption>" . \Lang\gettext("充值分析") . "</caption>";
            echo "<thead><tr>";
            foreach ($tableArray as $value) {
                echo "<th width=\"" . $value[1] . "\">" . $value[0] . "</td>";
            }
            echo "</tr></thead>";
            if (count($reportInfo) == 0) {
                echo \Lang\gettext("无充值记录") . "<br/>";
            }
            $Num = 0;
            foreach ($reportInfo as $orderInfo => $orderData) {
                echo "<tr'>";
                foreach ($tableArray as $key => $value) {
                    $tdContent = $orderData[$key];
                    if ($key == "Num") {
                        $Num += 1;
                        $tdContent = $Num;
                    } else if ($key == "payOrderType") {
                        $tdContent = \CommFunc\getPayOrderTypeName($tdContent);
                    } else if ($key == "orderCoin") {
                        $tdContent = $tdContent / \CommFunc\getPayOrderCoinRate($orderData["payOrderType"]);
                    } else if ($key == "orderInfo") {
                        $tdContent = $orderInfo;
                    }
                    echo "<td align='" . $value[2] . "'>" . $tdContent . "</td>";
            foreach ($reportInfo as $payOrderTypeKey => $orderInfoDict) {
                if ($payOrderTypeKey == "0") {
                    $caption = "所有";
                } else {
                    $caption = \CommFunc\getPayOrderTypeName(intval($payOrderTypeKey));
                }
                echo "</tr>";
            }
            echo "</table>";
            echo "<hr/>";
        }
        if (isset($payOrderInfo)) {
            echo "<table width=\"40%\" border frame=box rules=all>";
            echo "<caption>" . \Lang\gettext("充值订单购买分析") . "</caption>";
            echo "<thead><tr>";
            foreach ($payOrderTableArray as $value) {
                echo "<th width=\"" . $value[1] . "\">" . $value[0] . "</td>";
            }
            echo "</tr></thead>";
            if (count($payOrderInfo) == 0) {
                echo \Lang\gettext("无充值记录") . "<br/>";
            }
            $Num = 0;
            foreach ($payOrderInfo as $orderInfo => $orderData) {
                echo "<tr'>";
                foreach ($payOrderTableArray as $key => $value) {
                    $tdContent = $orderData[$key];
                    if ($key == "Num") {
                        $Num += 1;
                        $tdContent = $Num;
                    } else if ($key == "payOrderType") {
                        $tdContent = \CommFunc\getPayOrderTypeName($tdContent);
                    } else if ($key == "orderCoin") {
                        $tdContent = $tdContent / \CommFunc\getPayOrderCoinRate($orderData["payOrderType"]);
                    } else if ($key == "orderInfo") {
                        $tdContent = $orderInfo;
                    } else if ($key == "orderMoneyType") {
                        $tdContent = $moneyNameInfo["" . $tdContent];
                    }
                    echo "<td align='" . $value[2] . "'>" . $tdContent . "</td>";
                $caption = "【" . $caption . "订单】";
                echo "<table width=\"50%\" border frame=box rules=all>";
                echo "<caption>" . $caption . "</caption>";
                echo "<thead><tr>";
                foreach ($tableArray as $value) {
                    echo "<th width=\"" . $value[1] . "\">" . $value[0] . "</td>";
                }
                echo "</tr>";
                echo "</tr></thead>";
                $Num = 0;
                foreach ($orderInfoDict as $orderInfo => $orderData) {
                    echo "<tr'>";
                    foreach ($tableArray as $key => $value) {
                        $tdContent = $orderData[$key];
                        if ($key == "Num") {
                            $Num += 1;
                            $tdContent = $Num;
                        }
                        // else if ($key == "payOrderType") {
                        //     $tdContent = \CommFunc\getPayOrderTypeName($tdContent);
                        // }
                        // else if ($key == "orderCoin") {
                        //     $tdContent = $tdContent / \CommFunc\getPayOrderCoinRate($orderData["payOrderType"]);
                        // }
                        else if ($key == "orderInfo") {
                            $tdContent = $orderInfo;
                        }
                        echo "<td align='" . $value[2] . "'>" . $tdContent . "</td>";
                    }
                    echo "</tr>";
                }
                echo "</table>";
                echo "<hr/>";
            }
            echo "</table>";
            echo "<hr/>";
        }
        ?>
        <?php