123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747 |
- <?php
- namespace App\JsonRpc;
- use App\Model\ChatChannel;
- use App\Model\ContactApply;
- use App\Model\Contact;
- use App\Model\TalkSession;
- use App\Model\TalkRecords;
- use App\Model\TalkRecordsFile;
- use App\Model\TalkGroup;
- use App\Model\TalkGroupMember;
- use App\Model\TalkSessionAssociation;
- use App\Tools\PublicData;
- use Hyperf\DbConnection\Db;
- use Hyperf\RpcServer\Annotation\RpcService;
- use App\Tools\Result;
- #[RpcService(name: "ChatService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
- class ChatService implements ChatServiceInterface
- {
- /**
- * @param array $data
- * @return array
- */
- public function getChatChannelList(array $data): array
- {
- $result = ChatChannel::get();
- return Result::success($result);
- }
- /**
- * @param array $data
- * @return array
- */
- public function delChatChannel(array $data): array
- {
- $result = ChatChannel::where(['fd'=>$data['fd']])->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * @param array $data
- * @return array
- */
- public function addChatChannel(array $data): array
- {
- $result = ChatChannel::insertGetId($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 添加申请
- * @param array $data
- * @return array
- */
- public function addContactApply(array $data): array
- {
- $result = ContactApply::insertGetId($data);
- if($result){
- return Result::success($result);
- }else{
- return Result::error('添加申请失败');
- }
- }
- /**
- * 更新申请
- * @param array $data
- * @return array
- */
- public function updateContactApply(array $data): array
- {
- $type = $data['type'];
- //判断同意还是不同意
- if($type == 1){
- Db::beginTransaction();
- try{
- //同意 双方互为好友 -添加好友关系
- $data1 = [
- 'user_id'=>$data['user_id'],
- 'friend_id'=>$data['friend_id'],
- ];
- var_dump("好友关系表insert",$data1);
- Contact::insertGetId($data1);
- $data2 = [
- 'user_id'=>$data['friend_id'],
- 'friend_id'=>$data['user_id'],
- ];
- var_dump("好友关系表insert22",$data1);
- Contact::insertGetId($data2);
- $where1 = [
- 'friend_id'=>$data['user_id'],
- 'user_id'=>$data['friend_id'],
- ];
- var_dump("申请记录删除:",$data1);
- ContactApply::where($where1)->delete();
- var_dump("会话id:",PublicData::uuid());
- //创建会话
- $sessionData = [
- 'id'=>PublicData::uuid(),
- 'talk_type'=>'1',
- ];
- TalkSession::insert($sessionData);
- //添加会话关系
- $talkSessionAssociationData = [
- [
- 'id'=>PublicData::uuid(),
- 'user_id'=>$data['user_id'],
- 'to_user_id'=>$data['friend_id'],
- 'session_id'=>$sessionData['id']
- ]
- ,[
- 'id'=>PublicData::uuid(),
- 'user_id'=>$data['friend_id'],
- 'to_user_id'=>$data['user_id'],
- 'session_id'=>$sessionData['id']
- ]
- ];
- var_dump("创建会话:",$talkSessionAssociationData);
- TalkSessionAssociation::insert($talkSessionAssociationData);
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("同意添加为好友失败",0);
- }
- }else if($type == 2){
- Db::beginTransaction();
- try{
- $where1 = [
- 'friend_id'=>$data['user_id'],
- 'user_id'=>$data['friend_id'],
- ];
- ContactApply::where($where1)->delete();
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("拒绝添加好友失败",0);
- }
- }
- return Result::success([]);
- }
- /**
- * 好友申请列表
- * @param array $data
- * @return array
- */
- public function getContactApplyList(array $data): array
- {
- $where = [
- 'friend_id'=>$data['user_id']
- ];
- $result = ContactApply::where($where)->get();
- return Result::success($result);
- }
- /**
- * 好有查询
- * @param array $data
- * @return array
- */
- public function getContactList(array $data): array
- {
- $where = [
- ['contact.status','=','1'],
- ['contact.user_id','=',$data['user_id']],
- ];
- if(isset($data['pageSize'])){
- $result = Contact::where($where)
- ->where(function ($query) use ($data) {
- $query->where('user.nickname', 'like','%'.$data['keyWord'].'%')
- ->orWhere('contact.remark', 'like','%'.$data['keyWord'].'%');
- })
- ->leftJoin('user', 'user.id', '=', 'contact.friend_id')
- ->select('contact.*', 'user.nickname','user.avatar')
- ->limit($data['pageSize'])->offset(($data['page']-1)*$data['pageSize'])->orderBy("contact.created_at","desc")->get();
- }else{
- $result = Contact::where($where)
- ->where(function ($query) use ($data) {
- $query->where('user.nickname', 'like','%'.$data['keyWord'].'%')
- ->orWhere('contact.remark', 'like','%'.$data['keyWord'].'%');
- })
- ->leftJoin('user', 'user.id', '=', 'contact.friend_id')
- ->select('contact.*', 'user.nickname','user.avatar')
- ->get();
- }
- $count = Contact::where($where)
- ->where(function ($query) use ($data) {
- $query->where('user.nickname', 'like','%'.$data['keyWord'].'%')
- ->orWhere('contact.remark', 'like','%'.$data['keyWord'].'%');
- })
- ->leftJoin('user', 'user.id', '=', 'contact.friend_id')
- ->count();
- if (empty($result)) {
- return Result::error("没有数据",0);
- }
- $rep = $result->toArray();
- $data = [
- 'rows'=>$rep,
- 'count'=>$count
- ];
- return Result::success($data);
- }
- /**
- * 添加好友
- * @param array $data
- * @return array
- */
- public function addContact(array $data): array
- {
- $result = Contact::insertGetId($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 更新好友
- * @param array $data
- * @return array
- */
- public function updateContact(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = Contact::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 删除好友 -- 软删除
- * @param array $data
- * @return array
- */
- public function delContact(array $data): array
- {
- $where = [
- 'user_id'=>$data['user_id'],
- 'friend_id'=>$data['friend_id'],
- ];
- $result = Contact::where($where)->update(['status'=>2]);
- if($result){
- return Result::success($result);
- }else{
- return Result::error('删除失败');
- }
- }
- /**
- * 会话列表
- * @param array $data
- * @return array
- */
- public function getTalkSessionList(array $data): array
- {
- $where = [
- 'talk_session_association.status'=>'1',
- 'talk_session_association.user_id'=>$data['user_id']
- ];
- $result = TalkSessionAssociation::where($where)
- ->leftJoin('talk_session','talk_session.id','talk_session_association.session_id')
- ->leftJoin('user','user.id','talk_session_association.to_user_id')
- ->leftJoin('talk_group','talk_group.id','talk_session_association.to_user_id')
- ->select(
- 'talk_session.talk_type',
- 'talk_group.group_name',
- 'talk_group.avatar as group_avatar',
- 'user.avatar as user_avatar',
- 'user.nickname',
- 'talk_session.last_content',
- 'user.user_name',
- 'talk_session.id as session_id',
- 'talk_session.talk_type',
- 'user.id as user_id',
- 'talk_group.id as group_id'
- )
- ->limit($data['pageSize'])->offset(($data['page']-1)*$data['pageSize'])->orderBy("talk_session.updated_at","desc")->get();
- $count = TalkSessionAssociation::where($where)
- ->leftJoin('talk_session','talk_session.id','talk_session_association.session_id')
- ->leftJoin('user','user.id','talk_session_association.to_user_id')
- ->leftJoin('talk_group','talk_group.id','talk_session_association.to_user_id')
- ->count();
- $repData = [
- 'row'=>$result,
- 'count'=>$count
- ];
- return Result::success($repData);
- }
- /**
- * 添加会话
- * @param array $data
- * @return array
- */
- public function addTalkSession(array $data): array
- {
- $result = TalkSession::insert($data);
- if($result){
- return Result::success(['id'=>$data['id']]);
- }else{
- return Result::error('创建会话失败');
- }
- }
- /**
- * 更新会话
- * @param array $data
- * @return array
- */
- public function updateTalkSession(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkSession::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 删除会话
- * @param array $data
- * @return array
- */
- public function delTalkSession(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkSession::where($where)->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 聊天内容-获取聊天内容列表
- * @param array $data
- * @return array
- */
- public function getTalkRecordsList(array $data): array
- {
- $talkSessionAssociationInfo = TalkSessionAssociation::where(['session_id'=>$data['session_id'],'to_user_id'=>$data['user_id']])->first();
- $where = [
- 'talk_records.session_id' =>$data['session_id'],
- ];
- if($talkSessionAssociationInfo['status'] == 2){
- $where[] = ['talk_records.created_at','>=',$talkSessionAssociationInfo['del_at']];
- }
- $result = TalkRecords::where($where)
- ->leftJoin('user','user.id','talk_records.user_id')
- ->select("user.avatar","talk_records.*")
- ->limit($data['pageSize'])
- ->offset(($data['page']-1)*$data['pageSize'])
- ->orderBy("talk_session.updated_at","desc")
- ->get();
- return Result::success($result);
- }
- /**
- * 添加聊天内容
- * @param array $data
- * @return array
- */
- public function addTalkRecords(array $data): array
- {
- Db::beginTransaction();
- try{;
- //添加会话内容
- $talkRecordsData = [
- 'id'=>PublicData::uuid(),
- 'msg_type'=>$data['msg_type']??0,
- 'user_id'=>$data['user_id']??0,
- 'session_id'=>$data['session_id']??'',
- 'talk_type'=>$data['talk_type']??0,
- 'content'=>$data['content']??'',
- 'receiver_id'=>$data['receiver_id']??''
- ];
- TalkRecords::insert($talkRecordsData);
- $fileData = [
- 'id'=>PublicData::uuid(),
- 'record_id'=>$talkRecordsData['id']??'',
- 'user_id'=>$data['user_id']??0,
- 'source'=>$data['source']??'',
- 'type'=>$data['type']??0,
- 'drive'=>$data['drive']??'',
- 'original_name'=>$data['original_name']??'',
- 'suffix'=>$data['suffix']??'',
- 'size'=>$data['size']??0,
- 'path'=>$data['path']??'',
- ];
- var_dump($fileData);
- TalkRecordsFile::insert($fileData);
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("存储消息失败",0);
- }
- return Result::success([]);
- }
- /**
- * 更新聊天内容
- * @param array $data
- * @return array
- */
- public function updateTalkRecords(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkRecords::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 删除聊天内容
- * @param array $data
- * @return array
- */
- public function delTalkRecords(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkRecords::where($where)->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 聊天内容-附件列表
- * @param array $data
- * @return array
- */
- public function getTalkRecordsFileList(array $data): array
- {
- $result = TalkRecordsFile::get();
- return Result::success($result);
- }
- /**
- * 聊天内容-添加附件
- * @param array $data
- * @return array
- */
- public function addTalkRecordsFile(array $data): array
- {
- $result = TalkRecordsFile::insertGetId($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 聊天内容 - 更新附件
- * @param array $data
- * @return array
- */
- public function updateTalkRecordsFile(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkRecordsFile::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 聊天内容 - 删除附件
- * @param array $data
- * @return array
- */
- public function delTalkRecordsFile(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkRecordsFile::where($where)->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 群组 - 群列表
- * @param array $data
- * @return array
- */
- public function getTalkGroupList(array $data): array
- {
- $result = TalkGroup::get();
- return Result::success($result);
- }
- /**
- * 群组 - 创建群
- * @param array $data
- * @return array
- */
- public function addTalkGroup(array $data): array
- {
- Db::beginTransaction();
- try{
- //创建群
- $groupData = [
- 'id' => PublicData::uuid(),
- 'creator_id'=>$data['user_id'],
- 'group_name'=>$data['group_name']
- ];
- TalkGroup::insert($groupData);
- //创建群用户
- $groupMemberData = [];
- if($data['user_id_arr']){
- foreach ($data['user_id_arr'] as $key=>$val){
- $groupMemberData[$key] = [
- 'id' => PublicData::uuid(),
- 'group_id' => $groupData['id'],
- 'user_id' =>$val,
- 'leader' =>$data['user_id'] == $val?2:0,
- ];
- }
- }
- TalkGroupMember::insert($groupMemberData);
- //创建会话
- $sessionData = [
- 'id' => PublicData::uuid(),
- 'talk_type' => '2'
- ];
- TalkSession::insertGetId($sessionData);
- //创建会话关系
- $talkSessionAssociationData = [];
- if($data['user_id_arr']){
- foreach ($data['user_id_arr'] as $key=>$val){
- $talkSessionAssociationData[$key] = [
- 'id' => PublicData::uuid(),
- 'user_id' => $val,
- 'to_user_id' => $groupData['id'],
- 'session_id' =>$sessionData['id']
- ];
- }
- }
- TalkSessionAssociation::insert($talkSessionAssociationData);
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("创建群失败",0);
- }
- return Result::success([]);
- }
- /**
- * 群组 - 更新群
- * @param array $data
- * @return array
- */
- public function updateTalkGroup(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkGroup::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 群组 - 删除群
- * @param array $data
- * @return array
- */
- public function delTalkGroup(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkGroup::where($where)->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 群组 - 群用户列表
- * @param array $data
- * @return array
- */
- public function getTalkGroupMember(array $data): array
- {
- $where = [
- 'group_id'=>$data['group_id']
- ];
- $result = TalkGroupMember::where($where)->get();
- return Result::success($result);
- }
- /**
- * 群组 - 全部群用户列表
- * @param array $data
- * @return array
- */
- public function getAllTalkGroupMember(array $data): array
- {
- $where = [
- 'group_id'=>$data['group_id']
- ];
- $result = TalkGroupMember::where($where)->get();
- return Result::success($result);
- }
- /**
- * 群组 - 创建群用户
- * @param array $data
- * @return array
- */
- public function addTalkGroupMember(array $data): array
- {
- $result = TalkGroupMember::insertGetId($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 群组 - 更新群用户
- * @param array $data
- * @return array
- */
- public function updateTalkGroupMember(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkGroupMember::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 群组 - 删除群用户
- * @param array $data
- * @return array
- */
- public function delTalkGroupMember(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkGroupMember::where($where)->delete();
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 更新 会话关系
- * @param array $data
- * @return array
- */
- public function updateTalkSessionAssociation(array $data): array
- {
- $where = [
- 'id'=>$data['id']
- ];
- $result = TalkSessionAssociation::where($where)->update($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- /**
- * 添加会话关系
- * @param array $data
- * @return array
- */
- public function addTalkSessionAssociation(array $data): array
- {
- var_dump($data);
- $result = TalkSessionAssociation::insertGetId($data);
- if($result){
- return Result::success($data);
- }else{
- return Result::error($data);
- }
- }
- }
|