| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace app\controller;
- use app\BaseController;
- use think\facade\Db;
- //消息控制器
- class Message extends BaseController
- {
- //发送消息
- public function sendMessage()
- {
- $toUid = $this->request->post('toUid'); //发送给用户ID
- $msg = $this->request->post('msg'); //发送的消息内容
- if (!is_numeric($toUid) || empty($msg)) {
- $this->fail(500, '参数校验错误');
- }
- $messageId = Db::table('tb_message')
- ->insertGetId([
- 'from_uid' => $this->getUser()->user_id,
- 'to_uid' => $toUid,
- 'msg' => $msg,
- 'is_read' => 0,
- 'created_at' => time(),
- ]);
- $this->success('success', [
- 'messageId' => $messageId,
- ]);
- }
-
- //读消息
- public function readMessage()
- {
- $messageId = $this->request->post('messageId'); //消息ID
- if (!is_numeric($messageId)) {
- $this->fail(500, 'messageId参数校验错误');
- }
- $message = Db::table('tb_message')
- ->where(['id' => $messageId])
- ->find();
- if (!$message) {
- $this->fail(501, 'messageId不存在');
- }
- if ($message['to_uid'] != $this->getUser()->user_id) {
- $this->fail(502, '没有权限读消息');
- }
- $message['is_read'] = 1;
- $message['read_at'] = time();
- Db::table('tb_message')
- ->where(['id' => $messageId])
- ->update([
- 'is_read' => 1,
- 'read_at' => time(),
- ]);
- $this->success('success', $message);
- }
-
- //获取我的所有消息
- public function getMyAllMessages()
- {
- $page = $this->request->post('page'); //页码
- $pageNum = $this->request->post('pageNum'); //每页显示的数据条数
- if (!is_numeric($pageNum) || !is_numeric($page)) {
- $this->fail(500, 'page或pageNum参数校验错误');
- }
- $data = Db::table('tb_message')
- ->where(['to_uid' => $this->getUser()->user_id])
- ->order('created_at DESC')
- ->paginate([
- 'page' => $page,
- 'list_rows' => $pageNum,
- ]);
-
- // 使用 each 方法处理分页数据
- $data->each(function($item) {
- $fromUser = Db::table('tb_user')
- ->where(['id' => $item['from_uid']])
- ->field('username,avatar')
- ->find();
-
- if ($fromUser) {
- // 处理系统头像
- if (str_starts_with($fromUser['avatar'], 'system://')) {
- $avatarData = explode('//', $fromUser['avatar']);
- $avatarId = intval($avatarData[1]);
- $avatar = Db::table('tb_system_avatar')
- ->where(['id' => $avatarId])
- ->field('image_url')
- ->find();
- if ($avatar) {
- $fromUser['avatar'] = $avatar['image_url'];
- }
- }
-
- // 只保留需要的字段
- $item['from_user'] = [
- 'username' => $fromUser['username'],
- 'avatar' => $fromUser['avatar']
- ];
- }
-
- return $item;
- });
- $this->success('success', $data);
- }
- }
|