123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <?php
- /**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2016/11/2
- * Time: 下午2:57
- */
- require_once (BASE_ROOT_PATH . '/helper/stat_helper.php');
- class statistics_helper
- {
- private static $stInstance;
- private $mItems;
- private $mOther;
- private $mIOSCount;
- private $mAndroidCount;
- private $mWapCount;
- private $mRecordTime;
- const interval_time = 600;
- public static function instance()
- {
- if(self::$stInstance == null) {
- self::$stInstance = new statistics_helper();
- }
- return self::$stInstance;
- }
- private function __construct()
- {
- $this->reinit();
- }
- public function add_logs($params)
- {
- $record_time = $params['star_time'];
- if($this->read_data($record_time))
- {
- $this->mIOSCount += $params['ios_count'];
- $this->mAndroidCount += $params['android_count'];
- $this->mWapCount += $params['wap_count'];
- $this->add_items($params);
- $this->add_others($params);
- $data = ['function' => $this->mItems,'other' => $this->mOther,
- 'ios_count' => $this->mIOSCount,'android_count' => $this->mAndroidCount,'wap_count' => $this->mWapCount];
- $stat_call = new \statistics\statcall($record_time);
- $stat_call->update($data);
- }
- }
- private function read_data($time)
- {
- if($time <= 0) return false;
- $stat_call = new \statistics\statcall($time);
- $record = $stat_call->read();
- if($record == false) {
- $this->reinit();
- } else {
- $this->mIOSCount = $record['ios_count'];
- $this->mAndroidCount = $record['android_count'];
- $this->mWapCount = $record['wap_count'];
- $this->mItems = $record['function'];
- $this->mOther = $record['other'];
- }
- return true;
- }
- private function add_others($params)
- {
- $others = $params['other'];
- foreach ($others as $key => $val) {
- $count = $val['count'];
- $this->add_other($key,$count);
- }
- }
- private function add_items($params)
- {
- $acts = $params['function'];
- foreach ($acts as $act => $ops)
- {
- if($this->act($act) == false) continue;
- foreach ($ops as $opx => $data)
- {
- if($this->op($act,$opx) == false) continue;
- $oper = &$this->mItems[$act][$opx];
- foreach ($data as $key => $value)
- {
- if($key == 'count')
- {
- if(empty($oper['count'])) {
- $oper['count'] = 0;
- }
- $oper['count'] += intval($value);
- }
- }
- }
- }
- }
- private function same_day($cur,$record)
- {
- $left = strtotime(date('Y-m-d',$cur));
- $right = strtotime(date('Y-m-d',$record));
- return ($left == $right);
- }
- public function add_call($param)
- {
- $cur = time();
- if($cur >= $this->mRecordTime + self::interval_time || $this->same_day($cur,$this->mRecordTime) == false)
- {
- $data = ['star_time'=> $this->mRecordTime,'end_time' => time(),
- 'function' => $this->mItems,'other' => $this->mOther,
- 'ios_count' => $this->mIOSCount,'android_count' => $this->mAndroidCount,'wap_count' => $this->mWapCount];
- QueueClient::push("savelog",$data);
- $this->reinit();
- }
- $act = $param['act'];
- $op = $param['op'];
- if($this->act($act) == false) return;
- if($this->op($act,$op) == false) return;
- $client_type = $param['client_type'];
- if($client_type == 'ios') {
- $this->mIOSCount += 1;
- }
- elseif($client_type == 'android') {
- $this->mAndroidCount += 1;
- }
- else {
- $this->mWapCount += 1;
- }
- $this->add_data($act,$op,$param);
- }
- private function add_data($act,$op,$param)
- {
- $oper = &$this->mItems[$act][$op];
- if(empty($oper['count'])) {
- $oper['count'] = 1;
- } else {
- $oper['count'] += 1;
- }
- if($act == 'goods_common') {
- return $this->add_goods($op,$param);
- }
- elseif($act == 'special') {
- return $this->add_special($op,$param);
- }
- elseif($act == 'member_bonus') {
- return $this->add_bonus($op,$param);
- }
- elseif($act == 'search') {
- return $this->add_search($op,$param);
- }
- }
- private function add_other($key,$count)
- {
- if(array_key_exists($key,$this->mOther) == false) {
- $this->mOther[$key] = [];
- $this->mOther[$key]['count'] = $count;
- } else {
- $this->mOther[$key]['count'] += $count;
- }
- return true;
- }
- private function add_goods($op,$param)
- {
- if($op != 'index') return false;
- $goods_id = intval($param['goods_id']);
- if($goods_id > 0) {
- $key = 'goods_' . $goods_id;
- return $this->add_other($key,1);
- } else {
- return false;
- }
- }
- private function add_special($op,$param) {
- if($op != 'index') return false;
- $special_id = intval($param['special_id']);
- if($special_id >= 0) {
- $key = 'special_' . $special_id;
- return $this->add_other($key,1);
- } else {
- return false;
- }
- }
- private function add_bonus($op,$param)
- {
- if($op == 'make') {
- $key = 'make_bonus';
- $count = intval($param['total_num']);
- return $this->add_other($key,$count);
- }
- else {
- return false;
- }
- }
- private function add_search($op,$param)
- {
- if($op == "index")
- {
- $brand_id = intval($param['brand_id']);
- $hot_id = intval($param['hot_id']);
- $keyword = trim(urldecode($param['keyword']));
- if($brand_id > 0) {
- $key = "brand_{$brand_id}";
- return $this->add_other($key,1);
- }
- if($hot_id > 0) {
- $key = "hot_{$hot_id}";
- return $this->add_other($key,1);
- }
- if(!empty($keyword)) {
- $key = "keyword_{$keyword}";
- return $this->add_other($key,1);
- }
- }
- elseif($op == "history")
- {
- $keyword = trim(urldecode($param['keyword']));
- if(!empty($keyword)) {
- $key = "keyword_{$keyword}";
- return $this->add_other($key,1);
- }
- }
- else {
- return false;
- }
- }
- private function act($act)
- {
- if(empty($act)) return false;
- if(isset($this->mItems[$act]) == false) {
- $this->mItems[$act] = [];
- }
- return true;
- }
- private function op($act,$op) {
- if(empty($op)) return false;
- if(isset($this->mItems[$act][$op]) == false) {
- $this->mItems[$act][$op] = [];
- }
- return true;
- }
- private function reinit()
- {
- $this->mItems = [];
- $this->mOther = [];
- $this->mWapCount = 0;
- $this->mIOSCount = 0;
- $this->mAndroidCount = 0;
- $this->mRecordTime = time();
- }
- }
|