Message.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. //家族和公会待审核数量
  44. $rs['audit_unread_num'] = $this->wait_audit();
  45. $this->success(1,$rs);
  46. }
  47. //个人消息全部改为已读
  48. public function message_read(){
  49. Db::startTrans();
  50. //读取即为已读
  51. $map = [
  52. 'user_id' => $this->auth->id,
  53. 'status' => 0,
  54. ];
  55. $rs = Db::name('message')->where($map)->update(['status'=>1]);
  56. if($rs === false){
  57. Db::rollback();
  58. $this->error('操作失败');
  59. }
  60. //系统消息
  61. //全部未读
  62. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  63. if($rs === false){
  64. Db::rollback();
  65. $this->error('操作失败');
  66. }
  67. //循环全部已读
  68. $list = Db::name('message_sys')->column('id');
  69. if(!empty($list)){
  70. $newall = [];
  71. foreach($list as $key => $msg_id){
  72. $newall[] = [
  73. 'user_id' => $this->auth->id,
  74. 'msg_id' => $msg_id,
  75. ];
  76. }
  77. if(!empty($newall)){
  78. $rs = Db::name('user_messagesys')->insertAll($newall);
  79. if($rs === false){
  80. Db::rollback();
  81. $this->error('操作失败');
  82. }
  83. }
  84. }
  85. Db::commit();
  86. $this->success();
  87. }
  88. //我的个人消息列表
  89. public function mylist(){
  90. $list = Db::name('message')->where('user_id',$this->auth->id)->autopage()->order('id desc')->select();
  91. //读取即为已读
  92. $map = [
  93. 'user_id' => $this->auth->id,
  94. 'status' => 0,
  95. ];
  96. Db::name('message')->where($map)->update(['status'=>1]);
  97. $this->success('success',$list);
  98. }
  99. /*
  100. * 获取系统消息列表
  101. */
  102. public function getmessagesys() {
  103. $list = Db::name('message_sys')->autopage()->order('id desc')->select();
  104. Db::startTrans();
  105. //系统消息
  106. //全部未读
  107. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  108. if($rs === false){
  109. Db::rollback();
  110. $this->error('操作失败');
  111. }
  112. //循环全部已读
  113. $list2 = Db::name('message_sys')->column('id');
  114. if(!empty($list2)){
  115. $newall = [];
  116. foreach($list2 as $key => $msg_id){
  117. $newall[] = [
  118. 'user_id' => $this->auth->id,
  119. 'msg_id' => $msg_id,
  120. ];
  121. }
  122. if(!empty($newall)){
  123. $rs = Db::name('user_messagesys')->insertAll($newall);
  124. if($rs === false){
  125. Db::rollback();
  126. $this->error('操作失败');
  127. }
  128. }
  129. }
  130. Db::commit();
  131. $this->success("获取成功!",$list);
  132. }
  133. //最新一条房间内公告
  134. public function getmessageroom() {
  135. $info = Db::name('message_room')->order('id desc')->find();
  136. $this->success("获取成功!",$info);
  137. }
  138. //待审家族申请,待审公会申请
  139. private function wait_audit(){
  140. //公会待审数量
  141. $guild_number = 0;
  142. $my_guild = Db::name('guild')->where('status',1)->where('user_id',$this->auth->id)->find();
  143. if($my_guild){
  144. $guild_number = Db::name('guild_joinin')->where('guild_id',$my_guild['id'])->where('status',0)->count();
  145. }
  146. //家族待审数量
  147. $family_number = 0;
  148. $my_family = Db::name('family')->where('status',1)->where('user_id',$this->auth->id)->find();
  149. if($my_family){
  150. $family_number = Db::name('family_member')->where('guild_id',$my_family['id'])->where('status',0)->count();
  151. }
  152. $all_num = $guild_number + $family_number;
  153. return $all_num;
  154. }
  155. }