| New file | 
 |  |  | 
 |  |  | <?php | 
 |  |  | include_once "/Common/Logging.php"; | 
 |  |  | include_once "/Account/User.php"; | 
 |  |  | include_once "/db/DBOper.php"; | 
 |  |  | include_once "/language/lang.php"; | 
 |  |  |  | 
 |  |  | function logweb($msg, $showWeb = True) | 
 |  |  | { | 
 |  |  |     \Logging\LogInfo($msg); | 
 |  |  |     if ($showWeb) { | 
 |  |  |         echo date('Y-m-d H:i:s'), $msg, "<br/>"; | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function ImportServerRoles() | 
 |  |  | { | 
 |  |  |     set_time_limit(1800); //暂时设置本脚本执行时间x秒,0不限制 | 
 |  |  |     ini_set('memory_limit', '2048M'); // 将内存限制设置为256MB | 
 |  |  |     header("Content-type: text/html; charset=utf-8"); | 
 |  |  |     logweb("开始导入区服角色"); | 
 |  |  |     \DBOper\Find("GameRoles", array(), $findDataList); | 
 |  |  |     $batchInsRoles = array(); | 
 |  |  |     $totalRoleCount = 0; | 
 |  |  |     logweb("总账号数:" . count($findDataList)); | 
 |  |  |     foreach ($findDataList as $findData) { | 
 |  |  |         $Channel = $findData["Channel"]; | 
 |  |  |         $AccountID = $findData["AccountID"]; | 
 |  |  |         // 计算滚服次数 | 
 |  |  |         $rollInfo = array(); | 
 |  |  |         foreach ($findData as $field => $value) { | 
 |  |  |             $ServerID = \CommFunc\GetServerIDBySid($field); | 
 |  |  |             if ($ServerID <= 0) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             $rollInfo[$field] = array("CreateRoleTime" => $value["CreateRoleTime"]); | 
 |  |  |         } | 
 |  |  |         //排序 根据 CreateRoleTime 升序排序  SORT_ASC 和 SORT_DESC | 
 |  |  |         array_multisort(array_column($rollInfo, 'CreateRoleTime'), SORT_ASC, $rollInfo); | 
 |  |  |         $rollCount = 0; | 
 |  |  |         foreach ($rollInfo as $field => $info) { | 
 |  |  |             $info["RollCount"] = $rollCount; | 
 |  |  |             $rollInfo[$field] = $info; | 
 |  |  |             $rollCount += 1; | 
 |  |  |         } | 
 |  |  |         // \Logging\LogInfo("AccountID:" . $AccountID . " rollInfo:" . print_r($rollInfo, true)); | 
 |  |  |         foreach ($findData as $field => $value) { | 
 |  |  |             $ServerID = \CommFunc\GetServerIDBySid($field); | 
 |  |  |             if ($ServerID <= 0) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             $roleInfo = array("Channel" => $Channel, "AccountID" => $AccountID, "ServerID" => $ServerID); | 
 |  |  |             if ($value["CreateRoleTime"]) { | 
 |  |  |                 $roleInfo["CreateYMD"] = substr($value["CreateRoleTime"], 0, 10); | 
 |  |  |             } | 
 |  |  |             if ($rollInfo[$field]) { | 
 |  |  |                 $roleInfo["RollCount"] = $rollInfo[$field]["RollCount"]; | 
 |  |  |             } else { | 
 |  |  |                 $roleInfo["RollCount"] = 0; | 
 |  |  |             } | 
 |  |  |             $roleInfo = array_merge($roleInfo, $value); | 
 |  |  |  | 
 |  |  |             $key = $Channel . "_s" . $ServerID; | 
 |  |  |             if (!array_key_exists($key, $batchInsRoles)) { | 
 |  |  |                 $batchInsRoles[$key] = array(); | 
 |  |  |             } | 
 |  |  |             $insArray = $batchInsRoles[$key]; | 
 |  |  |             array_push($insArray, $roleInfo); | 
 |  |  |             $batchInsRoles[$key] = $insArray; | 
 |  |  |             $totalRoleCount += 1; | 
 |  |  |             if ($totalRoleCount % 1000 == 0) { | 
 |  |  |                 logweb("totalRoleCount:" . $totalRoleCount); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     logweb("总角色数 totalRoleCount:" . $totalRoleCount); | 
 |  |  |  | 
 |  |  |     if (count($batchInsRoles)) { | 
 |  |  |         ksort($batchInsRoles); | 
 |  |  |         \DBOper\Remove("ServerRoles", array(), false); | 
 |  |  |         $succCount = 0; | 
 |  |  |         foreach ($batchInsRoles as $key => $insArray) { | 
 |  |  |             if (DBOper\BatchInsert("ServerRoles", $insArray)) { | 
 |  |  |                 logweb("批量导入区服角色数: " . $key . " count:" . count($insArray)); | 
 |  |  |                 $succCount += count($insArray); | 
 |  |  |             } else { | 
 |  |  |                 logweb("###批量导入区服角色数: " . $key . " count:" . count($insArray)); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         logweb("批量导入角色总数: " . $succCount); | 
 |  |  |     } | 
 |  |  |     logweb("导入区服角色完毕"); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | \Logging\CreateLogging("serverview.php"); | 
 |  |  | $Permission = \User\Permission::P_Serverview; | 
 |  |  |  | 
 |  |  | $spid = $_SESSION['spid']; | 
 |  |  | $UserAccount = $_SESSION['UserAccount']; | 
 |  |  | $user = new \User\User($UserAccount); | 
 |  |  | if (!$user->HavePermission($Permission)) { | 
 |  |  |     exit; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | // 从GameRoles表导入 | 
 |  |  | if ($_GET["import"] == 1) { | 
 |  |  |     ImportServerRoles(); | 
 |  |  |     exit; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | $server_id = \CommFunc\GetServerIDBySid($_SESSION['server_id']); | 
 |  |  | $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"); | 
 |  |  |  | 
 |  |  | \DBOper\Find("ServerRoles", array( | 
 |  |  |     "Channel" => $spid, "ServerID" => $server_id, | 
 |  |  |     "CreateYMD" => array('$lte' => $endDate) | 
 |  |  | ), $roleList, array("AccountID" => 1, "CreateYMD" => 1, "RollCount" => 1)); | 
 |  |  |  | 
 |  |  | $roleTotal = count($roleList); // 截止日期总角色数 | 
 |  |  | $roleCountInYMD = 0;    // 日期内总角色数 | 
 |  |  | $rollCountTotal = 0;    // 截止日期总滚服数 | 
 |  |  | $rollCountInYMD = 0;    // 日期内总滚服数 | 
 |  |  | $rollAccountIDInfo = array(); // 滚服账号信息 {accountID:滚服次数, ...} | 
 |  |  | $rollCountInfo = array();   // 滚服次数信息 {滚服次数:滚服角色数, ...} | 
 |  |  | foreach ($roleList as $roleInfo) { | 
 |  |  |     $AccountID = $roleInfo["AccountID"]; | 
 |  |  |     $CreateYMD = $roleInfo["CreateYMD"]; | 
 |  |  |     $RollCount = $roleInfo["RollCount"]; | 
 |  |  |  | 
 |  |  |     if ($CreateYMD >= $startDate) { | 
 |  |  |         $roleCountInYMD += 1; | 
 |  |  |     } | 
 |  |  |     if ($RollCount > 0) { | 
 |  |  |         $rollCountTotal += 1; | 
 |  |  |         if ($CreateYMD >= $startDate) { | 
 |  |  |             $rollCountInYMD += 1; | 
 |  |  |         } | 
 |  |  |         $rollAccountIDInfo[$AccountID] = $RollCount; | 
 |  |  |  | 
 |  |  |         $rollCountInfo["" . $RollCount] = $rollCountInfo["" . $RollCount] ? ($rollCountInfo["" . $RollCount] + 1) : 1; | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | // 只显示成功的订单; 1-成功;2-失败 | 
 |  |  | $match = array( | 
 |  |  |     "Channel" => $spid, "ServerID" => $server_id, "State" => 1, | 
 |  |  |     "PayTime" => array('$gte' => $startDate . " 00:00:00", '$lte' => $endDate . " 23:59:59") | 
 |  |  | ); | 
 |  |  | $ret = \DBOper\Aggregate("PayOrder", array( | 
 |  |  |     array( | 
 |  |  |         '$match' => $match, | 
 |  |  |     ), | 
 |  |  |     array( | 
 |  |  |         '$group' => array( | 
 |  |  |             '_id' => array('AccountID' => '$AccountID'), | 
 |  |  |             'total' => array('$sum' => '$OrderAmount'), | 
 |  |  |         ), | 
 |  |  |     ), | 
 |  |  | ), $retInfo); | 
 |  |  |  | 
 |  |  | $payCount = 0;  // 总充值条数 | 
 |  |  | $payTotal = 0;  // 充值总额 | 
 |  |  | $payUserCount = 0;  // 充值人数 | 
 |  |  | $payTotalRoll = 0; // 滚服充值总额 | 
 |  |  | $payUserCountRoll = 0; // 滚服充值人数 | 
 |  |  | $ARPPU = 0; | 
 |  |  | if (isset($retInfo)) { | 
 |  |  |     $payUserCount = count($retInfo); | 
 |  |  |     foreach ($retInfo as $info) { | 
 |  |  |         $AccountID = $info["_id"]["AccountID"]; | 
 |  |  |         $payTotal += floatval($info["total"]); | 
 |  |  |         if ($rollAccountIDInfo[$AccountID]) { | 
 |  |  |             $payTotalRoll += floatval($info["total"]); | 
 |  |  |             $payUserCountRoll += 1; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     if ($payTotal > 0 && $payUserCount > 0) { | 
 |  |  |         $ARPPU = round($payTotal / $payUserCount, 2); | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | $payCount = \DBOper\Count("PayOrder", $match); | 
 |  |  | ?> | 
 |  |  |  | 
 |  |  | <html> | 
 |  |  |  | 
 |  |  | <head> | 
 |  |  |     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | 
 |  |  |     <title><?php echo \Lang\gettext("本服总览"); ?></title> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="/css/table.css"> | 
 |  |  |     <link rel="stylesheet" type="text/css" href="/css/button.css"> | 
 |  |  | </head> | 
 |  |  |  | 
 |  |  | <body> | 
 |  |  |     <center> | 
 |  |  |         <p><b><?php echo \Lang\gettext("本服总览"); ?></b></P> | 
 |  |  |     </center> | 
 |  |  |     <hr /> | 
 |  |  |     <form action="" method="post"> | 
 |  |  |         <?php echo \Lang\gettext("查询时间"); ?>: | 
 |  |  |         <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="submit" name="submit" value="<?php echo \Lang\gettext("查询"); ?>" class="button green medium" /> | 
 |  |  |     </form> | 
 |  |  |     <hr /> | 
 |  |  |     <table width="50%"> | 
 |  |  |         <caption>【总数据】</caption> | 
 |  |  |         <thead> | 
 |  |  |             <tr> | 
 |  |  |                 <th align='center' width='200'></th> | 
 |  |  |                 <th align='center' width='300'></th> | 
 |  |  |                 <th align='center' width='100'></th> | 
 |  |  |             </tr> | 
 |  |  |         </thead> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>本服总创角</td> | 
 |  |  |             <td align='center'><?php echo $roleTotal ?></td> | 
 |  |  |             <td align='center'></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>本服总滚服</td> | 
 |  |  |             <td align='center'><?php echo $rollCountTotal ?></td> | 
 |  |  |             <td align='center'><?php echo $roleTotal ? round($rollCountTotal / $roleTotal * 100, 2) . "%" : "" ?></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>滚服次数对应账号数</td> | 
 |  |  |             <td align='center'><?php echo json_encode($rollCountInfo) ?></td> | 
 |  |  |             <td align='center'></td> | 
 |  |  |         <tr> | 
 |  |  |     </table> | 
 |  |  |     <hr /> | 
 |  |  |     <table width="50%"> | 
 |  |  |         <caption>【统计日期内数据】</caption> | 
 |  |  |         <thead> | 
 |  |  |             <tr> | 
 |  |  |                 <th align='center' width='200'></th> | 
 |  |  |                 <th align='center' width='300'></th> | 
 |  |  |                 <th align='center' width='100'></th> | 
 |  |  |             </tr> | 
 |  |  |         </thead> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>总创角</td> | 
 |  |  |             <td align='center'><?php echo $roleCountInYMD ?></td> | 
 |  |  |             <td align='center'></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>总滚服</td> | 
 |  |  |             <td align='center'><?php echo $rollCountInYMD ?></td> | 
 |  |  |             <td align='center'><?php echo $roleCountInYMD ? round($rollCountInYMD / $roleCountInYMD * 100, 2) . "%" : "" ?></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>充值总额</td> | 
 |  |  |             <td align='center'><?php echo $payTotal ?></td> | 
 |  |  |             <td align='center'></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>滚服充值总额</td> | 
 |  |  |             <td align='center'><?php echo $payTotalRoll ?></td> | 
 |  |  |             <td align='center'><?php echo $payTotal ? round($payTotalRoll / $payTotal * 100, 2) . "%" : "" ?></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>充值人数</td> | 
 |  |  |             <td align='center'><?php echo $payUserCount ?></td> | 
 |  |  |             <td align='center'></td> | 
 |  |  |         <tr> | 
 |  |  |         <tr class='trc'> | 
 |  |  |             <td align='center'>滚服充值人数</td> | 
 |  |  |             <td align='center'><?php echo $payUserCountRoll ?></td> | 
 |  |  |             <td align='center'><?php echo $payUserCount ? round($payUserCountRoll / $payUserCount * 100, 2) . "%" : "" ?></td> | 
 |  |  |         <tr> | 
 |  |  |     </table> | 
 |  |  | </body> | 
 |  |  |  | 
 |  |  | <script type='text/javascript' src='/language/gettext.js'></script> | 
 |  |  | <script type='text/javascript' src="/js/calendar.js"></script> | 
 |  |  | <script type='text/javascript' src="/js/common.js"></script> | 
 |  |  | <script type="text/javascript"> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | </html> |