AI 4 meses atrás
pai
commit
12fc849c18

+ 57 - 0
app/Command/Test.php

@@ -0,0 +1,57 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Command;
+
+use Hyperf\Command\Command as HyperfCommand;
+use Hyperf\Command\Annotation\Command;
+use Psr\Container\ContainerInterface;
+
+use App\Amqp\Producer\MqProducer;
+use App\JsonRpc\ChatServiceInterface;
+use App\JsonRpc\UserServiceInterface;
+use App\Service\Message\ReceiveHandleService;
+use App\Service\RedisService;
+use Hyperf\Amqp\Producer;
+use Hyperf\Context\ApplicationContext as ContextApplicationContext;
+use Hyperf\Contract\OnCloseInterface;
+use Hyperf\Contract\OnMessageInterface;
+use Hyperf\Contract\OnOpenInterface;
+use Hyperf\Di\Annotation\Inject;
+use Hyperf\Engine\WebSocket\Response;
+use Phper666\JWTAuth\JWT;
+
+
+#[Command]
+class Test extends HyperfCommand
+{
+    public function __construct(protected ContainerInterface $container)
+    {
+        parent::__construct('demo:command');
+    }
+
+    public function configure()
+    {
+        parent::configure();
+        $this->setDescription('Hyperf Demo Command');
+    }
+
+    public function handle()
+    {
+        //记录执行时间
+        $start = microtime(true);
+        for ($i = 0; $i < 200000; $i++) {
+            $chatdata['receiver_id'] = 1;
+            $chatdata['user_id'] = $i;
+            $chatdata['group_receiver_id'] = 0;
+            $chatdata['is_read'] = 1;
+            $chatdata['action'] = 'said';
+            $message = new MqProducer($chatdata);
+            $producer = ContextApplicationContext::getContainer()->get(Producer::class);
+            $re = $producer->produce($message);
+        }
+        $this->info(microtime(true) - $start);
+        $this->line('Hello Hyperf!', 'info');
+    }
+}

+ 191 - 93
app/Controller/ChatController.php

@@ -12,6 +12,10 @@ use function Hyperf\Support\env;
 use Hyperf\Context\Context;
 use Hyperf\Di\Annotation\Inject;
 use Hyperf\Validation\Contract\ValidatorFactoryInterface;
+// use App\Controller\WebSocketController as WebSocket;
+use Hyperf\Context\ApplicationContext as ApplicationContext;
+use App\Controller\WebSocketController;
+use Swoole\WebSocket\Frame;
 
 /**
  *
@@ -30,6 +34,8 @@ class ChatController extends AbstractController
     private $chatServiceClient;
     #[Inject]
     private UserServiceInterface $userServiceClient;
+    // #[Inject]
+    // private WebSocket $webSocketController;
 
     /**
      * 申请添加好友
@@ -64,12 +70,7 @@ class ChatController extends AbstractController
             return Result::error('好友ID不存在');
         }
         $result = $this->chatServiceClient->addFriend($requireData);
-        //redis 添加好友
-        if ($result && $result['code'] != 0) {
-            $redisClient = new RedisService();
-            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $userId, 'status' => 2]);
-            $redisClient->setUserFriends($userId, $myFriends['data']);
-        }
+       
         return $result ? Result::success($result['message']) : Result::error($result['message']);
     }
     /**
@@ -190,6 +191,8 @@ class ChatController extends AbstractController
     public function applyFriend()
     {
         $requireData = $this->request->all();
+        $frindid =$requireData['apply_id'];
+        unset($requireData['apply_id']);
         // 定义验证规则
         $validator = $this->validationFactory->make(
             $requireData,
@@ -209,7 +212,16 @@ class ChatController extends AbstractController
             return Result::error(implode(', ', $validator->errors()->all()), 0);
         }
         $requireData['user_id'] = Context::get("UserId");
+        var_dump($requireData,'1111test');
         $result = $this->chatServiceClient->applyFriend($requireData);
+         //redis 添加好友
+         if ($result && $result['code'] != 0) {
+            $redisClient = new RedisService();
+            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
+            $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);
+            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $frindid, 'status' => 2]);
+            $redisClient->setUserFriends((string)$frindid, $myFriends['data']);
+        }
         return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
 
@@ -239,7 +251,10 @@ class ChatController extends AbstractController
         if ($result && $result['code'] != 0) {
             $redisClient = new RedisService();
             $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
-            $redisClient->setUserFriends($requireData['user_id'], $myFriends['data']);
+            $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);
+
+            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['friend_id'], 'status' => 2]);
+            $redisClient->setUserFriends((string)$requireData['friend_id'], $myFriends['data']);
         }
         return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
@@ -664,13 +679,16 @@ class ChatController extends AbstractController
             $requireData,
             [
                 'title' => 'required|string',
-                'type' => 'required|string',
+                'type' => 'required|int',
                 'content' => 'required|string',
             ],
             [
                 'title.required' => '商圈名称不能为空',
                 'type.required' => '商圈类型不能为空',
                 'content.required' => '商圈内容不能为空',
+                'type.int' => '商圈类型只能是数字',
+                'content.string' => '商圈内容只能是字符串',
+                'title.string' => '商圈名称只能是字符串',
             ]
         );
         if ($validator->fails()) {
@@ -809,169 +827,249 @@ class ChatController extends AbstractController
         $result = $this->chatServiceClient->getTopicReply($requireData);
         return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-    /**-=-------------------------------------------------------
-     * 获取好友列表
+    
+    
+    /**
+     * 获取 access_token
+     * @return array
+     */
+    public function getAccessToken()
+    {
+        $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
+        $result = PublicData::http_get($url);
+        $resultData = json_decode($result, true);
+        var_dump($url, $resultData);
+        if (isset($resultData['errcode'])) {
+            return Result::error($resultData['errmsg']);
+        }
+        return Result::success($resultData);
+    }
+    /**
+     * 删除一条聊天记录
      * @return array
      */
