getMessage(); Db::rollback(); return false; } } /** * 写入每周行为数据 * 定时任务每日执行一次,生成上周数据 */ public static function addVisit() { try { for ($i = 4; $i > 0; $i--) { $date = [ 's' => date('Y-m-d', strtotime("-{$i} monday", time())), // 周一日期 'e' => date('Y-m-d', strtotime("-{$i} monday +6 days", time())) // 周日日期 ]; // 判断结束时间是否小于于当前时间 if ($date['e'] < date('Y-m-d')) { $data = self::visit($date); // 写入数据 self::addData($date, $data); } } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); return false; } } private static function addData($date, $data) { if (!empty($data['visit_uv_new'])) { $visit_uv_new = $data['visit_uv_new']; // 新增用户留存 $visit_uv = $data['visit_uv']; // 活跃用户留存 unset($data['visit_uv_new'], $data['visit_uv']); $retain_id = self::where('start_time', '>=', strtotime($date['s'])) ->where('end_time', '<', strtotime($date['e']) + 86400) ->value('id'); if (!$retain_id) { // 不存在 新增 // 写入访问留存表 $retain_id = self::insertGetId($data); } // 写入访问留存标识表 foreach ($visit_uv_new as $k => &$new) { $tag_info = AnalysisWeeklyRetainTag::where('retain_id', $retain_id) ->where('type', AnalysisWeeklyRetainTag::TYPE_NEW) ->where('key', $new['key']) ->count(); if ($tag_info) { // 存在 跳出循环 unset($visit_uv_new[$k]); continue; } $new['retain_id'] = $retain_id; $new['type'] = AnalysisWeeklyRetainTag::TYPE_NEW; $new['create_time'] = time(); $new['update_time'] = time(); } AnalysisWeeklyRetainTag::insertAll($visit_uv_new); foreach ($visit_uv as $k => &$active) { $tag_info = AnalysisWeeklyRetainTag::where('retain_id', $retain_id) ->where('type', AnalysisWeeklyRetainTag::TYPE_ACTIVE) ->where('key', $new['key']) ->count(); if ($tag_info) { // 存在 跳出循环 unset($visit_uv[$k]); continue; } $active['retain_id'] = $retain_id; $active['type'] = AnalysisWeeklyRetainTag::TYPE_ACTIVE; $active['create_time'] = time(); $active['update_time'] = time(); } AnalysisWeeklyRetainTag::insertAll($visit_uv); } else { echo "该时间段无数据:".date('Y-m-d',$date['s']).'-'.date('Y-m-d',$date['e']); } } /** * 获取单周数据概览及访问留存数据 * * @param $date * @return array */ public static function visit($date) { $data = self::getRetain($date);// 每周访问趋势 $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 getRetain($date) { $startDate = date('Ymd', strtotime($date['s'])); $endDate = date('Ymd', strtotime($date['e'])); $params['begin_date'] = $startDate; $params['end_date'] = $endDate; $data = MpWxService::doAnalysisAction('getweanalysisappidweeklyretaininfo', $params); return $data; } }