request->isAjax) { return $this->render('/statistics/index'); } if (!\Yii::$app->request->isGet) { return $this->error('请求方式错误'); } $start_date = \Yii::$app->request->get('start_date'); $end_date = \Yii::$app->request->get('end_date'); /* 页面顶部统计汇总 ----- start ------*/ $this_moth_statistics = LuckyGroupMallStatistics::find() ->select('attend_commission,attend_money,win_money,attend_peoples,win_peoples,total_attend_commission,total_attend_money,total_win_money,total_attend_peoples,total_win_peoples') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'statistics_month' => date('Y-m')]) ->asArray() ->one(); $total_statistics = []; if (empty($this_moth_statistics)) { $this_moth_statistics = []; $total_statistics = LuckyGroupMallStatistics::find() ->select('total_attend_commission,total_attend_money,total_win_money,total_attend_peoples,total_win_peoples') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->orderBy('created_at desc') ->limit(1) ->asArray() ->one(); } $all_statistics = array_merge($this_moth_statistics, $total_statistics); /* 页面顶部统计汇总 ----- end ------*/ /* 访问概况 ----- start ------- */ $start_time = $start_date ? strtotime($start_date . ' 00:00:00') : strtotime("-0 year -0 month -10 day"); $end_time = $end_date ? strtotime($end_date . ' 23:59:59') : time(); $visit_logs = LuckyGroupVisitLog::find() ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->andWhere(['and', ['>=', 'created_at', $start_time], ['<=', 'created_at', $end_time]]) ->asArray() ->all(); //浏览量 $data = self::getDayByDayData($visit_logs, $start_time, $end_time, 'visit-view'); $echarts_visit_data['view_num'] = ['keys' => array_keys($data), 'values' => array_values($data)]; //访客数 $data = self::getDayByDayData($visit_logs, $start_time, $end_time, 'visit'); $echarts_visit_data['visit_num'] = ['keys' => array_keys($data), 'values' => array_values($data)]; $echarts_visit_data['sum_view_num'] = array_sum($echarts_visit_data['view_num']['values']); $echarts_visit_data['sum_visit_num'] = array_sum($echarts_visit_data['visit_num']['values']); // dd($echarts_visit_data); /* 访问概况 ----- end ------- */ /* 金额图表 ---- start ---- */ $attend_win_amounts = $attend_loss_amounts = 0; $open_group_stat_query = LuckyGroupMallOpenGroupStatistics::find()->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]); foreach ($open_group_stat_query->batch(200) as $open_group_stats) { foreach ($open_group_stats as $stat) { $attend_win_amounts += $stat->win_money; $attend_loss_amounts += $stat->loss_money; } } $configs['customize_text'] = \Yii::$app->services->setting->addons->get($this->mall_id, LuckyGroupEnum::ADDONS_NAME, 'customize_text'); $customize_texts = []; foreach ($configs['customize_text'] as $key => $customize_text) { $customize_text = json_decode($customize_text, true); $customize_texts[$customize_text['field_name']] = $customize_text; } // dd($customize_texts); $attend_win_name = $customize_texts['join_success_text']['new_text']; $attend_loss_name = $customize_texts['join_fail_text']['new_text']; $attend_amounts = $all_statistics['total_attend_money'] ?? 0; $total_win_amounts = $all_statistics['total_win_money'] ?? 0; $echarts_money_data = [ 'names' => [$attend_win_name, $attend_loss_name], 'attend_amounts' => $attend_amounts, 'echarts_money' => [ ['name' => $attend_win_name, 'value' => $total_win_amounts], ['name' => $attend_loss_name, 'value' => bcsub($attend_amounts, $total_win_amounts, 2)], ], ]; // dd($echarts_money_data); /* 金额图表 ---- end ---- */ /* 会员概况 ---- start ----- */ $mall_statistics = LuckyGroupMallOpenGroupStatistics::find() ->select('id,mall_id,attend_peoples,win_peoples,loss_peoples,created_at') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->andWhere(['and', ['>=', 'created_at', $start_time], ['<=', 'created_at', $end_time]]) ->asArray() ->all(); $data = self::getDayByDayData($mall_statistics, $start_time, $end_time, 'user-attend'); $echarts_user_data['attend_peoples'] = ['keys' => array_keys($data), 'values' => array_values($data)]; $data = self::getDayByDayData($mall_statistics, $start_time, $end_time, 'user-win'); $echarts_user_data['win_peoples'] = ['keys' => array_keys($data), 'values' => array_values($data)]; $data = self::getDayByDayData($mall_statistics, $start_time, $end_time, 'user-loss'); $echarts_user_data['loss_peoples'] = ['keys' => array_keys($data), 'values' => array_values($data)]; // dd($echarts_user_data); /* 会员概况 ---- end ----- */ /* 拼中排行榜 ---- start ----- */ $user_ranking_list = LuckyGroupUser::find() ->select('id,user_id,has_attend_times,win_orders,win_num,max_order_money,attend_money') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->orderBy('win_num desc,created_at asc') ->limit(10) ->asArray() ->all(); if (!empty($user_ranking_list)) { $user_ids = array_column($user_ranking_list, 'user_id'); $users = User::find() ->select('id,nickname,mobile,avatar_url') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_ids]) ->asArray() ->indexBy('id') ->all(); foreach ($user_ranking_list as &$list) { $user = $users[$list['user_id']] ?? []; $list['nickname'] = $user['nickname'] ?? ''; $list['mobile'] = $user['mobile'] ?? ''; $list['avatar_url'] = !empty($user['avatar_url']) ? $user['avatar_url'] : \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png'; } } /* 拼中排行榜 ---- end ----- */ $data = [ 'user_ranking_list' => $user_ranking_list, 'echarts_user_data' => $echarts_user_data, 'echarts_money_data' => $echarts_money_data, 'echarts_visit_data' => $echarts_visit_data, 'statistic' => $all_statistics, ]; return $this->success('success', $data); } //获取统计表数据格式 private static function getDayByDayData($list, $start = "", $end = "", $type) { $data = array(); if (!empty($list)) { foreach ($list as $val) { $key = date('Y-m-d', $val['created_at']); if ($type == 'user-attend') { if (!isset($data[$key])) { $data[$key] = 0; } $data[$key] += $val['attend_peoples']; } elseif ($type == 'user-win') { if (!isset($data[$key])) { $data[$key] = 0; } $data[$key] += $val['win_peoples']; } elseif ($type == 'user-loss') { if (!isset($data[$key])) { $data[$key] = 0; } $data[$key] += $val['loss_peoples']; } elseif ($type == 'visit-view') { if (!isset($data[$key])) { $data[$key] = 0; } $data[$key] += $val['view_num']; } elseif ($type == 'visit') { if (!isset($data[$key])) { $data[$key] = 0; } $data[$key] += 1; } } } //补足不存在的天 for ($start; $start <= $end; $start = strtotime('+1 day', $start)) { $date = date('Y-m-d', $start); if (!isset($data[$date])) $data[$date] = 0; } ksort($data); return $data; } /** * @desc:拼团商品列表 * @Author: hua * @Date: 2021/12/14 * @Time: 15:52 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionCheckActiveList() { $get = \Yii::$app->request->get(); $goods_id = json_decode($get['goods_id'], true); $list = LuckyGroupGoods::getGoodsList($this->mall_id,$goods_id); return $this->success('操作成功', $list); } /** * @desc:获取拼团分类列表,添加活动使用,不用验证权限 * @Author: hua * @Date: 2021/12/13 * @Time: 18:51 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|string|void */ public function actionCateList() { $request = \Yii::$app->request; if ($request->isAjax) { $list = LuckyGroupCategory::lists(['where' => [['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED]], 'order' => 'id asc', 'select' => 'id,title as name']); return $this->success('操作成功', compact('list')); } } }