| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539 |
- <?php
- /**
- * Created by PhpStorm.
- * User: wniu
- * Date: 2022/3/23
- * Time: 11:27 上午
- */
- namespace addons\LuckyGroup\api\modules\v1\controllers;
- use addons\LuckyGroup\common\enums\LuckyGroupEnum;
- use addons\LuckyGroup\common\models\LuckyGroupActivity;
- use addons\LuckyGroup\common\models\LuckyGroupBanners;
- use addons\LuckyGroup\common\models\LuckyGroupCategory;
- use addons\LuckyGroup\common\models\LuckyGroupGoods;
- use addons\LuckyGroup\common\models\LuckyGroupOrder;
- use addons\LuckyGroup\common\models\LuckyGroupVisitLog;
- use api\controllers\OnAuthController;
- use common\enums\StatusEnum;
- use common\models\common\AddonsMarketingSetting;
- use common\models\goods\Goods;
- class GoodsController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = [];
- /**
- * 拼团商品列表
- *
- * @Author bing
- * @DateTime 2021-04-12 12:52:33
- * @return void
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- public function actionList()
- {
- $get = \Yii::$app->request->get();
- // 访客数量
- $user_id = $this->user_id;
- $mall_id = $this->mall_id;
- $params['visit_user_id'] = $user_id;
- $params['mall_id'] = $mall_id;
- $is_diy = false;
- LuckyGroupVisitLog::addLog($params);
- $list = AddonsMarketingSetting::getOne([['mall_id' => $this->mall_id], ['addons_name' => LuckyGroupEnum::ADDONS_NAME], ['status' => StatusEnum::ENABLED]]);
- if ($list) {
- $is_diy = true;
- $content = \GuzzleHttp\json_decode($list->content, true);
- if (isset($content[3]['data']['goods'])) {
- $balance_name = \Yii::$app->services->setting->mall->get($mall_id, 'balance.balance_name') ?? '余额';
- $score_name = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_name') ?? '积分';
- $list = array_column($content[3]['data']['goods'], 'params');
- $ids = array_column($list,'id');
- // array_multisort($ids,SORT_DESC,$list);
- $goods_ids = array_column($list, 'goods_id');
- $activity_id = array_unique(array_column($list, 'activity_id'));
- $enable_goods = Goods::lists(['where' => [['in', 'id', $goods_ids], ['=', 'status', StatusEnum::ENABLED]], 'select' => 'id,original_price', 'index' => 'id']);
- $lucky_group_goods = LuckyGroupGoods::lists(['where' => [['in', 'goods_id', $goods_ids], ['=', 'status', StatusEnum::ENABLED]],'with'=>['goods'], 'select' => 'goods_id', 'index' => 'goods_id']);
- $lucky_group_activity = LuckyGroupActivity::getValidActivityIds($mall_id, 0, $activity_id);
- $lucky_group_activity_list = LuckyGroupActivity::lists([
- 'where'=>[
- ['id'=>$lucky_group_activity],
- ],
- 'index'=>'id'
- ]);
- $lucky_group_order_list = LuckyGroupOrder::lists([
- 'where'=>[
- ['activity_id'=>$activity_id],
- ['group_status'=>1]
- ],
- 'group'=>'goods_id',
- 'select'=>'goods_id,count(*) as counts',
- 'index'=>'goods_id'
- ]);
- foreach ($list as $k => &$v) {
- $progress = 0;
- if(!empty($lucky_group_activity_list[$v['activity_id']])){
- $lucky_group_activity = $lucky_group_activity_list[$v['activity_id']];
- $group_num = $lucky_group_activity['group_num'];
- $virtual_num = $lucky_group_activity['virtual_num'];
- if(isset($lucky_group_order_list[$v['goods_id']])){
- $virtual_num+= $lucky_group_order_list[$v['goods_id']]['counts'];
- }
- $progress = bcdiv($virtual_num,$group_num,2);
- $v['tips1'] = $lucky_group_activity['group_num'] . '人拼团,' . $lucky_group_activity['random_win_num'] . '人拼中';
- $v['title'] = $lucky_group_goods[$v['goods_id']]['goods']['goods_name'];
- $v['price'] = $lucky_group_goods[$v['goods_id']]['goods']['price'];
- $v['original_price'] = $lucky_group_goods[$v['goods_id']]['goods']['original_price'];
- $attend_award_setting = json_decode($lucky_group_activity['attend_award_setting'], true);
- $score_text = '';
- $balance_text = '';
- if ($attend_award_setting['score'] == 0) {
- unset($attend_award_setting['score']);
- } else {
- $score_text = $attend_award_setting['score'] . $score_name;
- }
- if ($attend_award_setting['balance'] == 0) {
- unset($attend_award_setting['balance']);
- } else {
- $balance_text = $attend_award_setting['balance'] . $balance_name;
- }
- if ($attend_award_setting) {
- switch ($lucky_group_activity['attend_user_type']) {
- case LuckyGroupEnum::ATTEND_USER_TYPE_ALL:
- $v['tips2'] = '参团立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_WIN:
- $v['tips2'] = '拼中立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_LOSS:
- $v['tips2'] = '拼不中立得' . $score_text . $balance_text;
- break;
- default:
- break;
- }
- }
- }
- $v['progress'] = $progress;
- $v['cover_pic'] = $v['img'];
- unset($v['subtitle']);
- unset($v['open_type']);
- unset($v['route']);
- unset($v['created_at']);
- unset($v['sales_num']);
- unset($v['sales_num']);
- unset($v['img']);
- if (!isset($enable_goods[$v['goods_id']])) {
- unset($list[$k]);
- }
- if (!isset($lucky_group_goods[$v['goods_id']])) {
- unset($list[$k]);
- }
- if (!in_array($v['activity_id'], $lucky_group_activity)) {
- unset($list[$k]);
- }
- $v['original_price'] = $enable_goods[$v['goods_id']]['original_price']??0;
- }
- }
- }
- if ($is_diy) {
- $list_page['list'] = $list;
- $list_page['page_count'] = 1;
- $list_page['count'] = count($list);
- } else {
- $activity_ids = LuckyGroupActivity::getValidActivityIds($mall_id);
- $data['with'] = ['activity', 'goods'];
- $data['where'] = [
- ['=', 'mall_id', $mall_id],
- ['=', 'status', StatusEnum::ENABLED],
- ['in', 'activity_id', $activity_ids],
- ];
- $data['select'] = 'id,activity_id,goods_id';
- $data['order'] = 'activity_id desc,id desc';
- $list_page = LuckyGroupGoods::listPage($data);
- if ($list_page === false) return $this->error(LuckyGroupGoods::getStaticError());
- if (!empty($list_page['list'])) {
- $balance_name = \Yii::$app->services->setting->mall->get($mall_id, 'balance.balance_name') ?? '余额';
- $score_name = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_name') ?? '积分';
- foreach ($list_page['list'] as $key => &$goods) {
- $goods['cover_pic'] = $goods['goods']['cover_pic'];
- $goods['title'] = $goods['goods']['goods_name'];
- $goods['price'] = $goods['goods']['price'];
- $goods['original_price'] = $goods['goods']['original_price'];
- $goods['tips1'] = '';
- $activity = $goods['activity'] ?? null;
- $goods['tips2'] = '拼中立得奖品,未拼中退款';
- if ($activity) {
- $goods['tips1'] = $activity['group_num'] . '人拼团,' . $activity['random_win_num'] . '人拼中';
- $attend_award_setting = json_decode($activity['attend_award_setting'], true);
- $score_text = '';
- $balance_text = '';
- if ($attend_award_setting['score'] == 0) {
- unset($attend_award_setting['score']);
- } else {
- $score_text = $attend_award_setting['score'] . $score_name;
- }
- if ($attend_award_setting['balance'] == 0) {
- unset($attend_award_setting['balance']);
- } else {
- $balance_text = $attend_award_setting['balance'] . $balance_name;
- }
- if ($attend_award_setting) {
- switch ($activity['attend_user_type']) {
- case LuckyGroupEnum::ATTEND_USER_TYPE_ALL:
- $goods['tips2'] = '参团立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_WIN:
- $goods['tips2'] = '拼中立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_LOSS:
- $goods['tips2'] = '拼不中立得' . $score_text . $balance_text;
- break;
- default:
- break;
- }
- }
- }
- unset($list_page['list'][$key]['activity']);
- unset($list_page['list'][$key]['goods']);
- }
- }
- }
- // $carousel = [];
- // $category = [];
- // if (isset($get['page']) && $get['page'] == 1) {
- // //轮播图
- // $carousel = LuckyGroupBanners::lists(['where' => [['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'is_show' => LuckyGroupEnum::BANNER_IS_SHOW_1]], 'order' => 'sort desc', 'select' => 'id,title,pic_link,pic_path,bgcolor']);
- // //分类
- // $category = LuckyGroupCategory::lists(['where' => [['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]], 'order' => 'sort asc', 'select' => 'id,title,pic_path,bgcolor']);
- // }
- // $list_page['carousel'] = $carousel;
- // $list_page['category'] = $category;
- return $this->success('ok', $list_page);
- }
- /**
- * 活动详情
- * 1,参团人数(虚拟+现实)
- * 2,拼中人员(虚拟+现实):现实拼中人员头像按拼中时间排序,虚拟头像随机排序
- * 3,拼不中人员(虚拟+现实):现实拼中人员头像按参团时间排序,虚拟头像随机排序
- * @Author pin
- * @DateTime 2021-04-25 22:48:47
- * @return void
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- public function actionDetails()
- {
- $get = \Yii::$app->request->get();
- $res = \Yii::$app->services->validate->validate($get, [
- [['goods_id', 'activity_id'], 'required'],
- ]);
- if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $return_data = [];
- $goods = Goods::getOne([['id' => $get['goods_id'], 'status' => StatusEnum::ENABLED]]);
- if (empty($goods)) return $this->error('商品不存在');
- $mall_id = $this->mall_id;
- // 获取虚拟人数
- $activity = LuckyGroupActivity::getOne([['id' => $get['activity_id']]], false, [], false, 'virtual_num');
- $virtual_people = $activity->virtual_num;
- $virtual_avatar = []; //虚拟头像数组
- $virtual_attend_money = 0;
- if ($virtual_people > 0) {
- // 随机虚拟用户头像数组
- $group_goods = LuckyGroupGoods::getOne([['goods_id' => $get['goods_id'], 'activity_id' => $get['activity_id']]]);
- if (empty($group_goods)) return $this->error('拼团商品不存在');
- for ($i = 0; $i < $virtual_people; $i++) {
- $no = ($i + $group_goods->join_num + $get['goods_id']) % 500;
- array_push($virtual_avatar, 'lucky_group/assets/head/' . $no . '.png');
- $virtual_attend_money += $goods->price;
- }
- }
- $params = [
- 'select' => 'user_id',
- 'order' => 'created_at desc',
- 'where' => [
- ['=', 'goods_id', $get['goods_id']],
- ['=', 'is_pay', LuckyGroupEnum::IS_PAY_1],
- ['=', 'activity_id', $get['activity_id']]
- ],
- 'group' => 'user_id',
- 'with' => 'user'
- ];
- $win_list = LuckyGroupOrder::lists($params);
- $win_user_id = []; //拼中用户id
- if (!empty($win_list)) {
- $users = array_column($win_list, 'user');
- $win_user_id = array_column($win_list, 'user_id');
- $win_list = array_column($users, 'avatar_url');
- }
- //参团中列表
- $params['where'] = [['=', 'goods_id', $get['goods_id']], ['=', 'group_status', LuckyGroupEnum::GROUP_JOINING], ['=', 'activity_id', $get['activity_id']]];
- $joining_list = LuckyGroupOrder::lists($params);
- $joining_user_id = []; //拼中用户id
- if (!empty($joining_list)) {
- $joining_user_id = array_column($joining_list, 'user_id');
- $joining_list = array_column($joining_list, 'avatar_url');
- }
- if (!empty($joining_list) && !empty($virtual_avatar)) {
- $joining_list = array_merge($joining_list, $virtual_avatar);
- } else if (empty($joining_list)) { //不存在直接用虚拟人数
- $joining_list = $virtual_avatar;
- }
- // 拼团预算
- $where = ['and', ['=', 'goods_id', $get['goods_id']], ['=', 'mall_id', $mall_id], ['=', 'activity_id', $get['activity_id']], ['=', 'is_pay', LuckyGroupEnum::IS_PAY_1]];
- $attend_money = LuckyGroupOrder::find()->where($where)->sum('money');
- // 算出拼团人数
- $attend_people = [];
- if (!empty($win_user_id) && !empty($joining_user_id)) {
- $attend_people = array_merge($win_user_id, $joining_user_id);
- } else if (!empty($win_user_id)) { //不存在直接用虚拟人数
- $attend_people = $win_user_id;
- } else if (!empty($joining_user_id)) { //不存在直接用虚拟人数
- $attend_people = $joining_user_id;
- }
- if (!empty($attend_pepole)) {
- $attend_people = array_unique($attend_people);
- }
- $return_data['win_list'] = $win_list; //拼中人员列表
- $return_data['win_count'] = count($win_list); //拼中人数
- $return_data['joining_list'] = $joining_list; //参团中人员列表
- $return_data['joining_count'] = count($joining_list); //参团中人数
- $return_data['attend_pepole'] = count($attend_people) + $virtual_people; //拼团人数
- $return_data['attend_money'] = $attend_money + $virtual_attend_money; //拼团预算
- return $this->success('success', $return_data);
- }
- /**
- * 获取参团人员和人数
- * @Author luoxurong
- * @DateTime 2021-4-27 22:29:32
- * @return void
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- public function actionJoinNum()
- {
- $param = \Yii::$app->request->get();
- $res = \Yii::$app->services->validate->validate($param, [
- [['id', 'activity_id'], 'required'],
- ]);
- if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $mall_id = $this->mall_id;
- $activity_id = $param['activity_id'];
- $goods_id = $param['id'];
- $goods_info = Goods::getOne([['id' => $goods_id]]);
- if (empty($goods_info)) return $this->error('商品不存在');
- $select = 'id,attend_user_type,attend_award_setting,group_num,random_win_num,virtual_num,start_time,end_time';
- $activity = LuckyGroupActivity::getOne([[
- 'id' => $activity_id, 'status' => StatusEnum::ENABLED, 'mall_id' => $mall_id
- ]], true, [], '', $select);
- if (empty($activity)) return $this->error('活动不存在');
- $group_goods = LuckyGroupGoods::getOne([['activity_id' => $activity_id, 'status' => StatusEnum::ENABLED, 'goods_id' => $goods_id]]);
- if (empty($group_goods)) return $this->error('活动商品不存在或已被删除');
- $virtual_num = $activity['virtual_num'] ?? 0;
- unset($activity['virtual_num']);
- $join_num = LuckyGroupOrder::count(['where' => [['=', 'activity_id', $group_goods->activity_id], ['=', 'goods_id', $group_goods->goods_id], ['=', 'status', StatusEnum::ENABLED],['>','pay_at',0]]]);
- $rowsUser = LuckyGroupOrder::lists([
- 'select' => 'user_id',
- 'where' => ['activity_id' => $activity_id,
- 'goods_id' => $group_goods->goods_id,
- 'is_pay' => LuckyGroupEnum::IS_PAY_1],
- 'limit' => 3,
- 'order' => 'id desc',
- 'with' => ['user']
- ]);
- $images = [];
- foreach ($rowsUser as $row) {
- $images[] = !empty($row['user']['avatar_url']) ? $row['user']['avatar_url'] : '';
- }
- $fail_attend_prize = 0;
- $fail_attend_prize_type = 'balance';
- if ($activity['attend_user_type'] != LuckyGroupEnum::ATTEND_USER_TYPE_WIN) {
- $attend_award_setting = json_decode($activity['attend_award_setting'], true);
- if (!empty($attend_award_setting)) {
- arsort($attend_award_setting);
- $fail_attend_prize_type = key($attend_award_setting);
- $fail_attend_prize = reset($attend_award_setting);
- }
- }
- $activity['fail_attend_prize'] = $fail_attend_prize;
- $activity['fail_attend_prize_type'] = $fail_attend_prize_type;
- $activity['not_win_num'] = $activity['group_num'] - $activity['random_win_num'];
- $activity['joinNum'] = $virtual_num + $join_num;
- $activity['images'] = $images;
- $activity['money_type_arr'] = ['balance' => '余额', 'score' => '积分'];
- $time = time();
- $date = date('Y-m-d', $time);
- $start_time = strtotime($date . ' ' . $activity['start_time']);
- $end_time = strtotime($date . ' ' . $activity['end_time']);
- // $start_time = strtotime($date . ' ' . '03:00');
- // $end_time = strtotime($date . ' ' . '06:00');
- $activity['is_open'] = 0;
- if ($time >= $start_time && $time <= $end_time) {
- $surplus_second = $end_time - $time;
- $activity['is_open'] = 1;
- } elseif ($time < $start_time && $time <= $end_time) {
- $surplus_second = $start_time - $time;
- } else {
- $new_start = strtotime(date("Y-m-d H:i:s", strtotime("+1 day", strtotime(date('Y-m-d H:s:i', $start_time)))));
- $surplus_second = $new_start - $time;
- }
- $activity['surplus_second'] = $surplus_second;
- $activity['open_times'] = !empty($group_goods['open_times']) ? $group_goods['open_times'] : 0;
- return $this->success('success', $activity);
- }
- /**
- * 拼团专区
- * @Author xiucun
- * @DateTime 2021-6-15 22:29:32
- * @return void
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- public function actionCategoryList()
- {
- $mall_id = $this->mall_id;
- $param = \Yii::$app->request->get();
- $category_id = $param['category_id'];
- $category = [];
- if (isset($param['page']) && $param['page'] == 1) {
- $category = LuckyGroupCategory::getOne([['id' => $category_id]], true, '', '', 'pic_adv,adv_link,bgcolor');
- }
- //分类
- //查询在时间范围内的活动
- $activity_ids = LuckyGroupActivity::getValidActivityIds($mall_id, $category_id);
- $lucky_group_activity_list = LuckyGroupActivity::lists([
- 'where' => [
- ['id' => $activity_ids],
- ],
- 'index' => 'id'
- ]);
- $data['with'] = ['activity', 'goods'];
- $data['where'] = [
- ['=', 'mall_id', $mall_id],
- ['=', 'status', StatusEnum::ENABLED],
- ['in', 'activity_id', $activity_ids],
- ];
- $data['select'] = 'id,activity_id,goods_id';
- $data['order'] = 'activity_id desc,id asc';
- $list_page = LuckyGroupGoods::listPage($data);
- if ($list_page === false) return $this->error(LuckyGroupGoods::getStaticError());
- $lucky_group_order_list = LuckyGroupOrder::lists([
- 'where' => [
- ['activity_id' => $activity_ids],
- ['group_status' => 1]
- ],
- 'group' => 'goods_id',
- 'select' => 'goods_id,count(*) as counts',
- 'index' => 'goods_id'
- ]);
- if (!empty($list_page['list'])) {
- foreach ($list_page['list'] as $key => &$goods) {
- // 下面七行,为平团进度条的计算,之前是没有的,一直缺失
- $lucky_group_activity = $lucky_group_activity_list[$goods['activity_id']];
- $group_num = $lucky_group_activity['group_num'];
- $virtual_num = $lucky_group_activity['virtual_num'];
- if (isset($lucky_group_order_list[$goods['goods_id']])) {
- $virtual_num += $lucky_group_order_list[$goods['goods_id']]['counts'];
- }
- $progress = bcdiv($virtual_num, $group_num, 2);
- $list_page['list'][$key]['progress'] = $progress;
- $goods['cover_pic'] = $goods['goods']['cover_pic'];
- $goods['title'] = $goods['goods']['goods_name'];
- $goods['price'] = $goods['goods']['price'];
- $goods['original_price'] = $goods['goods']['original_price'];
- $goods['tips1'] = '';
- $activity = $goods['activity'] ?? null;
- $goods['tips2'] = '拼中立得奖品,未拼中退款';
- if ($activity) {
- $goods['tips1'] = $activity['group_num'] . '人拼团,' . $activity['random_win_num'] . '人拼中';
- $attend_award_setting = json_decode($activity['attend_award_setting'], true);
- $score_text = '';
- $balance_text = '';
- if ($attend_award_setting['score'] == 0) {
- unset($attend_award_setting['score']);
- } else {
- $score_text = $attend_award_setting['score'] . '积分';
- }
- if ($attend_award_setting['balance'] == 0) {
- unset($attend_award_setting['balance']);
- } else {
- $balance_text = $attend_award_setting['balance'] . '元';
- }
- if ($attend_award_setting) {
- switch ($activity['attend_user_type']) {
- case LuckyGroupEnum::ATTEND_USER_TYPE_ALL:
- $goods['tips2'] = '参团立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_WIN:
- $goods['tips2'] = '拼中立得' . $score_text . $balance_text;
- break;
- case LuckyGroupEnum::ATTEND_USER_TYPE_LOSS:
- $goods['tips2'] = '拼不中立得' . $score_text . $balance_text;
- break;
- default:
- break;
- }
- }
- }
- unset($list_page['list'][$key]['activity']);
- unset($list_page['list'][$key]['goods']);
- }
- }
- $list_page['category'] = $category;
- // $currencys = Currency::getCurrencysKv($mall_id);
- // $list_page['money_type_arr'] = array_merge($currencys, LuckyGroupWalletLog::getMoneyType($mall_id));
- // $list_page['is_display_reward'] = ModuleConfig::conf($mall_id, ModuleConfig::MODULE_LUCKY_GROUP, 'basic.is_display_reward') ?? 1;
- $list_page['money_type_arr'] = ['balance' => '余额', 'score' => '积分'];
- return $this->success('获取成功!', $list_page);
- }
- }
|