activityCon = $activityCon; } /** * 活动列表 * @param Request $request [description] * @return [type] [description] */ public function activities(Request $request) { // $is_deadline = $request->input('is_deadline', 0); $is_hidden = $request->is_hidden ? $request->is_hidden : 0; $activities = Activity::orderBy('is_top','desc')->orderBy('id', 'desc'); if (is_numeric($is_hidden) && $is_hidden == 1){ $activities = $activities->where('is_hidden',$is_hidden); } if (is_numeric($is_hidden) && $is_hidden == 0){ $activities = $activities->whereIn('is_hidden',[0,3]); } if (is_numeric($is_hidden) && $is_hidden == 2){ $activities = $activities->where('is_hidden',2); } $activities = $this->getScreenActivities($request, $activities); $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'paas_admin') {//平台管理员 //平台信息 $paas_obj = $admin_type = $request->session()->get('paas_obj'); //平台活动 $paas_activity_ids = PaasActivity::where('paas_id', $paas_obj->id)->pluck('activity_id'); $activities = $activities->whereIn('id', $paas_activity_ids); } if($request->has('is_deadline')){ $activities = $activities->where('is_deadline', $request->is_deadline); } $nopage = $request->input('nopage', 0); if ($nopage) { $activities = $activities->get(); }else{ $activities = $activities->select('id','theme','address','is_online','poster','fee','can_repeat_sign','start_time','end_time','is_top','is_hidden','reason')->paginate(); } foreach ($activities as $activity) { if ($activity->is_hidden==1) { //生成h5跳转小程序链接 $app = \WechatService::app()->access_token; $token = $app->getToken(true); $data = []; $data['jump_wxa']['path'] = '/pages/party/detail'; $data['jump_wxa']['query'] = 'party_id=' . $activity->id; $data = json_encode($data); $wechaturl = 'https://api.weixin.qq.com/wxa/generatescheme?access_token=' . $token['access_token']; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_URL, $wechaturl); // curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); if (1 == strpos("$" . $wechaturl, "https://")) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $result = curl_exec($curl); $result = json_decode($result, true); $jump_url = $result['openlink']; $path = env('APP_URL').'/h5/#/jump_url?url='.$jump_url; $activity->jump_url = $path; } } return $this->success('ok', $activities); } /** * 筛选活动 */ public function getScreenActivities($request, $activities) { //未开始,活动中,活动结束 $status = $request->input('status'); //活动地区 $province = $request->input('province'); $city = $request->input('city'); //活动类型 $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $activities = $activities->where("theme", 'like', '%'.$keyword.'%'); } $now_time = date('Y-m-d H:i:s'); if ($status == 'NotStarted') { $activities = $activities->where('start_time','>', $now_time); }elseif ($status == 'Starting') { $activities = $activities->where('start_time','<=', $now_time)->where('end_time', '>=', $now_time); }elseif ($status == 'Started') { $activities = $activities->where('end_time', '<', $now_time); } if ($province) { $activities = $activities->where('province', $province); } if ($city) { $activities = $activities->where('city', $city); } return $activities; } /** * 活动详情 * @param Request $request [description] * @param [type] $activity_id [description] */ public function activity(Request $request, $activity_id) { $activity = Activity::with('activityMember.user:id,sex','creator')->findOrFail($activity_id); if ($activity->can_repeat_sign == 1 && !empty($activity->sign_in_qrcode)) { $activity->sign_in_qrcode = json_decode($activity->sign_in_qrcode,true); } // $keyword = $request->input('keyword'); // // $member = ActivityMember::with('user:id,name,photo,circle_avatar')->where('activity_id', $activity_id)->orderBy('id', 'desc'); // // if ($keyword) { // // $keyword = trim($keyword); // // $member = $member->where('name', 'like', '%'.$keyword.'%'); // // } // // $member = $member->paginate(); // // foreach ($member as $item){ // // if($item->user){ // // $item->name = $item->user->name; // // $item->avatar = $item->user->photo?:$item->user->circle_avatar; // // } // // } // // $activity->member = $member; $activity->detail_pic = json_decode($activity->detail_pic,true); //签到人数 $male_sign_in_count = ActivityMember::where('activity_id', $activity_id)->whereHas('user', function($sql){ $sql->where('sex',1); })->where('sign_in', 1)->count(); $female_sign_in_count = ActivityMember::where('activity_id', $activity_id)->whereHas('user', function($sql){ $sql->where('sex',2); })->where('sign_in', 1)->count(); $activity->male_sign_in_count = $male_sign_in_count; $activity->female_sign_in_count = $female_sign_in_count; $activity->total = ActivityMember::where('activity_id', $activity_id)->whereHas('user')->where('sign_in', 1)->count(); $activity->from_user_count = User::where('from_activity_id',$activity_id)->count(); //sku $skus = []; if ($activity->sku) { $skus = $activity->sku->skus; if (!is_array($skus)) { $skus = json_decode($activity->sku->skus,true); } } $activity->skus = $skus; unset($activity->sku); //分类 $activity->class; return $this->success('ok', $activity); } //通过活动注册的用户 public function registFromActivity(Request $request, $activity_id){ $keyword = $request->keyword; $users = User::where('from_activity_id',$activity_id)->orderBy('created_at','desc'); if ($keyword) { $keyword = trim($keyword); $users = $users->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); } $users = $users->paginate(); return $this->success('ok',$users); } /** * 修改活动 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activityUpdate(Request $request, $activity_id) { $activity = Activity::findOrFail($activity_id); ActivityShareHistory::where('activity_id',$activity_id)->delete(); if ($request->has('theme') && $request->theme != $activity->theme) { $activity->theme = $request->theme; } if ($request->has('can_repeat_sign') && $request->can_repeat_sign != $activity->can_repeat_sign) { $activity->can_repeat_sign = $request->can_repeat_sign; } if ($request->has('poster') && $request->poster != $activity->poster) { $activity->poster = $request->poster; } if ($request->has('is_online') && $request->is_online != $activity->is_online) { $activity->is_online = $request->is_online;//线上还是线下 1线上 0线下 } $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'admin') { if ($request->has('host') && $request->host != $activity->host) { $activity->host = $request->host; } } if ($request->has('class_id') && $request->class_id != $activity->class_id) { $activity->class_id = $request->class_id; } if ($request->has('pay_type') && $request->pay_type != $activity->pay_type) { $activity->pay_type = $request->pay_type; } if ($request->has('activity_description') && $request->activity_description != $activity->activity_description) { $activity->activity_description = $request->activity_description; } if ($request->has('vote_count') && $request->vote_count != $activity->vote_count) { $activity->vote_count = $request->vote_count; } if ($request->has('vote_sex_count') && $request->vote_sex_count != $activity->vote_sex_count) { $activity->vote_sex_count = $request->vote_sex_count; } if ($request->has('fee') && $request->fee != $activity->fee) { $activity->fee = $request->fee; } if ($request->pay_type == 'coin') { if ($request->can_coin_amount < ($request->fee * 10) && $request->can_coin_amount) { $activity->can_coin_amount = $request->can_coin_amount; $activity->can_cash_amount = $request->can_coin_amount / 10; //福币和现金比例 10:1; }else{ return $this->failure('未输入可抵扣福币数量或可抵扣福币数量达到上限'); } }else{ $activity->can_coin_amount = null; $activity->can_cash_amount = null; } if ($request->has('detail') && $request->detail != $activity->detail) { $activity->detail = $request->detail; } if ($request->has('detail_path') && $request->detail_path != $activity->detail_path) { $activity->detail_path = $request->detail_path; } if ($request->has('content') && $request->input('content') != $activity->content) { $activity->content = $request->input('content'); } if ($request->has('detail_pic') && json_encode($request->detail_pic) != $activity->detail_pic) { $activity->detail_pic = json_encode($request->detail_pic); } if ($request->has('start_time') && $request->start_time != $activity->start_time) { $activity->start_time = $request->start_time; } if ($request->has('end_time') && $request->end_time != $activity->end_time) { $activity->end_time = $request->end_time; } if ($request->has('apply_deadline') && $request->apply_deadline != $activity->apply_deadline) { if ($request->apply_deadline > $request->end_time) { return $this->failure('活动报名截止时间需小于活动结束时间'); } $activity->apply_deadline = $request->apply_deadline; } if ($request->has('province') && $request->province != $activity->province) { $activity->province = $request->province; } if ($request->has('city') && $request->city != $activity->city) { $activity->city = $request->city; } if ($request->has('dist') && $request->dist != $activity->dist) { $activity->dist = $request->dist; } if ($request->has('address') && $request->address != $activity->address) { $activity->address = $request->address; } if ($request->has('location_latitude') && $request->location_latitude != $activity->location_latitude) { $activity->location_latitude = $request->location_latitude; } if ($request->has('location_longitude') && $request->location_longitude != $activity->location_longitude) { $activity->location_longitude = $request->location_longitude; } if ($request->has('show_member_num') && $request->show_member_num != $activity->show_member_num) { $activity->show_member_num = $request->show_member_num; } $is_hidden = $request->is_hidden ? $request->is_hidden : 0; if(is_numeric($request->is_hidden)){ if ($activity->is_hidden == 1 && $request->is_hidden == 2){//审核不通过 拒绝 if (empty($request->reason)) return $this->failure('请输入拒绝理由'); } $activity->is_hidden = $request->is_hidden; } $activity->save(); $user_id = $activity->creator; // dd($user_id); $user = User::find($user_id); if ($is_hidden == 0 && !empty($user)){ \CommonUtilsService::sendActivityNoticeToUserV3($activity,$user); } //创建sku $activity_sku = $activity->sku; $skus = $request->input('skus', []); if (is_array($skus) && count($skus)) { if (empty($activity_sku)) { $activity->sku()->create(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]); }else{ $activity->sku()->update(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]); } $history = ActivityShareHistory::where('activity_id',$activity_id)->delete(); return $this->success('ok'); $activity_sku = $activity->sku; } // else{ // $activity->sku()->delete(); // } ActivityShareHistory::where('activity_id',$activity_id)->delete(); return $this->success('ok'); } /** * 创建活动 * @param Request $request [description] * @return [type] [description] */ public function activityCreate(Request $request) { try { $theme = $request->input('theme'); $poster = $request->input('poster'); $host = $request->input('host'); $is_online = $request->input('is_online',0);//线上还是线下 1线上 0线下 $pay_type = $request->input('pay_type','cash'); $can_repeat_sign = $request->input('can_repeat_sign','0'); //'能否重复报名 0:否 1:可 $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'paas_admin') { $paas_obj = $request->session()->get('paas_obj'); $host = $paas_obj->title; } $fee = $request->input('fee', 0); if (!is_numeric($fee)) { return $this->failure('请输入正确费用'); }; if(empty($request->address)){ return $this->failure('请选择地址'); } \DB::beginTransaction(); $detail = $request->input('detail'); $detail_path = $request->input('detail_path'); $start_time = $request->input('start_time'); $end_time = $request->input('end_time'); $apply_deadline = $request->input('apply_deadline',$end_time); $province = $request->input('province'); $city = $request->input('city'); $dist = $request->input('dist'); $address = $request->input("address"); $location_latitude = $request->input('location_latitude'); $location_longitude = $request->input('location_longitude'); $detail_pic = $request->input('detail_pic'); $class_id = $request->input('class_id'); $activity_description = $request->input('activity_description'); $content = $request->input('content'); $activity = new Activity(); $activity->can_repeat_sign = $can_repeat_sign; $activity->activity_description = $activity_description; $activity->pay_type = $pay_type; if ($pay_type == 'coin') { if ($request->can_coin_amount < ($fee * 10) && $request->can_coin_amount) { $activity->can_coin_amount = $request->can_coin_amount; $activity->can_cash_amount = $request->can_coin_amount / 10; //福币和现金比例 10:1; }else{ return $this->failure('未输入可抵扣福币数量或可抵扣福币数量达到上限'); } }else{ $activity->can_coin_amount = null; $activity->can_cash_amount = null; } $activity->class_id = $class_id; $activity->is_online = $is_online;//线上还是线下 1线上 0线下 $activity->theme = $theme; $activity->poster = $poster; $activity->host = $host; $activity->fee = $fee; $activity->content = $content; $activity->detail = $detail; $activity->detail_path = $detail_path; $activity->detail_pic = json_encode($detail_pic); $activity->start_time = $start_time; $activity->end_time = $end_time; $activity->province = $province; $activity->city = $city; $activity->dist = $dist; $activity->address = $address; $activity->apply_deadline = $apply_deadline; $activity->location_longitude = $location_longitude; $activity->location_latitude = $location_latitude; $activity->is_hidden = 1;//创建活动时 默认审核中 需审核 $activity->creator = auth()->id(); $activity->save(); //创建活动需要审核 发送微信模板消息给:13377553550 if (!strstr($activity->theme, '测试')){ $user_id = auth()->id(); $user = User::find($user_id); \CommonUtilsService::sendActivityNoticeToUserV2($activity,$user); } //创建sku $activity_sku = $activity->sku; $skus = $request->input('skus', []); if (is_array($skus) && count($skus)) { $activity->sku()->create(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]); } $admin_type = $request->session()->get('admin_type'); if ($admin_type == 'paas_admin') {//平台管理员 //平台信息 $paas_obj = $admin_type = $request->session()->get('paas_obj'); PaasActivity::create([ 'paas_id'=>$paas_obj->id, 'activity_id'=>$activity->id, ]); } \DB::commit(); return $this->success('ok', $activity); } catch (\Exception $e) { \DB::rollBack(); \Log::error($e->getMessage().' line:'.$e->getLine()); return $this->failure('活动创建失败'); } } //活动下架重新上架 public function refreshActivity(Request $request,$activity_id){ $activity = Activity::find($activity_id); if(!$activity) return $this->failure('活动不存在'); $is_hidden = $request->input('is_hidden',1); $user = auth()->user(); //上架活动需要审核 发送微信模板消息给:13377553550 if (!strstr($activity->theme,'测试')){ $user_id = auth()->id(); $user = User::find($user_id); \CommonUtilsService::sendActivityNoticeToUserV2($activity,$user); } $activity->is_hidden = $is_hidden; $activity->is_deadline = 0; $activity->save(); return $this->success('ok',$activity); } /** * 活动分类列表 */ public function activityClasses(Request $request, ActivityClass $activity_class) { $activity_classes = $activity_class->orderBy('id', 'desc'); $keyword = request()->input('keyword'); if($keyword){ $activity_classes = $activity_classes->where('title', 'like', '%'.$keyword.'%'); } if ($request->input('nopage', 0)) { $activity_classes = $activity_classes->get(); }else{ $activity_classes = $activity_classes->paginate(); } return $this->success('ok', $activity_classes); } /** * 添加活动分类 */ public function storeActivityClass(Request $request, ActivityClass $activity_class) { $title = $request->input('title'); if (empty($title)) { return $this->failure('请输入标题'); } $result = $this->checkActivityClass($title); if ($result) { return $this->failure('分类已存在!'); } $class = $activity_class->create([ 'title'=>$title ]); return $this->success('ok', $class); } /** * 修改活动分类 */ public function updateActivityClass(Request $request, ActivityClass $activity_class) { $title = $request->input('title'); if (empty($title)) { return $this->failure('请输入标题'); } $result = $this->checkActivityClass($title); if ($result) { return $this->failure('分类已存在!'); } $class = $activity_class->update([ 'title'=>$title ]); return $this->success('ok', $class); } public function checkActivityClass($title) { $count = ActivityClass::where('title', $title)->count(); return $count?1:0; } /** * 活动分类详情 */ public function activityClass(Request $request, ActivityClass $activity_class) { return $this->success('ok', $activity_class); } /** * 删除修改活动 */ public function deleteActivityClass(Request $request, ActivityClass $activity_class) { $class = $activity_class->delete(); return $this->success('ok', $class); } /** * #活动现场 * 活动内相互关注人列表 * @param Request $request [description] * @return [type] [description] */ public function activityAttentions(Request $request, $activity_id) { $user_ids = ActivityMember::whereHas('user', function($sql){ $sql->where('type', 'single'); })->where('activity_id', $activity_id)->distinct('user_id')->pluck('user_id'); $users = Followable::whereIn('user_id', $user_ids)->whereIn('followable_id', $user_ids)->where('followable_type', 'follow')->select(DB::raw('count(*) as follower_count, followable_id'))->groupBy('followable_id')->orderBy('follower_count')->paginate(); foreach ($users as $u) { $user = User::where('id', $u->followable_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first(); if (!empty($user)) { $u->name = $user->name; $u->circle_avatar = $user->circle_avatar; $u->sex = $user->sex; $u->industry_sub = $user->industry_sub; }else{ $u->name = '未知'; $u->circle_avatar = '未知'; $u->sex = '未知'; $u->industry_sub = '未知'; } $file = ProfileCourtship::where('user_id', $u->followable_id)->select('user_id', 'birthday', 'stature', 'city')->first(); if (empty($file)) { $u->industry_sub = '未知'; $u->age = '未知'; $u->stature = '未知'; $u->city = '未知'; }else{ $u->industry_sub = $industry_sub?$industry_sub:'未知'; $u->age = $file->birthday?$this->getAge($file->birthday):'未知'; $u->stature = $file->stature?$file->stature:'未知'; $u->city = $file->city?$file->city:'未知'; } } return $this->success('ok', $users); } /** * #活动现场 * 受欢迎 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activityWelcome(Request $request, $activity_id) { $activity = Activity::findOrFail($activity_id); $welcome_users = DB::table('activity_votes')->where('activity_id', $activity_id)->get(); $newArr = []; foreach ($welcome_users as $welcome_user){ $newArr[$welcome_user->vote_user_id][] = $welcome_user->user_id; } $filter = []; $glArr = []; foreach ($newArr as $k => $v){ $user_ids = DB::table('activity_votes')->whereIn('vote_user_id', array_diff($v, $filter))->where('user_id', $k)->pluck('vote_user_id'); array_push($filter, $k); foreach ($user_ids as $user_id){ $user = User::where('id', $k)->select('id', 'name', 'circle_avatar')->first(); $other_user = User::where('id', $user_id)->select('id', 'name', 'circle_avatar')->first(); $glArr[] = [ 'user' => $user, 'other_user' => $other_user ]; } } //男生受欢迎 $male_user_ids = ActivityMember::where('activity_id', $activity_id)->where('sex', 1)->pluck('user_id'); $welcome_male_users = DB::table('activity_votes')->whereIn('vote_user_id', $male_user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(3)->get(); foreach ($welcome_male_users as $welcome_male_user) { $user = User::where('id', $welcome_male_user->vote_user_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first(); if (!empty($user)) { $welcome_male_user->name = $user->name; $welcome_male_user->circle_avatar = $user->circle_avatar; $welcome_male_user->sex = ActivityMember::where('user_id', $user->id)->where('activity_id', $activity_id)->value('sex'); $welcome_male_user->industry_sub = $user->industry_sub; }else{ $welcome_male_user->name = '未知'; $welcome_male_user->circle_avatar = '未知'; $welcome_male_user->sex = '未知'; $welcome_male_user->industry_sub = '未知'; } $file = ProfileCourtship::where('user_id', $welcome_male_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first(); if (empty($file)) { $welcome_male_user->industry_sub = '未知'; $welcome_male_user->age = '未知'; $welcome_male_user->stature = '未知'; $welcome_male_user->city = '未知'; }else{ $welcome_male_user->industry_sub = $user->industry_sub?$user->industry_sub:'未知'; $welcome_male_user->age = $file->birthday?$this->getAge($file->birthday):'未知'; $welcome_male_user->stature = $file->stature?$file->stature:'未知'; $welcome_male_user->city = $file->city?$file->city:'未知'; } } $female_user_ids = ActivityMember::where('activity_id', $activity_id)->where('sex', 2)->pluck('user_id'); $welcome_female_users = DB::table('activity_votes')->whereIn('vote_user_id', $female_user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(3)->get(); foreach ($welcome_female_users as $welcome_female_user) { $user = User::where('id', $welcome_female_user->vote_user_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first(); if (!empty($user)) { $welcome_female_user->name = $user->name; $welcome_female_user->circle_avatar = $user->circle_avatar; $welcome_female_user->sex = ActivityMember::where('user_id', $user->id)->where('activity_id', $activity_id)->value('sex'); $welcome_female_user->industry_sub = $user->industry_sub; }else{ $welcome_female_user->name = '未知'; $welcome_female_user->circle_avatar = '未知'; $welcome_female_user->sex = '未知'; $welcome_female_user->industry_sub = '未知'; } $file = ProfileCourtship::where('user_id', $welcome_female_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first(); if (empty($file)) { $welcome_female_user->industry_sub = '未知'; $welcome_female_user->age = '未知'; $welcome_female_user->stature = '未知'; $welcome_female_user->city = '未知'; }else{ $welcome_female_user->industry_sub = $user->industry_sub?$user->industry_sub:'未知'; $welcome_female_user->age = $file->birthday?$this->getAge($file->birthday):'未知'; $welcome_female_user->stature = $file->stature?$file->stature:'未知'; $welcome_female_user->city = $file->city?$file->city:'未知'; } } $matches = ActivityMatch::whereNotNull('other_user_order')->orderBy('rank', 'asc')->get(); foreach ($matches as $matche) { $user = User::where('id', $matche->user_id)->select('id', 'name', 'circle_avatar')->first(); $matche->user = $user; $other_user = User::where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar')->first(); $matche->other_user = $other_user; } $qrcode = Activity::where('id', $activity_id)->value('vote_qrcode'); return $this->success('ok', compact('welcome_male_users', 'welcome_female_users', 'qrcode', 'matches', 'glArr')); } /** * 活动签到 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activitySignin(Request $request, User $user, $activity_id) { $activity = Activity::findOrFail($activity_id); $sign_in = $request->input('sign_in',0); $member = ActivityMember::with('user:id,nickname,sex,name')->where('activity_id', $activity_id)->where('is_joined', 1)->orderBy('updated_at', 'desc')->whereHas('user'); if($sign_in == 1){ $member = $member->where('sign_in',1); }else{ $member = $member->where(function($sql) use($sign_in){ $sql->where('sign_in','<>',1)->orWhereNull('sign_in'); }); } $member = $member->paginate(); foreach ($member as $value){ $value->avatar = $user->userAvatar($value->user_id); } $qrcode = $activity->sign_in_qrcode; return $this->success('ok', compact('qrcode', 'member')); } /** * 普通投票 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activityVote(Request $request, User $user, $activity_id) { $activity = Activity::findOrFail($activity_id); $user_ids = ActivityMember::where('activity_id', $activity_id)->pluck('user_id'); $ticket_users = DB::table('activity_votes')->where('activity_id', $activity_id)->whereIn('vote_user_id', $user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id, activity_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(15)->get(); foreach ($ticket_users as $ticket_user) { $userInfo = User::where('id', $ticket_user->vote_user_id)->select('id', 'name', 'sex','nickname', 'industry_sub')->first(); if (!empty($userInfo)) { $member = ActivityMember::where('user_id', $userInfo->id)->where('activity_id', $activity_id)->select('sex', 'mobile')->first(); $ticket_user->name = $userInfo->name ? $userInfo->name : $userInfo->nickname; $exist_user = User::where('id',$userInfo->id)->first(); if (!empty($exist_user)) { $ticket_user->circle_avatar = $user->userAvatar($userInfo->id); } $ticket_user->sex = $userInfo->sex; $ticket_user->mobile = $member->mobile; $ticket_user->industry_sub = $userInfo->industry_sub; }else{ $ticket_user->name = '未知'; $ticket_user->circle_avatar = '未知'; $ticket_user->sex = '未知'; $ticket_user->industry_sub = '未知'; } $file = ProfileCourtship::where('user_id', $ticket_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first(); if (empty($file)) { $ticket_user->industry_sub = '未知'; $ticket_user->age = '未知'; $ticket_user->stature = '未知'; $ticket_user->city = '未知'; }else{ // $ticket_user->industry_sub = $userInfo->industry_sub?$userInfo->industry_sub:'未知'; $ticket_user->age = $file->birthday?$this->getAge($file->birthday):'未知'; $ticket_user->stature = $file->stature?$file->stature:'未知'; $ticket_user->city = $file->city?$file->city:'未知'; } } $time_users = DB::table('activity_votes')->where('activity_id', $activity_id)->select('id','user_id', 'vote_user_id', 'created_at')->orderBy('id', 'desc')->paginate(); foreach ($time_users as $time_user) { $vote_user = ActivityMember::withTrashed()->with('user:id,nickname,sex,mobile,name')->whereHas('user')->where('user_id', $time_user->user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first(); //投票用户 if (!empty($vote_user)) { $vote_user->avatar = $user->userAvatar($vote_user->user_id); } $time_user->vote_user = $vote_user; $other_user = ActivityMember::withTrashed()->with('user:id,nickname,sex,mobile,name')->whereHas('user')->where('user_id', $time_user->vote_user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first();//被投票用户 if(!empty($other_user)){ $other_user->avatar = $user->userAvatar($other_user->user_id); } $time_user->be_vote_user = $other_user; } //普通被投票用户 $common_vote_user_ids = ActivityVote::where('activity_id',$activity_id)->pluck('vote_user_id')->toArray();//普通被投票用户 $common_vote_user_ids = array_unique($common_vote_user_ids);//去重 普通被投票用户 $commons = []; if(!empty($common_vote_user_ids)){ foreach ($common_vote_user_ids as $common_vote_user_id) { $user_idss = ActivityVote::where('activity_id',$activity_id)->where('vote_user_id',$common_vote_user_id)->pluck('user_id')->toArray(); $vote_user_ids = ActivityVote::where('activity_id',$activity_id)->where('user_id',$common_vote_user_id)->pluck('vote_user_id')->toArray(); $final_ids = array_intersect($user_idss,$vote_user_ids); //拿交集 即互投 if(!$final_ids) continue; $final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->get(); $count = count($final_ids); $user_info = User::with('profileCourtship:user_id,city')->where('id', $common_vote_user_id)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->first(); if (!empty($user_info)) { $user_info->circle_avatar = $user->userAvatar($user_info->id); } $commons[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user); } } //未参与普通投票用户 $user_ids = $user_ids->toArray();//参与活动成员id $vote_users_ids = ActivityVote::where('activity_id',$activity_id)->pluck('user_id')->toArray();//参与投票用户id $no_vote_user_ids = array_diff($user_ids,$vote_users_ids);//未参与投票用户id $no_vote_user = User::whereIn('id',$no_vote_user_ids)->select('id','sex','name','nickname','mobile','app_avatar','circle_avatar')->paginate(); $qrcode = $activity->vote_qrcode; return $this->success('ok', compact('qrcode', 'ticket_users', 'time_users','commons','no_vote_user')); } /** * 心仪投票 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activitySetvote(Request $request, User $user, $activity_id) { $activity = Activity::findOrFail($activity_id); $time_users = DB::table('activity_sex_votes')->where('activity_id', $activity_id)->select('user_id', 'vote_user_id', 'created_at')->orderBy('id', 'desc')->paginate(16); foreach ($time_users as $time_user) { $user_info = ActivityMember::with('user:id,nickname,mobile,sex,name')->whereHas('user')->where('user_id', $time_user->user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first(); if (!empty($user_info)) { $user_info->avatar = $user->userAvatar($user_info->user_id); } $time_user->vote_user = $user_info; $other_user = ActivityMember::with('user:id,nickname,mobile,sex,name')->whereHas('user')->where('user_id', $time_user->vote_user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first(); if (!empty($other_user)) { $other_user->avatar = $user->userAvatar($other_user->user_id); } $time_user->be_vote_user = $other_user; } // $matches = ActivitySexMatch::whereNotNull('other_user_order')->where('activity_id', $activity_id)->orderBy('updated_at', 'desc')->get(); // foreach ($matches as $matche) { // $user_info = User::with('profileCourtship:user_id,city')->where('id', $matche->user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first(); // if (!empty($user_info)) { // $user_info->circle_avatar = $user->userAvatar($user_info->id); // } // $matche->user = $user_info; // $other_user = User::with('profileCourtship:user_id,city')->where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first(); // if (!empty($other_user)) { // $other_user->circle_avatar = $user->userAvatar($other_user->id); // } // $matche->other_user = $other_user; // } $qrcode = $activity->vote_set_qrcode; $match_vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->pluck('vote_user_id')->toArray();//心仪被投票用户 $match_vote_user_ids = array_unique($match_vote_user_ids);//去重 心仪被投票用户 $matches = []; if(!empty($match_vote_user_ids)){ foreach ($match_vote_user_ids as $match_vote_user_id) { $user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('vote_user_id',$match_vote_user_id)->pluck('user_id')->toArray(); $vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('user_id',$match_vote_user_id)->pluck('vote_user_id')->toArray(); $final_ids = array_intersect($user_ids,$vote_user_ids); //拿交集 即互投 if(!$final_ids) continue; $final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->get(); $count = count($final_ids); $user_info = User::with('profileCourtship:user_id,city')->where('id', $match_vote_user_id)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->first(); if (!empty($user_info)) { $user_info->circle_avatar = $user->userAvatar($user_info->id); } $matches[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user); } } $user_ids = ActivityMember::where('activity_id',$activity_id)->pluck('user_id')->toArray(); //参与活动成员id $user_ids = array_unique($user_ids); $sexvote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->pluck('user_id')->toArray();//参与心仪投票 $sexvote_user_ids = array_unique($sexvote_user_ids); $no_sexvote_user_ids = array_diff($user_ids,$sexvote_user_ids);//未参与id $no_sexvote_user = User::whereIn('id',$no_sexvote_user_ids)->select('id','sex','name','nickname','mobile','app_avatar','circle_avatar')->paginate(); return $this->success('ok', compact('qrcode', 'matches', 'time_users','no_sexvote_user')); } //测试心仪互投 public function testVoteEachother(Request $request){ $activity_id = $request->activity_id; $match_vote_user_id = $request->match_vote_user_id; $user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('vote_user_id',$match_vote_user_id)->pluck('user_id')->toArray(); // dd($user_ids); $vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('user_id',$match_vote_user_id)->pluck('vote_user_id')->toArray(); // dd($vote_user_ids); $final_ids = array_intersect($user_ids,$vote_user_ids); //拿交集 即互投 // dd($final_ids); $final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile')->get(); $count = count($final_ids); $user_info = User::with('profileCourtship:user_id,city')->where('id', $match_vote_user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first(); // if (!empty($user_info)) { // $user_info->circle_avatar = $user->userAvatar($user_info->id); // } $matches[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user); return $this->success('ok',$matches); } /** * 活动现场 * 匹配 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activityMatch(Request $request, $activity_id) { $matches = ActivityMatch::whereNotNull('other_user_order')->orderBy('rank', 'asc')->get(); foreach ($matches as $matche) { $user = User::where('id', $matche->user_id)->select('id', 'name', 'circle_avatar')->first(); $matche->user = $user; $other_user = User::where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar')->first(); $matche->other_user = $other_user; } return $this->success('ok', $matches); } /** * 签到成员 */ public function activitySignInMembers(Request $request, $activity_id) { $male_count = ActivityMember::where("activity_id", $activity_id)->where('sex', 1)->where('sign_in', 1)->count(); $female_count = ActivityMember::where("activity_id", $activity_id)->where('sex', 2)->where('sign_in', 1)->count(); $sign_in_qrcode = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/201812/25/1545732081packet_qrcode.png'; return $this->success('ok', compact('male_count', 'female_count', 'sign_in_qrcode')); } /** * 活动订单 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function activityOrders(Request $request, $activity_id) { $orders = Order::with('user')->where('type', 'activity')->where('type_id', $activity_id)->orderBy('id', 'desc')->paginate(); return $this->success('ok', $orders); } /** * 置顶活动 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function topActivity(Request $request, $activity_id) { $this->activityCon->topActivity($activity_id); return $this->success('ok'); } /** * 取消置顶 * @param [type] $activity_id [description] * @return [type] [description] */ public function cancelActivityTop(Request $request, $activity_id) { $this->activityCon->cancelActivityTop($activity_id); return $this->success('ok'); } /** * 取消活动 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function cancelActivity(Request $request, $activity_id) { $this->activityCon->cancelActivity($request, $activity_id); } /** * 复制活动 * @param Request $request [description] * @param [type] $activity_id [description] * @return [type] [description] */ public function copyActivity(Request $request, $activity_id) { $activity = $this->activityCon->copyActivityV2($request, $activity_id); return $this->success('ok', $activity); } /** * 活动成员 * @param Request $request [description] * @param Activity $activity [description] * @return [type] [description] */ public function activityMembers(Request $request, Activity $activity) { $keyword = $request->keyword; $user_ids = Order::where('type','activity')->where('type_id',$activity->id)->where('pay_status','PAID')->pluck('user_id')->toArray(); // $user_ids = array_unique($user_ids); // dd($user_ids); $nopage = $request->input('nopage', 0); if ($nopage) { $members = $activity->activityMember()->get(); } $members = $activity->activityMember()->with('user:id,name,nickname,sex,mobile,type,circle_avatar,app_avatar,created_at')->whereHas('user')->orderBy('id', 'desc')->select('id','user_id','activity_id','linkmen','name','mobile','avatar','sex', 'is_joined','sign_in','from_openid','created_at'); if ($keyword) { $keyword = trim($keyword); $members = $members->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('name','like','%'.$keyword.'%')->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $members = $members->paginate(15); foreach($user_ids as $user_id){ foreach ($members as $member) { if(!empty($member->user->id)){ if ($member->user->id == $user_id) { $order = Order::where('type','activity')->where('type_id',$activity->id)->where('user_id',$user_id)->where('pay_status','PAID')->first(); $goods = $order->goods; // dd($goods); $start = strpos($goods, '【'); $end = stripos($goods, '】'); // dd($start); $str = substr($goods,$start,$end); $member->user->remarkV2 = $str; } } } } foreach ($members as $member) { $result = $member->canRefund(); $member->can_refund = $result['canRefund']; $member->is_refund = $result['isRefund']; $member->sex = !empty($member->user) ? $member->user->sex : 0; $member->birthday = '无'; $member->city = '未填写'; if(!empty($member->user)) { switch ($member->user->type) { case 'single': $member->birthday = !empty($member->user->profileCourtship) ? $member->user->profileCourtship->birthday : '无'; $member->city = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写'; unset($member->user->profileCourtship); break; case 'marriage': $member->birthday = !empty($member->user->profileMarriage) ? $member->user->profileMarriage->birthday : '无'; $member->birthday = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写'; unset($member->user->profileMarriage); break; default: $member->birthday = !empty($member->user->profileCourtship) ? $member->user->profileCourtship->birthday : '无'; $member->birthday = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写'; unset($member->user->profileCourtship); break; } } $order = $member->activityOrder(); $member->remark = $order?$order->remark:null; $member->from_user = !empty($order) ? $order->from_user : ''; $member->price = !empty($order) ? $order->price : '0.00'; //分类 $activity->class; if ($member->linkmen) { if (!is_array($member->linkmen)) { $linkmen = json_decode($member->linkmen,true); $member->linkmen = $linkmen; } } if($result['isRefund']){ $refund_order = $member->refundOrder(); $member->refund_reason = !empty($refund_order) ? $refund_order->remark : '无'; } } return $this->success('ok', $members); } /** * 发送系统消息之活动成员 * @param Request $request [description] * @param Activity $activity [description] */ public function getMerchantActivityMembers(Request $request, $activity_id){ $merchant_user_ids = TouristOrder::where('type','community')->where('type_id',$activity_id) ->pluck('account_id')->toArray(); $user_ids = MerchantUser::whereIn('id',$merchant_user_ids)->whereNotNull('user_id') ->pluck('user_id')->toArray(); $users = User::whereIn('id',$user_ids)->select('id','nickname','mobile')->get(); return $this->success('ok',$users); } /** * 发送消息之活动列表 * @return JsonResponse|string */ public function getMerchantActivityList(Request $request){ $keyword = $request->keyword; $activity = CommunityActivity::where('merchant_id',491) ->when($keyword,function ($query) use($keyword){ $query->where('title','like','%'.$keyword.'%'); }) ->orderBy('id','desc')->select('id','title')->limit(20)->get(); return $this->success('ok',$activity); } public function activityMemberRefund(Request $request, ActivityMember $member) { //判断是否支付 $order = Order::where('type_id', $member->activity_id)->where('user_id', $member->user_id) ->where('type', 'activity')->where('pay_status', 'PAID') ->first(); // return $this->failure('功能完善中'); if (empty($order)) { return $this->failure('没有支付订单'); } //退款金额 $refund_cash = $request->refund_cash ? $request->refund_cash : $order->price; if (!is_numeric($refund_cash) || $refund_cash > $order->price) { return $this->failure('请输入正确的退款金额 退款金额不能超过报名金额'); } $refund_order = RefundOrder::where([ 'user_id'=>$member->user_id, 'type'=>'activity', 'trade_no'=>$order->trade_no, ])->first(); if ($refund_order) { return $this->failure('退款已存在'); } // $members = ActivityMember::where('id',$member->id)->first(); // if($members->sign_in == 1) return $this->failure('已签到,不能退款'); $refund_trade_no = $this->getRefundTradeNo(); $total_fee = $order->price; $refund_fee = $refund_cash; $array = ['refund_desc' => '活动退款']; $result = \WechatService::orderRefund($order->trade_no, $refund_trade_no, $total_fee, $refund_fee, $array); if (is_array($result) && $result['status'] === true) { RefundOrder::create([ 'user_id'=>$member->user_id, 'type'=>'activity', 'trade_no'=>$order->trade_no, 'refund_trade_no'=>$refund_trade_no, 'total_fee'=>$total_fee, 'refund_fee'=>$refund_fee, 'is_hook'=>0, 'remark'=>$request->remark, 'operator'=>auth()->id(), ]); ActivityMember::where('id',$member->id)->delete(); return $this->success('退款成功'); }else{ return $this->failure('退款失败'); } } //活动已退款列表 public function activityrefundMemberList(Request $request,$activity_id){ $keyword = $request->keyword; $trade_nos = Order::where('type','activity')->where('type_id',$activity_id)->where('pay_status','REFUND')->pluck('trade_no')->toArray(); $refunds = RefundOrder::with('user','operator')->whereIn('trade_no',$trade_nos)->where('is_hook',1)->orderBy('created_at','desc'); if ($keyword) { $keyword = trim($keyword); $refunds = $refunds->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $refunds = $refunds->paginate(); return $this->success('ok',$refunds); } /** * 删除活动 * @param Request $request [description] * @param Activity $activity [description] * @return [type] [description] */ public function deleteActivity(Request $request, Activity $activity) { $activity->delete(); return $this->success('ok'); } //活动报名用户 public function memberExcel(Request $request, $activity_id) { $result = $this->activityMemberExport($activity_id); return $result; } //删除报名成员 public function delActivityMember(Request $request, $activity_member_id){ $activity_id = ActivityMember::where('id', $activity_member_id)->value('activity_id'); $activity = Activity::find($activity_id); if(!empty($activity) && $activity->fee != 0.00){ return $this->failure('付款过的用户不能删除'); } ActivityMember::where('id',$activity_member_id )->delete(); return $this->success('ok'); } // //折线图展示活动报名人数 1默认最近七场已结束的活动 2时间筛选 //报名人数 注册人数 老用户 活动总营收 public function participantsCount(Request $request){ $start_time = $request->start_time; //开始和结束时间 区间 $end_time = $request->end_time; $date = date('Y-m-d H:i:s');//当前时间 if ($start_time && $end_time){ $activity_ids = Activity::where('end_time','<',$date)->orderBy('end_time','desc')->whereBetween('created_at',[$start_time,$end_time])->orderBy('end_time','desc')->pluck('id')->toArray(); }else{ $activity_ids = Activity::where('end_time','<',$date)->orderBy('end_time','desc')->limit(7)->pluck('id')->toArray(); } $key = json_encode($activity_ids); if (Cache::has($key)) { // dd(1); $data = Cache::get($key); return $this->success('ok',$data); } $activity_member_counts = []; //参与活动人数 $activity_theme_counts = []; //活动主题 $activity_regist_counts = [];//活动注册人数 $activity_profit_counts = [];//活动总营收 foreach ($activity_ids as $activity_id) { $activity = Activity::find($activity_id); $activity_member_counts [] = ActivityMember::where('activity_id',$activity_id)->where('is_joined',1)->count(); $activity_theme_counts [] = $activity->theme; $activity_regist_counts [] = User::where('from_activity_id',$activity_id)->count(); $activity_profit_counts [] = Order::where('type','activity')->where('type_id',$activity_id)->where('pay_status','PAID')->sum('price'); } $data = ['activity_member_counts'=>$activity_member_counts,'activity_theme_counts'=>$activity_theme_counts, 'activity_regist_counts'=>$activity_regist_counts,'activity_profit_counts'=>$activity_profit_counts ]; Cache::put($key,$data,86400); // dd(2); return $this->success('ok',compact('activity_member_counts','activity_theme_counts','activity_regist_counts','activity_profit_counts')); } //保存活动二维码 public function saveActivityQrcode(Request $request ,$activity_id){ $activity = Activity::find($activity_id); if(empty($activity)) return $this->failure('活动id不存在'); $place = $request->place; if (empty($place)) return $this->failure('请输入门店名'); if ($activity->can_repeat_sign == 1 && $place) { $app = EasyWechat::miniProgram(); $data = []; $data['is_hyaline'] = true; $response = $app->app_code->get('/pages/party/detail?party_id='.$activity->id.'&place='.$place, $data); $time = time(); $path = $time.'activity_qrocde.png'; $filename = $response->saveAs(storage_path('qrcode'), $path); $qrcode_path = storage_path("/qrcode/".$time."activity_qrocde.png"); if(file_exists($qrcode_path)){ $qrcode = $this->uploadFile($qrcode_path); if(empty($activity->qrcode)){ //首次创建 二维码为空 // dd(2); $activity->qrcode = json_encode($qrcode); $activity->save(); }else{ $old_qrcode = json_decode($activity->qrcode,true); // dd($old_qrcode); if(!is_array($old_qrcode)){ $old_qrcode = explode('****',$old_qrcode); // dd(3); } // dd(5); array_push($old_qrcode,$qrcode); $activity->qrcode = json_encode($old_qrcode); $activity->save(); } try{ unlink($qrcode_path); return $this->success('ok',$activity); }catch(Exception $e) { return $this->failure($e->getMessage()); } } } } //生成签到二维码 public function saveSignInQrcode(Request $request ,$activity_id){ $activity = Activity::find($activity_id); if(empty($activity)) return $this->failure('活动id不存在'); $place = $request->place; if (empty($place)) return $this->failure('请输入门店名'); if ($activity->can_repeat_sign == 1 && $place) { $app = \WechatService::app(); $data = []; $data['is_hyaline'] = true; $response = $app->app_code->get('pages/party/signSuccess?party_id='.$activity->id.'&place='.$place, $data); $time = time().'rand'.mt_rand(1000, 9999); $path = $time.'sign_in_qrcode.png'; $filename = $response->saveAs(storage_path('qrcode'), $path); $qrcode_path = storage_path("qrcode/".$time."sign_in_qrcode.png"); if(file_exists($qrcode_path)){ $qrcode = $this->uploadFile($qrcode_path); $new_qrcode = ['place'=>$place,'qrcode'=>$qrcode]; if(empty($activity->sign_in_qrcode)){ //首次创建 二维码为空 // dd(2); $activity->sign_in_qrcode = json_encode($new_qrcode,JSON_UNESCAPED_UNICODE); $activity->save(); return $this->success('ok'); }else{ $old_qrcode = json_decode($activity->sign_in_qrcode,true);//之前就有的 // dd($old_qrcode); if(!is_array($old_qrcode)){ $old_qrcode = explode('****',$old_qrcode); // dd(3); } // dd(5); $final_qrcode = array_merge_recursive($old_qrcode,$new_qrcode); $activity->sign_in_qrcode = json_encode($final_qrcode,JSON_UNESCAPED_UNICODE); $activity->save(); return $this->success('ok'); } try{ unlink($qrcode_path); }catch(\Exception $e) { return $this->failure($e->getMessage()); } } } } public function signInActivityInfo(Request $request ,$activity_id){ $activity = Activity::find($activity_id); if ($activity->can_repeat_sign == 1 && !empty($activity->sign_in_qrcode)) { $activity->sign_in_qrcode = json_decode($activity->sign_in_qrcode); } // dd($activity->sign_in_qrcode->place); if (empty($activity)) return $this->failure('活动id不存在'); $desc = $request->desc; $count = []; if (is_array($activity->sign_in_qrcode->place)) { foreach ($activity->sign_in_qrcode->place as $place) { $new_count = ActivityMember::where('is_joined',1)->where('sign_in',1)->where('activity_id',$activity_id)->where('desc',$place)->count(); $count [] = ['place'=>$place,'count'=>$new_count]; } }else{ $new_count = ActivityMember::where('is_joined',1)->where('sign_in',1)->where('activity_id',$activity_id)->where('desc',$activity->sign_in_qrcode->place)->count(); $count [] = ['place'=>$activity->sign_in_qrcode->place,'count'=>$new_count]; } $keyword = $request->keyword; $sign_in = $request->input('sign_in',0); $members = ActivityMember::with('user:id,nickname,mobile,sex,app_avatar,circle_avatar')->where('is_joined',1)->where('sign_in',$sign_in)->where('activity_id',$activity_id)->where('desc',$desc); if ($keyword) { $keyword = trim($keyword); $members = $members->whereHas('user',function($sql) use($keyword){ $sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $members = $members->orderBy('created_at','desc')->paginate(); return $this->success('ok',compact('count','members')); } /** *is_hidden 0:展示 1:隐藏 2:下架 3: 审核通过不显示 */ //所有已结束的活动 归为已下架 public function changeActivityStatus(Request $request){ $now_time = date('Y-m-d H:i:s'); Activity::whereIn('is_hidden',[0,3])->where('end_time','<',$now_time)->update(['is_hidden'=>2]); // foreach ($activities as $activity) { // if ($activity->end_time < $now_time) { // $activity->is_hidden = 2; // $activity->save(); // } // } return $this->success('ok'); } //删除二维码 public function deleteQrcode(Request $request){ $activity_id = $request->activity_id; $place = $request->desc; $activity = Activity::find($activity_id); $activity->sign_in_qrcode = null; $activity->save(); return $this->success('ok'); } public function testSendTemplateMsg(Request $request){ $now_date = date('Y-m-d H:i:s'); $now_time = time(); $activities = CommunityActivity::whereNotNull('end_time')->where('type','business')->where('class','one')->get(); $list = []; foreach ($activities as $key => $activity) { //未结束或结束不到一小时 不发 if($activity->end_time > $now_date || $now_time - strtotime($activity->end_time) < 3600) continue; if($this->isSendNotice($activity->id)) continue; //发送通知的活动id $list[] = $activity->id; } // dd($list); if(empty($list)) return ; foreach ($list as $value) { //value 活动id $com = CommunityActivity::where('id',$value)->first(); //已经评价过的不发 $orders = TouristOrder::where('type','community')->where('type_id',$value)->whereIn('pay_status',[1,4])->whereNull('Praise')->get(); foreach ($orders as $order) { $data['touser'] = $order->openid; $data['touser'] = 'oPC_2vnSECnYp5p--uaq3rca3Ry0'; $data['template_id'] = '9aPSHmzsULb-YnSkJ1Y4B-larsOKdURX6UlfatPZxgY'; $data['activity_id'] = $value; $data['url'] = env('APP_URL').'/pu/#/mySignUp?merchant_id='.$com->merchant_id.'&actioveLabel=1'; $data['data'] = [ 'first' => '您好,你参与的活动《'.$com->title.'》已经结束', 'keyword1' =>$com->title, 'keyword2' =>$com->end_time, 'remark' => '点击进入详情页可对我们的活动进行评价哦!', 'activity_id'=>$value ]; SendTemplateMsg::dispatch($data)->onQueue('template_message'); } } } //判断该活动是否发送过通知 public function isSendNotice($activity_id){ $log = TemplateMsgLog::where('user_id',$activity_id)->where('template_id','9aPSHmzsULb-YnSkJ1Y4B-larsOKdURX6UlfatPZxgY')->first(); if($log) return 1; return 0; } public function getParams($activity,$user){ $param['activity_id'] = $activity->id; $param['openid'] = $user->wechat ? $user->wechat->openid : null; $param['nickname'] = $user->nickname ? $user->nickname : $user->name; $param['theme'] = $activity->theme; $param['time'] = $activity->start_time; $param['desc'] = '点击参与活动问卷调查,帮助我们做得更好。'; return $param; } //清除活动投票二维码 public function clearVoteQrcode(Request $request){ $activity_id = $request->activity_id; $activity = Activity::find($activity_id); $activity->vote_qrcode = null; $activity->vote_set_qrcode = null; $activity->save(); return $this->success('ok'); } // 家的味道 // 订单列表 public function familyOrders(Request $request){ $order_status = $request->order_status ? $request->order_status : 0 ; $keyword = $request->keyword; $orders = FamilyOrder::with('goods','viewer','user','fromUser')->where('order_status',$order_status)->where('pay_status',1)->orderBy('id','desc'); if ($keyword) { $keyword = trim($keyword); $orders = $orders->where(function($sql) use($keyword){ $sql->where('trade_no','like','%'.$keyword.'%')->orWhere('name','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%')->orWhereHas('viewer',function($sq) use($keyword){ $sq->where('nickname','like','%'.$keyword.'%'); }); }); } $orders = $orders->paginate(); foreach ($orders as $order) { $order->remark = json_decode($order->remark,true); } return $this->success('ok',$orders); } //修改订单状态 增加跟进记录 public function updateFamilyOrder(Request $request ,$order_id){ //跟进人信息 $user_id = auth()->id(); $user = User::find($user_id); $mobile = $user->mobile; $nickname = $user->nickname ? $user->nickname : $user->name; $avatar = $user->userAvatar($user_id); $order = FamilyOrder::find($order_id); if (!$order) return $this->failure('订单不存在,请重新确认'); $desc = $request->desc; if (empty($desc)) return $this->failure('请输入详细的跟进信息'); $order_status = $request->order_status; if ($order_status == 3) { $record = array( array('沟通方式'=>'','跟进内容'=>'','处理结果'=>'将订单标记为【问题订单】','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')) ); }else{ if (empty($order->remark)){ $record = array( array('沟通方式'=>$desc[0],'跟进内容'=>$desc[1],'处理结果'=>$desc[2],'跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')) ); }else{ $record = json_decode($order->remark,true); $array = ['沟通方式'=>$desc[0],'跟进内容'=>$desc[1],'处理结果'=>$desc[2],'跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')]; array_push($record, $array); } } $order->order_status = $order_status; $order->remark = json_encode($record,JSON_UNESCAPED_UNICODE); $order->save(); return $this->success('ok',$order); } public function logisticsCompanies(Request $request){ $keyword = $request->keyword; $companies = DB::table('logistics_companies')->orderBy('id','desc'); if ($keyword) { $companies = $companies->where('company','like','%'.$keyword.'%'); } $companies = $companies->get(); return $this->success('ok',$companies); } //清除测试订单数据 public function clearOrderData(Request $request){ FamilyOrder::where('id','>',0)->delete(); return $this->success('ok'); } public function addTradeNo(Request $request,$order_id){ $user_id = auth()->id(); $user = User::find($user_id); $nickname = $user->nickname ? $user->nickname : $user->name; $avatar = $user->userAvatar($user_id); $order = FamilyOrder::find($order_id); $trade_no = $request->trade_no; if (!$trade_no) return $this->failure('请填写订单号'); $express = $request->express; $com_code = $request->com_code; if (!$trade_no) return $this->failure('请填写快递公司'); if(empty($order->remark)){ $record = array( array('沟通方式'=>'','跟进内容'=>'填写订单号'.$trade_no.' 物流公司'.$express,'处理结果'=>'已发货','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')) ); }else{ $record = json_decode($order->remark,true); $array = ['沟通方式'=>'','跟进内容'=>'填写订单号'.$trade_no.' 物流公司'.$express,'处理结果'=>'已发货','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')]; array_push($record,$array); } $order->express_trade_no = $trade_no; $order->express = $express; $order->order_status = 1; $order->remark = json_encode($record,JSON_UNESCAPED_UNICODE); $order->com_code = $com_code; $order->save(); return $this->success('ok'); } //根据快递单号 查询快递公司 public function getLogisticsCompany(Request $request){ $trade_no = $request->trade_no; $key = env('KUAIDI_QUERY_KEY','LhJXCbBF6832'); $data['num'] = $trade_no; $data['key'] = $key; $url = 'http://www.kuaidi100.com/autonumber/auto?num='.$trade_no.'&key='.$key; $data = $this->postDataCurl($url,$data); // if ($result['returnCode'] == 200) { return $this->success('ok',$data); // }else{ // \Log::info('getLogisticsCompany fail:'.json_encode($data)); // } } public function postDataCurl($url,$data){ $timeout = 5000; $http_header = array( 'Content-Type:application/x-www-form-urlencoded;charset=utf-8' ); $postdataArray = array(); if(!empty($data) && is_array($data)){ foreach ($data as $key=>$value){ array_push($postdataArray, $key.'='.urlencode($value)); // $postdata.= ($key.'='.urlencode($value).'&'); } } $postdata = join('&', $postdataArray); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt ($ch, CURLOPT_HEADER, false ); curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); if (false === $result) { $result = curl_errno($ch); } curl_close($ch); //\Log::info($result); return $this->json_to_array($result) ; } /** * 将json字符串转化成php数组 * @param $json_str * @return $json_arr */ public function json_to_array($json_str){ if(is_array($json_str) || is_object($json_str)){ $json_str = $json_str; }else if(is_null(json_decode($json_str))){ $json_str = $json_str; }else{ $json_str = strval($json_str); $json_str = json_decode($json_str,true); } $json_arr=array(); if (!empty($json_str) && is_array($json_str)){ foreach($json_str as $k=>$w){ if(is_object($w)){ $json_arr[$k]= $this->json_to_array($w); //判断类型是不是object }else if(is_array($w)){ $json_arr[$k]= $this->json_to_array($w); }else{ $json_arr[$k]= $w; } } } return $json_arr; } //增加商品 public function addGoods(Request $request){ $name = $request->name; $icon = $request->icon; $price = $request->price; if (!is_numeric($price) || $price < 0) return $this->failure('请输入正确的商品价格'); $unit = $request->unit; $introduction = $request->introduction; if (empty($introduction)) return $this->failure('商品介绍不能为空'); $discount_price = $request->discount_price; if (!is_numeric($discount_price) || $discount_price < 0) return $this->failure('请输入商品折扣价格'); if ($discount_price > $price) return $this->failure('折扣价不能高于原价'); $sort = $request->input('sort',1); $status = $request->input('status',0); $total_num = $request->input('total_num',999); $surplus_num = $request->input('surplus_num',999); $good = new Goods(); $good->name = $name; $good->icon = $icon; $good->price = $price; $good->discount_price = $discount_price; $good->unit = $unit; $good->introduction = $introduction; $good->type = 'family'; $good->sort = $sort; $good->status = $status; $good->total_num = $total_num; $surplus_num = $surplus_num; $good->save(); return $this->success('ok',$good); } //商品列表 public function familyGoods(Request $request){ $keyword = $request->keyword; $status = $request->status; $goods = Goods::where('type','family')->where('status',$status)->orderBy('sort','desc')->orderBy('id','decs'); if ($keyword) { $keyword = trim($keyword); $goods = $goods->where('name','like','%'.$keyword.'%'); } $goods = $goods->paginate(); return $this->success('ok',$goods); } //修改商品 public function updateGood(Request $request,$goods_id){ $good = Goods::find($goods_id); if (empty($good)) return $this->failure('要修改的商品信息不存在'); if ($request->has('name') && $request->name != $good->name) { $good->name = $request->name; } if ($request->has('icon') && $request->icon != $good->icon) { $good->icon = $request->icon; } if ($request->has('price') && $request->price != $good->price) { $good->price = $request->price; } if ($request->has('unit') && $request->unit != $good->unit) { $good->unit = $request->unit; } if ($request->has('introduction') && $request->introduction != $good->introduction) { $good->introduction = $request->introduction; } if ($request->discount_price && $request->discount_price != $good->discount_price) { $good->discount_price = $request->discount_price; } if (is_numeric('sort') && $request->sort != $good->sort) { $good->sort = $request->sort; } if (is_numeric('status') && $request->status != $good->status) { $good->status = $request->status; } if (is_numeric('total_num') && $request->total_num != $good->total_num) { $good->total_num = $request->total_num; } if (is_numeric('surplus_num') && $request->surplus_num != $good->surplus_num) { $good->surplus_num = $request->surplus_num; } $good->save(); return $this->success('ok',$good); } //跟据进订单号退款 public function refundActivityOrder(Request $request){ $trade_no = $request->trade_no; $user_id = $request->user_id; $price = $request->price;//活动价格 $cash = $request->cash;//退款价格 $member_id = $request->member_id; $refund_order = RefundOrder::where([ 'user_id'=>$user_id, 'type'=>'activity', 'trade_no'=>$trade_no, ])->first(); if ($refund_order) { return $this->failure('退款已存在'); } $refund_trade_no = $this->getRefundTradeNo(); $array = ['refund_desc' => '活动退款']; $result = \WechatService::orderRefund($trade_no, $refund_trade_no, $price, $cash, $array); if (is_array($result) && $result['status'] === true) { RefundOrder::create([ 'user_id'=>$user_id, 'type'=>'activity', 'trade_no'=>$trade_no, 'refund_trade_no'=>$refund_trade_no, 'total_fee'=>$price, 'refund_fee'=>$cash, 'is_hook'=>0, 'remark'=>$request->remark, 'operator'=>auth()->id(), ]); ActivityMember::where('id',$member_id)->delete(); return $this->success('退款成功',$result); }else{ return $this->failure('退款失败'); } } //手动生成活动二维码 public function createActivityQrcode(Request $request){ // try { $activity_id = $request->activity_id; // $activities = Activity::whereNull('qrcode')->get(); $activity = Activity::where('id',$activity_id)->first(); $app = EasyWechat::miniProgram(); $data = []; $data['is_hyaline'] = true; $response = $app->app_code->get('/pages/party/detail?party_id='.$activity->id, $data); $time = time(); $path = $time.'activity_qrocde.png'; $filename = $response->saveAs(storage_path('qrcode'), $path); $qrcode_path = storage_path("/qrcode/".$time."activity_qrocde.png"); if(file_exists($qrcode_path)){ $qrcode = $this->uploadFile($qrcode_path); $activity->qrcode = $qrcode; $activity->save(); try{ unlink($qrcode_path); }catch(Exception $e) { return $this->failure($e->getMessage()); } } return $this->success('ok'); // } catch (\Exception $e) { // $this->getError($e); // return $this->failure('失败'); // } } //插入报名成员 public function insertMembers(Request $request){ $activity_id = $request->activity_id; $members = ActivityMember::where('activity_id',$activity_id)->where('id','<>',5440)->where('is_joined',1)->get(); $mobiles = ActivityMember::where('activity_id',$activity_id)->pluck('mobile')->toArray(); foreach ($members as $key => $member) { $member->linkmen = json_decode($member->linkmen,true)??[]; if(count($member->linkmen) > 1){ foreach ($member->linkmen as $linkmen) { if(in_array($linkmen['mobile'],$mobiles))continue; $user = User::where('mobile',$linkmen['mobile'])->first(); if($user){ ActivityMember::create([ 'user_id'=>$user->id, 'activity_id'=>$activity_id, 'linkmen'=>json_encode($member->linkmen), 'mobile' => $linkmen['mobile'], 'name' => $user->name ?? $user->nickname, 'avatar' => $user->app_avatar, 'sex' => $user->sex, 'is_joined' => 1, 'sign_in'=>1, ]); } } } } return $this->success('ok'); } }