love_php/app/Http/Controllers/Admin/ServicePlatController.php
2026-04-02 09:20:51 +08:00

1733 lines
78 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Admin;
use App\Models\Server\EvaluateDetail;
use App\Models\Server\MerchantEvaluate;
use App\Models\Wechat;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\AnchorVideo;
use Illuminate\Support\Facades\Redis;
use App\Models\Server\MerchantInformation as MInformation;
use App\Models\Consultation;
use App\Models\ConsultAccount;
use App\Models\CommunityActivity;
use App\Models\ConsultationRecords;
use App\Models\Server\MerchantUser;
use App\Models\MerchantUsers;
use App\Models\Course\Course;
use App\Models\Course\UserCourses;
use App\Models\EarningAccount;
use App\Models\Live\Anchor;
use App\Models\Live\Viewer;
use App\Models\MerchantShop;
use App\Models\MEarning;
use App\Models\MerchantInfo;
use App\Models\Server\TouristOrder;
use App\Models\QATest;
use App\Models\MarriageMessenger;
use App\Models\QATestRecord;
use App\Models\Server\EnterpriseSettlement;
use App\Models\Server\MEarningAccount;
use App\Models\Server\MerchantAccount;
use App\Models\Server\MerchantFollow;
use App\Models\Server\MerchantInformation;
use App\Models\User;
use Illuminate\Support\Facades\DB;
class ServicePlatController extends Controller
{
/**
* 服务商平台数据
*/
/** 老师资讯列表 */
public function merchantsInfos(Request $request, $merchant_id=0)
{
try{
if ($merchant_id) {
$infos = MInformation::where('merchant_id', $merchant_id)->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();
}
}
}