From 5eb383da6a7abef650eca57154350a38a7b8548f Mon Sep 17 00:00:00 2001 From: unknown <736250432@qq.com> Date: Thu, 28 Sep 2023 10:30:14 +0800 Subject: [PATCH] updata im api --- app/api/controller/ImController.php | 119 ------------- app/common/controller/ImController.php | 232 +++++++++++++++++++++++++ 2 files changed, 232 insertions(+), 119 deletions(-) delete mode 100644 app/api/controller/ImController.php create mode 100644 app/common/controller/ImController.php diff --git a/app/api/controller/ImController.php b/app/api/controller/ImController.php deleted file mode 100644 index 033cfdbf8..000000000 --- a/app/api/controller/ImController.php +++ /dev/null @@ -1,119 +0,0 @@ -request->isPost()){ - return $this->fail('请求方式错误'); - } - //获取请求参数 - $params = $this->request->post(['client_id','user_id']); - if(empty($params['client_id']) || empty($params['user_id'])){ - return $this->fail('参数错误'); - } - Gateway::bindUid($params['client_id'], $params['user_id']); - return $this->success('绑定成功'); - } - - public function sendMessage(): Json - { - //验证请求方式 - if(!$this->request->isPost()){ - return $this->fail('请求方式错误'); - } - //获取请求参数 - $params = $this->request->post(['msg_id','from_user_id','from_user_name','from_user_avatar','to_user_id','to_user_name','to_user_avatar','content','type']); - if(empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['from_user_name']) || empty($params['from_user_avatar']) || empty($params['to_user_id']) || empty($params['to_user_name']) || empty($params['to_user_avatar']) || empty($params['content']) || empty($params['type'])){ - return $this->fail('参数错误'); - } - if(!in_array($params['type'],['text','image','video'])){ - return $this->fail('消息类型错误'); - } - //判断消息是否存在 - $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); - if(!$msgData->isEmpty()){ - return $this->fail('该消息已发送'); - } - //保存消息 - try { - $model = new UserImMessage(); - $result = $model->save($params); - if($result){ - Gateway::sendToUid($params['to_user_id'], json_encode($params)); - return $this->success('发送成功'); - }else{ - return $this->fail('发送失败'); - } - }catch (\Exception $e) { - return $this->fail($e->getMessage()); - } - } - - public function upload(): Json - { - //验证请求方式 - if(!$this->request->isPost()){ - return $this->fail('请求方式错误'); - } - //获取请求参数 - $params = $this->request->post(['msg_id','from_user_id','from_user_name','from_user_avatar','to_user_id','to_user_name','to_user_avatar','type']); - //获取参数 - $file = $this->request->file('file'); - if(empty($file) || empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['from_user_name']) || empty($params['from_user_avatar']) || empty($params['to_user_id']) || empty($params['to_user_name']) || empty($params['to_user_avatar']) || empty($params['type'])){ - return $this->fail('参数错误'); - } - if(!in_array($params['type'],['image','video'])){ - return $this->fail('消息类型错误'); - } - //判断消息是否存在 - $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); - if(!$msgData->isEmpty()){ - return $this->fail('该消息已发送'); - } - $filePath =$file->getRealPath(); - $fileType = $file->extension(); - $fileSize = $file->getSize(); - $ali_oss = new alioss(); - $result = ''; - switch ($params['type']) { - case 'image': - $result = $ali_oss -> uploadImg($filePath,$fileType,$fileSize); - break; - case 'video': - $result = $ali_oss -> uploadVideo($filePath,$fileType,$fileSize); - break; - } - if($result && $result['code'] == 1){ - $params['content'] = $result['data']; - if($params['type'] == 'video'){ - $params['extends']= json_encode(['poster_img'=>$result['data'].'?x-oss-process=video/snapshot,t_1000,m_fast,w_800,f_png']); - } - //保存消息 - try { - $model = new UserImMessage(); - $result = $model->save($params); - if($result){ - Gateway::sendToUid($params['to_user_id'], json_encode($params)); - return $this->success('发送成功'); - }else{ - return $this->fail('发送失败'); - } - }catch (\Exception $e) { - return $this->fail($e->getMessage()); - } - }else{ - return $this->fail($result['msg']); - } - } -} \ No newline at end of file diff --git a/app/common/controller/ImController.php b/app/common/controller/ImController.php new file mode 100644 index 000000000..88e2886ef --- /dev/null +++ b/app/common/controller/ImController.php @@ -0,0 +1,232 @@ +request->isPost()){ + return $this->fail('请求方式错误'); + } + //获取请求参数 + $params = $this->request->post(['client_id','user_id']); + if(empty($params['client_id']) || empty($params['user_id'])){ + return $this->fail('参数错误'); + } + Gateway::bindUid($params['client_id'], $params['user_id']); + return $this->success('绑定成功'); + } + + //发送消息 + public function sendMessage(): Json + { + //验证请求方式 + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + //获取请求参数 + $params = $this->request->post(['msg_id','from_user_id','to_user_id','content','type']); + if(empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['content']) || empty($params['type'])){ + return $this->fail('参数错误'); + } + if(!in_array($params['type'],['text','image','video'])){ + return $this->fail('消息类型错误'); + } + //判断消息是否存在 + $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); + if(!$msgData->isEmpty()){ + return $this->fail('该消息已发送'); + } + //获取发送者信息 + $fromUserInfo = User::where('id',$params['from_user_id'])->findOrEmpty();; + if($fromUserInfo->isEmpty()){ + return $this->fail('未找到发送者信息'); + } + //获取接收者信息 + $toUserInfo = User::where('id',$params['to_user_id'])->findOrEmpty(); + if($toUserInfo->isEmpty()){ + return $this->fail('未找到接收者信息'); + } + //存储信息 + $saveData = [ + 'msg_id' => $params['msg_id'], + 'from_user_id' => $params['from_user_id'], + 'to_user_id' => $params['to_user_id'], + 'content' => $params['content'], + 'type' => 'type', + 'is_read' => 1, + 'is_undo' => 0, + 'is_delete' => 0, + 'create_time' => time(), + 'extends' => null, + ]; + //发送消息 + $sendData = [ + 'msg_id' => $params['msg_id'], + 'from_user_id' => $params['from_user_id'], + 'from_user_name' => $fromUserInfo['nickname'], + 'from_user_avatar' => $fromUserInfo['avatar'], + 'to_user_id' => $params['to_user_id'], + 'to_user_name' => $toUserInfo['nickname'], + 'to_user_avatar' => $toUserInfo['avatar'], + 'content' => $params['content'], + 'type' => 'type', + 'is_read' => 0, + 'is_undo' => 0, + 'is_delete' => 0, + 'create_time' => $saveData['create_time'], + 'extends' => null, + ]; + //保存消息 + try { + $model = new UserImMessage(); + $result = $model->save($saveData); + if($result){ + Gateway::sendToUid($params['to_user_id'], json_encode($sendData)); + return $this->success('发送成功'); + }else{ + return $this->fail('发送失败'); + } + }catch (\Exception $e) { + return $this->fail($e->getMessage()); + } + } + + //上传文件 + public function upload(): Json + { + //验证请求方式 + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + //获取请求参数 + $params = $this->request->post(['msg_id','from_user_id','to_user_id','type']); + //获取参数 + $file = $this->request->file('file'); + if(empty($file) || empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['type'])){ + return $this->fail('参数错误'); + } + if(!in_array($params['type'],['image','video'])){ + return $this->fail('消息类型错误'); + } + //判断消息是否存在 + $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); + if(!$msgData->isEmpty()){ + return $this->fail('该消息已发送'); + } + //获取发送者信息 + $fromUserInfo = User::where('id',$params['from_user_id'])->findOrEmpty();; + if($fromUserInfo->isEmpty()){ + return $this->fail('未找到发送者信息'); + } + //获取接收者信息 + $toUserInfo = User::where('id',$params['to_user_id'])->findOrEmpty(); + if($toUserInfo->isEmpty()){ + return $this->fail('未找到接收者信息'); + } + $filePath =$file->getRealPath(); + $fileType = $file->extension(); + $fileSize = $file->getSize(); + $ali_oss = new alioss(); + $result = ''; + switch ($params['type']) { + case 'image': + $result = $ali_oss -> uploadImg($filePath,$fileType,$fileSize); + break; + case 'video': + $result = $ali_oss -> uploadVideo($filePath,$fileType,$fileSize); + break; + default: + return $this->fail('文件类型错误~'); + } + if($result && $result['code'] == 1){ + //存储信息 + $saveData = [ + 'msg_id' => $params['msg_id'], + 'from_user_id' => $params['from_user_id'], + 'to_user_id' => $params['to_user_id'], + 'content' => $result['data'], + 'type' => 'type', + 'is_read' => 1, + 'is_undo' => 0, + 'is_delete' => 0, + 'create_time' => time(), + 'extends' => $params['type'] == 'video' ? json_encode(['poster_img'=>$result['data'].'?x-oss-process=video/snapshot,t_1000,m_fast,w_800,f_png']) : null, + ]; + //发送消息 + $sendData = [ + 'msg_id' => $params['msg_id'], + 'from_user_id' => $params['from_user_id'], + 'from_user_name' => $fromUserInfo['nickname'], + 'from_user_avatar' => $fromUserInfo['avatar'], + 'to_user_id' => $params['to_user_id'], + 'to_user_name' => $toUserInfo['nickname'], + 'to_user_avatar' => $toUserInfo['avatar'], + 'content' => $result['data'], + 'type' => 'type', + 'is_read' => 0, + 'is_undo' => 0, + 'is_delete' => 0, + 'create_time' => $saveData['create_time'], + 'extends' => $params['type'] == 'video' ? json_encode(['poster_img'=>$result['data'].'?x-oss-process=video/snapshot,t_1000,m_fast,w_800,f_png']) : null, + ]; + //保存消息 + try { + $model = new UserImMessage(); + $result = $model->save($saveData); + if($result){ + Gateway::sendToUid($params['to_user_id'], json_encode($sendData)); + return $this->success('发送成功'); + }else{ + return $this->fail('发送失败'); + } + }catch (\Exception $e) { + return $this->fail($e->getMessage()); + } + }else{ + return $this->fail($result['msg']); + } + } + + //消息列表 + public function msgList(): Json + { + //验证请求方式 + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + //获取请求参数 + $params = $this->request->post(['user_id','page_no','page_size']); + if(empty($params['user_id']) || empty($params['page_no']) || empty($params['page_size'])){ + return $this->fail('参数错误'); + } + //获取用户信息 + $userInfo = User::where('id',$params['user_id'])->findOrEmpty(); + if($userInfo->isEmpty()){ + return $this->fail('未找到用户信息'); + } + //获取用户消息 + $msgData = UserImMessage::field('id,from_user_id,to_user_id,content,type,is_read,is_undo,is_delete,create_time,extends') + ->where('from_user_id',$params['user_id']) + ->order('create_time desc')->page($params['page_no'],$params['page_size'])->select()->each(function($item) use($userInfo){ + $toUserInfo = User::field('nickname,avatar')->where('id',$item['to_user_id'])->findOrEmpty(); + if(!$toUserInfo->isEmpty()){ + $item['from_user_name'] = $userInfo['nickname']; + $item['from_user_avatar'] = $userInfo['avatar']; + $item['to_user_name'] = $toUserInfo['nickname']; + $item['to_user_avatar'] = $toUserInfo['avatar']; + } + })->toArray(); + //返回数据 + return $this->success('请求成功',$msgData); + } +} \ No newline at end of file