NoticeController.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2017/11/1/001
  6. * Time: 16:38
  7. */
  8. namespace backend\controllers;
  9. use backend\helpers\DateTimeHelper;
  10. use backend\helpers\PaginationHelper;
  11. use backend\helpers\ValidatorHelper;
  12. use backend\models\Member;
  13. use backend\models\Mt4Users;
  14. use backend\models\Notice;
  15. use backend\models\NoticeRead;
  16. class NoticeController extends BaseController
  17. {
  18. /**
  19. * 公告列表
  20. */
  21. public function actionIndex()
  22. {
  23. $data = \Yii::$app->getRequest()->get();
  24. $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
  25. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  26. $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
  27. $data['search'] = isset($data['search']) ? trim($data['search']) : '';
  28. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc';
  29. $data['is_admin'] = isset($data['is_admin']) ? $data['is_admin'] : 0; //前后台区别1:后台;0:前台
  30. $data['type'] = isset($data['type']) ? intval($data['type']) : '';
  31. $data = ValidatorHelper::validateData($data, [
  32. ['page', 'integer', 'min' => 1],
  33. ['pageSize', 'integer', 'min' => 1],
  34. ['orderBy', 'string'],
  35. ], $errors);
  36. if ($data == false) {
  37. return $this->outJson(0, '', $errors);
  38. }
  39. if (!$data['is_admin']) {
  40. $query = Notice::find()->orderBy($data['orderBy'])
  41. ->select(['id', 'type', 'title', 'in_time'])
  42. ->where(['type' => $data['type']]);
  43. } else {
  44. $query = Notice::find()
  45. ->select('id,type,title,in_time')
  46. ->orderBy($data['orderBy']);
  47. }
  48. // 按标题搜索
  49. if (!empty($data['search'])) {
  50. $query->andFilterWhere(['like', 'title', $data['search']]);
  51. }
  52. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  53. if (!$data['is_admin'] && !empty($result)) {
  54. foreach ($result['dataList'] as $key => $item) {
  55. $isRead = false;
  56. $nr = $this->noticeRead($data['member_id'], $item['id']);
  57. if ($nr != null) {
  58. $isRead = true;
  59. }
  60. $result['dataList'][$key]['isRead'] = $isRead;
  61. }
  62. }
  63. return $this->outJson(1, $result);
  64. }
  65. /**
  66. * 公告详情
  67. */
  68. public function actionView()
  69. {
  70. $data = \Yii::$app->getRequest()->get();
  71. $data['id'] = isset($data['id']) ? intval($data['id']) : 0;
  72. $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
  73. $data['is_admin'] = isset($data['is_admin']) ? $data['is_admin'] : 0; //1:后台;0:前台
  74. if ($data['id'] <= 0) {
  75. return $this->outJson(0, [], '未指定数据对象');
  76. }
  77. if (!$data['is_admin']) {
  78. $notice = Notice::find()
  79. ->select(['id','type','title','content','FROM_UNIXTIME(in_time/1000,"%Y-%m-%d") as in_time'])
  80. ->where(['id' => $data['id']])->asArray()->limit(1)->one();
  81. $isRead = $this->noticeRead($data['member_id'], $data['id']);
  82. if ($isRead == null) {
  83. $noticeRead = new NoticeRead();
  84. $noticeRead->member_id = $data['member_id'];
  85. $noticeRead->notice_id = $data['id'];
  86. $noticeRead->save();
  87. }
  88. } else {
  89. $notice = Notice::find()->where(['id' => $data['id']])->asArray()->limit(1)->one();
  90. }
  91. if ($notice == null) {
  92. return $this->outJson(0, [], '数据不存在');
  93. }
  94. return $this->outJson(1, $notice);
  95. }
  96. /**
  97. * 添加公告
  98. */
  99. public function actionCreate()
  100. {
  101. $notice = new Notice();
  102. $data = \Yii::$app->getRequest()->post();
  103. $notice->setAttributes($data);
  104. $notice->in_time = DateTimeHelper::microtime_float();
  105. if ($notice->save()) {
  106. return $this->outJson(1, $notice->getAttributes());
  107. } else {
  108. return $this->outJson(0, '', $notice->getErrors());
  109. }
  110. }
  111. /**
  112. * 编辑公告
  113. */
  114. public function actionUpdate()
  115. {
  116. $data = \Yii::$app->getRequest()->post();
  117. $data['id'] = isset($data['id']) ? trim($data['id']) : '';
  118. $notice = Notice::findOne(['id' => $data['id']]);
  119. $notice->setAttributes($data);
  120. if ($notice->save()) {
  121. return $this->outJson(1, $notice->getAttributes());
  122. } else {
  123. return $this->outJson(0, '', $notice->getErrors());
  124. }
  125. }
  126. /**
  127. * 删除公告
  128. */
  129. public function actionDelete()
  130. {
  131. $data = \Yii::$app->getRequest()->post();
  132. $id = intval($data['id']);
  133. if ($id <= 0) {
  134. return $this->outJson(0, [], '未指定数据对象');
  135. }
  136. $affectRows = Notice::deleteAll(['id' => $data['id']]);
  137. return $this->outJson(1, $affectRows, '操作成功');
  138. }
  139. /**
  140. * @title 公告已读未读判断
  141. * @param int $member_id
  142. * @param int $notice_id
  143. * @return array|null
  144. */
  145. public function noticeRead($member_id, $notice_id)
  146. {
  147. return NoticeRead::find()
  148. ->where(['member_id' => $member_id, 'notice_id' => $notice_id])
  149. ->limit(1)->one();
  150. }
  151. /**
  152. * 获取未读公告数
  153. */
  154. public function actionNotReadCount()
  155. {
  156. $data = \Yii::$app->getRequest()->get();
  157. $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
  158. $data['type'] = isset($data['type']) ? (int)$data['type'] : '';
  159. $num = Notice::find()->where(['not in', 'id', NoticeRead::find()->select('notice_id')->where(['member_id' => $data['member_id']])])
  160. ->andWhere(['type' => $data['type']])->count();
  161. // $sql = "
  162. // select count(*) from crm_notice a
  163. // where a.id not in(select notice_id from crm_notice_read where member_id=:member_id)
  164. // and a.type=:type
  165. // ";
  166. // $sqlParams[':member_id'] = $data['member_id'];
  167. // $sqlParams[':type'] = $data['type'];
  168. // $num = intval(Notice::getDb()->createCommand($sql, $sqlParams)->queryScalar());
  169. $this->outJson(1, ['unReadNum' => $num]);
  170. }
  171. /**
  172. * 获取常见问题列表
  173. * @return \yii\web\Response
  174. */
  175. public function actionGetHelpList()
  176. {
  177. $data = \Yii::$app->getRequest()->get();
  178. $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
  179. $data['type'] = isset($data['type']) ? intval($data['type']) : '';
  180. $member = Member::findOne(['id' => $data['member_id']]);
  181. $login = $this->getMainLogin($member);
  182. $user = (new Mt4Users())->findByLogin($login);
  183. $notices = Notice::find()->where(['type' => $data['type']])->orderBy(['id' => SORT_ASC])->all();
  184. $result = [
  185. 'member' => $member,
  186. 'user' => $user,
  187. 'type' => 'help',
  188. 'notices' => $notices,
  189. ];
  190. return $this->outJson(1, $result);
  191. }
  192. /**
  193. * 最新一条未读公告
  194. */
  195. public function actionLastUnreadNotice()
  196. {
  197. $data = \Yii::$app->getRequest()->get();
  198. $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
  199. $data['type'] = isset($data['type']) ? (int)$data['type'] : '';
  200. $notice = Notice::find()->where(['not in', 'id', NoticeRead::find()->select('notice_id')->where(['member_id' => $data['member_id']])])
  201. ->andWhere(['type' => $data['type']])->orderBy('in_time DESC')->limit(1)->asArray()->one();
  202. return $this->outJson($notice ? 1 : 0, ['notice' => $notice]);
  203. }
  204. }