-    public function getContactList()
+    public function delRecords()
     {
         $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'id' => 'required',
+            ],
+            [
+                'id.required' => '聊天记录ID不能为空',
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
+        }
         $requireData['user_id'] = Context::get("UserId");
-        $requireData['keyWord'] = $this->request->input('keyWord', '');
-        $result = $this->chatServiceClient->getContactList($requireData);
-        return $result ? Result::success($result['data']) : Result::error($result['message']);
+        $result = $this->chatServiceClient->delRecords($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
     /**
-     * 获取会话列表
+     * 删除所有聊天记录
      * @return array
      */
-    public function getTalkSessionList()
+    public function clearRecords()
     {
         $requireData = $this->request->all();
-        $requireData['user_id'] = Context::get("UserId");
-        var_dump("会话列表:", $requireData);
-        $result = $this->chatServiceClient->getTalkSessionList($requireData);
-        var_dump($result);
-        if ($result['data']['row']) {
-            foreach ($result['data']['row'] as $k => $v) {
-                $result['data']['row'][$k]['messages'] = [];
-            }
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'friend_id' => 'required',
+            ],
+            [
+                'friend_id.required' => '聊天记录ID不能为空',
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage =$validator->errors()->first();
         }
-        return $result ? Result::success($result['data']) : Result::error($result['message']);
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->clearRecords($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
     /**
-     * 创建用户群
+     * 删除群聊记录
      * @return array
      */
-    public function addTalkGroup()
+    public function clearGroupRecords()
     {
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'group_name' => 'required',
-                'user_id_arr' => 'required',
+                'id' => 'required',
             ],
             [
-                'group_name.required' => '群名称不能为空',
-                'user_id_arr.required' => '好友ID不能为空',
+                'id.required' => '聊天记录ID不能为空',
             ]
         );
         if ($validator->fails()) {
-            $errorMessage = $validator->errors()->first();
-            return Result::error($errorMessage);
+            $errorMessage= $validator->errors()->first();
         }
         $requireData['user_id'] = Context::get("UserId");
-        $requireData['user_id_arr'] = $requireData['user_id_arr'];
-        var_dump($requireData);
-        $result = $this->chatServiceClient->addTalkGroup($requireData);
-        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
-
+        $result = $this->chatServiceClient->clearGroupRecords($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
     /**
-     * 会话详情
-     * @return void
+     * 撤回一条聊天记录
+     * @return array
      */
-    public function getTalkRecordsList()
-    {
+    public function recallRecord()
+    { 
+
+        $webSocketController = ApplicationContext::getContainer()->get(WebSocketController::class);
+        $frame = new Frame();
+        $frame->fd = 1; // 替换为实际的客户端 fd
+        $frame->data = json_encode([
+            'talk_type' => 1,
+            'receiver_id' => 2, // 接收者 ID
+            'content' => 'Hello, this is a test message!'
+        ]);
+    
+        $webSocketController->send(1, 'Hello, World!');
+        return Result::success('');
+    
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'session_id' => 'required',
-                'talk_type' => 'required',
+                'content' => 'required',
             ],
             [
-                'session_id.required' => '会话ID不能为空',
-                'talk_type.required' => '会话类型不能为空',
+                'content.required' => '聊天记录不能为空',
             ]
         );
+        $requireData['user_id'] = Context::get("UserId");
         if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
-            return Result::error($errorMessage);
         }
-        $requireData['page'] = $requireData['page'] ?? 1;
-        $requireData['pageSize'] = $requireData['pageSize'] ?? 30;
-        $result = $this->chatServiceClient->getTalkRecordsList($requireData);
-        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+        //接入websocket,发送撤回消息
+        $redisClient = new RedisService();
+        $fd = $redisClient->findFd((int) 32);
+        $maxRetries = 1;
+        $retryCount = 0;
+        $interval = 1; // 秒
+        while ($retryCount < $maxRetries) {
+            $response = $this->chatServiceClient->getRecordByContent($requireData);
+            // 如果成功,返回结果
+            if ($response['code'] === 0) {
+                if(!empty($response['data']['id'])){
+                    $records = $response['data'];
+                    foreach($records as $record){
+                        //判断 created_at 是否大于一分钟
+                        $createdAt = strtotime($record['created_at']);
+                        $currentTime = time();
+                        $timeDifference = $currentTime - $createdAt;
+                        if ($timeDifference > 60) {
+                             return Result::error('超过一分钟,无法撤回');
+                        }
+                    }
+                }
+                $result = $this->chatServiceClient->recallRecord($response['data']);
+                return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
+            }
+            // 如果失败,等待一段时间后重试
+            sleep($interval);
+            $retryCount++;
+        }
+        return Result::error('获取失败');
     }
-
     /**
-     * 添加聊天
-     * @return void
+     * 获取一条信息
+     * @return array
      */
-    public function addTalkRecords()
+    public function getRecord()
     {
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'type' => 'required',
-                'content' => 'required',
-                'receiver' => 'required',
-
+                'id' => 'required',
             ],
             [
-                'type.required' => '消息类型不能为空',
-                'content.required' => '内容不能为空',
-                'receiver.required' => '会话信息不能为空',
+                'id.required' => '聊天记录ID不能为空',
             ]
         );
         if ($validator->fails()) {
-            $errorMessage = $validator->errors()->first();
-            return Result::error($errorMessage);
+            $errorMessage= $validator->errors()->first();
         }
         $requireData['user_id'] = Context::get("UserId");
