| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- namespace addons\LuckyGroup\backend\controllers;
- use addons\LuckyGroup\common\enums\LuckyGroupEnum;
- use addons\LuckyGroup\common\models\LuckyGroupActivity;
- use addons\LuckyGroup\common\models\LuckyGroupCategory;
- use addons\LuckyGroup\common\models\LuckyGroupMallOpenGroupStatistics;
- use addons\LuckyGroup\common\models\LuckyGroupMallStatistics;
- use addons\LuckyGroup\common\models\LuckyGroupGoods;
- use addons\LuckyGroup\common\models\LuckyGroupUser;
- use addons\LuckyGroup\common\models\LuckyGroupVisitLog;
- use common\enums\StatusEnum;
- use common\models\user\User;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\LuckyGroup\backend\controllers
- */
- class DefaultController extends BaseController
- {
- /**
- * 幸运拼团数据概况页面
- *
- * @return string
- */
- public function actionIndex()
- {
- if (!\Yii::$app->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'));
- }
- }
- }
|