219 lines
7.6 KiB
PHP
219 lines
7.6 KiB
PHP
<?php
|
||
|
||
namespace app\api\controller;
|
||
|
||
use think\Controller;
|
||
use think\Db;
|
||
|
||
/**
|
||
* @title 前段web接口
|
||
* @description 前段web接口
|
||
* @group 前段web接口
|
||
*/
|
||
class Main extends Controller{
|
||
//put your code here
|
||
protected $admin_obj = '';
|
||
protected $journal_obj = '';
|
||
protected $article_obj = '';
|
||
protected $article_author_obj = '';
|
||
protected $journal_topic_obj = '';
|
||
protected $journal_stage_obj = '';
|
||
protected $journal_notices_obj = '';
|
||
protected $journal_abs_obj = '';
|
||
protected $article_to_topic_obj = '';
|
||
protected $sys_scient_obj = '';
|
||
protected $sys_book_obj = '';
|
||
|
||
public function __construct(\think\Request $request = null) {
|
||
parent::__construct($request);
|
||
$this->admin_obj = Db::name('admin');
|
||
$this->journal_obj = Db::name('journal');
|
||
$this->article_obj = Db::name('article');
|
||
$this->article_author_obj = Db::name('article_author');
|
||
$this->journal_topic_obj = Db::name('journal_topic');
|
||
$this->journal_stage_obj = Db::name('journal_stage');
|
||
$this->journal_notices_obj = Db::name('journal_notices');
|
||
$this->journal_abs_obj = Db::name('journal_abstracting');
|
||
$this->article_to_topic_obj = Db::name('article_to_topic');
|
||
$this->sys_scient_obj = Db::name('system_scient');
|
||
$this->sys_book_obj = Db::name('system_books');
|
||
}
|
||
|
||
/**
|
||
* @title 获取scients
|
||
* @description 获取scients
|
||
* @author wangjinlei
|
||
* @url /api/Main/getScients
|
||
* @method POST
|
||
*
|
||
* @return scients:array#
|
||
*/
|
||
public function getScients(){
|
||
$list = $this->sys_scient_obj->where('state',0)->select();
|
||
$re['scients'] = $list;
|
||
return jsonSuccess($re);
|
||
}
|
||
|
||
/**
|
||
* @title 获取scients详情
|
||
* @description 获取scients详情
|
||
* @author wangjinlei
|
||
* @url /api/Main/getScientDetail
|
||
* @method POST
|
||
*
|
||
* @param name:system_scient_id type:int require:1 desc:主键id
|
||
*
|
||
* @return scient:array#
|
||
*/
|
||
public function getScientDetail(){
|
||
$data = $this->request->post();
|
||
$info = $this->sys_scient_obj->where('system_scient_id',$data['system_scient_id'])->find();
|
||
|
||
$re['scient'] = $info;
|
||
return jsonSuccess($re);
|
||
}
|
||
|
||
/**
|
||
* @title 获取books
|
||
* @description 获取books
|
||
* @author wangjinlei
|
||
* @url /api/Main/getBooks
|
||
* @method POST
|
||
*
|
||
* @return books:array#
|
||
*/
|
||
public function getBooks(){
|
||
$list = $this->sys_book_obj->where('state',0)->select();
|
||
$re['books'] = $list;
|
||
return jsonSuccess($re);
|
||
}
|
||
|
||
/**
|
||
* @title 获取book详情
|
||
* @description 获取book详情
|
||
* @author wangjinlei
|
||
* @url /api/Main/getBookDetail
|
||
* @method POST
|
||
*
|
||
* @param name:system_book_id type:int require:1 desc:主键id
|
||
*
|
||
* @return book:array#
|
||
*/
|
||
public function getBookDetail(){
|
||
$data = $this->request->post();
|
||
$info = $this->sys_book_obj->where('system_book_id',$data['system_book_id'])->find();
|
||
|
||
$re['book'] = $info;
|
||
return jsonSuccess($re);
|
||
}
|
||
|
||
/**
|
||
* @title 获取首页Highlights
|
||
* @description 获取首页Highlights
|
||
* @author wangjinlei
|
||
* @url /api/Main/getMainhl
|
||
* @method POST
|
||
*
|
||
* @param name:journal_id type:int require:1 desc:期刊id
|
||
*
|
||
* @return Highlights:array#
|
||
*/
|
||
public function getMainhl(){
|
||
$data = $this->request->post();
|
||
$topic_info = $this->journal_topic_obj->where('journal_id',$data['journal_id'])->where('position','highlights')->where('state',0)->find();
|
||
if($topic_info){
|
||
$list = $this->article_to_topic_obj->field('j_article.*,j_journal_stage.*')
|
||
->join(array(['j_article','j_article.article_id = j_article_to_topic.article_id','LEFT'],['j_journal_stage','j_journal_stage.journal_stage_id = j_article.journal_stage_id','LEFT']))
|
||
->where('j_article_to_topic.topic_id',$topic_info['journal_topic_id'])
|
||
->where('j_article_to_topic.state',0)
|
||
->select();
|
||
return jsonSuccess(['topic_info'=>$topic_info,'articlelist'=>$list]);
|
||
}else{
|
||
return jsonError('no highlights');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @title 获取期刊列表
|
||
* @description 获取期刊列表
|
||
* @author wangjinlei
|
||
* @url /api/Main/getJournals
|
||
* @method POST
|
||
*
|
||
* @return journals:array#
|
||
*/
|
||
public function getJournals(){
|
||
$list = $this->journal_obj->where('state',0)->select();
|
||
|
||
$re['journals'] = $list;
|
||
return jsonSuccess($re);
|
||
}
|
||
|
||
/**
|
||
* @title 获取查找文章列表
|
||
* @description 获取查找文章列表
|
||
* @author wangjinlei
|
||
* @url /api/Main/getSearchArt
|
||
* @method POST
|
||
*
|
||
* @param name:journals type:string require:1 desc:期刊id(demo:1,2,3)
|
||
* @param name:condition1 type:string require:1 desc:条件1(title/keywords/abstract)
|
||
* @param name:condition1_text type:string require:1 desc:条件1字段
|
||
* @param name:relation type:string require:2 desc:两条件的链接条件('and/or')
|
||
* @param name:condition2 type:string require:2 desc:条件2(title/keywords/abstract)
|
||
* @param name:condition2_text type:string require:2 desc:条件2字段
|
||
* @param name:pageIndex type:int require:1 desc:当前页码数
|
||
* @param name:pageSize type:int require:1 desc:单页数据条数
|
||
*
|
||
* @return count:总数
|
||
* @return journals:array#
|
||
*/
|
||
public function getSearchArt(){
|
||
$data = $this->request->post();
|
||
|
||
// $data['journals'] = '1,2,3';
|
||
// $data['condition1'] = 'title';
|
||
// $data['condition1_text'] = '1';
|
||
// $data['relation'] = 'or';
|
||
// $data['condition2'] = 'keywords';
|
||
// $data['condition2_text'] = '1';
|
||
// $data['pageIndex'] = 1;
|
||
// $data['pageSize'] = 12;
|
||
$where = "j_article.journal_id in (".$data['journals'].")";
|
||
if($data['condition2_text']!=''){
|
||
if($data['relation']=='and'){
|
||
$where .= ' and j_article.'.$data['condition1'] .' like "%'.$data['condition1_text'].'%" and j_article.'.$data['condition2'] .' like "%'.$data['condition2_text'].'%"';
|
||
}else{
|
||
$where .= ' and (j_article.'.$data['condition1'] .' like "%'.$data['condition1_text'].'%" or j_article.'.$data['condition2'] .' like "%'.$data['condition2_text'].'%")';
|
||
}
|
||
}else{
|
||
$where .= 'and j_article.'.$data['condition1'] .' like "%'.$data['condition1_text'].'%"';
|
||
}
|
||
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
||
$list = $this->article_obj->field('j_article.*,j_journal_stage.*')
|
||
->join('j_journal_stage','j_article.journal_stage_id=j_journal_stage.journal_stage_id','LEFT')
|
||
->where($where)
|
||
->order('j_article.article_id')
|
||
->limit($limit_start,$data['pageSize'])
|
||
->select();
|
||
|
||
foreach ($list as $k => $v){
|
||
$list[$k]['authortitle'] = $this->getAuthor($v);
|
||
}
|
||
$count = $this->article_obj->where($where)->count();
|
||
$re['count'] = $count;
|
||
$re['journals'] = $list;
|
||
return jsonSuccess($re);
|
||
}
|
||
private function getAuthor($article){
|
||
$where['article_id'] = $article['article_id'];
|
||
$where['state'] = 0;
|
||
$list = $this->article_author_obj->where($where)->select();
|
||
$frag = '';
|
||
foreach ($list as $k=>$v){
|
||
$frag = $frag==''?''.$v['author_name']:$frag.', '.$v['author_name'];
|
||
}
|
||
return $frag;
|
||
}
|
||
}
|