NoticeController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: chenkuan
  5. * Date: 2017/11/3
  6. * Time: 下午3:09
  7. */
  8. namespace frontend\controllers;
  9. use backend\helpers\PaginationHelper;
  10. use backend\helpers\ValidatorHelper;
  11. use backend\models\Notice;
  12. use backend\models\NoticeRead;
  13. class NoticeController extends BaseController
  14. {
  15. /**
  16. * 用户页面获取公告列表
  17. */
  18. public function actionIndex()
  19. {
  20. $data = \Yii::$app->getRequest()->get();
  21. $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
  22. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  23. $data['page_size'] = isset($data['page_size']) ? intval($data['page_size']) : 20;
  24. $data['title'] = isset($data['title']) ? $data['title'] : '';
  25. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc';
  26. $data = ValidatorHelper::validateData($data, [
  27. ['page', 'integer', 'min' => 1],
  28. ['page_size', 'integer', 'min' => 1],
  29. ['orderBy', 'string'],
  30. ], $errors);
  31. if ($data == false) {
  32. return $this->outJson(0, '', $errors);
  33. }
  34. $query = Notice::find()
  35. ->select('id, type, title, FROM_UNIXTIME(in_time/1000) as in_time')
  36. ->where(['type' => 0])
  37. ->orderBy($data['orderBy']);
  38. // 按标题搜索
  39. if (!empty($data['title'])) {
  40. $query->andFilterWhere(['like', 'title', $data['title']]);
  41. }
  42. $result = PaginationHelper::queryPage($query, $data['page'], $data['page_size']);
  43. if (!empty($result)) {
  44. foreach ($result['dataList'] as $key=>$item) {
  45. $isRead = false;
  46. $nr = $this->notice_read($data['member_id'], $item['id']);
  47. if ($nr != null) {
  48. $isRead = true;
  49. }
  50. $result['dataList'][$key]['isRead'] = $isRead;
  51. }
  52. }
  53. return $this->outJson(1, $result);
  54. }
  55. /**
  56. * 公告详情
  57. */
  58. public function actionView()
  59. {
  60. $data = \Yii::$app->getRequest()->get();
  61. $data['id'] = isset($data['id']) ? (int)$data['id'] : '';
  62. $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
  63. if ($data['id'] <= 0) {
  64. return $this->outJson(0, [], '未指定数据对象');
  65. }
  66. $notice = Notice::find()->where(['id' => $data['id']])->asArray()->limit(1)->one();
  67. if ($notice == null) {
  68. return $this->outJson(0, [], '数据不存在');
  69. }
  70. $isRead = $this->notice_read($data['member_id'], $data['id']);
  71. if ($isRead == null) {
  72. $noticeRead = new NoticeRead();
  73. $noticeRead->member_id = $data['member_id'];
  74. $noticeRead->notice_id = $data['id'];
  75. $noticeRead->save();
  76. }
  77. return $this->outJson(1, $notice);
  78. }
  79. /**
  80. * 获取未读公告数
  81. */
  82. public function actionNotReadCount()
  83. {
  84. $data = \Yii::$app->getRequest()->get();
  85. $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
  86. $sql = "
  87. select count(*) from crm_notice a
  88. where a.id not in(select notice_id from crm_notice_read where member_id=:member_id)
  89. and a.type=:type
  90. ";
  91. $sqlParams[':member_id'] = $data['member_id'];
  92. $sqlParams[':type'] = 0;
  93. $num = intval(\Yii::$app->db->createCommand($sql, $sqlParams)->queryScalar());
  94. $this->outJson(1, ['unReadNum' => $num]);
  95. }
  96. /**
  97. * @title 公告已读未读判断
  98. * @param int $member_id
  99. * @param int $notice_id
  100. * @return array|null
  101. */
  102. public function notice_read($member_id, $notice_id)
  103. {
  104. return NoticeRead::find()
  105. ->where(['member_id' => $member_id, 'notice_id' => $notice_id])
  106. ->limit(1)->one();
  107. }
  108. }