Message.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 消息
  7. */
  8. class Message extends Api
  9. {
  10. protected $noNeedLogin = [];
  11. protected $noNeedRight = ['*'];
  12. //消息页信息
  13. public function index(){
  14. $rs = [
  15. 'msg_first' => Db::name('message')->where('user_id',$this->auth->id)->order('id desc')->find(), //第一条个人消息
  16. 'msg_unread_num' => Db::name('message')->where('user_id',$this->auth->id)->where('status',0)->count(),//个人消息未读数量
  17. 'msgsys_first' => Db::name('message_sys')->order('id desc')->find(),//第一条系统消息
  18. ];
  19. //系统消息未读数量
  20. $sys_ids = Db::name('message_sys')->column('id');
  21. $all_num = count($sys_ids);
  22. $read_num = Db::name('user_messagesys')->where('user_id',$this->auth->id)->where('msg_id','IN',$sys_ids)->count();
  23. $rs['msgsys_unread_num'] = $all_num > $read_num ? $all_num - $read_num : 0; //因公告被删除,未读公告没来得及删除,相减可能会负数
  24. //动态评论未读数量
  25. $map = [
  26. 'dt.user_id' => $this->auth->id,
  27. 'a.level' => 1,
  28. 'a.is_read' => 0,
  29. ];
  30. $dt_answer_unread = Db::name('topic_dongtai_answer')->alias('a')
  31. ->join('topic_dongtai dt','a.dt_id = dt.id','LEFT')
  32. ->where($map)->count();
  33. //动态点赞未读数量
  34. $map = [
  35. 'dt.user_id' => $this->auth->id,
  36. 'g.is_read' => 0,
  37. ];
  38. $dt_good_unread = Db::name('topic_dongtai_good')->alias('g')
  39. ->join('topic_dongtai dt','g.dt_id = dt.id','LEFT')
  40. ->where($map)->count();
  41. //互动消息未读数量
  42. $rs['dongtai_unread_num'] = $dt_answer_unread + $dt_good_unread;
  43. $this->success(1,$rs);
  44. }
  45. //个人消息全部改为已读
  46. public function message_read(){
  47. Db::startTrans();
  48. //读取即为已读
  49. $map = [
  50. 'user_id' => $this->auth->id,
  51. 'status' => 0,
  52. ];
  53. $rs = Db::name('message')->where($map)->update(['status'=>1]);
  54. if($rs === false){
  55. Db::rollback();
  56. $this->error('操作失败');
  57. }
  58. //系统消息
  59. //全部未读
  60. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  61. if($rs === false){
  62. Db::rollback();
  63. $this->error('操作失败');
  64. }
  65. //循环全部已读
  66. $list = Db::name('message_sys')->column('id');
  67. if(!empty($list)){
  68. $newall = [];
  69. foreach($list as $key => $msg_id){
  70. $newall[] = [
  71. 'user_id' => $this->auth->id,
  72. 'msg_id' => $msg_id,
  73. ];
  74. }
  75. if(!empty($newall)){
  76. $rs = Db::name('user_messagesys')->insertAll($newall);
  77. if($rs === false){
  78. Db::rollback();
  79. $this->error('操作失败');
  80. }
  81. }
  82. }
  83. Db::commit();
  84. $this->success();
  85. }
  86. //我的个人消息列表
  87. public function mylist(){
  88. $list = Db::name('message')->where('user_id',$this->auth->id)->autopage()->order('id desc')->select();
  89. //读取即为已读
  90. $map = [
  91. 'user_id' => $this->auth->id,
  92. 'status' => 0,
  93. ];
  94. Db::name('message')->where($map)->update(['status'=>1]);
  95. $this->success('success',$list);
  96. }
  97. /*
  98. * 获取系统消息列表
  99. */
  100. public function getmessagesys() {
  101. $list = Db::name('message_sys')->autopage()->order('id desc')->select();
  102. Db::startTrans();
  103. //系统消息
  104. //全部未读
  105. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  106. if($rs === false){
  107. Db::rollback();
  108. $this->error('操作失败');
  109. }
  110. //循环全部已读
  111. $list2 = Db::name('message_sys')->column('id');
  112. if(!empty($list2)){
  113. $newall = [];
  114. foreach($list2 as $key => $msg_id){
  115. $newall[] = [
  116. 'user_id' => $this->auth->id,
  117. 'msg_id' => $msg_id,
  118. ];
  119. }
  120. if(!empty($newall)){
  121. $rs = Db::name('user_messagesys')->insertAll($newall);
  122. if($rs === false){
  123. Db::rollback();
  124. $this->error('操作失败');
  125. }
  126. }
  127. }
  128. Db::commit();
  129. $this->success("获取成功!",$list);
  130. }
  131. //最新一条房间内公告
  132. public function getmessageroom() {
  133. $info = Db::name('message_room')->order('id desc')->find();
  134. $this->success("获取成功!",$info);
  135. }
  136. }