where('id',$uid)->findOrEmpty()->toArray(); }elseif($scene == 1){ //web端 获取admin表数据 $data = Admin::field('id,name,avatar')->where('id',$uid)->findOrEmpty()->toArray(); }else{ $data = []; } return $data; } //获取接收者信息 private function getToUserInfo($uid,$scene): array { //如果是从app端发送的消息,接收者为web端的admin用户 //如果是从web端发送的消息,接收者为app端的user用户 if($scene == 0){ //app端 获取admin表数据 $data = Admin::field('id,name,avatar')->where('id',$uid)->findOrEmpty()->toArray(); }elseif($scene == 1){ //web端 获取user表数据 $data = User::field('id,nickname as name,avatar')->where('id',$uid)->findOrEmpty()->toArray(); }else{ $data = []; } return $data; } /*****************************************************************************************************************************************************************************/ //绑定uid public function doBindUid(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['client_id','user_id','scene']); if(empty($params['client_id']) || empty($params['user_id']) || !isset($params['scene'])){ return $this->fail('参数错误'); } if(!in_array($params['scene'],[0,1])){ return $this->fail('场景错误'); } Gateway::bindUid($params['client_id'], $this->sceneText($params['scene']).'_'.$params['user_id']); return $this->success('绑定成功',['msg'=>$this->sceneText($params['scene']).'_'.$params['user_id']]); } //发送消息 public function sendTextMsg(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['from_user_id','to_user_id','content','type','scene']); //验证请求参数 if(empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['content']) || empty($params['type']) || !isset($params['scene'])){ return $this->fail('参数错误'); } if($params['type'] !== 'text'){ return $this->fail('消息类型错误'); } if(!in_array($params['scene'],[0,1])){ return $this->fail('消息场景错误'); } //获取发送者信息 $fromUserInfo = $this->getFromUserInfo($params['from_user_id'],$params['scene']); if(empty($fromUserInfo)){ return $this->fail('发送者信息错误'); } //获取接收者信息 $toUserInfo = $this->getToUserInfo($params['to_user_id'],$params['scene']); if(empty($toUserInfo)){ return $this->fail('接收者信息错误'); } //存储信息 $saveData = [ 'from_user_id' => $params['from_user_id'], 'to_user_id' => $params['to_user_id'], 'content' => $params['content'], 'type' => $params['type'], 'is_read' => 0, 'is_undo' => 0, 'is_delete' => 0, 'create_time' => time(), 'extends' => null, ]; //保存消息 try { $model = new UserImMessage(); $model->save($saveData); if(empty($model->id)){ return $this->fail('发送失败'); } //发送消息 $sendData = [ 'id' => $model->id, 'from_user_id' => $params['from_user_id'], 'from_user_name' => $fromUserInfo['name'], 'from_user_avatar' => $fromUserInfo['avatar'], 'to_user_id' => $params['to_user_id'], 'to_user_name' => $toUserInfo['name'], 'to_user_avatar' => $toUserInfo['avatar'], 'content' => $params['content'], 'type' => $params['type'], 'is_read' => 0, 'create_time' => $saveData['create_time'], 'extends' => null, ]; if($params['scene'] == 0) { //给admin用户发 Gateway::sendToUid($this->sceneText(1).'_'.$params['to_user_id'], json_encode($sendData)); }else{ //给user用户发 Gateway::sendToUid($this->sceneText(0).'_'.$params['to_user_id'], json_encode($sendData)); } return $this->success('发送成功',$sendData); }catch (\Exception $e) { return $this->fail($e->getMessage()); } } //上传文件 public function sendFileMsg(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['from_user_id','to_user_id','type','scene']); //获取参数 $file = $this->request->file('file'); if(empty($file) || empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['type']) || !isset($params['scene'])){ return $this->fail('参数错误'); } if(!in_array($params['type'],['image','video'])){ return $this->fail('消息类型错误'); } if(!in_array($params['scene'],[0,1])){ return $this->fail('消息场景错误'); } //获取发送者信息 $fromUserInfo = $this->getFromUserInfo($params['from_user_id'],$params['scene']); if(empty($fromUserInfo)){ return $this->fail('发送者信息错误'); } //获取接收者信息 $toUserInfo = $this->getToUserInfo($params['to_user_id'],$params['scene']); if(empty($toUserInfo)){ return $this->fail('接收者信息错误'); } $filePath =$file->getRealPath(); $fileType = $file->extension(); $fileSize = $file->getSize(); $ali_oss = new alioss(); 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'] == 0){ return $this->fail($result['msg']); } //存储信息 $saveData = [ 'from_user_id' => $params['from_user_id'], 'to_user_id' => $params['to_user_id'], 'content' => $result['data'], 'type' => $params['type'], 'is_read' => 0, '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, ]; try { $model = new UserImMessage(); $model->save($saveData); if(empty($model->id)){ return $this->fail('发送失败'); } //发送消息 $sendData = [ 'id' => $model->id, 'from_user_id' => $params['from_user_id'], 'from_user_name' => $fromUserInfo['name'], 'from_user_avatar' => $fromUserInfo['avatar'], 'to_user_id' => $params['to_user_id'], 'to_user_name' => $toUserInfo['name'], 'to_user_avatar' => $toUserInfo['avatar'], 'content' => $result['data'], 'type' => $params['type'], 'is_read' => 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, ]; if($params['scene'] == 0) { //给admin用户发 Gateway::sendToUid($this->sceneText(1).'_'.$params['to_user_id'], json_encode($sendData)); }else{ //给user用户发 Gateway::sendToUid($this->sceneText(0).'_'.$params['to_user_id'], json_encode($sendData)); } return $this->success('发送成功',$sendData ); }catch (\Exception $e) { return $this->fail($e->getMessage()); } } //消息列表 public function msgList(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['from_user_id','to_user_id','scene','page_no','page_size']); if(empty($params['from_user_id']) || empty($params['to_user_id']) || !isset($params['scene']) || empty($params['page_no']) || empty($params['page_size'])){ return $this->fail('参数错误'); } if(!in_array($params['scene'],[0,1])){ return $this->fail('消息场景错误'); } //获取发送者信息 $fromUserInfo = $this->getFromUserInfo($params['from_user_id'],$params['scene']); if(empty($fromUserInfo)){ return $this->fail('发送者信息错误'); } //获取接收者信息 $toUserInfo = $this->getToUserInfo($params['to_user_id'],$params['scene']); if(empty($toUserInfo)){ return $this->fail('接收者信息错误'); } //将消息设置为已读 UserImMessage::where([['from_user_id','=',$params['from_user_id']],['to_user_id','=',$params['to_user_id']]])->update(['is_read' => 1]); //获取用户消息 $params['page_no'] -= 1; $sql = "SELECT id,from_user_id,to_user_id,content,type,is_read,create_time,extends FROM la_user_im_message WHERE (from_user_id = {$params['from_user_id']} AND to_user_id = {$params['to_user_id']}) OR (from_user_id = {$params['to_user_id']} AND to_user_id = {$params['from_user_id']}) ORDER BY create_time DESC LIMIT {$params['page_no']},{$params['page_size']}"; $msgData = Db::query($sql); foreach($msgData as $k=>$v){ if($v['from_user_id'] == $params['from_user_id']){ $msgData[$k]['from_user_name'] = $fromUserInfo['name']; $msgData[$k]['from_user_avatar'] = $fromUserInfo['avatar']; }else{ $msgData[$k]['from_user_name'] = $toUserInfo['name']; $msgData[$k]['from_user_avatar'] = $toUserInfo['avatar']; } if($v['to_user_id'] == $params['to_user_id']){ $msgData[$k]['to_user_name'] = $toUserInfo['name']; $msgData[$k]['to_user_avatar'] = $toUserInfo['avatar']; }else{ $msgData[$k]['to_user_name'] = $fromUserInfo['name']; $msgData[$k]['to_user_avatar'] = $fromUserInfo['avatar']; } } //返回数据 return $this->success('请求成功',$msgData); } //获取联系人列表 public function contactList(): Json{ //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['user_id']); if(empty($params['user_id'])){ return $this->fail('参数错误'); } //获取用户信息 $userInfo = Admin::where('id',$params['user_id'])->findOrEmpty(); //验证用户信息 if($userInfo->isEmpty()){ return $this->fail('未找到用户信息'); } //验证用户身份 if(empty($userInfo['role_id']) || $userInfo['role_id'][0] != 8){ return $this->fail('用户角色错误'); } //获取片区经理创建的公司 $company = Company::field('id')->where('area_manager',$userInfo['id'])->column('id'); //获取公司的成员 $users = User::field('id,nickname as name,avatar')->where('company_id','in',$company)->select()->each(function($item) use($params) { //获取消息 $msg_no_read = UserImMessage::field('id')->where('from_user_id',$item['id'])->where('to_user_id',$params['user_id'])->where('is_read',0)->count(); $last_msg = UserImMessage::field('id,content,create_time')->where('from_user_id',$item['id'])->where('to_user_id',$params['user_id'])->where('is_read',0)->order('create_time desc')->limit(1)->findOrEmpty(); $item['no_read_num'] = $msg_no_read; $item['last_msg_content'] = $last_msg['content']; $item['last_msg_time'] = $last_msg['create_time']; })->toArray(); $key = array_column($users,'last_msg_time'); array_multisort($key,SORT_DESC,$users); //返回数据 return $this->success('请求成功',$users); } //获取片区经理用户id public function getAreaManager(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['user_id']); if(empty($params['user_id'])){ return $this->fail('参数错误'); } //获取其用户的公司id $userInfo = User::field('id,company_id')->where('id',$params['user_id'])->findOrEmpty(); if(empty($userInfo)){ return $this->fail('未获取到用户信息'); } //获取公司信息 $companyInfo = Company::field('area_manager')->where('id',$userInfo['company_id'])->findOrEmpty(); if(empty($companyInfo)){ return $this->fail('用户信息错误'); } if($params['user_id'] == $companyInfo['area_manager']){ return $this->fail('用户身份错误错误'); } //返回 return $this->success('请求成功',['to_user_id'=>$companyInfo['area_manager']]); } }