keyword); if($request->has('channel_id')){ $result = BlessingUsers::where('channel_id',$request->channel_id); if($keyword) $result = $result->where('nickname','like','%'.$keyword.'%'); $result = $result->orderby('id','desc')->paginate(); }else{ if($keyword){ $result = BlessingUsers::where('nickname','like','%'.$keyword.'%')->orderby('id','desc')->paginate(); }else{ $result = BlessingUsers::orderby('id','desc')->paginate(); } } foreach ($result as $key => $value) { $value->receive_num = BottleReceivingRecord::where('receiving_user_id',$value->id)->count(); $value->send_num =DriftingBottle::where('b_id',$value->id)->count(); } return $this->success('ok',$result); } // 用户发送的漂流瓶 public function myBottle(Request $request) { $user_id = $request->user_id; $result = DriftingBottle::where('b_id',$user_id)->paginate(); return $this->success('ok',$result); } // 用户获取的漂流瓶 public function getBottle(Request $request) { $user_id = $request->user_id; $result = BottleReceivingRecord::where('receiving_user_id',$user_id)->paginate(); foreach ($result as $key => $value) { $DriftingBottle = DriftingBottle::where('id',$value->bottle_id)->first(); $value->content = $DriftingBottle->content; $value->type = $DriftingBottle->type; $value->send_user = $DriftingBottle->user; } return $this->success('ok',$result); } // 聊天记录 public function BottleRecord(Request $request) { $user_id = $request->user_id; $sql = BottleChatRecord::orderBy('id','DESC')->limit(1000); $user = BlessingUsers::where('id',$user_id)->first(); if(!$user){ return $this->failure('用户ID错误'); } $result= BottleChatRecord::where(function($query) use($user){ $query->where('b_id',$user->id); $query->orwhere('receiver',$user->id); })->from(\DB::raw('('.$sql->toSql().') as a'))->groupBy('receiving_id')->get(); $data = []; foreach ($result as $key => $value) { $count = BottleChatRecord::where('receiving_id',$value->receiving_id)->count(); if($count<2&&$value->b_id==$user->id) continue; $user = BlessingUsers::where('id',$value->b_id)->first(); $value->nickname = $user->nickname??''; $value->pic = $user->pic??''; array_push($data,$value); } $page = $request->page ?? 1; $perPage = 15; $offset = ($page * $perPage) - $perPage; $result = new LengthAwarePaginator( array_slice($data, $offset, $perPage), count($data), $perPage, $page, ['path' => $request->url(), 'query' => $request->query()] ); return $this->success('ok',$result); } // 聊天详情 public function RecordDetail(Request $request,$id) { $user_id = $request->user_id; $user = BlessingUsers::where('id',$user_id)->first(); BottleChatRecord::where('receiving_id',$id)->where('receiver',$user->id)->update(['status'=>1]); $result = BottleChatRecord::where('receiving_id',$id)->orderBy('id','desc')->get(); foreach ($result as $key => $value) { $user = BlessingUsers::where('id',$value->b_id)->first(); $value->user_name = $user->nickname; $value->user_pic = $user->pic; } return $this->success('ok',$result); } //漂流瓶--举报列表 public function blessComplaintHistories(Request $request){ try { $keyword = $request->keyword; $status = $request->status ?? 0;//0未跟进 1完成跟进 2跟进中 $histories = ComplaintHistory::with('complaintUser','complaintedUser')->where('type','bless'); if($keyword){ $keyword = trim($keyword); $user_ids = BlessingUsers::where('nickname','like','%'.$keyword.'%')->pluck('id'); $histories = $histories->whereIn('complaint_id',$user_ids); } $histories = $histories->where('status',$status)->orderBy('id','desc')->paginate(); $time = date('Y-m-d H:i:s'); foreach ($histories as $key => $history) { $ban_send = 0; $ban_chat = 0; $ban_risk = 0; $history->label = json_decode($history->label); if($history->remark && $history->remark != 'null'){ $history->remark = json_decode($history->remark,true); } //判断用户是否被封禁 $send_history = BannedHistory::where('user_id',$history->complaint_id)->where('type','bless_send')->get(); foreach ($send_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_send = 1; } $chat_history = BannedHistory::where('user_id',$history->complaint_id)->where('type','bless_chat')->get(); foreach ($chat_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_chat = 1; } $risk_history = BannedHistory::where('user_id',$history->complaint_id)->where('type','risk_warning')->get(); foreach ($risk_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_risk = 1; } $history->ban_send = $ban_send; $history->ban_chat = $ban_chat; $history->ban_risk = $ban_risk; } return $this->success('ok',$histories); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } //漂流瓶--祝福列表 public function driftBottles(Request $request){ try { $keyword = $request->keyword; $type = $request->type ?? 'all'; $bottles = DriftingBottle::with('user')->select('id','content','b_id','type','duration','created_at','updated_at'); if($keyword){ $keyword = trim($keyword); $bottles = $bottles->whereHas('user',function($sql) use($keyword){ $sql->where('nickname','like','%'.$keyword.'%'); }); } if($type != 'all'){ $bottles = $bottles->where('type',$type); } $bottles = $bottles->orderBy('id','desc')->paginate(); return $this->success('ok',$bottles); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } //漂流瓶--祝福详情 public function blessBottle(Request $request,$bottle_id){ try { $bottle = DriftingBottle::with('user')->where('id',$bottle_id)->first(); if(!$bottle) return $this->failure('该祝福不存在或被删除'); //接收该漂流瓶的人 $recives = BottleReceivingRecord::with('reciver')->where('bottle_id',$bottle_id)->orderBy('id',"desc")->paginate(); return $this->success('ok',compact('bottle','recives')); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } //漂流瓶--祝福聊天记录 public function blessChatRecord(Request $request){ try { $bottle_id = $request->bottle_id; $receiving_id = $request->receiving_id; //发送祝福人id $b_id = DriftingBottle::where('id',$bottle_id)->value('b_id'); $user = BlessingUsers::where('id',$b_id)->first(); if(empty($user)) return $this->failure('发送该祝福人不存在或已被删除'); $records = BottleChatRecord::where(['bottle_id'=>$bottle_id,'receiving_id'=>$receiving_id])->orderBy('id','asc')->paginate(); foreach ($records as $key => $value) { $b_user = BlessingUsers::where('id',$value->b_id)->first(); $value->user_name = $b_user->nickname; $value->user_pic = $b_user->pic; $value->identity = 'user'; $value->duration = 0; if($value->type!='chat') $value->duration = DriftingBottle::where('id',$value->bottle_id)->value('duration')?:0; if($value->b_id!=$user->id) $value->identity = 'other_user'; } return $this->success('ok',$records); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } //禁止用户发送祝福 聊天 public function banBlessUser(Request $request,$b_user_id){ try { $user = BlessingUsers::where('id',$b_user_id)->first(); $start_time = $request->start_time; $end_time = $request->end_time; if(!$start_time || !$end_time) return $this->failure('请选择封禁时间'); $content = $request->input('content'); $pics = $request->pics ??[]; $ban_type = $request->ban_type??'bless_send';//bless_send 禁止发送祝福 bless_chat禁止聊天 risk_warning风险警告 if(!$user) return $this->failure('该用户不存在'); if(!$content) return $this->failure('请输入封禁理由'); BannedHistory::create([ 'user_id'=>$b_user_id, 'admin_user_id'=>auth()->id(), 'type'=>$ban_type, 'start_time'=>$start_time, 'end_time'=>$end_time, 'content'=>$content, 'pics'=>json_encode($pics), ]); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } //解封用户 public function cancelBanBlessUser(Request $request,$b_user_id){ try { $content = $request->input('content'); if(!$content) return $this->failure('请输入解封理由'); $pics = $request->pics??[]; $type = $request->type; BannedHistory::where('user_id',$b_user_id)->where('type',$type)->delete(); //创建解封记录 BannedHistory::create([ 'user_id'=>$b_user_id, 'admin_user_id'=>auth()->id(), 'type'=>'cancel_ban_'.$type, 'start_time'=>date('Y-m-d H:i:s'), 'end_time'=>date('Y-m-d H:i:s'), 'content'=>$content, 'pics'=>json_encode($pics), ]); return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } //用户封禁记录 public function blessUserBanHistories(Request $request,$b_user_id){ try { //bless_send:禁止发祝福,bless_chat:禁止聊天,cancel_ban_bless_chat:解除禁止聊天,cancel_ban_bless_send:解除禁止发祝福 risk_warning风险警告 $arr = ['bless_send','bless_chat','cancel_ban_bless_chat','cancel_ban_bless_send','risk_warning','cancel_ban_risk_warning']; $histories = BannedHistory::withTrashed()->with('operator')->whereIn('type',$arr)->where('user_id',$b_user_id)->orderBy('id','desc')->get(); foreach ($histories as $key => $history) { $history->pics = json_decode($history->pics,true); } return $this->success('ok',$histories); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器开小差,请稍后再试'); } } // 创建渠道 public function addChannel(Request $request) { $channel = new Channels(); $channel->title = $request->title; $channel->type= 'bless'; $channel->save(); // $share_url = '/pages/tabBar/home'; // $pre = 'channel='.$channel->id; // $channel->share_url = $this->getminiQrcode($share_url,$pre); $channel->share_qr_code = $this->ShareBlessMp( $channel); $channel->save(); return $this->success('ok',$channel); } // 渠道列表 public function ChannelList(Request $request) { $result = Channels::orderBy('id','desc')->paginate(); foreach ($result as $key => $value) { $value->user_num = BlessingUsers::where('channel_id',$value->id)->count(); } return $this->success('ok',$result); } // 用户详情 public function User(Request $request,$b_user_id) { $user = BlessingUsers::where('id',$b_user_id)->first(); $user->receive_num = BottleReceivingRecord::where('receiving_user_id',$user->id)->count(); $user->send_num =DriftingBottle::where('b_id',$user->id)->count(); //检查用户是否处于被封禁状态 $time = date('Y-m-d H:i:s'); $ban_send = 0; $ban_chat = 0; $ban_risk = 0; //判断用户是否被封禁 $send_history = BannedHistory::where('user_id',$b_user_id)->where('type','bless_send')->get(); foreach ($send_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_send = 1; } $chat_history = BannedHistory::where('user_id',$b_user_id)->where('type','bless_chat')->get(); foreach ($chat_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_chat = 1; } $risk_history = BannedHistory::where('user_id',$b_user_id)->where('type','risk_warning')->get(); foreach ($risk_history as $key => $value) { if($value->start_time < $time && $value->end_time > $time) $ban_risk = 1; } $user->ban_send = $ban_send; $user->ban_chat = $ban_chat; $user->ban_risk = $ban_risk; return $this->success('ok',$user); } // 生成二维码 public function getminiQrcode($path,$pre) { $app_id = 'wx1d3301c485402a21'; $secret = '0bf57514998d4b8cfd602d8ca49c1fd1'; $config = [ 'app_id' => $app_id, 'secret' => $secret, // 下面为可选项 // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名 'response_type' => 'array', 'log' => [ 'level' => 'debug', 'file' => storage_path('logs/wechat.log'), //这个必须要有,要不调试有问题,你都会找不到原因 ], ]; $app = Factory::miniProgram($config)->access_token; $token = $app->getToken(true); $data = []; $data['jump_wxa']['path'] = $path; $data['jump_wxa']['query'] = $pre ; $data = json_encode($data); $wechaturl = 'https://api.weixin.qq.com/wxa/generatescheme?access_token=' . $token['access_token']; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_URL, $wechaturl); // curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); if (1 == strpos("$" . $wechaturl, "https://")) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $result = curl_exec($curl); $result = json_decode($result, true); $jump_url = ''; if(array_key_exists('openlink',$result)){ $jump_url = $result['openlink']; } return $jump_url; } /* * 生成用户分享海报 跳转小程序 */ public function ShareBlessMp($channel) { $app_id = 'wx1d3301c485402a21'; $secret = '0bf57514998d4b8cfd602d8ca49c1fd1'; $config = [ 'app_id' => $app_id, 'secret' => $secret, // 下面为可选项 // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名 'response_type' => 'array', 'log' => [ 'level' => 'debug', 'file' => storage_path('logs/wechat.log'), //这个必须要有,要不调试有问题,你都会找不到原因 ], ]; $app = Factory::miniProgram($config); $data = []; $data['is_hyaline'] = true; $response = $app->app_code->get('/pages/tabBar/home?channel='.$channel->id, $data); $path = time().'activity_qrocde.png'; $response->saveAs(storage_path('qrcode'), $path); $qrcode_path = storage_path("qrcode/".$path); $path = date('Y') . date('m') . "/" . date('d'); $rand = \CommonUtilsService::getTradeNO(); $object = $path . "/" . $rand.'.png'; $ossClient = new \OSS\OssClient(config('alioss.id'), config('alioss.secret'), config('alioss.host')); $ossClient->uploadFile(config('alioss.buckets.picture'), $object, $qrcode_path); $file_url = 'https://' . config('alioss.picture_domain') . '/' . $object; return $file_url; } }