From eb9d903988ac92d90438e0c19089eec65af3c681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=9D=8E?= <712120393@qq.com> Date: Thu, 25 Mar 2021 22:26:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E6=97=B6=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/SwooleWebsocket.php | 5 +- app/Helper/function.php | 34 +++-- .../Controllers/Chat/MessageController.php | 88 +++++++++++++ database/seeds/MenuTableSeeder.php | 20 +++ database/seeds/UserTableSeeder.php | 17 +++ resources/views/chat/message/index.blade.php | 124 ++++++++++++++++++ resources/views/chat/message/show.blade.php | 119 +++++++++++++++++ routes/web.php | 24 ++++ 8 files changed, 420 insertions(+), 11 deletions(-) create mode 100644 app/Http/Controllers/Chat/MessageController.php create mode 100644 resources/views/chat/message/index.blade.php create mode 100644 resources/views/chat/message/show.blade.php diff --git a/app/Console/Commands/SwooleWebsocket.php b/app/Console/Commands/SwooleWebsocket.php index 20202606..b8f6941c 100644 --- a/app/Console/Commands/SwooleWebsocket.php +++ b/app/Console/Commands/SwooleWebsocket.php @@ -63,8 +63,9 @@ class SwooleWebsocket extends Command public function request($request, $response) { - $data = Arr::get($request->post, 'data'); - $user_ids = Arr::get($request->post, 'user_ids',[]); + $parms = $request->getContent(); + $data = Arr::get($parms, 'data'); + $user_ids = Arr::get($parms, 'user_ids',[]); if ($data != null && !empty($user_ids)) { foreach ($this->fd as $k => $v) { // 需要先判断是否是正确的websocket连接,否则有可能会push失败 diff --git a/app/Helper/function.php b/app/Helper/function.php index 8022a53a..766f2987 100644 --- a/app/Helper/function.php +++ b/app/Helper/function.php @@ -1,6 +1,8 @@ pluck('nickname', 'id')->toArray(); + foreach ($accept_user_ids as $accept_user_id) { + \App\Models\Message::create([ + 'send_user_id' => $send_user_id, + 'send_user_nickname' => \Illuminate\Support\Arr::get($users, $send_user_id, null), + 'accept_user_id' => $accept_user_id, + 'accept_user_nickname' => \Illuminate\Support\Arr::get($users, $accept_user_id, null), + 'title' => $data['title'] ?? null, + 'content' => $data['content'] ?? null, + ]); + } $client = new \GuzzleHttp\Client(); - $client->post('http://127.0.0.1:9502',[ - 'form_params' => [ + $client->post('http://127.0.0.1:9502', [ + 'json' => [ 'data' => $data, - 'user_ids' => $user_ids, + 'user_ids' => $accept_user_ids, ], 'timeout' => 5, ]); - }catch (Exception $exception){ - \Illuminate\Support\Facades\Log::error('推送消息异常:'.$exception->getMessage()); + return true; + } catch (Exception $exception) { + \Illuminate\Support\Facades\Log::error('推送消息异常:' . $exception->getMessage()); } - return; + return false; } } diff --git a/app/Http/Controllers/Chat/MessageController.php b/app/Http/Controllers/Chat/MessageController.php new file mode 100644 index 00000000..f5f7e46e --- /dev/null +++ b/app/Http/Controllers/Chat/MessageController.php @@ -0,0 +1,88 @@ +ajax()){ + $type = $request->input('type'); + $res = Message::query(); + if ($type==2){ //通知 + $res = $res->where('send_user_id','=',0) + ->where('accept_user_id','=',$request->user()->id) + ->where('read','=',0); + }elseif ($type==3){ //私信 + $res = $res->where('send_user_id','>',0)->where('accept_user_id','=',$request->user()->id); + } + $res = $res->orderBy('read','asc')->orderByDesc('id')->paginate($request->input('limit',30)); + return $this->success('ok',$res->items(),$res->total()); + } + return View::make('chat.message.index'); + } + + + public function create() + { + return View::make('chat.message.create'); + } + + + public function store(Request $request) + { + $data = $request->all(['title','content','accept_user_ids']); + $res = push_message(['title'=>$data['title'],'content'=>$data['content']],$data['accept_user_ids'],$request->user()->id); + if ($res){ + return $this->success(); + } + return $this->success(); + } + + + public function read(Request $request) + { + $ids = $request->input('ids'); + if (empty($ids)){ + return $this->error('请选择操作项'); + } + try { + Message::query()->whereIn('id',$ids)->update(['read'=>1]); + return $this->success(); + }catch (\Exception $exception){ + Log::error('标记为已读操作异常:'.$exception->getMessage()); + return $this->error(); + } + } + + + public function show(Request $request,$id) + { + $model = Message::query()->where('id',$id)->first(); + return View::make('chat.message.show',compact('model')); + } + + + public function destroy(Request $request) + { + $ids = $request->get('ids'); + if (empty($ids)){ + return $this->error('请选择删除项'); + } + try{ + Message::destroy($ids); + return $this->success(); + }catch (\Exception $exception){ + Log::error('删除消息异常:'.$exception->getMessage()); + return $this->error(); + } + } + +} diff --git a/database/seeds/MenuTableSeeder.php b/database/seeds/MenuTableSeeder.php index 6e4b7248..e8c7e8cb 100644 --- a/database/seeds/MenuTableSeeder.php +++ b/database/seeds/MenuTableSeeder.php @@ -174,6 +174,26 @@ class MenuTableSeeder extends Seeder ], ] ], + [ + 'name' => '实时聊天', + 'route' => null, + 'url' => null, + 'icon' => 'layui-icon-cellphone-fine', + 'type' => 2, + 'sort' => 2, + 'permission_name' => 'chat', + 'child' => [ + [ + 'name' => '消息中心', + 'route' => 'chat.message', + 'url' => null, + 'icon' => 'layui-icon-note', + 'type' => 1, + 'permission_name' => 'chat.message', + ], + + ] + ], ]; $permissions = \App\Models\Permission::pluck('id','name')->toArray(); foreach ($datas as $k1 => $d1){ diff --git a/database/seeds/UserTableSeeder.php b/database/seeds/UserTableSeeder.php index 84f8950e..cd3a506d 100644 --- a/database/seeds/UserTableSeeder.php +++ b/database/seeds/UserTableSeeder.php @@ -208,6 +208,23 @@ class UserTableSeeder extends Seeder ], ], ], + [ + 'name' => 'chat', + 'display_name' => '实时聊天', + 'child' => [ + [ + 'name' => 'chat.message', + 'display_name' => '消息中心', + 'child' => [ + ['name' => 'chat.message.create', 'display_name' => '发送消息'], + ['name' => 'chat.message.edit', 'display_name' => '详情'], + ['name' => 'chat.message.read', 'display_name' => '已读'], + ['name' => 'chat.message.destroy', 'display_name' => '删除'], + ] + ], + + ], + ], ]; foreach ($permissions as $pem1) { //生成一级权限 diff --git a/resources/views/chat/message/index.blade.php b/resources/views/chat/message/index.blade.php new file mode 100644 index 00000000..9415478e --- /dev/null +++ b/resources/views/chat/message/index.blade.php @@ -0,0 +1,124 @@ +@extends('base') + +@section('content') +
+
+
+
    +
  • 全部消息
  • +
  • 通知6
  • +
  • 私信
  • +
+
+
+
+ + + +
+
+
+
+
+ + + +
+
+
+
+
+ + + +
+
+
+
+
+
+
+@endsection + +@section('script') + +@endsection diff --git a/resources/views/chat/message/show.blade.php b/resources/views/chat/message/show.blade.php new file mode 100644 index 00000000..dfac4b02 --- /dev/null +++ b/resources/views/chat/message/show.blade.php @@ -0,0 +1,119 @@ +@extends('base') + +@section('content') +
+
+
+
+ +
+
+
+
+@endsection + +@section('script') + +@endsection diff --git a/routes/web.php b/routes/web.php index bd00437d..e9c4750e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -298,3 +298,27 @@ Route::group(['prefix'=>'crm','namespace'=>'Crm','middleware'=>['auth','permissi }); }); + + +/* +|-------------------------------------------------------------------------- +| 实时聊天模块 +|-------------------------------------------------------------------------- +*/ +Route::group(['prefix'=>'chat','namespace'=>'Chat','middleware'=>['auth','permission:chat']],function (){ + + //消息中心 + Route::group([],function (){ + Route::get('message','MessageController@index')->name('chat.message')->middleware('permission:chat.message'); + //添加 + Route::get('message/create','MessageController@create')->name('chat.message.create')->middleware('permission:chat.message.create'); + Route::post('message/store','MessageController@store')->name('chat.message.store')->middleware('permission:chat.message.create'); + //详情 + Route::get('message/{id}/show','MessageController@show')->name('chat.message.edit')->middleware('permission:chat.message.edit'); + //已读 + Route::post('message/read','MessageController@read')->name('chat.message.read')->middleware('permission:chat.message.read'); + //删除 + Route::delete('message/destroy','MessageController@destroy')->name('chat.message.destroy')->middleware('permission:chat.message.destroy'); + }); + +});