Message.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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_unread_num' => Db::name('message')->where('user_id',$this->auth->id)->where('status',0)->count(),
  16. ];
  17. //系统消息未读数量
  18. $sys_ids = Db::name('message_sys')->column('id');
  19. $all_num = count($sys_ids);
  20. $read_num = Db::name('user_messagesys')->where('user_id',$this->auth->id)->where('msg_id','IN',$sys_ids)->count();
  21. $rs['msgsys_unread_num'] = $all_num > $read_num ? $all_num - $read_num : 0; //因公告被删除,未读公告没来得及删除,相减可能会负数
  22. $this->success(1,$rs);
  23. }
  24. //个人消息全部改为已读
  25. public function message_read(){
  26. Db::startTrans();
  27. //读取即为已读
  28. $map = [
  29. 'user_id' => $this->auth->id,
  30. 'status' => 0,
  31. ];
  32. $rs = Db::name('message')->where($map)->update(['status'=>1]);
  33. if($rs === false){
  34. Db::rollback();
  35. $this->error('操作失败');
  36. }
  37. //系统消息
  38. //全部未读
  39. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  40. if($rs === false){
  41. Db::rollback();
  42. $this->error('操作失败');
  43. }
  44. //循环全部已读
  45. $list = Db::name('message_sys')->column('id');
  46. if(!empty($list)){
  47. $newall = [];
  48. foreach($list as $key => $msg_id){
  49. $newall[] = [
  50. 'user_id' => $this->auth->id,
  51. 'msg_id' => $msg_id,
  52. ];
  53. }
  54. if(!empty($newall)){
  55. $rs = Db::name('user_messagesys')->insertAll($newall);
  56. if($rs === false){
  57. Db::rollback();
  58. $this->error('操作失败');
  59. }
  60. }
  61. }
  62. Db::commit();
  63. $this->success();
  64. }
  65. //我的个人消息列表
  66. public function mylist(){
  67. $list = Db::name('message')->where('user_id',$this->auth->id)->autopage()->order('id desc')->select();
  68. //读取即为已读
  69. $map = [
  70. 'user_id' => $this->auth->id,
  71. 'status' => 0,
  72. ];
  73. Db::name('message')->where($map)->update(['status'=>1]);
  74. $this->success('success',$list);
  75. }
  76. /*
  77. * 获取系统消息列表
  78. */
  79. public function getmessagesys() {
  80. $list = Db::name('message_sys')->autopage()->order('id desc')->select();
  81. $list = list_domain_image($list,['image']);
  82. Db::startTrans();
  83. //系统消息
  84. //全部未读
  85. $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
  86. if($rs === false){
  87. Db::rollback();
  88. $this->error('操作失败');
  89. }
  90. //循环全部已读
  91. $list2 = Db::name('message_sys')->column('id');
  92. if(!empty($list2)){
  93. $newall = [];
  94. foreach($list2 as $key => $msg_id){
  95. $newall[] = [
  96. 'user_id' => $this->auth->id,
  97. 'msg_id' => $msg_id,
  98. ];
  99. }
  100. if(!empty($newall)){
  101. $rs = Db::name('user_messagesys')->insertAll($newall);
  102. if($rs === false){
  103. Db::rollback();
  104. $this->error('操作失败');
  105. }
  106. }
  107. }
  108. Db::commit();
  109. $this->success("获取成功!",$list);
  110. }
  111. //系统消息详情
  112. public function messagesys_info(){
  113. $id = input('id',0);
  114. $info = Db::name('message_sys')->where('id',$id)->find();
  115. $info = info_domain_image($info,['image']);
  116. $this->success("获取成功!",$info);
  117. }
  118. }