123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- <?php
- /**
- * Created by PhpStorm.
- * User: NODELOG
- * Date: 16-1-28
- * Time: 下午6:40
- */
- namespace api\modules\v1\controllers;
- use api\common\controllers\Controller;
- use api\modules\v1\models\Article;
- use common\enums\CodeEnum;
- use common\models\ArticleModule;
- use common\models\Footprint;
- use common\models\SearchRecord;
- use Yii;
- use yii\base\Exception;
- use yii\data\ActiveDataProvider;
- use api\common\behaviors\QueryParamAuth;
- use yii\helpers\ArrayHelper;
- use yii\web\NotFoundHttpException;
- class ArticleController extends Controller
- {
- public function behaviors()
- {
- return ArrayHelper::merge(parent::behaviors(), [
- [
- 'class' => QueryParamAuth::className(),
- 'tokenParam' => 'token',
- 'optional' => []
- ]
- ]);
- }
- /**
- * @param $cid
- * @param $chain
- * @param $keyword
- * @return ActiveDataProvider
- * @author jiang
- */
- public function actionIndex($cid = null, $chain = null, $keyword = null)
- {
- $query = Article::find()->published()
- ->andFilterWhere(['category_id' => $cid]);
- //产业链
- if (!empty($chain) && $chain != '全部') {
- $query->andWhere([
- 'or',
- ['like', 'chain', $chain],
- ['like', 'title', $chain],
- ['like', 'company', $chain],
- ['like', 'description', $chain],
- ['like', 'intro', $chain],
- ['like', 'address', $chain],
- ['like', 'city', $chain],
- ['like', 'tel', $chain],
- ['like', 'principal', $chain],
- ['like', 'position', $chain],
- ]);
- }
- //搜索关键字
- if (!empty($keyword)) {
- $query->andWhere([
- 'or',
- ['like', 'chain', $keyword],
- ['like', 'title', $keyword],
- ['like', 'company', $keyword],
- ['like', 'description', $keyword],
- ['like', 'intro', $keyword],
- ['like', 'address', $keyword],
- ['like', 'city', $keyword],
- ['like', 'tel', $keyword],
- ['like', 'principal', $keyword],
- ['like', 'position', $keyword],
- ]);
- }
- $dataProvider = new ActiveDataProvider([
- 'query' => $query,
- 'pagination' => [
- // 'validatePage' => true,
- 'pageParam' => 'page_no',
- 'pageSizeParam' => 'page_size',
- ],
- 'sort' => [
- 'defaultOrder' => [
- 'id' => SORT_ASC
- ]
- ]
- ]);
- //记录搜索关键词
- self::recordKeyword($keyword);
- return $dataProvider;
- }
- /**
- * 详情
- * @param $id
- * @return array
- * @throws NotFoundHttpException
- * @author jiang
- */
- public function actionView($id)
- {
- // request()->setQueryParams(['expand' => 'data']);
- $model = Article::find()->published()->where(['id' => $id])->one();
- if ($model === null) {
- throw new NotFoundHttpException('not found');
- }
- $model->addView();
- //添加足迹记录
- Footprint::add(\common\models\Article::className(), $id);
- return ['data' => $model];
- }
- /**
- * 看板统计
- * @return array
- * @throws NotFoundHttpException
- * @author jiang
- */
- public function actionCount()
- {
- $list = Article::find()->select(['module', 'count(module) as count'])->published()->groupBy('module')->orderBy(['count' => SORT_DESC])->asArray()->all();
- $citylist = Article::find()->select(['city', 'count(city) as count'])->where(['!=', 'city', ''])->published()->groupBy('city')->having(['>', 'count', 5])->orderBy(['count' => SORT_DESC])->asArray()->all();
- $data = [];
- foreach ($list as $item) {
- $data['normal'][] = [
- 'name' => array_get(\common\models\ArticleModule::getTypeEnum(), $item['module']),
- 'centerText' => $item['count'],
- 'value' => (int)$item['count']
- ];
- }
- foreach ($citylist as $item) {
- $size = 10;
- if ($item['count'] >= 100) {
- $size = 50;
- }
- if ($item['count'] >= 50 && $item['count'] < 100) {
- $size = 40;
- }
- if ($item['count'] >= 40 && $item['count'] < 50) {
- $size = 30;
- }
- if ($item['count'] >= 30 && $item['count'] < 40) {
- $size = 25;
- }
- if ($item['count'] >= 20 && $item['count'] < 30) {
- $size = 20;
- }
- if ($item['count'] >= 10 && $item['count'] < 20) {
- $size = 15;
- }
- // if ($item['count'] < 10) {
- // $size = 10;
- // }
- $data['word'][] = [
- 'name' => $item['city'],
- 'textSize' => $size
- ];
- }
- return ['data' => $data];
- }
- /**
- * 浏览足迹
- * @return ActiveDataProvider
- * @author jiang
- */
- public function actionFootprint()
- {
- $ids = Footprint::find()->where(['entity' => \common\models\Article::className()])->my()->active()->select('entity_id')->orderBy(['id' => SORT_DESC])->column();
- $query = Article::find()->where(['in', 'id', $ids])->published();
- $dataProvider = new ActiveDataProvider([
- 'query' => $query,
- 'pagination' => [
- 'pageParam' => 'page_no',
- 'pageSizeParam' => 'page_size',
- ],
- // 'sort' => [
- // 'defaultOrder' => [
- // 'created_at' => SORT_DESC,
- // ]
- // ]
- ]);
- return $dataProvider;
- }
- /**
- * 数据模型列表
- * @return array
- * @author jiang
- */
- public function actionModule()
- {
- $data = ArticleModule::find()->select(['name', 'title'])->all();
- return ['data' => $data];
- }
- /**
- * 企业反馈
- * @return array|string[]
- * @throws \yii\db\Exception
- * @author jiang
- */
- public function actionCreate()
- {
- $transaction = Yii::$app->db->beginTransaction();
- try {
- $model = new \common\models\Article();
- $model->load(request()->post(), '');
- $model->status = \common\models\Article::STATUS_PENDING;//待审核
- $model->save();
- if ($model->hasErrors()) {
- throw new Exception(current($model->getErrors())[0]);
- }
- $transaction->commit();
- } catch (\Exception $e) {
- $transaction->rollBack();
- return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '提交失败:' . $e->getMessage()];
- }
- return ['errmsg' => '提交成功'];
- }
- /**
- * 历史搜索
- * @return array
- * @author jiang
- */
- public function actionHistorySearch()
- {
- $where = [
- 'del' => 0,
- 'user_id' => \Yii::$app->user->id
- ];
- $order = [
- 'count' => SORT_DESC,
- 'updated_at' => SORT_DESC,
- 'id' => SORT_DESC
- ];
- $data = SearchRecord::find()->where($where)->orderBy($order)->limit(50)->select('keyword')->column();
- return ['data' => $data];
- }
- /**
- * @author jiang
- */
- public function actionClearSearch()
- {
- $where = [
- 'del' => 0,
- 'user_id' => \Yii::$app->user->id
- ];
- $data = [
- 'del' => 1,
- ];
- SearchRecord::updateAll($data, $where);
- return ['errmsg' => '清空成功'];
- }
- /**
- * 记录关键词
- */
- public static function recordKeyword($keyword)
- {
- if (empty($keyword)) {
- return false;
- }
- $where = [
- 'del' => 0,
- 'user_id' => \Yii::$app->user->id,
- 'keyword' => $keyword
- ];
- $record = SearchRecord::find()->where($where)->one();
- if ($record) {
- // 有该关键词记录, 更新
- $data = [
- 'count' => 1,
- ];
- SearchRecord::updateAllCounters($data, $where);
- return true;
- }
- $record = new SearchRecord();
- $record->load($where, '');
- $record->count = 1;
- $record->save();
- return true;
- }
- }
|