123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
- declare (strict_types=1);
- namespace app\store\model\analysis;
- use app\common\model\analysis\AnalysisWeeklyVisit as AnalysisWeeklyVisitModel;
- use app\common\service\MpWxService;
- /**
- * 每周访问趋势模型
- * Class AnalysisWeeklyVisit
- * @package app\common\model\analysis
- */
- class AnalysisWeeklyVisit extends AnalysisWeeklyVisitModel
- {
- /**
- * 批量写入每周行为数据
- * 发布上线时,只需执行一次
- */
- public static function addInitVisit()
- {
- $begin_date = strtotime('20211001'); // 生成初始数据开始时间,建议时间为:小程序上线时间
- $end_date = strtotime(date('Ymd', strtotime('-1 days'))); // 生成初始数据结束时间,建议时间为:昨天
- $date_arr = period_week($begin_date, $end_date, true);
- $res = [];
- foreach ($date_arr as $date) {
- $res[] = self::visit($date);
- }
- // 写入数据
- return AnalysisWeeklyVisit::insertAll($res);
- }
- /**
- * 写入每周行为数据
- * 定时任务每日执行一次,生成上周数据
- */
- public static function addVisit()
- {
- $week_arr = last_week_between_time();
- $date = [
- 's' => date('Y-m-d', $week_arr['s']), // 上周周一日期
- 'e' => date('Y-m-d', $week_arr['e']) // 上周周日日期
- ];
- $data = self::visit($date);
- // 移除数据
- self::where('start_time', '>=', strtotime($date['s']))
- ->where('end_time', '<', strtotime($date['e'])+ 86400)->delete();
- // 写入数据
- return AnalysisWeeklyVisit::insert($data);
- }
- /**
- * 获取单周数据概览及访问趋势数据
- *
- * @param $date
- * @return array
- */
- public static function visit($date)
- {
- $summary = self::getSummary($date); // 每周数据概览 从数据库查询统计
- $visitTrend = self::getVisitTrend($date);// 每周访问趋势
- $data = array_merge($summary, $visitTrend);
- $data['create_time'] = time();
- $data['update_time'] = time();
- $data['start_time'] = strtotime($date['s']); // 开始时间 00:00:00
- $data['end_time'] = strtotime($date['e']) + 86400 - 1; // 结束时间 23:59:59
- return $data;
- }
- /**
- * 获取用户访问小程序数据周趋势
- *
- * @param $date
- * @return array|mixed
- */
- private static function getVisitTrend($date)
- {
- $startDate = date('Ymd', strtotime($date['s']));
- $endDate = date('Ymd', strtotime($date['e']));
- $params['begin_date'] = $startDate;
- $params['end_date'] = $endDate;
- $data = MpWxService::doAnalysisAction('getweanalysisappidweeklyvisittrend', $params);
- $data = $data['list'][0] ?? [];
- return $data;
- }
- /**
- * 获取用户访问小程序数据概况
- *
- * @param $date
- * @return array|mixed
- */
- private static function getSummary($date)
- {
- $visit_total = AnalysisDailyVisit::where('start_time', '>=', strtotime($date['s']))
- ->where('end_time', '<', strtotime($date['e'])+ 86400)
- ->order('ref_date', 'desc')
- ->value('visit_total');
- $data = AnalysisDailyVisit::where('start_time', '>=', strtotime($date['s']))
- ->where('end_time', '<', strtotime($date['e'])+ 86400)
- ->order('ref_date', 'desc')
- ->field('sum(share_pv) as share_pv, sum(share_uv) as share_uv')
- ->find();
- $data->visit_total = $visit_total;
- return $data->toArray();
- }
- }
|