Message.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\model\MessageCategory;
  4. use app\admin\model\Message as MessageModel;
  5. use app\common\controller\Api;
  6. /**
  7. * 消息
  8. * @ApiWeigh (5)
  9. * @package app\api\controller
  10. */
  11. class Message extends Api
  12. {
  13. protected $noNeedLogin = [];
  14. protected $noNeedRight = ['*'];
  15. /**
  16. * 消息分类
  17. * @ApiMethod (Get)
  18. * @ApiParams (name=group,description="展示端:1用户端,2塘主端")
  19. * @ApiReturnParams (name="category_id", type="int", required=true, description="消息分类id")
  20. * @ApiReturnParams (name="name", type="string", required=true, description="消息分类名称")
  21. * @ApiReturnParams (name="image", type="string", required=true, description="消息分类图片,暂无内容,看移动端是否需要")
  22. * @ApiReturnParams (name="message", type="string", required=true, description="消息内容")
  23. * @ApiReturnParams (name="create_time", type="int", required=true, description="消息时间")
  24. * @ApiReturn ({"code":1,"msg":"ok","time":"1672132378","data":[{"category_id":1,"name":"订单消息","image":"","message":"","create_time":0,"no_read_total":0},{"category_id":2,"name":"订阅通知","image":"","message":"","create_time":0,"no_read_total":0},{"category_id":3,"name":"午餐通知","image":"","message":"订单。。。","create_time":1672126035,"no_read_total":1},{"category_id":4,"name":"申请消息","image":"","message":"恭喜您申请成功","create_time":1672126030,"no_read_total":0}]})
  25. */
  26. public function message_category()
  27. {
  28. $group = input('group', 1);
  29. $category_model = new MessageCategory();
  30. $list = $category_model->where('type', 'message')
  31. ->where('group', $group)
  32. ->order(['weigh' => 'desc', 'id' => 'asc'])->select();
  33. $data = [];
  34. if (count($list) == 0) {
  35. $this->success('ok', $data);
  36. }
  37. $message_model = new MessageModel();
  38. // 未读消息数
  39. $message_cat = $message_model->field('category_id,count(*) as category_total')
  40. ->where('user_id', $this->auth->id)
  41. ->where('is_read', 0)
  42. ->group('category_id')->select();
  43. $message_no_read = [];
  44. foreach ($message_cat as $c) {
  45. $message_no_read[$c->category_id] = $c->category_total;
  46. }
  47. foreach ($list as $k => $v) {
  48. // $message_model = new MessageModel();
  49. $message = $message_model->where(['category_id' => $v->id, 'user_id' => $this->auth->id])->order('id', 'desc')->find();
  50. // 未读数
  51. $no_read_total = 0;
  52. if (array_key_exists($v->id, $message_no_read)) {
  53. $no_read_total = $message_no_read[$v->id];
  54. }
  55. $data[$k] = [
  56. 'category_id' => $v->id,
  57. 'name' => $v->name,
  58. 'image' => $v->image,
  59. 'message' => $message ? $message->description : '',
  60. 'create_time' => $message ? $message->createtime : 0,
  61. 'no_read_total' => $no_read_total,
  62. ];
  63. }
  64. $this->success('ok', $data);
  65. }
  66. /**
  67. * 消息列表
  68. * @ApiMethod (Get)
  69. * @ApiParams (name=category_id,type="int", required=true, description="消息分类id")
  70. * @ApiParams (name=limit,type="int", required=false, description="每页数量")
  71. * @ApiParams (name=page,type="int", required=false, description="页数")
  72. * @ApiReturnParams (name="id", type="int", required=true, description="消息id")
  73. * @ApiReturnParams (name="title", type="string", required=true, description="消息标题")
  74. * @ApiReturnParams (name="name", type="string", required=true, description="名称")
  75. * @ApiReturnParams (name="image", type="string", required=true, description="消息图片")
  76. * @ApiReturnParams (name="description", type="string", required=true, description="消息内容")
  77. * @ApiReturnParams (name="is_read", type="int", required=true, description="是否已读:0=未读,1=已读")
  78. * @ApiReturnParams (name="create_time", type="int", required=true, description="消息时间")
  79. * @ApiReturnParams (name="m_name", type="string", required=true, description="鱼塘信息")
  80. * @ApiReturnParams (name="order_status", type="string", required=true, description="订单状态")
  81. * @ApiReturn ({"code":1,"msg":"ok","time":"1672129197","data":{"total":2,"data":[{"id":3,"title":"订单","image":null,"description":"订单。。。","is_read": 1,"create_time":1672126035,"m_id":1,"m_name":"todo","order_status":"todo"},{"id":2,"title":"订单2","name":"订单2","image":null,"description":"订单2,,,","is_read": 0,"create_time":null,"m_id":1,"m_name":"todo","order_status":"todo"}]}})
  82. */
  83. public function message_list()
  84. {
  85. $category_id = input('category_id');
  86. if (!$category_id) {
  87. $this->error('参数错误');
  88. }
  89. $page = input('page', 1);
  90. $message_model = new MessageModel();
  91. $query = $message_model->where(['category_id' => $category_id, 'user_id' => $this->auth->id])->order('id', 'desc');
  92. $list = $query->paginate(input('limit', 10), false, ['page' => $page]);
  93. $data = [];
  94. foreach ($list as $k => $v) {
  95. $data[$k] = [
  96. 'id' => $v->id,
  97. 'title' => $v->title,
  98. 'name' => $v->name,
  99. 'image' => $v->image,
  100. 'description' => $v->description,
  101. 'create_time' => $v->createtime,
  102. 'is_read' => $v->is_read,
  103. 'm_id' => $v->m_id,
  104. 'order_status' => '',
  105. ];
  106. //todo
  107. if ($v->m_id != 0) {
  108. $data[$k]['m_name'] = 'todo';
  109. }
  110. //todo
  111. if ($v->order_id != 0) {
  112. $data[$k]['order_status'] = 'todo';
  113. }
  114. }
  115. $this->success('ok', ['total' => $list->total(), 'data' => $data]);
  116. }
  117. /**
  118. * 消息详情
  119. * @ApiMethod (Get)
  120. * @ApiParams (name=id,description="消息id")
  121. * @ApiReturnParams (name="id", type="int", required=true, description="消息id")
  122. * @ApiReturnParams (name="title", type="string", required=true, description="消息标题")
  123. * @ApiReturnParams (name="name", type="string", required=true, description="名称")
  124. * @ApiReturnParams (name="image", type="string", required=true, description="消息图片")
  125. * @ApiReturnParams (name="description", type="string", required=true, description="消息内容")
  126. * @ApiReturnParams (name="is_read", type="int", required=true, description="是否已读:0=未读,1=已读")
  127. * @ApiReturnParams (name="create_time", type="int", required=true, description="消息时间")
  128. * @ApiReturnParams (name="m_name", type="string", required=true, description="鱼塘信息")
  129. * @ApiReturnParams (name="order_status", type="string", required=true, description="订单状态")
  130. * @ApiReturn ({"code":1,"msg":"ok","time":"1672132245","data":{"id":1,"m_id":0,"user_id":3,"category_id":4,"order_id":0,"title":"申请成功","name":"申请成功","image":null,"description":"恭喜您申请成功","is_read":0,"createtime":1672126030,"updatetime":1672130869,"deletetime":null,"createtime_text":"2022-12-27 15:27:10"}})
  131. */
  132. public function message_info()
  133. {
  134. $id = input('id');
  135. if (!$id) {
  136. $this->error('参数错误');
  137. }
  138. $message_model = new MessageModel();
  139. $info = $message_model->where(['id' => $id, 'user_id' => $this->auth->id])->find();
  140. if (!$info) {
  141. $this->error('参数错误');
  142. }
  143. //todo
  144. if ($info->m_id != 0) {
  145. $info['m_name'] = 'todo';
  146. }
  147. //todo
  148. if ($info->order_id != 0) {
  149. $info['order_status'] = 'todo';
  150. }
  151. // 设置为已读
  152. if ($info->is_read == 0) {
  153. $message_model->save(['is_read' => 1], ['id' => $info->id]);
  154. }
  155. $this->success('ok', $info);
  156. }
  157. /**
  158. * 消息总数
  159. * @ApiMethod (Get)
  160. * @ApiReturnParams (name="total", type="string", required=true, description="总数")
  161. * @ApiReturn ({"code":1,"msg":"ok","time":"1676008646","data":{"total":3}})
  162. */
  163. public function message_cnt()
  164. {
  165. $message_model = new MessageModel();
  166. $count = $message_model->where(['is_read' => 0, 'user_id' => $this->auth->id])->count();
  167. $this->success('ok', ['total' => $count]);
  168. }
  169. }