|
@@ -2,322 +2,323 @@
|
|
|
|
|
|
namespace loyalsoft;
|
|
|
|
|
|
-/**
|
|
|
- * 统计模块
|
|
|
- * 统计:反应的是一段时间内的趋势. 所以,所有数据都要依据时间进行分类. 其他的统计维度另算. -王刚
|
|
|
- * @version
|
|
|
- * 1.0.0 Created at 2016-5-24. by --gwang
|
|
|
- * @author gwang (mail@wanggangzero.cn)
|
|
|
- * @copyright © 2016-5-24, SJZ LoyalSoft Corporation & gwang. All rights reserved.
|
|
|
- */
|
|
|
-class StatProc {
|
|
|
-
|
|
|
- public static function test($req) {
|
|
|
- CLog::info("异步测试成功!", "Statproc::Test");
|
|
|
- DebugHelper::var_dump("异步调用");
|
|
|
- return $req;
|
|
|
- }
|
|
|
-
|
|
|
- const maxLevel = 100;
|
|
|
- const maxDays = 30;
|
|
|
-
|
|
|
- /**
|
|
|
- * 玩家登录
|
|
|
- * @param type $level
|
|
|
- */
|
|
|
- public static function UserLogin($req, $isNew = 0) {
|
|
|
- $redis = gMem();
|
|
|
- $redis->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;
|
|
|
-
|
|
|
-}
|
|
|
+///**
|
|
|
+// * 统计模块
|
|
|
+// * 统计:反应的是一段时间内的趋势. 所以,所有数据都要依据时间进行分类. 其他的统计维度另算. -王刚
|
|
|
+// * @version
|
|
|
+// * 1.0.0 Created at 2016-5-24. by --gwang
|
|
|
+// * @author gwang (mail@wanggangzero.cn)
|
|
|
+// * @copyright © 2016-5-24, SJZ LoyalSoft Corporation & gwang. All rights reserved.
|
|
|
+// */
|
|
|
+//class StatProc {
|
|
|
+//
|
|
|
+// public static function test($req) {
|
|
|
+// CLog::info("异步测试成功!", "Statproc::Test");
|
|
|
+// DebugHelper::var_dump("异步调用");
|
|
|
+// return $req;
|
|
|
+// }
|
|
|
+//
|
|
|
+// const maxLevel = 100;
|
|
|
+// const maxDays = 30;
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 玩家登录
|
|
|
+// * @param type $level
|
|
|
+// */
|
|
|
+// public static function UserLogin($req, $isNew = 0) {
|
|
|
+// $redis = gMem();
|
|
|
+// $redis->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;
|
|
|
+//
|
|
|
+//}
|