rkljw 5 ヶ月 前
コミット
fdc4f21ba5
2 ファイル変更178 行追加82 行削除
  1. 128 82
      app/JsonRpc/ChatService.php
  2. 50 0
      app/Tools/PublicData.php

+ 128 - 82
app/JsonRpc/ChatService.php

@@ -13,12 +13,15 @@ use App\Model\ChatTopicClass;
 use App\Model\User;
 use App\Tools\PublicData;
 use App\Tools\Result;
+use Hyperf\Context\Context;
 use Hyperf\DbConnection\Db;
 use Hyperf\RpcServer\Annotation\RpcService;
 use Hyperf\Context\ApplicationContext as ContextApplicationContext;
 use Hyperf\Amqp\Producer;
 
 use App\Amqp\Producer\MqProducer;
+use function Hyperf\Support\env;
+
 #[RpcService(name: "ChatService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
 class ChatService implements ChatServiceInterface
 {
@@ -860,39 +863,40 @@ class ChatService implements ChatServiceInterface
                 $data['status'] = 1;
             }else{
                 $data['status'] = 2;
-                if($data['is_group'] == 1){
-                    $group_id = PublicData::uuid();
-                    $groupData = [
-                        'id' => $group_id,
-                        'creator_id' => $data['user_id'],
-                        'group_name' => $data['group_name'] ?? '',
-                        'profile' => '',
-                    ];
-                    $groupResult = ChatGroups::insertGetId($groupData);
-                    $groupMemberData = [
-                        'id' => PublicData::uuid(),
-                        'user_id' => $data['user_id'],
-                        'group_id' => $group_id,
-                        'leader' => 2,
-                    ];
-                    $groupMemberResult = ChatGroupsMember::insertGetId($groupMemberData);
+               
+//                if($data['is_group'] == 1){
+//                    $group_id = PublicData::uuid();
+//                    $groupData = [
+//                        'id' => $group_id,
+//                        'creator_id' => $data['user_id'],
+//                        'group_name' => $data['group_name'] ?? '',
+//                        'profile' => '',
+//                    ];
+//                    $groupResult = ChatGroups::insertGetId($groupData);
+//                    $groupMemberData = [
+//                        'id' => PublicData::uuid(),
+//                        'user_id' => $data['user_id'],
+//                        'group_id' => $group_id,
+//                        'leader' => 2,
+//                    ];
+//                    $groupMemberResult = ChatGroupsMember::insertGetId($groupMemberData);
                     //更新result的 group_id
-                    $datas['group_id'] = $group_id;
-                    ChatTopic::where(['id' => $data['id']])->update($datas);
+//                    $datas['group_id'] = $group_id;
+//                    ChatTopic::where(['id' => $data['id']])->update($datas);
     
                     //插入一条消息
-                    $chatRecordsData = [
-                        'user_id' => $data['user_id'],
-                        'receiver_id' => $group_id,
-                        'content' => '我创建了一个群' . Date('Y-m-d H:i:s'),
-                        'msg_type' => 1,
-                        'is_read' => 0,
-                        'talk_type' => 2,
-                        'action' => 'said',
-                        'group_receiver_id' => $data['user_id'],
-                    ];
-                    ChatRecords::insert($chatRecordsData);
-                }
+//                    $chatRecordsData = [
+//                        'user_id' => $data['user_id'],
+//                        'receiver_id' => $group_id,
+//                        'content' => '我创建了一个群' . Date('Y-m-d H:i:s'),
+//                        'msg_type' => 1,
+//                        'is_read' => 0,
+//                        'talk_type' => 2,
+//                        'action' => 'said',
+//                        'group_receiver_id' => $data['user_id'],
+//                    ];
+//                    ChatRecords::insert($chatRecordsData);
+//                }
                 
             }
             unset($data['type_id']);
@@ -913,58 +917,30 @@ class ChatService implements ChatServiceInterface
             $query = ChatTopic::where(['id' => $data['id']]);
             $topdata = $query->first();
 
