| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2017/11/1/001
- * Time: 16:38
- */
- namespace backend\controllers;
- use backend\helpers\DateTimeHelper;
- use backend\helpers\PaginationHelper;
- use backend\helpers\ValidatorHelper;
- use backend\models\Member;
- use backend\models\Mt4Users;
- use backend\models\Notice;
- use backend\models\NoticeRead;
- class NoticeController extends BaseController
- {
- /**
- * 公告列表
- */
- public function actionIndex()
- {
- $data = \Yii::$app->getRequest()->get();
- $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
- $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
- $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
- $data['search'] = isset($data['search']) ? trim($data['search']) : '';
- $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc';
- $data['is_admin'] = isset($data['is_admin']) ? $data['is_admin'] : 0; //前后台区别1:后台;0:前台
- $data['type'] = isset($data['type']) ? intval($data['type']) : '';
- $data = ValidatorHelper::validateData($data, [
- ['page', 'integer', 'min' => 1],
- ['pageSize', 'integer', 'min' => 1],
- ['orderBy', 'string'],
- ], $errors);
- if ($data == false) {
- return $this->outJson(0, '', $errors);
- }
- if (!$data['is_admin']) {
- $query = Notice::find()->orderBy($data['orderBy'])
- ->select(['id', 'type', 'title', 'in_time'])
- ->where(['type' => $data['type']]);
- } else {
- $query = Notice::find()
- ->select('id,type,title,in_time')
- ->orderBy($data['orderBy']);
- }
- // 按标题搜索
- if (!empty($data['search'])) {
- $query->andFilterWhere(['like', 'title', $data['search']]);
- }
- $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
- if (!$data['is_admin'] && !empty($result)) {
- foreach ($result['dataList'] as $key => $item) {
- $isRead = false;
- $nr = $this->noticeRead($data['member_id'], $item['id']);
- if ($nr != null) {
- $isRead = true;
- }
- $result['dataList'][$key]['isRead'] = $isRead;
- }
- }
- return $this->outJson(1, $result);
- }
- /**
- * 公告详情
- */
- public function actionView()
- {
- $data = \Yii::$app->getRequest()->get();
- $data['id'] = isset($data['id']) ? intval($data['id']) : 0;
- $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
- $data['is_admin'] = isset($data['is_admin']) ? $data['is_admin'] : 0; //1:后台;0:前台
- if ($data['id'] <= 0) {
- return $this->outJson(0, [], '未指定数据对象');
- }
- if (!$data['is_admin']) {
- $notice = Notice::find()
- ->select(['id','type','title','content','FROM_UNIXTIME(in_time/1000,"%Y-%m-%d") as in_time'])
- ->where(['id' => $data['id']])->asArray()->limit(1)->one();
- $isRead = $this->noticeRead($data['member_id'], $data['id']);
- if ($isRead == null) {
- $noticeRead = new NoticeRead();
- $noticeRead->member_id = $data['member_id'];
- $noticeRead->notice_id = $data['id'];
- $noticeRead->save();
- }
- } else {
- $notice = Notice::find()->where(['id' => $data['id']])->asArray()->limit(1)->one();
- }
- if ($notice == null) {
- return $this->outJson(0, [], '数据不存在');
- }
- return $this->outJson(1, $notice);
- }
- /**
- * 添加公告
- */
- public function actionCreate()
- {
- $notice = new Notice();
- $data = \Yii::$app->getRequest()->post();
- $notice->setAttributes($data);
- $notice->in_time = DateTimeHelper::microtime_float();
- if ($notice->save()) {
- return $this->outJson(1, $notice->getAttributes());
- } else {
- return $this->outJson(0, '', $notice->getErrors());
- }
- }
- /**
- * 编辑公告
- */
- public function actionUpdate()
- {
- $data = \Yii::$app->getRequest()->post();
- $data['id'] = isset($data['id']) ? trim($data['id']) : '';
- $notice = Notice::findOne(['id' => $data['id']]);
- $notice->setAttributes($data);
- if ($notice->save()) {
- return $this->outJson(1, $notice->getAttributes());
- } else {
- return $this->outJson(0, '', $notice->getErrors());
- }
- }
- /**
- * 删除公告
- */
- public function actionDelete()
- {
- $data = \Yii::$app->getRequest()->post();
- $id = intval($data['id']);
- if ($id <= 0) {
- return $this->outJson(0, [], '未指定数据对象');
- }
- $affectRows = Notice::deleteAll(['id' => $data['id']]);
- return $this->outJson(1, $affectRows, '操作成功');
- }
- /**
- * @title 公告已读未读判断
- * @param int $member_id
- * @param int $notice_id
- * @return array|null
- */
- public function noticeRead($member_id, $notice_id)
- {
- return NoticeRead::find()
- ->where(['member_id' => $member_id, 'notice_id' => $notice_id])
- ->limit(1)->one();
- }
- /**
- * 获取未读公告数
- */
- public function actionNotReadCount()
- {
- $data = \Yii::$app->getRequest()->get();
- $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
- $data['type'] = isset($data['type']) ? (int)$data['type'] : '';
- $num = Notice::find()->where(['not in', 'id', NoticeRead::find()->select('notice_id')->where(['member_id' => $data['member_id']])])
- ->andWhere(['type' => $data['type']])->count();
- // $sql = "
- // select count(*) from crm_notice a
- // where a.id not in(select notice_id from crm_notice_read where member_id=:member_id)
- // and a.type=:type
- // ";
- // $sqlParams[':member_id'] = $data['member_id'];
- // $sqlParams[':type'] = $data['type'];
- // $num = intval(Notice::getDb()->createCommand($sql, $sqlParams)->queryScalar());
- $this->outJson(1, ['unReadNum' => $num]);
- }
- /**
- * 获取常见问题列表
- * @return \yii\web\Response
- */
- public function actionGetHelpList()
- {
- $data = \Yii::$app->getRequest()->get();
- $data['member_id'] = isset($data['member_id']) ? intval($data['member_id']) : 0;
- $data['type'] = isset($data['type']) ? intval($data['type']) : '';
- $member = Member::findOne(['id' => $data['member_id']]);
- $login = $this->getMainLogin($member);
- $user = (new Mt4Users())->findByLogin($login);
- $notices = Notice::find()->where(['type' => $data['type']])->orderBy(['id' => SORT_ASC])->all();
- $result = [
- 'member' => $member,
- 'user' => $user,
- 'type' => 'help',
- 'notices' => $notices,
- ];
- return $this->outJson(1, $result);
- }
-
- /**
- * 最新一条未读公告
- */
- public function actionLastUnreadNotice()
- {
- $data = \Yii::$app->getRequest()->get();
- $data['member_id'] = isset($data['member_id']) ? (int)$data['member_id'] : '';
- $data['type'] = isset($data['type']) ? (int)$data['type'] : '';
- $notice = Notice::find()->where(['not in', 'id', NoticeRead::find()->select('notice_id')->where(['member_id' => $data['member_id']])])
- ->andWhere(['type' => $data['type']])->orderBy('in_time DESC')->limit(1)->asArray()->one();
- return $this->outJson($notice ? 1 : 0, ['notice' => $notice]);
- }
- }
|