123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- declare (strict_types=1);
- namespace app\store\model\analysis;
- use app\common\model\analysis\AnalysisPageVisit as AnalysisPageVisitModel;
- use app\common\service\MpWxService;
- use think\facade\Log;
- /**
- * 页面访问模型
- * Class AnalysisPageVisit
- * @package app\common\model\analysis
- */
- class AnalysisPageVisit extends AnalysisPageVisitModel
- {
- /**
- * 批量写入每日页面访问数据
- * 发布上线时,只需执行一次
- */
- public static function addInitVisit()
- {
- $begin_date = '20211001'; // 生成初始数据开始时间,建议时间为:小程序上线时间
- $end_date = date('Ymd', strtotime('-1 days')); // 生成初始数据结束时间,建议时间为:昨天
- $date_arr = period_date(strtotime($begin_date), strtotime($end_date), 'Ymd');
- foreach ($date_arr as $date) {
- $rs = self::visit($date);
- if ($rs) {
- // 写入数据
- $ret = AnalysisPageVisit::insertAll($rs);
- if (!$ret) {
- Log::error('页面访问数据初始化执行失败 ----' . $date);
- return false;
- }
- }
- }
- return true;
- }
- /**
- * 写入每日行为数据
- * 定时任务每日执行一次,生成昨日数据
- */
- public static function addVisit()
- {
- $date = date('Ymd', strtotime('-1 days'));
- $data = self::visit($date);
- // dd($data);
- // 移除数据
- self::where('start_time', '>=', 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;
- }
- }
|