-            $result = ChatTopic::where(['id' => $data['id']])->update(['status' => $data['status']]);
-            // var_dump($data, 'tedst111111111111111');
-            // var_dump(date('Y-m-d H:i:s'), 'tedst111111111111111');
-            $creatter = $topdata['user_id'];
-            if ($data['status'] == 2 && $topdata['is_group'] == 1) {
-                    $group_id = '';
-                    if(empty($topdata['group_id'])){              
-                        $group_id = PublicData::uuid();
-                        $groupData = [
-                            'id' => $group_id,
-                            'creator_id' => $topdata['user_id'],
-                            'group_name' => $topdata['group_name'] ?? '',
-                            'profile' => '',
+           $group_id = '';
+            /**************************************new*************************************************************/
+            if($data['status']==2){
+                //同意-需要创建群聊-开始创建
+                if($topdata['is_group']==1){
+                    //是否已经创建过群聊-没有创建才进行创建
+                    if(!$topdata['group_id']){
+                        $url = env('IM_URL').'/api/v1/group/create';
+                        $dataIM = [
+                            'avatar' => '',
+                            'name' => $topdata['group_name'],
+                            'profile'=>'',
+                            'ids' => '',
+                            'create_user_id'=>$topdata['user_id']
                         ];
-                        $groupResult = ChatGroups::insertGetId($groupData);
-                        $groupMemberData = [
-                            'id' => PublicData::uuid(),
-                            'user_id' => $topdata['user_id'],
-                            'group_id' => $group_id,
-                            'leader' => 2,
+                        $options = [
+                            'authorization'=>$data['token']
                         ];
-                        $groupMemberResult = ChatGroupsMember::insertGetId($groupMemberData);
-                    }else{
-                        $group_id = $topdata['group_id'];
+                        $res = PublicData::im_post($url,$dataIM,$options);
+                        if($res['code']==200){
+                            $group_id = $res['data']['group_id'];
+                        }
                     }
-                    
-                    //更新result的 group_id
-                    $datas['group_id'] = $group_id;
-                    ChatTopic::where(['id' => $data['id']])->update($datas);
-
-                    //插入一条消息
-                    $chatRecordsData = [
-                        'user_id' => $topdata['user_id'],
-                        'receiver_id' => $group_id,
-                        'content' => '我创建了一个群' . Date('Y-m-d H:i:s'),
-                        'msg_type' => 1,
-                        'is_read' => 0,
-                        'talk_type' => 2,
-                        'action' => 'said',
-                        'group_receiver_id' => $topdata['user_id'],
-                    ];
-                    ChatRecords::insert($chatRecordsData);
-                
-               
-            } elseif ($data['status'] == 3) {               
-                if(isset($topdata['group_id']) && !empty($topdata['group_id'])){
-                    ChatRecords::where('receiver_id', $topdata['group_id'])->delete();
-                    ChatGroupsMember::where('group_id', $topdata['group_id'])
-                        ->where([["user_id", '!=', $creatter]])->delete();
-                }   
-            }
-            if($data['status'] == 2){
+                }
                 $this->sendMessage([
                     'talk_type'=>301,
                     'title'=>$topdata['title'],
@@ -972,7 +948,24 @@ class ChatService implements ChatServiceInterface
                     'messageType'=>4,
                     'user_id'=>$topdata['user_id'],
                 ]);
-            }else if($data['status'] == 3){
+            }else if($data['status']==3){
+                if($topdata['group_id']){
+                    $url = env('IM_URL').'/api/v1/group/dismiss';
+                    $dataIM = [
+                        'group_id' => intval($topdata['group_id']),
+                        'create_user_id'=>$topdata['user_id']
+                    ];
+                    $options = [
+                        'authorization'=>$data['token']
+                    ];
+                    $res = PublicData::im_post($url,$dataIM,$options);
+                    if($res['code']!=200){
+                        //$group_id = $res['data']['group_id'];
+                        Db::rollBack();
+                        return Result::error($data, '群聊解散失败');
+                    }
+                    $group_id = '';
+                }
                 $this->sendMessage([
                     'talk_type'=>301,
                     'title'=>$topdata['title'],
@@ -981,6 +974,58 @@ class ChatService implements ChatServiceInterface
                     'user_id'=>$topdata['user_id'],
                 ]);
             }
+//====================================================================================
+//            $creatter = $topdata['user_id'];
+//            if ($data['status'] == 2 && $topdata['is_group'] == 1) {
+//                    $group_id = '';
+//                    if(empty($topdata['group_id'])){
+//                        $group_id = PublicData::uuid();
+//                        $groupData = [
+//                            'id' => $group_id,
+//                            'creator_id' => $topdata['user_id'],
+//                            'group_name' => $topdata['group_name'] ?? '',
+//                            'profile' => '',
+//                        ];
+//                        $groupResult = ChatGroups::insertGetId($groupData);
+//                        $groupMemberData = [
+//                            'id' => PublicData::uuid(),
+//                            'user_id' => $topdata['user_id'],
+//                            'group_id' => $group_id,
+//                            'leader' => 2,
+//                        ];
+//                        $groupMemberResult = ChatGroupsMember::insertGetId($groupMemberData);
+//                    }else{
+//                        $group_id = $topdata['group_id'];
+//                    }
+                    
+                    //更新result的 group_id
+//                    $datas['group_id'] = $group_id;
+
+//                    ChatTopic::where(['id' => $data['id']])->update($datas);
+
+                    //插入一条消息
+//                    $chatRecordsData = [
+//                        'user_id' => $topdata['user_id'],
+//                        'receiver_id' => $group_id,
+//                        'content' => '我创建了一个群' . Date('Y-m-d H:i:s'),
+//                        'msg_type' => 1,
+//                        'is_read' => 0,
+//                        'talk_type' => 2,
+//                        'action' => 'said',
+//                        'group_receiver_id' => $topdata['user_id'],
+//                    ];
+//                    ChatRecords::insert($chatRecordsData);
+                
+               
+//            } elseif ($data['status'] == 3) {
+//                if(isset($topdata['group_id']) && !empty($topdata['group_id'])){
+//                    ChatRecords::where('receiver_id', $topdata['group_id'])->delete();
+//                    ChatGroupsMember::where('group_id', $topdata['group_id'])
+//                        ->where([["user_id", '!=', $creatter]])->delete();
+//                }
+//            }
+//====================================================================================
+            $result = ChatTopic::where(['id' => $data['id']])->update(['status' => $data['status'],'group_id'=>$group_id]);
             Db::commit();
             if ($result) {
                 return Result::success($data);
@@ -1009,7 +1054,8 @@ class ChatService implements ChatServiceInterface
             ]);
             $data['status'] = 1;
         }
-       
+        var_dump($data);
+        unset($data['type_id']);
         $result = ChatTopic::where(['id' => $data['id']])->update($data);
         if ($result) {
             return Result::success($data);
@@ -1097,7 +1143,7 @@ class ChatService implements ChatServiceInterface
             $groupIdList = $data['group_member'];
             array_push($groupIdList,$data['user_id']);
             // var_dump("几个",$groupIdList);
-            ChatRecords::whereNotIn('receiver_id',$groupIdList)->delete();
+            ChatRecords::whereNotIn('user_id',$groupIdList)->where('group_id',$data['group_id'])->delete();
             
             // 获取群信息
             $groupInfo = ChatGroups::where(['id' => $group_id])->first();

+ 50 - 0
app/Tools/PublicData.php

@@ -58,5 +58,55 @@ class PublicData
             return false;
         }
     }
+    public static function im_post($url, $data, $options = [])
+    {
+        // 初始化CURL会话
+        $ch = curl_init($url);
+        // JSON 编码(保持中文不转义)
+        $jsonBody = is_string($data) ? $data : json_encode($data, JSON_UNESCAPED_UNICODE);
+        // 基础选项
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_HEADER, false);
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody);
+        // HTTPS 兼容
+        if (stripos($url, 'https://') === 0) {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+        // Header:Content-Type JSON,Authorization(优先使用传入的)
+        $authorization = $options['authorization'] ?? 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI';
+        $headers = [
+            'Content-Type: application/json',
+            'Accept: application/json',
+            'Authorization: ' . $authorization,
+        ];
+        // 允许外部追加自定义 header(数组,形如 ['X-xxx: yyy'])
+        if (!empty($options['headers']) && is_array($options['headers'])) {
+            $headers = array_merge($headers, $options['headers']);
+        }
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+        // 超时设置(可通过 options 覆盖)
+        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int)($options['connect_timeout'] ?? 5));
+        curl_setopt($ch, CURLOPT_TIMEOUT, (int)($options['timeout'] ?? 15));
+        // 追加额外的 CURL 选项(如需)
+        if (!empty($options['curl']) && is_array($options['curl'])) {
+            curl_setopt_array($ch, $options['curl']);
+        }
+        // 执行请求
+        $response = curl_exec($ch);
+        if ($response === false) {
+            $errorMsg = curl_error($ch);
+            curl_close($ch);
+            throw new \Exception('CURL Error: ' . $errorMsg);
+        }
+        // 获取HTTP状态码
+        $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
+        // 关闭会话
+        curl_close($ch);
+        // 返回结果
+        return json_decode($response,true);
+    }
+
 
 }