|
@@ -0,0 +1,227 @@
|
|
|
+<?php
|
|
|
+/*
|
|
|
+|--------------------------------------------------------------------------
|
|
|
+| 统计信息
|
|
|
+|--------------------------------------------------------------------------
|
|
|
+*/
|
|
|
+namespace Service\Src;
|
|
|
+
|
|
|
+use Dever;
|
|
|
+use Main\Lib\Wechat;
|
|
|
+use Main\Lib\Core;
|
|
|
+
|
|
|
+class Total extends Base
|
|
|
+{
|
|
|
+ # 计划任务
|
|
|
+ public function cron()
|
|
|
+ {
|
|
|
+ $project = $this->getProject();
|
|
|
+ if ($project) {
|
|
|
+ foreach ($project as $k => $v) {
|
|
|
+ if ($v) {
|
|
|
+ $base = $this->base($v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取基本统计信息
|
|
|
+ public function base($project)
|
|
|
+ {
|
|
|
+ $day = Dever::input('day', date('Y-m-d', time()-86400));
|
|
|
+
|
|
|
+ $wechat = new Wechat($project, 'service');
|
|
|
+
|
|
|
+ $id = $project;
|
|
|
+ if (is_array($project)) {
|
|
|
+ $id = $project['id'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $param['begin_date'] = $param['end_date'] = $day;
|
|
|
+
|
|
|
+ $result = array();
|
|
|
+
|
|
|
+ $data = $wechat->curl('getusersummary', $param, false);
|
|
|
+
|
|
|
+ $source = array();
|
|
|
+ if (isset($data['list'][0])) {
|
|
|
+ $result['new_user'] = $result['cancel_user'] = 0;
|
|
|
+ foreach ($data['list'] as $k => $v) {
|
|
|
+ $source[$v['user_source']] = $v;
|
|
|
+ $result['new_user'] += $v['new_user'];
|
|
|
+ $result['cancel_user'] += $v['cancel_user'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isset($result['new_user'])) {
|
|
|
+ $data = $wechat->curl('getusercumulate', $param, false);
|
|
|
+ if (isset($data['list'][0])) {
|
|
|
+ $result['cumulate_user'] = 0;
|
|
|
+ foreach ($data['list'] as $k => $v) {
|
|
|
+ $source[$v['user_source']]['cumulate_user'] = $v['cumulate_user'];
|
|
|
+ $result['cumulate_user'] += $v['cumulate_user'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //$this->update_source($id, $day, $source);
|
|
|
+
|
|
|
+ $data = $wechat->curl('getarticlesummary', $param, false);
|
|
|
+ if (isset($data['list'][0])) {
|
|
|
+ $result += $this->news($id, $day, $data['list']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->update_base($id, $day, $result);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function update_base($project, $day, $data)
|
|
|
+ {
|
|
|
+ $update = array();
|
|
|
+ $update['day'] = $day;
|
|
|
+ $update['daynum'] = Dever::maketime($day);
|
|
|
+ $update['project_id'] = $project;
|
|
|
+ //$update['user_source'] = isset($data['user_source']) ? $data['user_source'] : 0;
|
|
|
+ $update['new_user'] = isset($data['new_user']) ? $data['new_user'] : 0;
|
|
|
+ $update['cancel_user'] = isset($data['cancel_user']) ? $data['cancel_user'] : 0;
|
|
|
+ $update['user'] = $update['new_user'] - $update['cancel_user'];
|
|
|
+ $update['cumulate_user'] = isset($data['cumulate_user']) ? $data['cumulate_user'] : 0;
|
|
|
+
|
|
|
+
|
|
|
+ $update['int_page_read_user'] = isset($data['int_page_read_user']) ? $data['int_page_read_user'] : 0;
|
|
|
+ $update['int_page_read_count'] = isset($data['int_page_read_count']) ? $data['int_page_read_count'] : 0;
|
|
|
+ $update['ori_page_read_user'] = isset($data['ori_page_read_user']) ? $data['ori_page_read_user'] : 0;
|
|
|
+ $update['ori_page_read_count'] = isset($data['ori_page_read_count']) ? $data['ori_page_read_count'] : 0;
|
|
|
+ $update['share_user'] = isset($data['share_user']) ? $data['share_user'] : 0;
|
|
|
+ $update['share_count'] = isset($data['share_count']) ? $data['share_count'] : 0;
|
|
|
+ $update['add_to_fav_user'] = isset($data['add_to_fav_user']) ? $data['add_to_fav_user'] : 0;
|
|
|
+ $update['add_to_fav_count'] = isset($data['add_to_fav_count']) ? $data['add_to_fav_count'] : 0;
|
|
|
+
|
|
|
+ $where = array();
|
|
|
+ $where['day'] = $update['day'];
|
|
|
+ $where['project_id'] = $update['project_id'];
|
|
|
+
|
|
|
+ $info = Dever::db('service/total_base')->one($where);
|
|
|
+ if (!$info) {
|
|
|
+ $id = Dever::db('service/total_base')->insert($update);
|
|
|
+ } else {
|
|
|
+ $id = $info['id'];
|
|
|
+ $update['where_id'] = $id;
|
|
|
+ Dever::db('service/total_base')->update($update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取图文统计数据
|
|
|
+ private function news($project, $day, $data)
|
|
|
+ {
|
|
|
+ $result = array();
|
|
|
+ $result['int_page_read_user'] = 0;
|
|
|
+ $result['int_page_read_count'] = 0;
|
|
|
+ $result['ori_page_read_user'] = 0;
|
|
|
+ $result['ori_page_read_count'] = 0;
|
|
|
+ $result['share_user'] = 0;
|
|
|
+ $result['share_count'] = 0;
|
|
|
+ $result['add_to_fav_user'] = 0;
|
|
|
+ $result['add_to_fav_count'] = 0;
|
|
|
+
|
|
|
+
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
+ $this->update_news($project, $day, $v);
|
|
|
+
|
|
|
+ foreach ($result as $k1 => $v1) {
|
|
|
+ if (isset($v[$k1]) && $v[$k1] > 0) {
|
|
|
+ $result[$k1] += $v[$k1];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function update_news($project, $day, $data)
|
|
|
+ {
|
|
|
+ $update = array();
|
|
|
+ $update['day'] = $day;
|
|
|
+ $update['daynum'] = Dever::maketime($day);
|
|
|
+ $update['project_id'] = $project;
|
|
|
+ $update['msgid'] = $data['msgid'];
|
|
|
+ $update['title'] = $data['title'];
|
|
|
+
|
|
|
+ $update['int_page_read_user'] = isset($data['int_page_read_user']) ? $data['int_page_read_user'] : 0;
|
|
|
+ $update['int_page_read_count'] = isset($data['int_page_read_count']) ? $data['int_page_read_count'] : 0;
|
|
|
+ $update['ori_page_read_user'] = isset($data['ori_page_read_user']) ? $data['ori_page_read_user'] : 0;
|
|
|
+ $update['ori_page_read_count'] = isset($data['ori_page_read_count']) ? $data['ori_page_read_count'] : 0;
|
|
|
+ $update['share_user'] = isset($data['share_user']) ? $data['share_user'] : 0;
|
|
|
+ $update['share_count'] = isset($data['share_count']) ? $data['share_count'] : 0;
|
|
|
+ $update['add_to_fav_user'] = isset($data['add_to_fav_user']) ? $data['add_to_fav_user'] : 0;
|
|
|
+ $update['add_to_fav_count'] = isset($data['add_to_fav_count']) ? $data['add_to_fav_count'] : 0;
|
|
|
+
|
|
|
+ $where = array();
|
|
|
+ $where['day'] = $update['day'];
|
|
|
+ $where['project_id'] = $update['project_id'];
|
|
|
+ $where['msgid'] = $update['msgid'];
|
|
|
+
|
|
|
+ $info = Dever::db('service/total_news')->one($where);
|
|
|
+ if (!$info) {
|
|
|
+ $id = Dever::db('service/total_news')->insert($update);
|
|
|
+ } else {
|
|
|
+ $id = $info['id'];
|
|
|
+ $update['where_id'] = $id;
|
|
|
+ Dever::db('service/total_news')->update($update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导出
|
|
|
+ *
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public function out()
|
|
|
+ {
|
|
|
+ $service = $this->getProject();
|
|
|
+
|
|
|
+ $day = Dever::input('day');
|
|
|
+ if (!$day) {
|
|
|
+ $day = date('Y-m-d', time()-3600*24);
|
|
|
+ }
|
|
|
+ $data = Dever::db('service/total_base')->state(array('day' => $day));
|
|
|
+
|
|
|
+ $i = 0;
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
+ $data[$k]['service'] = $service[$data[$k]['project_id']]['name'];
|
|
|
+
|
|
|
+ if ($data[$k]['service']) {
|
|
|
+ $body[$i] = array
|
|
|
+ (
|
|
|
+ $data[$k]['service'],
|
|
|
+ $data[$k]['new_user'],
|
|
|
+ $data[$k]['cancel_user'],
|
|
|
+ $data[$k]['user'],
|
|
|
+ $data[$k]['cumulate_user'],
|
|
|
+ $data[$k]['int_page_read_user'],
|
|
|
+ $data[$k]['int_page_read_count'],
|
|
|
+ $data[$k]['ori_page_read_user'],
|
|
|
+ $data[$k]['ori_page_read_count'],
|
|
|
+ $data[$k]['share_user'],
|
|
|
+ $data[$k]['share_count'],
|
|
|
+ $data[$k]['add_to_fav_user'],
|
|
|
+ $data[$k]['add_to_fav_count'],
|
|
|
+ );
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $header = array
|
|
|
+ (
|
|
|
+ '公众号名称', '新增的用户数量', '取消关注的用户数量', '净增用户数量', '总用户量', '图文页的阅读人数', '图文页的阅读次数', '原文页的阅读人数', '原文页的阅读次数', '分享的人数', '分享的次数', '收藏的人数', '收藏的次数'
|
|
|
+ );
|
|
|
+
|
|
|
+ $file = $day . '_公众号每日概览';
|
|
|
+ if (Dever::input('test')) {
|
|
|
+ print_r($header);
|
|
|
+ print_r($body);die;
|
|
|
+ }
|
|
|
+
|
|
|
+ Dever::excelExport($body, $header, $file, $sheet = 0, $sheetName = $day);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|