-        $result = $this->chatServiceClient->addTalkRecords($requireData);
-        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
+        $result = $this->chatServiceClient->getRecord($requireData);
+            return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
     /**
-     * 获取openId
-     * @return array|void
+     * 删除一条topicRely
+     * @return array
      */
-    public function wechatOpenInfo()
+    public function delReply()
     {
         $requireData = $this->request->all();
         $validator = $this->validationFactory->make(
             $requireData,
             [
-                'code' => 'required',
+                'id' => 'required',
             ],
             [
-                'code.required' => 'code不能为空',
+                'id.required' => '回复ID不能为空',
             ]
         );
         if ($validator->fails()) {
             $errorMessage = $validator->errors()->first();
-            return Result::error($errorMessage);
         }
-        $url = env("WECHAT") . "sns/jscode2session?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&js_code=" . $requireData['code'] . "&grant_type=authorization_code";
-        $result = PublicData::http_get($url);
-        $resultData = json_decode($result, true);
-        if (isset($resultData['errcode'])) {
-            return Result::error($resultData['errmsg']);
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->delReply($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
+    }
+    /**
+     * 删除所有回复
+     * @return array
+     */
+    public function delAllReply()
+    {
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'topicid' => 'required',
+            ],
+            [
+                'topicid.required' => '回复ID不能为空',
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage =$validator->errors()->first();
         }
-        return Result::success($resultData);
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->delAllReply($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
     /**
-     * 获取 access_token
+     * 获取所有Topic
      * @return array
      */
-    public function getAccessToken()
+    public function getTopicsListAdmin()
     {
-        $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
-        $result = PublicData::http_get($url);
-        $resultData = json_decode($result, true);
-        var_dump($url, $resultData);
-        if (isset($resultData['errcode'])) {
-            return Result::error($resultData['errmsg']);
+        $requireData = $this->request->all();
+        $validator = $this->validationFactory->make(
+            $requireData,
+            [
+                'page' => 'required',
+                'limit' => 'required',
+            ],
+            [
+                'page.required' => '页码不能为空',
+                'limit.required' => '每页数量不能为空',
+            ]
+        );
+        if ($validator->fails()) {
+            $errorMessage = $validator->errors()->first();
         }
-        return Result::success($resultData);
+        $requireData['user_id'] = Context::get("UserId");
+        $result = $this->chatServiceClient->getTopicsListAdmin($requireData);
+        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
     }
-
+    
 }

+ 1 - 1
app/Controller/LoginController.php

@@ -60,7 +60,7 @@ class LoginController extends AbstractController
 
         var_dump((strtolower($code) . strtolower($reqData['captcha'])));
         if (strtolower($code) != strtolower($reqData['captcha'])) {
-            // return Result::error("验证码错误");
+            return Result::error("验证码错误");
         }
         //$reqData
         $where = [];

+ 7 - 3
app/Controller/PublicController.php

@@ -63,14 +63,18 @@ class PublicController extends AbstractController
     {
         $urlN = new CommonService();
         $file = $this->request->file('file');
-        $fileName = $file->getClientFilename();
+       
         try {
             if ($file == null) {
                 return Result::error("未找到上传文件");
             }
-            $data = CommonService::uploadFile($file, ['png', 'jpg', 'png', 'jpeg', 'gif', 'xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'image');
-
+            $data = CommonService::uploadFile($file, ['txt','png', 'jpg', 'png', 'jpeg', 'gif', 'xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'image');
+            var_dump($data);
+            if (isset($data['code'])&&$data['code'] != 200) {
+                return Result::error($data['message']);
+            }
             $data['imgUrl'] = $urlN->imgUrl($data['src']);
+            $fileName = $file->getClientFilename();
             $data['oldFileName'] = $fileName;
             return Result::success($data, '上传成功');
         } catch (\Exception $e) {

+ 42 - 5
app/Controller/WebSocketController.php

@@ -16,6 +16,7 @@ use Hyperf\Contract\OnOpenInterface;
 use Hyperf\Di\Annotation\Inject;
 use Hyperf\Engine\WebSocket\Response;
 use Phper666\JWTAuth\JWT;
+use swoole\Server;
 
 class WebSocketController implements OnMessageInterface, OnOpenInterface, OnCloseInterface
 {
@@ -38,6 +39,16 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
      * @var ReceiveHandleService
      */
     protected $receiveHandle;
+    protected $server;
+
+    public function __construct(Server $server)
+    {
+        $this->server = $server;
+    }
+    public function send( $fd, $data): void
+    {
+        $this->server->send((int) $fd, json_encode($data));
+    }
 
     public function onMessage($server, $frame): void
     {
@@ -47,6 +58,7 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
         //存入队列
         $result = json_decode($frame->data, true);
         $result['user_id'] = $userId;
+        var_dump($result, '-------------1----');
         $userInfo = $redisClient->getUserInfo((string) $userId);
         if ($userInfo) {
             $userInfoArr = json_decode($userInfo);
@@ -66,16 +78,17 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
             $redisClient->setUserFriends($userId, $myFriends['data']);
             $myFriendsArr = $myFriends['data'];
         }
-        //判断$result['receiver_id']是否是好友
+        
+        //推送给前台
+        //组装数据+头像
+        if ($result['talk_type'] == 1) {
+            //判断$result['receiver_id']是否是好友
         $myFriendsID = array_column($myFriendsArr, 'friend_id');
         if (!in_array($result['receiver_id'], $myFriendsID)) {
             $result['content'] = '您还不是好友,无法发送消息!';
             $server->push((int) $frame->fd, json_encode($result));
             return;
         }
-        //推送给前台
-        //组装数据+头像
-        if ($result['talk_type'] == 1) {
             //给自己推一条数据
             if ($server->isEstablished($frame->fd)) {
                 $result['is_read'] = 1;
@@ -90,6 +103,7 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
                     var_dump('消息发送成功' . $frame->fd);
                 } catch (\Exception $e) {
                     var_dump('消息发送失败: ' . $e->getMessage());
+                    $this->retry($message);
                 }
             } else {
                 //给自己发一条未读消息
@@ -103,6 +117,7 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
                     var_dump('消息发送成功' . $frame->fd);
                 } catch (\Exception $e) {
                     var_dump('消息发送失败: ' . $e->getMessage());
+                    $this->retry($message);
                 }
             }
             //给好友推送消息
@@ -125,6 +140,7 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
                     var_dump('消息发送成功');
                 } catch (\Exception $e) {
                     var_dump('消息发送失败: ' . $e->getMessage());
+                    $this->retry($message);
                 }
             } else {
                 try {
@@ -139,12 +155,13 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
                     var_dump('消息发送成功');
                 } catch (\Exception $e) {
                     var_dump('消息发送失败: ' . $e->getMessage());
+                    $this->retry($message);
                 }
             }
         } else if ($result['talk_type'] == 2) {
             //根据群找到 群用户,群发一遍消息
             $groupUserList = $this->chatServiceClient->getGroupMembers(['group_id' => $result['receiver_id']]);
-            var_dump($groupUserList['data']);
+            var_dump($groupUserList['data'],'----------------------------------');
             if ($groupUserList['data']) {
                 $chatdata = $result;
                 foreach ($groupUserList['data'] as $val) {
@@ -212,6 +229,26 @@ class WebSocketController implements OnMessageInterface, OnOpenInterface, OnClos
             }
         }
     }
+    public function retry($message): void
+    {
+        $maxRetries = 10; // 最大重试次数
+        $retryCount = 0;
+        while ($retryCount < $maxRetries) {
+            try {
+                $producer = ContextApplicationContext::getContainer()->get(Producer::class);
+                $re = $producer->produce($message);
+                var_dump('重试消息发送成功');
+                break;
+            } catch (\Exception $e) {
+                $retryCount++;
+                if ($retryCount >= $maxRetries) {
+                    var_dump('达到最大重试次数,消息发送失败: ' . $e->getMessage());
+                } else {
+                    var_dump('第 ' . $retryCount . ' 次重试失败: ' . $e->getMessage());
+                }
+            }
+        }
+    }
     public function onClose($server, int $fd, int $reactorId): void
     {
         var_dump('closed::::::::::::::::::', $fd, "======", $reactorId, "+++++++++++");

+ 34 - 2
app/JsonRpc/ChatService.php

@@ -20,7 +20,7 @@ class ChatService extends AbstractServiceClient implements ChatServiceInterface
     /**
      * 添加申请
      * @param array $data
-     * @return array
+     * @return mixed
      */
     public function addFriend(array $data): mixed
     {
@@ -162,6 +162,38 @@ class ChatService extends AbstractServiceClient implements ChatServiceInterface
     }
     public function updateGroupMembers(array $data)
     {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function clearRecords(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function recallRecord(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function clearGroupRecords(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function delRecords(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function getRecord(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function delReply(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function delAllReply(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
+    }
+    public function getTopicsListAdmin(array $data)
+    {
+        return $this->__request(__FUNCTION__, $data);
     }
-
 }

+ 9 - 0
app/JsonRpc/ChatServiceInterface.php

@@ -39,5 +39,14 @@ interface ChatServiceInterface
     public function getTopicReply(array $data);
     public function getGroupChatRecords(array $data);
     public function updateGroupMembers(array $data);
+    public function clearRecords(array $data);
+    public function recallRecord(array $data);
+    public function clearGroupRecords(array $data);
+    public function delRecords(array $data);
+    public function getRecord(array $data);
+    public function getGroupApplyList(array $data);
+    public function delReply(array $data);
+    public function delAllReply(array $data);
+    public function getTopicsListAdmin(array $data);
 
 }

+ 7 - 2
config/api/chat.php

@@ -21,9 +21,11 @@ Router::addGroup(
         Router::post('/getChatRecords', [ChatController::class, 'getChatRecords']);
         Router::post('/getGroupChatRecords', [ChatController::class, 'getGroupChatRecords']);
 
-        Router::post('/deltRecords', [ChatController::class, 'deltRecords']);
+        Router::post('/delRecords', [ChatController::class, 'delRecords']);
         Router::post('/clearRecords', [ChatController::class, 'clearRecords']);
-        Router::post('/recallRecords', [ChatController::class, 'recallRecords']);
+        Router::post('/clearGroupRecords', [ChatController::class, 'clearGroupRecords']);
+        Router::post('/recallRecord', [ChatController::class, 'recallRecord']);
+        Router::post('/getRecord', [ChatController::class, 'getRecord']);
 
         Router::post('/getGroupMembers', [ChatController::class, 'getGroupMembers']);
         Router::post('/getGroupInfo', [ChatController::class, 'getGroupInfo']);
@@ -44,6 +46,9 @@ Router::addGroup(
         Router::post('/getTopicReply', [ChatController::class, 'getTopicReply']);
         Router::post('/topicType', [ChatController::class, 'topicType']);
         Router::post('/topicStatus', [ChatController::class, 'topicStatus']);
+        Router::post('/delReply', [ChatController::class, 'delReply']);
+        Router::post('/delAllReply', [ChatController::class, 'delAllReply']);
+        Router::post('/getTopicsListAdmin', [ChatController::class, 'getTopicsListAdmin']);
 
         Router::post('/uploadFile', [ChatController::class, 'uploadFile']);
     },