=', strtotime($date)) ->where('end_time', '<', strtotime($date) + 86400)->delete(); // 写入数据 return AnalysisPageVisit::insertAll($data); } /** * 获取单日用户访问页面数据 * * @param $date * @return array */ public static function visit($date) { $data = self::getPageVisit($date); if (empty($data)) { return []; } foreach ($data as &$v) { $v['create_time'] = time(); $v['update_time'] = time(); $v['start_time'] = strtotime($date); // 开始时间 00:00:00 $v['end_time'] = strtotime($date) + 86400 - 1; // 结束时间 23:59:59 $v['page_path_name'] = self::getPageName($v['page_path']); $v['ref_date'] = $date; } return $data; } /** * 获取用户访问页面数据 * 限定查询1天数据 * * @param $date * @return array|mixed */ private static function getPageVisit($date) { $params['begin_date'] = $date; $params['end_date'] = $date; $data = MpWxService::doAnalysisAction('getweanalysisappidvisitpage', $params); $data = $data['list'] ?? []; return $data; } /** * 根据页面路径获取页面名称 * * @param string $page 页面路径 * @return string */ public static function getPageName($page) { $pages = [ "pages/index/pages/explore/explore" => "探秘", "pages/user/pages/appletIncomePoster/appletIncomePoster" => "推荐官分享码(推广商品)", "pages/cart/pages/myOrder/myOrder" => "我的订单", "pages/public/pages/about/about" => "关于我们", "pages/cart/pages/noPayment/noPayment" => "商品未支付", "pages/user/pages/store/storeDetails/storeDetails" => "门店详情", "pages/user/pages/promotionCenter/promotionCenter" => "门店管理\推广中心\邀请有礼", "pages/cart/pages/orderDetail/orderDetail" => "商品订单详情", "pages/tabBar/shoppingCart/shoppingCart" => "购物车", "pages/cart/pages/appraise/appraise" => "发布评价", "pages/user/pages/addressList/addressList" => "收货地址列表", "pages/user/pages/store/addGroup/addGroup" => "加入团队", "pages/tabBar/index/index" => "首页", "pages/user/pages/store/applyRetail/applyRetail" => "邀请有礼(申请成为推荐官)", "pages/user/pages/addGroup/addGroup" => "加入团队", "pages/cart/pages/goodsPoster/goodsPoster" => "商品海报", "pages/user/pages/invitation/invitation" => "邀请店员", "pages/cart/pages/invoice/invoice" => "申请开票", "pages/tabBar/user/user" => "我的", "pages/index/pages/coupon/myCoupon" => "我的优惠券", "pages/user/pages/appletPoster/appletPoster" => "推广海报(邀请推荐管)", "pages/user/pages/store/retailExplain/retailExplain" => "推广海报", "pages/index/pages/rookieVoucher/rookieVoucher" => "领取新人券", "pages/cart/pages/logisticsDetail/logisticsDetail" => "物流详情", "pages/index/pages/search/search" => "搜索", "pages/user/pages/withdrawal/withdrawal" => "提现", "pages/user/pages/store/promotionCenter/promotionCenter" => "门店管理\推广中心\邀请有礼", "pages/index/pages/couponCenter/couponCenter" => "领券中心", "pages/user/pages/staffList/staffList" => "员工业绩榜单", "pages/index/pages/riceCard/cardDetail/cardDetail" => "米卡详情(现金卡)", "pages/user/pages/serviceAgreement/serviceAgreement" => "服务协议", "pages/user/pages/privacy/privacy" => "隐私协议", "pages/cart/pages/invoiceSuccess/invoiceSuccess" => "开票成功", "pages/user/pages/myBonus/myBonus" => "我的奖励金", "pages/user/pages/about/about" => "关于我们", "pages/user/pages/proceeds/proceeds" => "我的收益金", "pages/cart/pages/appraiseSuccess/appraiseSuccess" => "发布评价成功", "pages/user/pages/pushOrder/pushOrder" => "推广订单", "pages/index/pages/riceCard/cardNoPay/cardNoPay" => "米卡未支付", "pages/cart/pages/goodsDetail/goodsDetail" => "商品详情", "pages/user/pages/store/upgradeRetail/upgradeRetail" => "升级推荐官", "pages/public/pages/privacy/privacy" => "隐私协议", "pages/user/pages/address/address" => "新增收货地址", "pages/public/pages/serviceAgreement/serviceAgreement" => "服务协议", "pages/index/index" => "首页", "pages/user/pages/withdrawalList/withdrawalList" => "提现列表", "pages/tabBar/rice/rice" => "品牌文化", "pages/user/pages/footprint/footprint" => "我的足迹", "pages/index/pages/searchResult/searchResult" => "搜索结果", "pages/cart/pages/confirmOrder/confirmOrder" => "确认订单", "pages/cart/pages/allAppraiseList/allAppraiseList" => "全部评价", "pages/user/pages/store/clerkHandover/clerkHandover" => "店员交接", "pages/user/pages/pushUser/pushUser" => "直推用户\门店顾客", "pages/user/pages/favorite/favorite" => "我的收藏", "pages/tabBar/login/login" => "登录", "pages/user/pages/store/removeShopowner/removeShopowner" => "解聘店长", "pages/index/pages/bossInviteCode/bossInviteCode" => "生成邀请海报(老板专用)", "pages/user/pages/moreService/moreService" => "更多服务", "pages/user/pages/selectTime/selectTime" => "推广订单-选择时间", "pages/index/pages/riceCard/myRiceCard/myRiceCard" => "我的米卡", "pages/index/pages/riceCard/cardList/cardList" => "米卡列表", "pages/cart/pages/refund/refundDetail/refundDetail" => "退款详情", "pages/cart/pages/refund/refundApply/refundApply" => "申请退款", "pages/user/pages/appletRetailPoster/appletRetailPoster" => "推荐官海报", "pages/cart/pages/paySuccess/paySuccess" => "米卡购买成功", "pages/user/pages/store/selfTakeOrder/selfTakeOrder" => "门店自提", "pages/cart/pages/invoiceCheck/invoiceCheck" => "核对发票信息", "pages/user/pages/store/hireShopowner/hireShopowner" => "聘请店长", "pages/index/pages/riceCard/cardPaySuccess/cardPaySuccess" => "米卡购买成功", "pages/tabBar/allGoods/allGoods" => "全部商品", "pages/activity/pages/bargain/index/index" => "砍价活动主页", "pages/activity/pages/bargain/bargainDetail/bargainDetail" => "砍价活动详情", "pages/activity/pages/fission/index/index" => "分享得优惠", "pages/activity/pages/fission/receive/receive" => "好友送福利", ]; return $pages[$page] ?? ''; } public static function getList($params) { $list = self::getQuery($params) ->paginate()->each(function($v) { $v['page_path_name'] = AnalysisPageVisit::getPageName($v['page_path']); $v['page_staytime_pv'] = number_format((float)$v['page_staytime_pv'], 2); $v['exitpage_percent'] = $v['exitpage_percent'] > 0 ? $v['exitpage_percent'] : 0; }); return $list; } private static function getQuery($params) { $sortField = $params['sortField'] ?? 'page_visit_pv'; $sortOrder = $params['sortOrder'] ?? 'descend'; $sortOrder = str_replace(['ascend','descend'], ['asc','desc'], $sortOrder); list($start,$end) = self::getStartEndTime($params); $model = self::where('start_time', '>=', $start) ->where('end_time', '<', $end+ 86400) ->order($sortField, $sortOrder) ->field('page_path,sum(page_visit_pv) as page_visit_pv,sum(page_visit_uv) as page_visit_uv,sum(page_staytime_pv*page_visit_pv)/sum(page_visit_pv) as page_staytime_pv, sum(entrypage_pv) as entrypage_pv,sum(exitpage_pv) as exitpage_pv,sum(page_share_pv) as page_share_pv,sum(page_share_uv) as page_share_uv, ROUND(sum(exitpage_pv) / sum(page_visit_pv) * 100,2) as exitpage_percent') ->group('page_path'); return $model; } public static function getStartEndTime($params) { $type = $params['type'] ?? 2; // 时间筛选类型 1-最近7天 2-最近30天 3-自定义 $start = (int)($params['start'] ?? ''); $end = (int)($params['end'] ?? ''); if ($type == 3 && (!$start || !$end)) { // return $this->renderError('自定义区间时间不能为空'); } // 根据时间筛选类型计算筛选开始结束时间 if ($type == 1) { //最近7天 $start = strtotime('-7 days'); $end = strtotime('-1 days'); } elseif ($type == 2) {//最近30天 $start = strtotime('-30 days'); $end = strtotime('-1 days'); } $start = strtotime(date('Y-m-d', $start)); $end = strtotime(date('Y-m-d', $end)); return [$start,$end]; } public static function export(array $params) { $data['header'] = ['页面', '访问次数', '访问人数', '次均时长(s)', '入口页次数','退出页次数', '退出率', '分享次数', '分享人数']; $data['filename'] = '使用分析_页面分析'; $data['data'] = []; $list = self::getQuery($params) ->select(); $new_list = []; foreach ($list as $v){ $new_list['page_path_name'] = AnalysisPageVisit::getPageName($v['page_path']); $new_list['page_visit_pv'] = $v['page_visit_pv']; $new_list['page_visit_uv'] = $v['page_visit_uv']; $new_list['page_staytime_pv'] = number_format((float)$v['page_staytime_pv'], 2); $new_list['entrypage_pv'] = $v['entrypage_pv']; $new_list['exitpage_pv'] = $v['exitpage_pv']; $new_list['exitpage_percent'] = ($v['exitpage_percent'] > 0 ? $v['exitpage_percent'] : 0).'%'; $new_list['page_share_pv'] = $v['page_share_pv']; $new_list['page_share_uv'] = $v['page_share_uv']; $data['data'][] = $new_list; } return $data; } }