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]); } }