Message.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace app\controller;
  3. use app\BaseController;
  4. use think\facade\Db;
  5. //消息控制器
  6. class Message extends BaseController
  7. {
  8. //发送消息
  9. public function sendMessage()
  10. {
  11. $toUid = $this->request->post('toUid'); //发送给用户ID
  12. $msg = $this->request->post('msg'); //发送的消息内容
  13. if (!is_numeric($toUid) || empty($msg)) {
  14. $this->fail(500, '参数校验错误');
  15. }
  16. $messageId = Db::table('tb_message')
  17. ->insertGetId([
  18. 'from_uid' => $this->getUser()->user_id,
  19. 'to_uid' => $toUid,
  20. 'msg' => $msg,
  21. 'is_read' => 0,
  22. 'created_at' => time(),
  23. ]);
  24. $this->success('success', [
  25. 'messageId' => $messageId,
  26. ]);
  27. }
  28. //读消息
  29. public function readMessage()
  30. {
  31. $messageId = $this->request->post('messageId'); //消息ID
  32. if (!is_numeric($messageId)) {
  33. $this->fail(500, 'messageId参数校验错误');
  34. }
  35. $message = Db::table('tb_message')
  36. ->where(['id' => $messageId])
  37. ->find();
  38. if (!$message) {
  39. $this->fail(501, 'messageId不存在');
  40. }
  41. if ($message['to_uid'] != $this->getUser()->user_id) {
  42. $this->fail(502, '没有权限读消息');
  43. }
  44. $message['is_read'] = 1;
  45. $message['read_at'] = time();
  46. Db::table('tb_message')
  47. ->where(['id' => $messageId])
  48. ->update([
  49. 'is_read' => 1,
  50. 'read_at' => time(),
  51. ]);
  52. $this->success('success', $message);
  53. }
  54. //获取我的所有消息
  55. public function getMyAllMessages()
  56. {
  57. $page = $this->request->post('page'); //页码
  58. $pageNum = $this->request->post('pageNum'); //每页显示的数据条数
  59. if (!is_numeric($pageNum) || !is_numeric($page)) {
  60. $this->fail(500, 'page或pageNum参数校验错误');
  61. }
  62. $data = Db::table('tb_message')
  63. ->where(['to_uid' => $this->getUser()->user_id])
  64. ->order('created_at DESC')
  65. ->paginate([
  66. 'page' => $page,
  67. 'list_rows' => $pageNum,
  68. ]);
  69. // 使用 each 方法处理分页数据
  70. $data->each(function($item) {
  71. $fromUser = Db::table('tb_user')
  72. ->where(['id' => $item['from_uid']])
  73. ->field('username,avatar')
  74. ->find();
  75. if ($fromUser) {
  76. // 处理系统头像
  77. if (str_starts_with($fromUser['avatar'], 'system://')) {
  78. $avatarData = explode('//', $fromUser['avatar']);
  79. $avatarId = intval($avatarData[1]);
  80. $avatar = Db::table('tb_system_avatar')
  81. ->where(['id' => $avatarId])
  82. ->field('image_url')
  83. ->find();
  84. if ($avatar) {
  85. $fromUser['avatar'] = $avatar['image_url'];
  86. }
  87. }
  88. // 只保留需要的字段
  89. $item['from_user'] = [
  90. 'username' => $fromUser['username'],
  91. 'avatar' => $fromUser['avatar']
  92. ];
  93. }
  94. return $item;
  95. });
  96. $this->success('success', $data);
  97. }
  98. }