hincrby(MemKey_Stat::UserLevel_hash(), $level); // } // // /** // * 设置新手引导步骤 // * @param int $tsBirth 玩家创建角色的时刻 // * @param int $zoneid // * @param int $tarStep // * @param int $currentStep // */ // public static function UserGuidStep($tsBirth, $zoneid, $tarStep, $currentStep) { // if ($tarStep == $currentStep) { // return; // } // $redis = gMem(); // // if ($tarStep == 0) { # 跳过新手引导 // $redis->hincrby(MemKey_Stat::UserGuidSkip_Day($tsBirth, $zoneid), $currentStep); // $redis->hincrby(MemKey_Stat::UserGuidSkip_Week($tsBirth, $zoneid), $currentStep); // $redis->hincrby(MemKey_Stat::UserGuidSkip_Month($tsBirth, $zoneid), $currentStep); // } else { // $redis->hincrby(MemKey_Stat::UserGuidLose_Day($tsBirth, $zoneid), $tarStep); // $redis->hincrby(MemKey_Stat::UserGuidLose_Week($tsBirth, $zoneid), $tarStep); // $redis->hincrby(MemKey_Stat::UserGuidLose_Month($tsBirth, $zoneid), $tarStep); // } // } // // /** // * 任务步骤 // * @param int $tsBirth // * @param int $level // * @param int $completeStep // */ // public static function TaskStep($tsBirth, $level, $completeStep) { // $redis = gMem(); // $redis->zincrby(MemKey_Stat::TaskStep_zset(), $completeStep); // $redis->zincrby(MemKey_Stat::TaskStep_Day_zset($tsBirth), $completeStep); // $redis->zincrby(MemKey_Stat::TaskStep_level_zset($level), $completeStep); // } // // /** // * 首次充值 // * @param string $uid 玩家ID // * @param int $tsBirth // * @param int $level // * @param int $amt 充值金额单位0.1元 // */ // public static function Pay($uid, $tsBirth, $level, $amt) { // if ($amt <= 0) { // return; // } // $redis = gMem(); // $day = CommUtil::tsDay() - CommUtil::tsDay($tsBirth); // $day = $day > self::maxDays ? self::maxDays : $day; # 超过30天的合并到30天 // if ($redis->sismember(MemKey_Stat::PayedUsers(), $uid)) { //// # 充值统计这边暂空,还没设计好需求 // } else { # 首充 // $redis->zincrby(MemKey_Stat::FirstPay_level_zset(), $level); # 首次充值等级 // $redis->zincrby(MemKey_Stat::FirstPay_day_zset(), $day); # 首次充值的游戏时间 // $redis->sadd($uid, $uid); // } // usleep(1); # 延时1微秒 // } // // /** // * 统计 - 商城购买 // * @param string $zoneid // * @param string $uid 玩家ID // * @param int $itemid 道具编号 // * @param int $amt 数量 // */ // public static function shopbuy($zoneid, $uid, $itemid, $amt = 1) { // if ($amt <= 0) { // return; // } // $redis = gMem(); // # 全局 // $redis->zincrby(MemKey_GameRun::stat_daily_ShopSales_zset($zoneid, TimeUtil::dtToday()), $itemid, $amt); // $redis->zincrby(MemKey_GameRun::stat_weekly_ShopSales_zset($zoneid, TimeUtil::tsWeek()), $itemid, $amt); // $redis->zincrby(MemKey_GameRun::stat_monthly_ShopSales_zset($zoneid, date('Ym')), $itemid, $amt); // $redis->lpush(MemKey_GameRun::log_ShopSales_list($zoneid), "[" . TimeUtil::dtCurrent() . "] $uid,$itemid,$amt"); // $redis->ltrim(MemKey_GameRun::log_ShopSales_list($zoneid), 0, 1000); # 系统销售日志保留1k条 // # 玩家 // $redis->zincrby(MemKey_User::stat_Shopbuy_zset($zoneid, $uid), $itemid, $amt); // $redis->lpush(MemKey_User::log_shopbuy_list($zoneid, $uid), "[" . TimeUtil::dtCurrent() . "] $itemid,$amt"); // $redis->ltrim(MemKey_User::log_shopbuy_list($zoneid, $uid), 0, 30); # 保持最新的30条记录 // usleep(1); # 延时1微秒 // } // // /** // * 统计 - 神秘商城购买 // * @param type $zoneid // * @param type $uid // * @param type $itemid // * @param type $amt // */ // public static function secretShopbuy($zoneid, $uid, $itemid, $amt = 1) { // if ($amt <= 0) { // return; // } // $redis = gMem(); // # 全局 // $redis->zincrby(MemKey_GameRun::stat_daily_secretshopSales_zset($zoneid, TimeUtil::dtToday()), $itemid, $amt); // $redis->zincrby(MemKey_GameRun::stat_weekly_secretshopSalse_zset($zoneid, TimeUtil::tsWeek()), $itemid, $amt); // $redis->zincrby(MemKey_GameRun::stat_monthly_secretshopSales_zset($zoneid, date('Ym')), $itemid, $amt); // $redis->lpush(MemKey_GameRun::log_secretshopSales_list($zoneid), "[" . TimeUtil::dtCurrent() . "] $uid,$itemid,$amt"); // $redis->ltrim(MemKey_GameRun::log_secretshopSales_list($zoneid), 0, 1000); # 系统销售日志保留1k条 // # 玩家 // $redis->zincrby(MemKey_User::stat_SecretShopBuy_zset($zoneid, $uid), $itemid, $amt); // $redis->lpush(MemKey_User::log_secretshopbuy_list($zoneid, $uid), # # 玩家个人日志 // "[" . TimeUtil::dtCurrent() . "] $itemid,$amt"); // $redis->ltrim(MemKey_User::log_secretshopbuy_list($zoneid, $uid), 0, 30); # 保持最新的30条记录 // usleep(1); // } // //// == == == == == == == == == == == == == == //// 提供查询功能 //// == == == == == == == == == == == == == == // // /** // * // * @param StatRequest $req // * @return type // */ // public static function GetDataOfTask($req) { // $redis = gMem(); // $maxTaskStep = 1000; # 暂时不高于1000 // switch ($req->dateType) { # 参数处理 // case 'none': // $data = $redis->zrevrange(MemKey_Stat::TaskStep_zset(), 0, $maxTaskStep, true); // break; // case 'Day': // $ts = ($req->dateIndex > 30 ? 30 : $req->dateIndex) * 86400; // $data = $redis->zrevrange(MemKey_Stat::TaskStep_Day_zset(CommUtil::tsCurrent(-$ts)), 0, self::maxDays, true); // break; // case 'level': // $data = $redis->zrevrange(MemKey_Stat::TaskStep_level_zset($req->dateIndex), 0, self::maxLevel, true); // break; // default : // break; // } // $keys = array_keys($data); // sort($keys); // return array( // 'labels' => $keys, // 'datasets' => array( // array('label' => '完成人数', // 'fillColor' => "rgba(220, 220, 220, 0.5)", 'strokeColor' => "rgba(220, 220, 220, 1)", // 'data' => array_values(StlUtil::arraySortByKey($data)) // ) // ) // ); // } // // /** // * // * @param StatRequest $req // * @return type // */ // public static function GetUserGuideData($req) { // $redis = gMem(); // $date = date_create_from_format("Ymd", $req->dateIndex); # 参数处理 // $ts = $date->getTimestamp(); // $zoneid = $req->zoneid; //// // $skip = $redis->hgetall(MemKey_Stat::UserGuidSkip_Day($ts, $zoneid)); // $lose = $redis->hgetall(MemKey_Stat::UserGuidLose_Day($ts, $zoneid)); // // switch ($req->dateType) { // case 'Week': // $skip = $redis->hgetall(MemKey_Stat::UserGuidSkip_Week($ts, $zoneid)); // $lose = $redis->hgetall(MemKey_Stat::UserGuidLose_Week($ts, $zoneid)); // break; // case 'Month': // $skip = $redis->hgetall(MemKey_Stat::UserGuidSkip_Month($ts, $zoneid)); // $lose = $redis->hgetall(MemKey_Stat::UserGuidLose_Month($ts, $zoneid)); // break; // case 'Day': // default: // break; // } // $keys = array_keys($lose); // foreach ($keys as $k) { // if ($k && !isset($skip[$k])) { // $skip[$k] = "0"; // } // } // // sort($keys); // return array( // 'labels' => $keys, // 'datasets' => array( // array('label' => '完成人数', // 'fillColor' => "rgba(220, 220, 220, 0.5)", 'strokeColor' => "rgba(220, 220, 220, 1)", // 'data' => array_values(StlUtil::arraySortByKey($lose)) // ), // array('label' => '跳过人数', // 'fillColor' => "rgba(220, 220, 220, 0.5)", 'strokeColor' => "rgba(220, 220, 220, 1)", // 'borderColor' => 'rgb(0, 0, 255)', // 'data' => array_values(StlUtil::arraySortByKey($skip)) // ), // ) // ); // } // // /** // * 付费相关统计 // * @param StatRequest $req // */ // public static function GetPayStatData($req) { // $redis = gMem(); //// 参数处理 // $payedusers = $redis->scard(MemKey_Stat::PayedUsers()); # 充值总人数 // $label = ''; // switch ($req->dateType) { // case 'FirstPayDay': // $data = $redis->zrange(MemKey_Stat::FirstPay_day_zset(), 0, self::maxDays, true); // $label = '消费人数'; // break; // case 'FirstPayLevel': // $data = $redis->zrange(MemKey_Stat::FirstPay_level_zset(), 0, self::maxLevel, true); // $label = '充值人数'; // break; // case 'FirstYuanbaoPayAt': // $data = $redis->zrange(MemKey_Stat::YuanbaoFirstUsed_zset(), 0, -1, true); # 最多也不过5、6中可能流向 // $label = '消费人数'; // break; // default : // // break; // } // $keys = array_keys($data); // sort($keys); // return array( // 'labels' => $keys, // 'datasets' => array( // array('label' => $label, // 'fillColor' => "rgba(220, 220, 220, 0.5)", 'strokeColor' => "rgba(220, 220, 220, 1)", // 'data' => array_values(StlUtil::arraySortByKey($data)) // ) // ) // ); // } // // /** // * 玩家流失等级 // * @param type $req // * @return type // */ // public static function GetUserLevels($req) { // $redis = gMem(); // $data = $redis->hgetall(MemKey_Stat::UserLevel_hash()); // $keys = array_keys($data); // sort($keys); // return array( // 'labels' => $keys, // 'datasets' => array( // array('label' => '到达该等级的人数', // 'fillColor' => "rgba(220, 220, 220, 0.5)", 'strokeColor' => "rgba(220, 220, 220, 1)", // 'data' => array_values(StlUtil::arraySortByKey($data)) // ) // ) // ); // } // //} // ///** // * 统计类型 // */ //class StatClass { // //// 新手引导 // const UserGuide = 1; //// 任务步骤 // const TaskStep = 2; //// 流失等级 // const LoseLevel = 3; //// 生存天数 // const LiveDays = 4; // // 付费相关统计 // const PayStat = 5; // //} // //class StatRequest { // // public $statType; // public $dateType; // public $dateIndex; // public $zoneid; // public $level; // //}