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); } }