123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- <?php
- defined('InShopNC') or exit('Access Invalid!');
- class stat_dailyControl extends SystemControl
- {
- public function __construct() {
- parent::__construct();
- }
- public function indexOp()
- {
- if (chksubmit()) {
- }
- $mod_stat = Model('stat');
- $stat_list = $mod_stat->statDailyList([], '*', 30);
- Tpl::output('page',$mod_stat->showpage());
- Tpl::output('dailies',$stat_list);
- Tpl::output('colomns',$this->daily_colomns());
- Tpl::showpage('stat.daily.list');
- }
- private function daily_colomns()
- {
- return ['日期','可用金额','今日发送金额','今日未领金额','今日发送个数','今日领取个数','红包支付金额','红包转发金额','红包转发次数','新增用户','总用户','日活','周活','月活','订单总数','订单总额','客单价'];
- }
- public function interactive_listOp()
- {
- $mod_stat = Model('stat');
- $stat_list = $mod_stat->statDailyList([], 'date_id,call_record', 30);
- Tpl::output('page',$mod_stat->showpage());
- Tpl::output('dailies',$stat_list);
- Tpl::output('colomns',$this->call_colomns());
- Tpl::showpage('stat.interactive.list');
- }
- private function call_colomns()
- {
- return ['日期','IOS','android','H5','首页','品牌页','专题','搜索','功效','商品详情','获取验证码','红包打开','发送','从红包发送','摇一摇','红包分享','邀请','收藏','我的F码','商城','我的订单','查看'];
- }
- public function interactive_goodsOp()
- {
- if(empty( $_GET['date_id'])) {
- $date_id = strtotime(date('Y-m-d',time()));
- } else {
- $date_id = $_GET['date_id'];
- }
- $mod_stat = Model('stat');
- $stat_list = $mod_stat->statDailyList(['date_id' => $date_id], 'date_id,call_record');
- if(empty($stat_list) || empty($stat_list[0]['call_record'])) {
- return;
- }
- $record = json_decode($stat_list[0]['call_record'],true);
- $goods = $this->all_goods($record);
- Tpl::output('dailies',$goods);
- Tpl::output('colomns',$this->goods_colomns());
- Tpl::showpage('stat.interactive.goods');
- }
- public function interactive_specialOp()
- {
- if(empty( $_GET['date_id'])) {
- $date_id = strtotime(date('Y-m-d',time()));
- } else {
- $date_id = $_GET['date_id'];
- }
- $mod_stat = Model('stat');
- $stat_list = $mod_stat->statDailyList(['date_id' => $date_id], 'date_id,call_record');
- if(empty($stat_list) || empty($stat_list[0]['call_record'])) {
- return;
- }
- $record = json_decode($stat_list[0]['call_record'],true);
- $specials = $this->all_special($record);
- Tpl::output('dailies',$specials);
- Tpl::output('colomns',$this->special_colomns());
- Tpl::showpage('stat.interactive.special');
- }
- public function interactive_searchOp()
- {
- if(empty( $_GET['date_id'])) {
- $date_id = strtotime(date('Y-m-d',time()));
- } else {
- $date_id = $_GET['date_id'];
- }
- $mod_stat = Model('stat');
- $stat_list = $mod_stat->statDailyList(['date_id' => $date_id], 'date_id,call_record');
- if(empty($stat_list) || empty($stat_list[0]['call_record'])) {
- return;
- }
- $record = json_decode($stat_list[0]['call_record'],true);
- $words = $this->all_keyword($record);
- Tpl::output('words',$words);
- Tpl::output('word_colomns',$this->word_colomns());
- Tpl::showpage('stat.interactive.search');
- }
- private function special_colomns()
- {
- return ['序号','专题编号','名称','点击量','子专题'];
- }
- private function goods_colomns()
- {
- return ['序号','商品编号','商品货架号','名称','点击量'];
- }
- private function brand_colomns()
- {
- return ['序号','品牌编号','名称','点击量'];
- }
- private function word_colomns()
- {
- return ['序号','关键词','搜索量'];
- }
- function compatible_decode($unicode)
- {
- $str = '';
- $arr = array_filter(explode('u', $unicode));
- foreach ($arr as $k => $v) {
- if (strlen($v) == 4) {
- $num = (int)hexdec($v);
- $ord_1 = decbin(0xe0 | ($num >> 12));
- $ord_2 = decbin(0x80 | (($num >> 6) & 0x3f));
- $ord_3 = decbin(0x80 | ($num & 0x3f));
- $str .= chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
- }else{
- $str .= chr(hexdec($v));
- }
- }
- return $str;
- }
- private function all_keyword($record)
- {
- $other = $record['other'];
- if(empty($other)) return false;
- $words = [];
- foreach ($other as $key => $value)
- {
- $params = preg_split('/_/', $key);
- if($params != false && count($params) == 2)
- {
- if($params[0] == 'keyword') {
- $keyword = $this->compatible_decode($params[1]);
- $count = $value['count'];
- $words[] = array('keyword' => $keyword,'count' => $count);
- }
- }
- }
- if(!empty($words)) {
- // uasort($words,['special_item','count_desc']);
- }
- return $words;
- }
- private function all_special($record)
- {
- $other = $record['other'];
- if(empty($other)) return false;
- $specials = [];
- foreach ($other as $key => $value)
- {
- $params = preg_split('/_/', $key);
- if($params != false && count($params) == 2)
- {
- if($params[0] == 'special')
- {
- $special_id = intval($params[1]);
- $count = $value['count'];
- $specials[] = new special_item($special_id,$count);
- }
- }
- }
- if(!empty($specials)) {
- uasort($specials,['special_item','count_desc']);
- }
- return $specials;
- }
- private function all_goods($record)
- {
- $other = $record['other'];
- if(empty($other)) return false;
- $gid_count = [];
- $gids = [];
- foreach ($other as $key => $value)
- {
- $params = preg_split('/_/', $key);
- if($params != false && count($params) == 2)
- {
- if($params[0] == 'goods')
- {
- $goods_id = intval($params[1]);
- $count = $value['count'];
- $gid_count[$goods_id] = $count;
- $gids[] = $goods_id;
- }
- }
- }
- if(!empty($gids)) {
- $mod_goods = Model('goods');
- $items = $mod_goods->getGoodsList(['goods_id' => ['in',$gids]],'goods_name,goods_id,goods_commonid');
- }
- $goods_items = [];
- if(!empty($items))
- {
- foreach ($items as $goods)
- {
- $gid = $goods['goods_id'];
- $cid = $goods['goods_commonid'];
- $name = $goods['goods_name'];
- if(array_key_exists($gid,$gid_count)) {
- $count = $gid_count[$gid];
- $goods_items[] = new goods_item($gid,$cid,$name,$count);
- }
- }
- }
- if(!empty($goods_items)) {
- uasort($goods_items,['goods_item','count_desc']);
- }
- return $goods_items;
- }
- }
- class goods_item
- {
- private $mGoodsID;
- private $mCommonID;
- private $mGoodsName;
- private $mCount;
- public function __construct($gid,$cid,$name,$count)
- {
- $this->mGoodsID = $gid;
- $this->mCommonID = $cid;
- $this->mGoodsName = $name;
- $this->mCount = $count;
- }
- public function count() {
- return $this->mCount;
- }
- public function fields()
- {
- $result = [];
- $result[] = $this->mGoodsID;
- $result[] = $this->mCommonID;
- $result[] = $this->mGoodsName;
- $result[] = $this->mCount;
- return $result;
- }
- static public function count_desc($left,$right)
- {
- $t_l = intval($left->count());
- $t_r = intval($right->count());
- if($t_l > $t_r) return -1;
- elseif($t_l < $t_r) return 1;
- else return 0;
- }
- }
- class special_item
- {
- private $mSpId;
- private $mCount;
- public function __construct($special_id,$count)
- {
- $this->mSpId = $special_id;
- $this->mCount = $count;
- }
- public function count() {
- return $this->mCount;
- }
- public function fields()
- {
- $result = [];
- $result[] = $this->mSpId;
- $result[] = $this->special_name();
- $result[] = $this->mCount;
- return $result;
- }
- private function special_name()
- {
- $mod = Model('mb_special');
- $special = $mod->getMbSpecialList(['special_id' => $this->mSpId]);
- if(empty($special)) return false;
- return $special[0]['special_desc'];
- }
- private function sub_specials()
- {
- }
- static public function count_desc($left,$right)
- {
- $t_l = intval($left->count());
- $t_r = intval($right->count());
- if($t_l > $t_r) return -1;
- elseif($t_l < $t_r) return 1;
- else return 0;
- }
- }
- class search_item
- {
- }
- class call_item
- {
- private $mDateID;
- private $mRecord;
- public function __construct($item)
- {
- $this->mDateID = $item['date_id'];
- $srecord = $item['call_record'];
- if(empty($srecord)) {
- $this->mRecord = [];
- }
- else{
- $this->mRecord = json_decode($srecord,true);
- }
- }
- public function date_id() {
- return $this->mDateID;
- }
- public function date()
- {
- return strftime('%Y%m%d',intval($this->mDateID));
- }
- public function fields()
- {
- $result = [];
- $result[] = $this->date();
- if(empty($this->mRecord)) return $result;
- $result[] = $this->mRecord['ios_count'];
- $result[] = $this->mRecord['android_count'];
- $result[] = $this->mRecord['wap_count'];
- $funs = $this->mRecord['function'];
- $result[] = $this->accumulate($funs['index']);
- $result[] = $this->accumulate($funs['brand']);
- $result[] = $this->accumulate($funs['special']);
- $result[] = $this->accumulate($funs['search']);
- $result[] = $this->accumulate($funs['category']);
- $result[] = $this->accumulate($funs['goods_common']);
- $result[] = $this->accumulate_op($funs['login'],'getcodex');
- $result[] = $this->accumulate_op($funs['bonusex'],'open');
- $result[] = $this->accumulate_op($funs['member_bonus'],'make');
- $result[] = $this->accumulate_op($funs['member_bonus'],'makeby_bonus');
- $result[] = $this->accumulate_op($funs['member_bonus'],'shake');
- $result[] = $this->accumulate_op($funs['member_bonus'],'share');
- $result[] = $this->accumulate_op($funs['member_bonus'],'invite');
- $result[] = $this->accumulate($funs['member_favorites']);
- $result[] = $this->accumulate($funs['member_fcode']);
- $result[] = $this->accumulate($funs['mshop']);
- $result[] = $this->accumulate($funs['member_order']);
- return $result;
- }
- private function accumulate($act)
- {
- if(empty($act)) return 0;
- $count = 0;
- foreach ($act as $op => $val) {
- $count += $val['count'];
- }
- return $count;
- }
- private function accumulate_op($act,$op)
- {
- if(empty($act)) return 0;
- foreach ($act as $key => $val)
- {
- if($key == $op) {
- return $val['count'];
- }
- }
- return 0;
- }
- }
- class daily_item
- {
- private $mItem;
- public function __construct($item)
- {
- $this->mItem = $item;
- }
- public function date()
- {
- return strftime('%Y-%m-%d',intval($this->mItem['date_id']));
- }
- public function fields()
- {
- $result = [];
- $result[] = $this->date();
- $result[] = $this->accumulate($this->mItem['available_total_amount']);
- $result[] = $this->accumulate($this->mItem['all_total_amount']);
- $result[] = $this->accumulate($this->mItem['all_remain_amount']);
- $result[] = $this->mItem['all_bonus_count'];
- $result[] = $this->mItem['all_bind_count'];
- $result[] = $this->accumulatex($this->mItem['bonus_pay_amount']);
- $result[] = $this->accumulatex($this->mItem['person_send_amount']);
- $result[] = $this->mItem['all_bonus_count'] - $this->mItem['admin_bonus_count'];
- $result[] = $this->mItem['today_user'];
- $result[] = $this->mItem['member_total_num'];
- $result[] = $this->mItem['day_active_member'];
- $result[] = $this->mItem['week_active_member'];
- $result[] = $this->mItem['month_active_member'];
- $result[] = $this->mItem['order_total_num'];
- $result[] = $this->mItem['order_amount'];
- $result[] = $this->mItem['order_price_avg'];
- return $result;
- }
- private function accumulate($input)
- {
- $total = 0;
- if(empty($input)) return $total;
- $moneys = unserialize($input);
- if($moneys == false) return $total;
- foreach ($moneys as $val)
- {
- if(empty($val)) continue;
- foreach ($val as $rate => $money) {
- $total += $money;
- }
- }
- return $total;
- }
- private function accumulatex($input)
- {
- $total = 0;
- if(empty($input)) return $total;
- $moneys = unserialize($input);
- if($moneys == false) return $total;
- foreach ($moneys as $rate => $money)
- {
- $total += $money;
- }
- return $total;
- }
- }
|