0; $i--) { $date = date('Ymd', strtotime("-{$i} days")); $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) { $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)) ->where('end_time', '<', strtotime($date) + 86400) ->value('id'); if (!$retain_id) { // 不存在 新增 // 写入访问留存表 $retain_id = self::insertGetId($data); } // 写入访问留存标识表 foreach ($visit_uv_new as $k => &$new) { // 判断是否存在 $tag_info = AnalysisDailyRetainTag::where('retain_id', $retain_id) ->where('type', AnalysisDailyRetainTag::TYPE_NEW) ->where('key', $new['key']) ->count(); if ($tag_info) { // 存在 跳出循环 unset($visit_uv_new[$k]); continue; } $new['retain_id'] = $retain_id; $new['type'] = AnalysisDailyRetainTag::TYPE_NEW; $new['create_time'] = time(); $new['update_time'] = time(); } AnalysisDailyRetainTag::insertAll($visit_uv_new); foreach ($visit_uv as $k => &$active) { $tag_info = AnalysisDailyRetainTag::where('retain_id', $retain_id) ->where('type', AnalysisDailyRetainTag::TYPE_ACTIVE) ->where('key', $new['key']) ->count(); if ($tag_info) { // 存在 跳出循环 unset($visit_uv[$k]); continue; } $active['retain_id'] = $retain_id; $active['type'] = AnalysisDailyRetainTag::TYPE_ACTIVE; $active['create_time'] = time(); $active['update_time'] = time(); } AnalysisDailyRetainTag::insertAll($visit_uv); } /** * 获取单日访问留存数据 * * @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($data['ref_date']); // 开始时间 00:00:00 $data['end_time'] = strtotime($data['ref_date']) + 86400 - 1; // 结束时间 23:59:59 return $data; } /** * 获取用户访问小程序数据日留存 * 限定查询1天数据 * * @param $date * @return array|mixed */ private static function getRetain($date) { $params['begin_date'] = $date; $params['end_date'] = $date; $data = MpWxService::doAnalysisAction('getweanalysisappiddailyretaininfo', $params); return $data; } }