orderBy('id', 'desc'); }else{ $infos = MInformation::with('anchor')->whereHas('anchor')->where('title','<>','演示内容——如何发布和管理文章')->orderBy('id', 'desc'); } $is_love_show = $request->is_love_show??2; if($is_love_show != 2){ $infos = $infos->where('is_love_show',$is_love_show); } $keyword = trim($request->input('keyword')); if ($keyword) { $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $infos = $infos->where(function($sql) use($keyword,$m_ids){ $sql->where('title', 'like', '%'.$keyword.'%') ->orWhere('subTitle', 'like', '%'.$keyword.'%') ->orWhereIn('merchant_id',$m_ids); }); } $infos = $infos->select('id', 'merchant_id', 'title', 'subTitle', 'created_at', 'pic', 'status','is_love_show','reward_status')->paginate(); foreach ($infos as $key => $value) { $value->merchant_name = $value->anchor ? $value->anchor->name : '未获取'; unset($value->anchor); } return $this->success('ok', $infos); }catch(\Exception $e){ $this->getError($e); return $this->failure("获取资讯列表失败,请稍后再试"); } } /** 老师活动列表 */ public function merchantsActivities(Request $request, $merchant_id=0) { try{ $activities = $this->getCommunityActities($merchant_id, $class='one',$request); return $this->success('ok', $activities); }catch(\Exception $e){ $this->getError($e); return $this->failure("获取活动列表失败,请稍后再试"); } } /** 老师服务列表 */ public function merchantsServices(Request $request, $merchant_id=0) { try{ $activities = $this->getCommunityActities($merchant_id, $class='many',$request); return $this->success('ok', $activities); }catch(\Exception $e){ $this->getError($e); return $this->failure("获取服务列表失败,请稍后再试"); } } public function getCommunityActities($merchant_id, $class,$request) { if ($merchant_id) { $activities = CommunityActivity::with('banners:class_id,icon')->where('merchant_id', $merchant_id); }else{ $activities = CommunityActivity::with('banners:class_id,icon','anchor')->whereHas('anchor')->whereNotIn('title',['如何创建和管理服务','如何创建和管理活动']); } $keyword = request()->input('keyword'); if($keyword){ $keyword = trim($keyword); $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id')->toArray(); $activities->where(function($sql) use($keyword,$m_ids){ $sql->where('title','like','%'.$keyword.'%') ->orWhereIn('merchant_id',$m_ids); }); } if($request->has('is_love_show')&&$request->is_love_show!=2){ $activities = $activities->where('is_love_show',$request->is_love_show)->orderBy('h5_top','desc'); } if($request->has('is_mp_show')&&$request->is_mp_show!=2){ $activities = $activities->where('is_mp_show',$request->is_mp_show)->orderBy('mp_top','desc'); } if($request->sortName=='timeSort'){ $sortType = $request->sortType??'desc'; $activities = $activities->orderBy('created_at', $sortType); } if($request->sortName=='hotSort'){ $sortType = $request->sortType??'desc'; $activities = $activities->orderBy('pv', $sortType); } $activityies = $activities->where('class', $class)->orderBy('sort','desc')->orderBy('apply_deadline','desc')->orderBy('id', 'desc')->paginate(); foreach ($activityies as $key => $value) { $value->merchant_name = $value->anchor ? $value->anchor->name : '未获取'; unset($value->anchor); } return $activityies; } // 入选福恋 public function intoLove(Request $request) { $type = $request->type ?? 'community'; $ids = $request->ids; if(empty($ids)) return $this->failure('请选择要同步的内容'); $is_love_show = $request->is_love_show??0; $is_mp_show = $request->is_mp_show??0; switch ($type) { case 'community': if($request->has('is_love_show')) CommunityActivity::whereIn('id',$ids)->update(['is_love_show'=>$is_love_show]); if($request->has('is_mp_show')) CommunityActivity::whereIn('id',$ids)->update(['is_mp_show'=>$is_mp_show]); break; case 'info': if($request->has('is_love_show')) MerchantInformation::whereIn('id',$ids)->update(['is_love_show'=>$is_love_show]); break; case 'course': if($request->has('is_love_show')) Course::whereIn('id',$ids)->update(['is_love_show'=>$is_love_show]); break; case 'video': if($request->has('is_love_show')) AnchorVideo::whereIn('id',$ids)->update(['is_love_show'=>$is_love_show]); break; default: # code... break; } $this->forgetBykey('homeContent'); return $this->success('ok'); } // 分成收益记录 public function earningRecord(Request $request) { $keyword = $request->keyword; $sharer = $request->sharer; $m_order_id = TouristOrder::where('type',$request->type)->where('type_id',$request->type_id)->pluck('id'); $result = MEarning::select('id','m_id','m_user_id','ratio','sub_ratio','m_order_id','sharer','value','status','created_at')->wherein('m_order_id',$m_order_id)->wherenotin('type',['system','reward']); if($sharer) $result = $result->where('sharer',$sharer); if($keyword){ $keyword = trim($keyword); $result = $result->whereHas('order',function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%') ->orWhere('desc','like','%'.$keyword.'%'); }); } $result = $result->where('type','<>','enter'); $result = $result->orderBy('id','desc')->paginate(); foreach ($result as $key => $value) { if($value->user){ $value->sharer_user_name = $value->user->nickname??'匿名用户'; $value->sharer_user_pic = $value->user->pic??User::DefaultAvatar; $value->sharer_user_mobile = $value->user->mobile??''; }else{ $merchant_id = TouristOrder::where('id',$m_order_id)->value('merchant_id'); $user = MerchantAccount::where('id',$merchant_id)->first(); $value->sharer_user_name = $user->anchor->name??'匿名用户'; $value->sharer_user_pic = $user->anchor->pic??User::DefaultAvatar; $value->sharer_user_mobile = $user->mobile??''; } $value->pay_user_mobile =$value->order->mobile??''; $payUser = 0; if($value->order){ $payUser = MerchantUser::where('id',$value->order->account_id)->first(); } $value->pay_user_mobile =$value->order->mobile??''; $value->title =$value->order->desc??''; $value->order_price = $value->order->price??0; $value->pay_user_name =!empty($payUser) ? $payUser->nickname:'匿名用户'; $value->pay_user_pic =!empty($payUser) ? $payUser->pic:User::DefaultAvatar; switch ($value->sharer) { case 'first_sharer': $value->sharer = '首邀'; break; case 'other_sharer': $value->sharer = '间接'; break; case 'last_sharer': $value->sharer = '促成'; break; case 'merchant': $value->sharer = '商家'; break; default: $value->sharer = '商家'; break; } unset($value->user); unset($value->order); } return $this->success('ok',$result); } /** 老师咨询列表 */ public function merchantsConsults(Request $request, $merchant_id=0) { try{ if ($merchant_id) { //咨询师id $consult_account_ids = ConsultAccount::where('merchant_id', $merchant_id)->pluck('id'); $consults = Consultation::whereIn('consult_account_id', $consult_account_ids)->orderBy('id', 'desc'); }else{ $consults = Consultation::with('teacher.merchant','teacher.anchor')->whereHas('teacher.anchor')->orderBy('id', 'desc'); } $keyword = request()->input('keyword'); if($keyword){ $keyword = trim($keyword); // $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $consults = $consults->where(function($sql) use($keyword){ $sql->where('title','like','%'.$keyword.'%'); })->orWhereHas('teacher.anchor',function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%'); }); } $consults = $consults->paginate(); foreach ($consults as $key => $value) { $value->merchant_name = $value->teacher->anchor ? $value->teacher->anchor->name : '未获取'; } return $this->success('ok', $consults); }catch(\Exception $e){ $this->getError($e); return $this->failure("获取服务列表失败,请稍后再试"); } } //单个老师的课程列表 public function merchantsCourses(Request $request, $merchant_id=0) { try{ //课程列表 if ($merchant_id) { //$courses = Course::with('tagged')->where('merchant_id', $merchant_id); $courses = Course::where('merchant_id', $merchant_id)->where('type','business');; }else{ //$courses = Course::with('tagged'); $courses = Course::with('anchor')->whereHas('anchor')->where('id','>',0)->where('type','business'); } $keyword = $request->input('keyword'); if ($keyword){ $keyword = trim($keyword); $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $courses = $courses->where(function($sql) use($keyword,$m_ids){ $sql->where('title','like','%'.$keyword.'%') ->orWhereIn('merchant_id',$m_ids); }); } if(isset($request->is_love_show) && in_array($request->is_love_show,[0,1])) { $courses = $courses->where('is_love_show', $request->is_love_show); } $courses = $courses->orderBy('id','desc')->paginate(); foreach($courses as $course){ $course_tags = []; foreach($course->tags as $tag) { $course_tags[] = $tag->name; } $course->course_tags = $course_tags; $course->merchant_name = $course->anchor ? $course->anchor->name : '未获取'; unset($course->anchor); unset($course->tagged); } return $this->success('ok', $courses); }catch(\Exception $e){ $this->getError($e); return $this->failure('数据错误,请联系开发人员'.$e->getMessage()); } } /** 服务商咨询详情 */ public function merchantConsult(Request $request, $id) { try { $consult = Consultation::find($id); $consult->teacher->merchant; return $this->success('ok', $consult); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取咨询详情失败,请稍后再试'); } } /** 服务商资讯详情 */ public function merchantInfor(Request $request, $id) { try { $infor = MInformation::find($id); $jump_url = urlencode(env('APP_URL').'/h5/#/dynamicParticulars/'.$id); $url = env('APP_URL').'/api/official/live/wechat/oauth?merchant_id='.$infor->merchant_id.'&anchor_openid=&url='.$jump_url; // $qr_code = $this->getPreviewQrcode($url); $qr_code = Redis::get('InforDetail_L'.$id); $qr_code = 'test'; if(!$qr_code){ $qr_code = $this->getPreviewQrcode($url); Redis::setex('InforDetail_L'.$id,60*60*24*30,$qr_code); $qr_code = Redis::get('InforDetail_L'.$id); } $infor->merchant; $infor->share_qr_code = $qr_code; $infor->share_url = $url; return $this->success('ok', $infor); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取资讯详情失败,请稍后再试'); } } /** 服务商活动详情 */ public function merchantActivity(Request $request, $id) { try { $activity = CommunityActivity::where(['id'=>$id, 'class'=>'one'])->first(); $activity->merchant; if ($activity->banners){ $activity->banners->icon = json_decode($activity->banners->icon, true); } if($activity->sku && $activity->sku != 'null') $activity->sku = json_decode($activity->sku,true); $jump_url = urlencode(env('APP_URL').'/h5/#/activityDetails/'.$activity->id); $url = env('APP_URL').'/api/official/live/wechat/oauth?url='.$jump_url; if (config('app.env') == 'production') { $qr_code = Redis::get('ActivityDetail_L'.$id); if(!$qr_code){ $qr_code = $this->getPreviewQrcode($url); Redis::setex('ActivityDetail_L'.$id,60*60*24*30,$qr_code); $qr_code = Redis::get('ActivityDetail_L'.$id); } }else{ $qr_code = ''; } $activity->qr_codes = $qr_code; $activity->share_url = $url; return $this->success('ok', $activity); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取活动详情失败,请稍后再试'); } } // 服务商活动成员 public function members(Request $request){ try { $type_id = $request->type_id; $type = $request->type; $keyword = $request->keyword; $pay_status = $request->pay_status??2; switch ($type) { case 'information': $type = 'reward_info'; break; case 'activity': $type = 'community'; break; case 'service': $type = 'community'; break; default: $type = $type; break; } $members = TouristOrder::with('merUser')->where('type', $type)->where('type_id',$type_id)->orderBy('id','desc'); // if($pay_status != 2){ // $members = $members->where('pay_status',$pay_status); // } if($pay_status != 2){ if($pay_status == 1){ $members = $members->whereIn('pay_status',[1,4]); }else{ $members = $members->where('pay_status',$pay_status); } } if($keyword){ $keyword = trim($keyword); $members = $members->where(function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $members = $members->paginate(); foreach ($members as $member) { //$member->merchant_user = $member->merUser; if($member->channel=='福恋小程序'){ $wechat = Wechat::where('openid',$member->open_id)->first(); if($wechat){ $user = User::where('id',$wechat->user_id)->first(); if($user){ $userinfo['nickname'] = $user->nickname; $userinfo['pic'] = $user->photo?:($user->circle_avatar?:User::DefaultAvatar); $member->merchant_user = $userinfo; } } else { $member->merchant_user = $member->merUser; } }else{ $rand_str = $this->randString(8); $nickname = '用户'.$rand_str; if(!$member->merUser) { $userinfo['nickname'] = $nickname; $userinfo['pic'] = User::DefaultAvatar; $member->merchant_user = $userinfo; } if($member->merUser && !$member->merUser['pic']) { $member->merUser['pic'] = User::DefaultAvatar; $member->merchant_user = $member->merUser; } else { $member->merchant_user = $member->merUser; } } $member->linkmen = json_decode($member->linkmen,true); $member->insurance_info = json_decode($member->insurance_info); if($member->linkmen){ //$member->linkmen = json_decode( $member->linkmen,true); if($member->mobile=='未获取'){ $member->mobile = $member->linkmen[0]['mobile']; } if($member->name=='未获取'){ $member->name = $member->linkmen[0]['name']; } } } return $this->success('ok',$members); } catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败'.$e->getMessage()); } } /*服务商项目详情*/ public function infos(Request $request, $id) { try { $url = ''; switch ($request->type) { //活动和服务 case 'community': $result = CommunityActivity::select('id','price','title','pic','pv','is_love_show','class','sku')->where(['id'=>$id])->first(); if ($result->banners){ $result->banners->icon = json_decode($result->banners->icon, true); } if($result->class=='one'){ $jump_url = urlencode(env('APP_URL').'/h5/#/activityDetails/'.$result->id); $jump_key = 'ActivityDetail_L'; }else{ $jump_url = urlencode(env('APP_URL').'/h5/#/serveDetails/'.$result->id); $jump_key = 'ServeDetail_L'; } if($result->sku && $result->sku != 'null'){ $result->sku = json_decode($result->sku,true); } $key = $jump_key.$id; # code... break; // 课程 case 'course': $result = Course::select('id','thumb as pic','is_love_show','short_description','title','charge','published_at','is_show','publicity_video')->where('id',$id)->first(); $jump_url = urlencode(env('APP_URL').'/h5/#/syncCourseDetail/'.$result->id); $key = 'CourseDetail_L'.$id; # code... break; // 商城 case 'shop': $result = MerchantShop::select('id','icon','describe','is_show','pay_type','sub_title','title','price','sku')->where('id',$id)->first(); $result->sku = json_decode($result->sku, true)?:[]; $key = 'L-shopDetail'.$id; $jump_url = urlencode(env('APP_URL').'/h5/#/mallDetail/'.$result->id); break; // 咨询 case 'consult': $result = Consultation::find($id); $result->teacher; $key = 'L-consultDetail'.$id; $jump_url = urlencode(env('APP_URL').'/h5/#/mallDetail/'.$result->id); # code... break; // 文章 case 'information': # code... $result = MInformation::find($id); $jump_url = urlencode(env('APP_URL').'/h5/#/dynamicParticulars/'.$id); $key = 'InforDetail_L'.$id; break; // 问题 case 'question': $result = QATest::with('answer')->where('id', $id)->first(); $result->question = json_decode($result->question); $jump_url = urlencode(env('APP_URL').'/h5/#/dynamicParticulars/'.$result->id); $key = 'L-questionDetail'.$id; break; case 'evaluate': $result = MerchantEvaluate::where('id', $id)->selectRaw('id, image as pic, title, 0 as is_love_show, price,merchant_id')->first(); $jump_url = urlencode(env('APP_URL').'/pu/#/evaluateDetails/'.$result->id.'?merchant_id='.$result->merchant_id); $key = 'L-evaluateDetail'.$id; $url = env('APP_URL').'/api/official/live/wechat/FamilyAuth?merchant_id='.$result->merchant_id.'&url='.$jump_url; break; default: return $this->failure('获取详情失败,请稍后再试!'); } $url = $url?$url:env('APP_URL').'/api/official/live/wechat/oauth?url='.$jump_url; if($id == 171 && $request->type == 'course') { $qr_code = $this->getPreviewQrcode($url); Redis::setex($key,60*60*24*30,$qr_code); } $qr_code = 'test'; // $qr_code = Redis::get($key); if(!$qr_code){ $qr_code = $this->getPreviewQrcode($url); Redis::setex($key,60*60*24*30,$qr_code); // $qr_code = Redis::get($key); } // $result->qr_code = Redis::get($key); $result->qr_code = $qr_code; $result->share_url = $url; return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取详情失败,请稍后再试'); } } //数据分析 public function dataAnalysis(Request $request){ $type = $request->type; $type_id = $request->type_id; $data = []; $watch_user_count = 0;//访问人数 $consume_user_count = 0;//消费人数 $consume_cash_amount = 0;//支付金额 $love_watch_user_count = 0;//福恋消费人数 if($type == 'course'){ $watch_user_count = Redis::zscore('coursepv',$type_id)??0; }elseif($type == 'community'){ $watch_user_count = CommunityActivity::where('id',$type_id)->value('pv')??0; }elseif($type == 'consult'){ $watch_user_count = Redis::zscore('consulation',$type_id)??0; }elseif($type == 'shop'){ $watch_user_count = Redis::zscore('shop',$type_id)??0; }elseif($type == 'information'){ $watch_user_count = Redis::zscore('information',$type_id); $type = 'reward_info'; } $obj = TouristOrder::where('type',$type)->where('type_id',$type_id)->whereIn('pay_status',[1,4]); $love_obj = TouristOrder::where('type',$type)->where('type_id',$type_id)->wherein('channel',[1,2,3])->whereIn('pay_status',[1,4]); $consume_user_count = $obj->count(); $consume_cash_amount = $obj->sum('price'); $love_consume_user_count = $love_obj->count(); $love_consume_cash_amount = $love_obj->sum('price'); $data['consume_user_count'] = $consume_user_count; $data['consume_cash_amount'] = $consume_cash_amount; $data['love_consume_user_count'] = $love_consume_user_count; $data['love_consume_cash_amount'] = $love_consume_cash_amount; $data['watch_user_count'] = $watch_user_count; $data['love_watch_user_count'] = Redis::zscore('love_'.$type.'_pv', $type_id)?:0; return $this->success('ok',$data); } // 订单数据统计 public function weekOrdersStat(Request $request){ $type_id = $request->type_id;//id $type = $request->type; if($type == 'information') $type = 'reward_info'; $week_consume_user_count = 0;//一周消费人数 $week_consume_cash_amount = 0;//一周支付金额 if($request->start_time && $request->end_time){ $start_time = $request->start_time; $end_time = $request->end_time; //间隔天数 $between_time = ceil((strtotime($end_time) - strtotime($start_time))/3600/24) + 1; for($i=0; $i<$between_time; $i++){ $date[] = date("Y-m-d",strtotime("+$i day", strtotime($start_time))); } } foreach ($date as $start_time) { $date_arr[] = $start_time; $start_time = $start_time.' 00:00:00'; $end_time = date("Y-m-d 23:59:59",strtotime($start_time)); $week_consume_user_count = TouristOrder::where('type',$type)->where('type_id',$type_id)->whereIn('pay_status',[1,4])->whereBetween('created_at',[$start_time,$end_time])->count(); $consume_user_count[] = $week_consume_user_count; $love_week_consume_user_count = TouristOrder::where('type',$type)->where('type_id',$type_id)->whereIn('pay_status',[1,4])->wherein('channel',[1,2,3])->whereBetween('created_at',[$start_time,$end_time])->count(); $love_consume_user_count[] = $love_week_consume_user_count; } return $this->success('ok',compact('date_arr','consume_user_count','love_consume_user_count')); } /** 服务商服务详情 */ public function merchantService(Request $request, $id) { try { $service = CommunityActivity::where(['id'=>$id, 'class'=>'many'])->first(); $service->merchant; if ($service->banners){ $service->banners->icon = json_decode($service->banners->icon, true); } if($service->sku && $service->sku != 'null'){ $service->sku = json_decode($service->sku,true); } $service->qr_code = Redis::get('ServeDetail_L'.$id); return $this->success('ok', $service); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取活动详情失败,请稍后再试'); } } /** 服务商课程详情 */ public function merchantCourse(Request $request, $id) { try { $course = Course::find($id); $course->account; $jump_url = urlencode(env('APP_URL').'/h5/#/syncCourseDetail/'.$id); $key = 'CourseDetail_L'.$id; $url = env('APP_URL').'/api/official/live/wechat/oauth?url='.$jump_url; // if($id == 171 && $request->type == 'course') { // $qr_code = $this->getPreviewQrcode($url); // Redis::setex($key,60*60*24*30,$qr_code); // } // $qr_code = Redis::get($key); // if(!$qr_code){ // $qr_code = $this->getPreviewQrcode($url); // Redis::setex($key,60*60*24*30,$qr_code); // $qr_code = Redis::get($key); // } $course->qr_code = 'test'; $course->share_url = $url; return $this->success('ok', $course); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取活动详情失败,请稍后再试'); } } /** 服务商商城列表 */ public function merchantsShops(Request $request, $merchant_id=0) { try { $keyword = $request->keyword; $is_show = $request->is_show??2; if ($merchant_id) { $shops = MerchantShop::with('merchant')->where('merchant_id',$merchant_id); } else { $shops = MerchantShop::with('merchant','anchor')->whereHas('anchor')->where('title','<>','【预售】JOHN英文原版2021品牌杂志(虚拟商品)')->where('title','<>','【原版】时尚界CEREAL设计杂志(虚拟商品)'); } if($is_show != 2){ $shops = $shops->where('is_show',$is_show); } if($keyword){ $keyword = trim($keyword); $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $shops = $shops->where(function($sql) use($keyword,$m_ids){ $sql->where('title','like','%'.$keyword.'%') ->orWhereIn('merchant_id',$m_ids); }); } $shops = $shops->orderBy('id','desc')->paginate(); foreach ($shops as $key => $value) { # code... $value->merchant_name = $value->anchor ? $value->anchor->name : '未获取'; unset($value->anchor); } return $this->success('ok', $shops); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取商品列表失败,请稍后再试'); } } /** 服务商商品详情 */ public function merchantShop(Request $request, $shop_id) { try { $shop = MerchantShop::with('merchant')->find($shop_id); $shop->sku = json_decode($shop->sku, true)?:[]; return $this->success('ok', $shop); } catch (\Exception $e) { $this->getError($e); return $this->failure("获取商品详情失败,请稍后再试"); } } /** 服务商测试列表 */ public function merchantTests(Request $request, $merchant_id=0) { try { if ($merchant_id) { $tests = QATest::with('merchant')->where('merchant_id',$merchant_id); } else { $tests = QATest::with('merchant','anchor')->whereHas('anchor'); } $keyword = $request->input('keyword'); if ($keyword) { $keyword = trim($keyword); $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $tests = $tests->where(function($sql) use($keyword,$m_ids){ $sql->where('title', 'like', '%'.$keyword.'%') ->orWhereIn('merchant_id',$m_ids); }); } $tests = $tests->orderBy('id', 'desc')->paginate(); foreach ($tests as $test) { $test->question = json_decode($request->question); $test->merchant_name = $test->anchor ? $test->anchor->name : '未获取'; unset($test->anchor); } return $this->success("ok", $tests); } catch (\Exception $e) { $this->getError($e); $this->failure("获取测试列表失败,请稍后再试"); } } /** 服务商测试详情 */ public function merchantTest(Request $request, $test_id) { try { $test = QATest::with('merchant', 'answer')->where('id', $test_id)->first(); $test->question = json_decode($test->question); return $this->success('ok', $test); } catch (\Exception $e) { $this->getError($e); $this->failure("获取测试详情失败,请稍后再试"); } } /** 服务商是否展示福恋 */ public function showMerchantToLove(Request $request, $merchant_id) { try { $merchant = MerchantAccount::find($merchant_id); $is_love_show = $request->input('is_love_show', 0); $merchant->is_love_show = $is_love_show; $merchant->save(); $time = date('Y-m-d H:i:s'); MerchantInfo::updateOrCreate(['m_id'=>$merchant_id],['love_show_at'=>$time]); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure("修改服务商展示福恋失败,请稍后再试"); } } //短视频列表 public function videoList(Request $request){ $keyword = $request->keyword; $is_love_show = $request->is_love_show; $videos = AnchorVideo::with('anchor')->whereHas('anchor')->select('id','title','anchor_id','m_id','cover','is_love_show','status','video_url','created_at'); if($keyword){ $keyword = trim($keyword); $m_ids = Anchor::where('name','like','%'.$keyword.'%')->pluck('m_id'); $videos = $videos->where(function($sql) use($keyword,$m_ids){ $sql->where('title','like','%'.$keyword.'%') ->orWhereIn('m_id',$m_ids); }); } if($request->has('is_love_show')&&$is_love_show!=2){ $videos = $videos->where('is_love_show',$is_love_show); } $videos = $videos->orderBy('id','desc')->paginate(); foreach ($videos as $key => $video) { $video->pv = Redis::zscore('short_videopv',$video->id)?:0; $video->type = 'video'; $video->merchant_name = $video->anchor ? $video->anchor->name : '未获取'; unset($video->anchor); } return $this->success('ok',$videos); } //短视频详情 public function shortVideoDetail(Request $request,$video_id){ $video = AnchorVideo::where('id',$video_id)->select('id','title','anchor_id','m_id','cover','is_love_show','status','video_url','created_at')->first(); $video->pv = Redis::zscore('short_videopv',$video->id)?:0; //点赞数 $video->liker_num = $video->likers()->count(); //评论数 $video->comment_num = $video->totalCommentsCount(); // 分享二维码 $jump_url = urlencode(env('APP_URL').'/h5/#/homeV3'); $url = env('APP_URL').'/api/official/live/wechat/oauth?url='.$jump_url; // $qr_code = Redis::get('short_video-s-h5'.$video_id); $qr_code = 'test'; if(!$qr_code){ $qr_code = $this->getPreviewQrcode($url); Redis::setex('short_video-s-h5'.$video_id,60*60,$qr_code); $qr_code = Redis::get('short_video-s-h5'.$video_id); } $video->share_qr_code = $qr_code; $video->merchant_id = $video->m_id; unset($video->m_id); $video->share_url = $url; $video->share_qr_code = $qr_code; return $this->success('ok',$video); } //评论列表 public function videoCommentList(Request $request,$video_id){ $video = AnchorVideo::where('id',$video_id)->select('id','anchor_id','m_id','cover','video_url','created_at')->first(); $comments = $video->comments()->select('id','commentable_id','commented_id','reply_id','comment','created_at')->where('reply_id',0)->orderBy('id', 'desc')->paginate(); foreach ($comments as $key => $value) { # code... $merchant_user = MerchantUsers::select('nickname','pic')->where('id',$value->commented_id)->first(); $value->nickname = $merchant_user->nickname??'匿名用户'; $value->pic = $merchant_user->pic??User::DefaultAvatar; $reply = $video->comments()->select('id','commentable_id','commented_id','reply_id','comment','created_at')->where('reply_id',$value->id)->orderBy('id', 'desc')->get(); foreach ($reply as $k => $v) { $merchant_user = MerchantUsers::select('nickname','pic')->where('id',$v->commented_id)->first(); $v->nickname = $merchant_user->nickname??'匿名用户'; $v->pic = $merchant_user->pic??User::DefaultAvatar; } $value->reply = $reply; } return $this->success('ok',$comments); } // 点赞列表 public function videoLikes(Request $request,$video_id) { $video = AnchorVideo::select('id','title','cover')->where('id',$video_id)->first(); $comments = $video->likers()->select('id','likedable_id','created_at')->orderBy('id', 'desc')->paginate(); foreach ($comments as $key => $value) { $user = MerchantUser::select('id','nickname','pic')->where('id',$value->likedable_id)->first(); $value->nickname = $user->nickname??'匿名用户'; $value->pic = $user->pic??User::DefaultAvatar; } return $this->success('ok',$comments); } //商户列表 public function platMerchants(Request $request){ try { $keyword = $request->keyword; $status = $request->status??3; $l_status = $request->l_status??3; $merchants = MerchantAccount::with('anchorV2','follow','info')->select('id','mobile','is_love_show','recommend','recommend_attr','email','poundage','created_at')->withCount(['information','service','activity','course','test','shop']); $publish_status = 0; $launch_status = 0; if($keyword){ $keyword = trim($keyword); $merchants = $merchants->whereHas('anchorV2',function($sql) use($keyword){ $sql->where('mobile','like','%'.$keyword.'%') ->orWhere('name','like','%'.$keyword.'%') ->orWhere('id',$keyword); }); } //获取推荐商户 if ($request->has('recommend') && $request->recommend == 1) { $merchants = $merchants->where('recommend', 1); } if($request->has('channel') && $request->channel){ $merchants = $merchants->whereHas('anchorV2',function($sql) use($request){ $sql->where('channel',$request->channel); }); } //是否展示福恋 $is_love_show = $request->input('is_love_show'); if (is_numeric($is_love_show)) { $merchants = $merchants->where('is_love_show', $is_love_show); } $follow_ids = MerchantFollow::pluck('merchant_id')->toArray(); //是否跟进筛选 $is_follow = $request->is_follow??2; if($is_follow == 1){//已跟进 $merchants = $merchants->whereIn('id',$follow_ids); }elseif($is_follow == 2){//未跟进 $merchants = $merchants->whereNotIn('id',$follow_ids); } if($status != 3){ $merchants = $merchants->whereHas('info',function($sql) use($status){ $sql->where('status',$status); }); } if($l_status != 3){ $merchants = $merchants->whereHas('info',function($sql) use($l_status){ $sql->where('launch_status',$l_status); }); } $merchants = $merchants->orderBy('id','desc')->paginate(); foreach ($merchants as $key => $merchant) { if($merchant->member_info){ $merchant->member_info == json_decode($merchant->member_info,true); } if(strlen($merchant->recommend_attr) > 4) { $merchant->recommend_attr = json_decode($merchant->recommend_attr,true); } $ids = ConsultAccount::where('merchant_id',$merchant->id)->pluck('id')->toArray(); $merchant->consult_count = Consultation::whereIn('consult_account_id',$ids)->count(); if($merchant->info){ $publish_status = $merchant->info->status; $launch_status = $merchant->info->launch_status; } $merchant->publish_status = $publish_status; $merchant->launch_status = $launch_status; // $anchor = Anchor::where('m_id',$merchant->id)->first(); $merchant->avatar = User::DefaultAvatar; $merchant->name = '匿名商户'; $merchant->from_user_name = '无推荐人'; $merchant->channel = 1; if($merchant->anchorV2){ $merchant->avatar = $merchant->anchorV2->pic == "" ? User::DefaultAvatar : $merchant->anchorV2->pic; $merchant->name = $merchant->anchorV2->name; $merchant->from_user_name = Viewer::where('openid',$merchant->anchorV2->from_openid)->value('nickname'); $merchant->channel = $merchant->anchorV2->channel; } if(empty($merchant->mobile)) $merchant->mobile = $merchant->email; if(!in_array($merchant->id,$follow_ids)){ $merchant->status = '未跟进'; }elseif($merchant->follow->status == 'following'){ $merchant->status = '跟进中'; }else{ $merchant->status = '完成跟进'; } unset($merchant->follow); } return $this->success('ok',$merchants); } catch (\Exception $e) { $this->getError($e); return $this->failure("获取商家列表失败,请稍后再试"); } } //福恋推荐商家列表 public function loveShowMerchants(Request $request){ try { $keyword = $request->keyword; $status = $request->status??3; $l_status = $request->l_status??3; $publish_status = 0; $launch_status = 0; $merchants = MerchantAccount::with('anchorV2','follow','info')->where('is_love_show',1)->select('id','mobile','alipay_account','alipay_real_name','openid','email','member_info','is_love_show','created_at','updated_at')->withCount(['information','service','activity','course','test','shop']); if($keyword){ $keyword = trim($keyword); $merchants = $merchants->whereHas('anchorV2',function($sql) use($keyword){ $sql->where('mobile','like','%'.$keyword.'%') ->orWhere('name','like','%'.$keyword.'%') ->orWhere('id',$keyword); }); } $follow_ids = MerchantFollow::pluck('merchant_id')->toArray(); //是否跟进筛选 $is_follow = $request->is_follow??2; if($is_follow == 1){//已跟进 $merchants = $merchants->whereIn('id',$follow_ids); }elseif($is_follow == 2){//未跟进 $merchants = $merchants->whereNotIn('id',$follow_ids); } if($status != 3){ $merchants = $merchants->whereHas('info',function($sql) use($status){ $sql->where('status',$status); }); } if($l_status != 3){ $merchants = $merchants->whereHas('info',function($sql) use($l_status){ $sql->where('launch_status',$l_status); }); } if($request->has('channel') && $request->channel){ $merchants = $merchants->whereHas('anchorV2',function($sql) use($request){ $sql->where('channel',$request->channel); }); } $orderby_at = MerchantInfo::orderBy('love_show_at','desc')->pluck('m_id')->toArray(); $orderby = implode(',', $orderby_at); $merchants = $merchants->orderByRaw(DB::raw("FIELD(id, $orderby) asc"))->orderBy('id','desc')->paginate(); foreach ($merchants as $key => $merchant) { if($merchant->member_info){ $merchant->member_info == json_decode($merchant->member_info,true); } $ids = ConsultAccount::where('merchant_id',$merchant->id)->pluck('id')->toArray(); $merchant->consult_count = Consultation::whereIn('consult_account_id',$ids)->count(); if($merchant->info){ $publish_status = $merchant->info->status; $launch_status = $merchant->info->launch_status; } $merchant->publish_status = $publish_status; $merchant->launch_status = $launch_status; // $anchor = Anchor::where('m_id',$merchant->id)->first(); $merchant->avatar = User::DefaultAvatar; $merchant->name = '匿名商户'; $merchant->from_user_name = '无推荐人'; $merchant->channel = 1; if($merchant->anchorV2){ $merchant->avatar = $merchant->anchorV2->pic == "" ? User::DefaultAvatar : $merchant->anchorV2->pic; $merchant->name = $merchant->anchorV2->name; $merchant->from_user_name = Viewer::where('openid',$merchant->anchorV2->from_openid)->value('nickname'); $merchant->channel = $merchant->anchorV2->channel; } if(empty($merchant->mobile)) $merchant->mobile = $merchant->email; if(!in_array($merchant->id,$follow_ids)){ $merchant->status = '未跟进'; }elseif($merchant->follow->status == 'following'){ $merchant->status = '跟进中'; }else{ $merchant->status = '完成跟进'; } unset($merchant->follow); } return $this->success('ok',$merchants); } catch (\Exception $e) { $this->getError($e); return $this->failure("获取商家列表失败,请稍后再试"); } } // 婚姻使者列表 public function marriageMessengers(Request $request) { $keyword = $request->keyword; $check_status = $request->check_status??0; if($request->has('check_status')){ $result = MarriageMessenger::where('check_status',$check_status)->orderBy('id','desc');; }else{ $result = MarriageMessenger::orderBy('id','desc'); } if($keyword&&$request->has('keyword')){ $result = $result->where(function($query) use ($keyword){ $query->where('name', 'like', '%'.$keyword.'%') ->orWhere('nickname', 'like', '%'.$keyword.'%'); }); } $result = $result->paginate(); foreach ($result as $key => $value) { $value->reason = json_decode($value->reason,true); $Anchor = Anchor::where('m_id',$value->m_id)->first(); $value->pic = $Anchor->pic??User::DefaultAvatar; $value->mobile = $Anchor->mobile??''; unset($value->merchant); } return $this->success('ok',$result); } // 更新婚姻使者状态 public function changeMarriageMessengers(Request $request) { $ids = $request->ids; $check_status = $request->check_status; $belief = $request->belief; if($request->has('check_status')&&!empty($check_status)) MarriageMessenger::wherein('id',$ids)->update(['check_status'=>$check_status]); if($request->has('belief')&&!empty($belief)) MarriageMessenger::wherein('id',$ids)->update(['belief'=>$belief]); return $this->success('ok'); } //设置商家发布状态 public function updateMerchantStatus(Request $request,$merchant_id){ $status = $request->status; $type = $request->type ?? 'publish'; if($type == 'publish'){ MerchantInfo::updateOrCreate(['m_id'=>$merchant_id],['status'=>$status]); }else{ MerchantInfo::updateOrCreate(['m_id'=>$merchant_id],['launch_status'=>$status]); } return $this->success('ok'); } //企业入驻列表 public function enterprises(Request $request){ try { $keyword = $request->keyword; $check_status = $request->check_status??2; $enters = EnterpriseSettlement::orderBy('id','desc'); if($keyword){ $keyword = trim($keyword); $enters = $enters->where(function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%'); }); } if($check_status != 2){ $enters = $enters->where('check_status',$check_status); } $enters = $enters->paginate(); return $this->success('ok',$enters); } catch (\Exception $e) { $this->getError($e); return $this->failure('获取企业入驻列表失败,请稍后再试'); } } //更新企业入驻状态 public function changeEnterpriseStatus(Request $request){ $ids = $request->ids; $check_status = $request->check_status; EnterpriseSettlement::whereIn('id',$ids)->update(['check_status'=>$check_status]); return $this->success('ok'); } //删除商户 public function deleteMerchant(Request $request , $merchant_id){ $merchant = MerchantAccount::find($merchant_id); $anchor = Anchor::where('m_id',$merchant->id)->first(); $merchant->delete(); $anchor->delete(); return $this->success('ok'); } //商户详情 public function merchantDetail(Request $request,$id){ try { $type = $request->type ?? 'merchant'; $used_withdraw_total = 0;//已提现金额 $can_cash_out_amount = 0;//可提现收益 $can_withdraw_total = 0; //总收益 if($type == 'merchant'){//商户详情 $account = MerchantAccount::where('id',$id)->first(); if(empty($account)) return $this->failure('该商户不存在或已被删除'); $anchor = Anchor::where('m_id',$account->id)->first(); $account->name = '匿名商户'; $account->avatar = User::DefaultAvatar; if($anchor){ $anchor->pic = $anchor->pic == '' ? User::DefaultAvatar : $anchor->pic; $account->name = $anchor->name; } $MEarningAccount = MEarningAccount::where('m_id',$id)->where('m_user_id',0)->first(); //可提现金额 if($MEarningAccount){ $can_cash_out_amount = $MEarningAccount->balance; $can_withdraw_total = $MEarningAccount->total_value; $used_withdraw_total = $MEarningAccount->withdrawl??0; } $jump_url = urlencode(env('APP_URL').'/pu/#/'); // $u = urlencode('anchor_openid='.$openid.'&url=http://love.ufutx.cn/pu/#/'); $url = env('APP_URL').'/api/official/live/wechat/FamilyAuth?merchant_id='.$id.'&url='.$jump_url; // $qr_codes = Redis::get('HomePage_S'.$id); $qr_codes = 'test'; if(!$qr_codes){ $qr_code = $this->getPreviewQrcode($url); Redis::setex('HomePage_S'.$id,60*60*24*30,$qr_code); $qr_codes = Redis::get('HomePage_S'.$id); } $share_url = env('APP_URL').'/api/official/live/wechat/FamilyAuth?merchant_id='.$request->id.'&url='.$jump_url; if(empty($anchor->mobile)) $anchor->mobile = $account->email; return $this->success('ok',compact('can_cash_out_amount','can_withdraw_total','used_withdraw_total','account','anchor','qr_codes','share_url')); }elseif($type == 'merchant_user'){//saas 用户 $user = MerchantUser::where('id',$id)->select('id','mobile','pic','nickname')->first(); if(empty($user)) return $this->failure('该用户不存在或已被删除'); if(!$user->pic) $user->pic = User::DefaultAvatar; if(!$user->nickname) $user->nickname = '匿名用户'; $can_cash_out_amount = MEarningAccount::where('m_user_id',$id)->sum('balance'); $can_withdraw_total = MEarningAccount::where('m_user_id',$id)->sum('total_value'); $used_withdraw_total = MEarningAccount::where('m_user_id',$id)->sum('withdrawl'); return $this->success('ok',compact('can_cash_out_amount','can_withdraw_total','used_withdraw_total','user')); }else{//福恋h5用户 $user = User::where('id',$id)->select('id','circle_avatar','app_avatar','photo','nickname','mobile')->first(); if(empty($user)) return $this->failure('该用户不存在或已被删除'); if(!$user->circle_avatar) $user->circle_avatar = User::DefaultAvatar; if(!$user->nickname) $user->nickname = '匿名用户'; $earning_account = EarningAccount::where('user_id',$id)->first(); if($earning_account){ $can_cash_out_amount = $earning_account->balance; $can_withdraw_total = $earning_account->total_value; $used_withdraw_total = $earning_account->withdrawl??0; } // $user->pic = $user->avatar; $user->pic = !empty($user->app_avatar) ? $user->app_avatar : $user->photo; unset($user->photo); return $this->success('ok',compact('can_cash_out_amount','can_withdraw_total','used_withdraw_total','user')); } } catch (\Exception $e) { $this->getError($e); return $this->failure('获取商户详情失败'.$e->getMessage()); } } //添加服务商跟进记录 public function addFollowRecord(Request $request,$merchant_id){ $way = $request->way; if(!$way) return $this->failure('请填写跟进方式'); $content = $request->input('content'); if(!$content) return $this->failure('请填写跟进内容'); $result = $request->result; if(!$result) return $this->failure('请填写跟进结果'); $status = $request->status ?? 'following'; $follow = new MerchantFollow(); $follow->merchant_id = $merchant_id; $follow->operater = auth()->id(); $follow->status = $status; $follow->way = $way; $follow->content = $content; $follow->result = $result; $follow->save(); return $this->success('ok'); } //已推荐福恋商家同步merchant_info public function synMerchantInfo(){ $merchant_ids = MerchantAccount::pluck('id')->toArray(); $has_merchant_ids = MerchantInfo::pluck('m_id')->toArray(); $merchant_ids = array_diff($merchant_ids,$has_merchant_ids); $insert = []; foreach ($merchant_ids as $key => $m_id) { $arr = [ 'm_id'=>$m_id, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s'), ]; $insert []=$arr; } MerchantInfo::insert($insert); return $this->success('ok'); } //单个服务商记录列表 public function merchantRecords(Request $request,$merchant_id){ $follows = MerchantFollow::with('operater')->where('merchant_id',$merchant_id)->orderBy('id','desc')->paginate(); return $this->success('ok',$follows); } // 问答测试成员列表 public function QA_testUser(Request $request,$id) { $merchant_id = $request->account_id; $ids = QATestRecord::where('q_a_test_id',$id); if($merchant_id){ $ids = $ids->where('merchant_id',$merchant_id); } $ids = $ids->groupBy('merchant_user_id')->pluck('merchant_user_id'); $QATest = QATestRecord::select('id','merchant_user_id','q_a_test_id','score','q_a_answer_id','created_at') ->where('q_a_test_id',$id) ->where('merchant_id',$merchant_id) ->wherein('merchant_user_id',$ids) ->orderBy('id','desc') ->paginate(); foreach ($QATest as $key => $value) { $value->nickname = $value->user->nickname??'匿名用户'; $value->pic = $value->user->pic??User::DefaultAvatar; $value->title = $value->answer->title??'该测试不存在或已下架'; $value->content = $value->answer->content??null; unset( $value->answer); unset($value->user); } return $this->success('ok',$QATest); } //商户推荐操作 public function recommendMerchant(Request $request,$merchant_id) { try { $merchant = MerchantAccount::find($merchant_id); if($request->has('recommend') && $request->recommend == 1) { $merchant->recommend = $request->recommend; $data = [ 'banner' => $request->banner, 'service' => $request->service, ]; $merchant->recommend_attr = json_encode($data); } elseif($request->has('recommend') && $request->recommend == 0 && $merchant->recommend == 1) { $merchant->recommend = $request->recommend; } else { return $this->success('已操作成功'); } DB::beginTransaction(); $merchant->save(); DB::commit(); return $this->success('ok'); } catch (\Exception $e) { DB::rollBack(); \Log::info($e->getMessage()); return $this->failure('操作失败'); } } public function getRecommendMerchant(Request $request,$merchant_id) { $merchant = MerchantAccount::with('anchorV2')->select('id','is_love_show','recommend','recommend_attr')->find($merchant_id); if(!$merchant) { return $this->failure('商户不存在'); } else { $merchant->recommend_attr = json_decode($merchant->recommend_attr); return $this->success('ok',$merchant); } } //文章 活动打赏列表 public function payRewardDetail(Request $request){ $merchant_id = $request->merchant_id; $type = $request->type ?? 'reward_info'; $type_id = $request->type_id; $keyword = $request->keyword; $result = TouristOrder::with('merUser') ->where('merchant_id',$merchant_id) ->whereIn('pay_status',[1,4]) ->where('type',$type) ->where('type_id',$type_id); if($keyword){ $result = $result->whereHas('user', function ($query) use($keyword) { $query->where('nickname', 'like', '%'.$keyword.'%'); }) ->orWhereHas('information', function ($query) use($keyword,$merchant_id) { $query->where('merchant_id', $merchant_id); $query->where('title', 'like', '%'.$keyword.'%'); }); } $result = $result->orderBy('id','desc')->paginate(); foreach ($result as $key => $value) { // return $value->information; # code... if(isset($value['merUser']['pic']) && $value['merUser']['pic'] == null) { $value['merUser']['pic'] = User::DefaultAvatar; } if(isset($value['merUser']['nickname']) && $value['merUser']['nickname'] == null) { $value['merUser']['nickname'] = '未获取'; } $value->name = $value->user->nickname??'未获取'; if($value->type=='reward_info'){ $value->title = $value->information->title??''; $value->pic = $value->information->pic??''; }elseif($value->type=='reward_activity'){ $activity = CommunityActivity::select('id','title','pic')->where('id',$value->type_id)->first(); $value->title = $activity->title??''; $value->pic = $activity->pic??''; } unset($value->user); unset($value->information); } return $this->success('ok',$result); } //活动或服务 报名成员 public function platJoinMembers(Request $request){ try { $consulator_id = $request->consulator_id; $keyword = $request->keyword; // $pay_status = $request->pay_status??2; $members = TouristOrder::with('merUser')->whereIn('pay_status',[1,4])->where('type','community')->where('type_id',$consulator_id)->orderBy('id','desc'); // if($pay_status != 2){ // $members = $members->where('pay_status',$pay_status); // } if($keyword){ $keyword = trim($keyword); $members = $members->where(function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%'); }); } $members = $members->paginate(); // foreach ($members as $key => $value) { //// if($value->mobile == '匿名用户' || $value->mobile == '未获取') { //// $value->mobile = null; //// } // if($value['merUser'] != null && $value['merUser']['pic'] == null) { // $value['merUser']['pic'] = User::DefaultAvatar; // } // if($value['merUser'] != null && $value['merUser']['nickname'] == null) { // $value['merUser']['nickname'] = '未获取'; // } // $value->merchant_user = $value['merUser']; // // $value->user_pic = $value->user->pic??User::DefaultAvatar; // $value->insurance_info = json_decode( $value->insurance_info,true); // // if($value->linkmen) { // $value->linkmen = json_decode( $value->linkmen,true); // if($value->mobile=='未获取'){ // $value->mobile = $value->linkmen[0]['mobile']; // } // if($value->name=='未获取'){ // $value->name = $value->linkmen[0]['name']; // } // } // unset($value->user); // } foreach ($members as $member) { //$member->merchant_user = $member->merUser; if($member->channel=='福恋小程序'){ $wechat = Wechat::where('openid',$member->open_id)->first(); if($wechat){ $user = User::where('id',$wechat->user_id)->first(); if($user){ $userinfo['nickname'] = $user->nickname; $userinfo['pic'] = $user->photo?:($user->circle_avatar?:User::DefaultAvatar); $member->merchant_user = $userinfo; $member->user_id = $user->id; } else { $member->user_id = 0; } } else { $member->merchant_user = $member->merUser; $member->user_id = 0; } }else{ $rand_str = $this->randString(8); $nickname = '用户'.$rand_str; if(!$member->merUser) { $userinfo['nickname'] = $nickname; $userinfo['pic'] = User::DefaultAvatar; $member->merchant_user = $userinfo; $member->user_id = 0; } else { $member->user_id = $member->merUser['user_id']; } if($member->merUser && !$member->merUser['pic']) { $member->merUser['pic'] = User::DefaultAvatar; $member->merchant_user = $member->merUser; } else { $member->merchant_user = $member->merUser; } } $member->linkmen = json_decode($member->linkmen,true); $member->insurance_info = json_decode($member->insurance_info); if($member->linkmen){ //$member->linkmen = json_decode( $member->linkmen,true); if($member->mobile=='未获取'){ $member->mobile = $member->linkmen[0]['mobile']; } if($member->name=='未获取'){ $member->name = $member->linkmen[0]['name']; } } } $members = $members->toArray(); $members['enroll_num'] = TouristOrder::selectRaw('JSON_LENGTH(linkmen) as num') ->whereIn('pay_status',[1,4]) ->where('type','community') ->where('type_id',$consulator_id) ->sum('num'); return $this->success('ok',$members); } catch (\Exception $e) { $this->getError($e); return $this->failure('操作失败'); } } //课程成员 public function platCourseMembers(Request $request,$course_id){ $keyword = $request->keyword; // $status = $request->pay_status??2; $users = UserCourses::with('s_member')->where('status',1)->where('course_id',$course_id)->orderBy('id','desc'); // if($status != 2){ // $users = $users->where('status',$status); // } if($keyword){ $keyword = trim($keyword); $users = $users->whereHas('s_member',function($sql) use($keyword){ $sql->where('mobile','like','%'.$keyword.'%')->orWhere('nickname','like','%'.$keyword.'%'); }); } $users = $users->orderBy('id','desc')->paginate(); //return $this->success('ok',$users); foreach ($users as &$user) { if($user->s_member == null) { $arr = [ 'pic' => User::DefaultAvatar, 'nickname' => '未获取', ]; $user->s_member = $arr; } else { if($user['s_member']['pic'] == null) { $user['s_member']['pic'] = User::DefaultAvatar; } if($user['s_member']['nickname'] == null) { $user['s_member']['nickname'] = '未获取'; } } $user->merchant_user = $user->s_member; $trade_no = $user['trade_no']; $toursit_order = TouristOrder::where('trade_no',$trade_no)->first(); $user->price = isset($toursit_order->price) ? $toursit_order->price : 0; if($toursit_order) { $linkmen = json_decode($toursit_order->linkmen,true); $user['buyer'] = [ 'name' => $toursit_order->name ?: $linkmen['name'], 'area_code' => $toursit_order->area_code, 'mobile' => ($toursit_order->mobile == '匿名用户' || $toursit_order->mobile == '未获取') ? $linkmen['mobile'] : $toursit_order->mobile, ]; } else { $user['buyer'] = []; } } return $this->success('ok',$users); } //咨询报名成员 public function consultOrders(Request $request){ $merchant_id = $request->merchant_id; $status = $request->status??3; // $pay_status = $request->pay_status??2; $keyword = $request->keyword; $comment = $request->comment; $nopage = $request->nopage??1; $records = ConsultationRecords::with('consulation','consulation.teacher')->where('pay_status',1)->where('merchant_id',$merchant_id); $consulation_id = $request->consulation_id; if($status != 3){ $records = $records->where('status',$status); } // if($pay_status != 2){ // $records = $records->where('pay_status',$pay_status); // } if($comment == 'comment'){ $records = $records->whereNotNull('comment')->where('comment','<>',''); } if($consulation_id){ $records = $records->where('consulation_id',$consulation_id); } if ($keyword) { $keyword = trim($keyword); $records = $records->where(function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%')->orWhere('phone','like','%'.$keyword.'%'); }); } $paid_count = $records->sum('price'); if($nopage){ $records = $records->orderBy('id','desc')->paginate(); }else{ $records = $records->orderBy('id','desc')->get(); } foreach ($records as $value) { if($value->phone == '匿名用户' || $value->phone == '未获取') { $value->phone = null; } $value->channel = TouristOrder::where('trade_no',$value->trade_no)->value('channel'); $merchant_user = MerchantUsers::where('id',$value->merchant_user_id)->select('openid','pic','mobile','sex','nickname')->first(); $value->openid = $merchant_user ? ($merchant_user->openid ?: '') : ''; $value->mer_user = $merchant_user; if($value['mer_user'] != null && $value['mer_user']['pic'] == null) { $value['mer_user']['pic'] = User::DefaultAvatar; } if($value['mer_user'] != null && $value['mer_user']['nickname'] == null) { $value['mer_user']['nickname'] = '未获取'; } $value->teacher_name = '未获取'; if(isset($value->consulation->teacher)){ $value->teacher_name = $value->consulation->teacher->name ; } $value->title = Consultation::where('id',$value->consulation_id)->value('title'); if(!empty($value->remark) && $value->remark != 'null') $value->remark = json_decode($value->remark,true); unset($value->consulation); $value->paid_count = $paid_count; } return $this->success('ok',$records); } public function paidShopMember(Request $request,$id){ $keyword = $request->keyword; $merchant_id = $request->merchant_id; $orders = TouristOrder::with('merUser')->where('merchant_id',$merchant_id)->whereIn('pay_status',[1,4])->where('type','shop')->where('type_id',$id); if($keyword){ $keyword = trim($keyword); $orders = $orders->where(function($sql) use($keyword){ $sql->where('name','like','%'.$keyword.'%') ->orWhere('mobile','like','%'.$keyword.'%'); }); } $orders = $orders->orderBy('id','desc')->paginate(); foreach ($orders as $key => $order) { if($order->mobile == '匿名用户' || $order->mobile == '未获取') { $order->mobile = null; } if($order['merUser'] != null && $order['merUser']['pic'] == null) { $order['merUser']['pic'] = User::DefaultAvatar; } if($order['merUser'] != null && $order['merUser']['nickname'] == null) { $order['merUser']['nickname'] = '未获取'; } $user = MerchantUser::where('id',$order->account_id)->first(); $order->pay_user_name = $user->nickname??'匿名用户'; $order->pay_mobile = $user->mobile??'未获取'; $order->pay_avatar = $user->pic??User::DefaultAvatar; } return $this->success('ok',$orders); } //活动 服务在小程序或者h5置顶 public function systemTopActivity(Request $request,$id){ try { $activity = CommunityActivity::where('id',$id)->first(); if(!$activity) return $this->failure('该服务不存在或已下架'); $type = $activity->class == 'one' ? '活动' : '服务'; if($request->has('mp_top')){ if($request->mp_top == 1){ //小程序置顶 //获取置顶最大sort $sorts = CommunityActivity::where('mp_top',1)->pluck('sort')->toArray(); $max_sort = empty($sorts) ? 1 : max($sorts); if($activity->is_mp_show != 1) return $this->failure('请先将该'.$type.'同步到小程序'); $activity->update(['mp_top'=>$request->mp_top,'sort'=>$max_sort+1]); }else{//取消小程序置顶 $activity->update(['mp_top'=>$request->mp_top,'sort'=>0]); } } if($request->has('h5_top')){ if($request->h5_top == 1){//h5置顶 //获取置顶最大sort $sorts = CommunityActivity::where('h5_top',1)->pluck('sort')->toArray(); $max_sort = empty($sorts) ? 1 : max($sorts); if($activity->is_love_show != 1) return $this->failure('请先将该'.$type.'同步到h5'); $activity->update(['h5_top'=>$request->h5_top,'sort'=>$max_sort+1]); }else{//取消h5置顶 $activity->update(['h5_top'=>$request->h5_top,'sort'=>0]); } } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } //商户订单数 营业额 public function merchantStat(Request $request){ try { if($request->start_time && $request->end_time){ $start_time = $request->start_time; $end_time = $request->end_time; //间隔天数 $between_time = ceil((strtotime($end_time) - strtotime($start_time))/3600/24) + 1; for($i=0; $i<$between_time; $i++){ $date[] = date("Y-m-d",strtotime("+$i day", strtotime($start_time))); } } else { return $this->failure('请选择开始和结束时间'); } foreach ($date as $start_time) { $date_arr[] = $start_time; $start_time = $start_time.' 00:00:00'; $end_time = date("Y-m-d 23:59:59",strtotime($start_time)); //订单数 $order_count[] = TouristOrder::where('merchant_id',$request->account_id)->whereIn('pay_status',[1,4])->whereBetween('created_at',[$start_time,$end_time])->count(); // 成交金额 $deal_money[] = floatval(TouristOrder::where('merchant_id',$request->account_id)->whereIn('pay_status',[1,4])->whereBetween('created_at',[$start_time,$end_time])->sum('price')); } return $this->success('ok',compact('date_arr','order_count','deal_money')); } catch (\Exception $e) { Log::error($e->getMessage()); return $this->failure('数据错误,请稍后重试'); } } //对单个商家设置提现手续费 public function setMerchantPoundage(Request $request){ try { $merchant_id = $request->merchant_id; $poundage = $request->poundage ?? 1;//百分制 if($poundage >= 100 || $poundage <= 0 || !is_numeric($poundage)){ return $this->failure('请输入有效的提现所收取的手续费百分比'); } $merchant = MerchantAccount::find($merchant_id); $anchor = Anchor::where('m_id',$merchant_id)->first(); if(empty($merchant) || empty($anchor)) throw new \Exception('商家信息有误 商户id:'.$merchant_id); $merchant->poundage = $poundage; //同步一条商户备注 MerchantFollow::create([ 'merchant_id'=>$request->merchant_id, 'operater'=>auth()->id(), 'status'=>'following', 'way'=>'后台', 'content'=>'修改商家提现手续费', 'result'=>'修改商家提现手续费为百分之'.$poundage, ]); $merchant->save(); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('商家信息有误'); } } public function evaluate(Request $request, $id) { try { $evaluate = MerchantEvaluate::with('evaluateList')->where('id', $id)->first(); $evaluateList = $evaluate->evaluateList; $evaluateList->notes = EvaluateDetail::where('test_item_id', $evaluateList->test_item_id)->value('notes'); $evaluateList->status = $evaluate->status; return $this->success('ok', $evaluateList); }catch (\Exception $e) { $this->getError($e); $this->failure(); } } }