505 lines
21 KiB
PHP
505 lines
21 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller;
|
|
|
|
use think\Controller;
|
|
use think\Db;
|
|
|
|
/**
|
|
* @title 前段web客座期刊
|
|
* @description 前段web客座期刊
|
|
* @group 前段web客座期刊
|
|
*/
|
|
class Special 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 $journal_special_obj = '';
|
|
protected $journal_special_editor_obj = '';
|
|
protected $journal_special_to_editor_obj = '';
|
|
protected $article_to_topic_obj = '';
|
|
protected $sys_scient_obj = '';
|
|
protected $sys_book_obj = '';
|
|
protected $journal_special_alert_obj = '';
|
|
protected $article_cite_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->journal_special_obj = Db::name('journal_special');
|
|
$this->journal_special_editor_obj = Db::name('journal_special_editor');
|
|
$this->journal_special_to_editor_obj = Db::name('journal_special_to_editor');
|
|
$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');
|
|
$this->journal_special_alert_obj = Db::name('journal_special_alert');
|
|
$this->article_cite_obj = Db::name('article_cite');
|
|
}
|
|
|
|
/**
|
|
* @title 客座期刊(用户添加)
|
|
* @description 客座期刊(用户添加)
|
|
* @author wangjinlei
|
|
* @url /api/Special/addSpecial
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:期刊id
|
|
* @param name:email type:string require:1 desc:邮箱
|
|
* @param name:first_name type:string require:1 desc:名字
|
|
* @param name:last_name type:string require:1 desc:名字
|
|
* @param name:address type:string require:1 desc:地址
|
|
* @param name:interests type:string require:0 desc:兴趣
|
|
* @param name:website type:string require:0 desc:编辑主页
|
|
* @param name:orcid type:string require:0 desc:orcid
|
|
* @param name:title type:string require:1 desc:标题
|
|
* @param name:intro type:string require:1 desc:简介
|
|
* @param name:abstract type:string require:1 desc:描述
|
|
* @param name:keywords type:string require:1 desc:关键字
|
|
* @param name:deadline type:int require:1 desc:截止日期
|
|
*
|
|
*/
|
|
public function addSpecial(){
|
|
$data = $this->request->post();
|
|
Db::startTrans();
|
|
//处理客座编辑主题信息
|
|
$special_insert['journal_id'] = $data['journal_id'];
|
|
$special_insert['title'] = $data['title'];
|
|
$special_insert['abstract'] = $data['abstract'];
|
|
$special_insert['intro'] = $data['intro'];
|
|
$special_insert['keywords'] = $data['keywords'];
|
|
$special_insert['deadline'] = $data['deadline'];
|
|
$special_insert['ctime'] = time();
|
|
$special_id = $this->journal_special_obj->insertGetId($special_insert);
|
|
//处理客座编辑
|
|
$editor_insert['journal_id'] = $data['journal_id'];
|
|
$editor_insert['email'] = $data['email'];
|
|
$editor_insert['first_name'] = $data['first_name'];
|
|
$editor_insert['last_name'] = $data['last_name'];
|
|
$editor_insert['address'] = $data['address'];
|
|
$editor_insert['interests'] = $data['interests'];
|
|
$editor_insert['website'] = $data['website'];
|
|
$editor_insert['orcid'] = $data['orcid'];
|
|
$editor_id = $this->journal_special_editor_obj->insertGetId($editor_insert);
|
|
//处理客座编辑关系信息
|
|
$to_insert['journal_special_editor_id'] = $editor_id;
|
|
$to_insert['journal_special_id'] = $special_id;
|
|
$to_insert['journal_id'] = $data['journal_id'];
|
|
$res = $this->journal_special_to_editor_obj->insert($to_insert);
|
|
if($special_id&&$editor_id&&$res){
|
|
Db::commit();
|
|
return jsonSuccess([]);
|
|
}else{
|
|
Db::rollback();
|
|
return jsonError('system error');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @title 客座期刊特邀编辑(添加)
|
|
* @description 客座期刊特邀编辑(添加)
|
|
* @author wangjinlei
|
|
* @url /api/Special/addEditor
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:期刊id
|
|
* @param name:journal_special_id type:int require:1 desc:客座期刊id
|
|
* @param name:email type:string require:1 desc:邮箱
|
|
* @param name:first_name type:string require:1 desc:名字
|
|
* @param name:last_name type:string require:1 desc:名字
|
|
* @param name:address type:string require:1 desc:地址
|
|
* @param name:interests type:string require:0 desc:兴趣
|
|
* @param name:website type:string require:0 desc:编辑主页
|
|
* @param name:orcid type:string require:0 desc:orcid
|
|
* @param name:specialIcon type:string require:1 desc:客座编辑头像
|
|
*
|
|
*/
|
|
public function addEditor(){
|
|
$data = $this->request->post();
|
|
$insert_editor['journal_id'] = $data['journal_id'];
|
|
$insert_editor['email'] = trim($data['email']);
|
|
$insert_editor['first_name'] = trim($data['first_name']);
|
|
$insert_editor['last_name'] = trim($data['last_name']);
|
|
$insert_editor['address'] = trim($data['address']);
|
|
$insert_editor['interests'] = trim($data['interests']);
|
|
$insert_editor['website'] = trim($data['website']);
|
|
$insert_editor['orcid'] = trim($data['orcid']);
|
|
$insert_editor['icon'] = trim($data['specialIcon']);
|
|
$uid = $this->journal_special_editor_obj->insertGetId($insert_editor);
|
|
$insert_to['journal_special_editor_id'] = $uid;
|
|
$insert_to['journal_special_id'] = $data['journal_special_id'];
|
|
$insert_to['journal_id'] = $data['journal_id'];
|
|
$insert_to['state'] = 2;
|
|
$this->journal_special_to_editor_obj->insert($insert_to);
|
|
return jsonSuccess([]);
|
|
}
|
|
|
|
/**
|
|
* @title 获取客座期刊
|
|
* @description 获取客座期刊
|
|
* @author wangjinlei
|
|
* @url /api/Special/getSpecials
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:期刊id
|
|
*
|
|
* @return specials:客座期刊列表array#
|
|
*/
|
|
public function getSpecials(){
|
|
$data = $this->request->post();
|
|
$list = $this->journal_special_obj->where('journal_id',$data['journal_id'])->where('state',2)->order('journal_special_id desc')->limit(4)->select();
|
|
$f = [];
|
|
//获取作者
|
|
foreach ($list as $k => $v){
|
|
if(strtotime($v['deadline'])<= time()){
|
|
continue;
|
|
}
|
|
$frag = '';
|
|
$caches = $this->journal_special_to_editor_obj
|
|
->field('j_journal_special_editor.*')
|
|
->join('j_journal_special_editor','j_journal_special_editor.journal_special_editor_id = j_journal_special_to_editor.journal_special_editor_id','LEFT')
|
|
->where('j_journal_special_to_editor.journal_special_id',$v['journal_special_id'])
|
|
->where('j_journal_special_to_editor.state',0)
|
|
->select();
|
|
foreach ($caches as $val){
|
|
$frag .= $frag == ''?$val['first_name'].' '.$val['last_name']:', '.$val['first_name'].' '.$val['last_name'];
|
|
}
|
|
$v['editor'] = $frag;
|
|
$f[] = $v;
|
|
}
|
|
$re['is_show'] = count($list)>0?'true':'false';
|
|
$re['specials'] = $f;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
|
|
/**
|
|
* @title 获取全部客座期刊
|
|
* @description 获取全部客座期刊
|
|
* @author wangjinlei
|
|
* @url /api/Special/getAllSpecials
|
|
* @method POST
|
|
*
|
|
* @return specials:客座期刊列表array#
|
|
*/
|
|
public function getAllSpecials(){
|
|
$list1 = $this->journal_special_obj
|
|
->field("j_journal.usx,j_journal.icon,j_journal.title journaltitle,j_journal_special.*")
|
|
->join("j_journal","j_journal.journal_id = j_journal_special.journal_id","left")
|
|
->where('j_journal_special.state',2)
|
|
->where("j_journal_special.journal_id",1)
|
|
->order('j_journal_special.journal_special_id desc')
|
|
->limit(1)
|
|
->select();
|
|
|
|
$list2 = $this->journal_special_obj
|
|
->field("j_journal.usx,j_journal.icon,j_journal.title journaltitle,j_journal_special.*")
|
|
->join("j_journal","j_journal.journal_id = j_journal_special.journal_id","left")
|
|
->where('j_journal_special.state',2)
|
|
->where("j_journal_special.journal_id",'<>',22)
|
|
->where("j_journal_special.journal_special_id","<>",$list1[0]['journal_special_id'])
|
|
->order('j_journal_special.journal_special_id desc')
|
|
->select();
|
|
$list = array_merge($list1,$list2);
|
|
$f = [];
|
|
//获取作者
|
|
foreach ($list as $k => $v){
|
|
if(strtotime($v['deadline'])< time()){
|
|
continue;
|
|
}
|
|
$frag = '';
|
|
$caches = $this->journal_special_to_editor_obj
|
|
->field('j_journal_special_editor.*')
|
|
->join('j_journal_special_editor','j_journal_special_editor.journal_special_editor_id = j_journal_special_to_editor.journal_special_editor_id','LEFT')
|
|
->where('j_journal_special_to_editor.journal_special_id',$v['journal_special_id'])
|
|
->where('j_journal_special_to_editor.state',0)
|
|
->select();
|
|
foreach ($caches as $val){
|
|
$frag .= $frag == ''?$val['first_name'].' '.$val['last_name']:', '.$val['first_name'].' '.$val['last_name'];
|
|
}
|
|
$v['editor'] = $frag;
|
|
$f[] = $v;
|
|
}
|
|
|
|
$re['specials'] = $f;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
|
|
/**
|
|
* @title 客座期刊(获取列表)
|
|
* @description 客座期刊(获取列表)
|
|
* @author wangjinlei
|
|
* @url /api/Special/getSpecialList
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:期刊id
|
|
* @param name:pageIndex type:int require:1 desc:当前页码数
|
|
* @param name:pageSize type:int require:1 desc:单页数据条数
|
|
*
|
|
* @return count:总数
|
|
* @return specials:客座期刊列表array#
|
|
*/
|
|
public function getSpecialList(){
|
|
$data = $this->request->post();
|
|
|
|
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
|
|
$list = $this->journal_special_obj
|
|
->where('journal_id',$data['journal_id'])
|
|
->where('state',2)
|
|
// ->order('journal_special_id desc')
|
|
->order('deadline desc')
|
|
->limit($limit_start,$data['pageSize'])
|
|
->select();
|
|
//获取作者
|
|
foreach ($list as $k => $v){
|
|
if(strtotime($v['deadline'])<= time()){
|
|
$cou = $this->article_obj->where('journal_special_id',$v['journal_special_id'])->where('state',0)->count();
|
|
if($cou<3){
|
|
continue;
|
|
}
|
|
}
|
|
$frag = '';
|
|
$caches = $this->journal_special_to_editor_obj
|
|
->field('j_journal_special_editor.*')
|
|
->join('j_journal_special_editor','j_journal_special_editor.journal_special_editor_id = j_journal_special_to_editor.journal_special_editor_id','LEFT')
|
|
->where('j_journal_special_to_editor.journal_special_id',$v['journal_special_id'])
|
|
->where('j_journal_special_to_editor.state',0)
|
|
->select();
|
|
foreach ($caches as $val){
|
|
$frag .= $frag == ''?$val['first_name'].' '.$val['last_name']:', '.$val['first_name'].' '.$val['last_name'];
|
|
}
|
|
$list[$k]['editor'] = $frag;
|
|
}
|
|
$count = $this->journal_special_obj->where('journal_id',$data['journal_id'])->where('state',2)->count();
|
|
|
|
$re['count'] = $count;
|
|
$re['specials'] = $list;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 客座期刊(获取客座期刊详情)
|
|
* @description 客座期刊(获取客座期刊详情)
|
|
* @author wangjinlei
|
|
* @url /api/Special/getSpecialDetail
|
|
* @method POST
|
|
*
|
|
* @param name:journal_special_id type:int require:1 desc:客座期刊id
|
|
*
|
|
* @return keywords:关键字#
|
|
* @return journal:期刊信息#
|
|
* @return special:客座期刊信息#
|
|
* @return editors:编辑array#
|
|
*/
|
|
public function getSpecialDetail(){
|
|
$data = $this->request->post();
|
|
$info = $this->journal_special_obj->where('journal_special_id',$data['journal_special_id'])->find();
|
|
$journal_info = $this->journal_obj->where('journal_id',$info['journal_id'])->find();
|
|
$editors = $this->journal_special_to_editor_obj->field('j_journal_special_editor.*')
|
|
->join('j_journal_special_editor','j_journal_special_to_editor.journal_special_editor_id = j_journal_special_editor.journal_special_editor_id','LEFT')
|
|
->where('j_journal_special_to_editor.journal_special_id',$data['journal_special_id'])
|
|
->where('j_journal_special_to_editor.state',0)
|
|
->select();
|
|
$re['keywords'] = explode(';', $info['keywords']);
|
|
$re['journal'] = $journal_info;
|
|
$re['special'] = $info;
|
|
$re['editors'] = $editors;
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
/**
|
|
* @title 客座期刊(获取客座期刊文章)
|
|
* @description 客座期刊(获取客座期刊文章)
|
|
* @author wangjinlei
|
|
* @url /api/Special/getSpecialArticles
|
|
* @method POST
|
|
*
|
|
* @param name:journal_special_id type:int require:1 desc:客座期刊id
|
|
*
|
|
* @return articles:文章列表array#
|
|
*/
|
|
public function getSpecialArticles(){
|
|
$data = $this->request->post();
|
|
$special_info = $this->journal_special_obj->where('journal_special_id',$data['journal_special_id'])->find();
|
|
$journal_info = $this->journal_obj->where('journal_id',$special_info['journal_id'])->find();
|
|
$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('j_article.journal_special_id',$data['journal_special_id'])
|
|
->where('j_article.state',0)
|
|
->select();
|
|
//获取作者
|
|
foreach ($list as $k => $v) {
|
|
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$v['journal_stage_id'])->find();
|
|
//组合cite信息
|
|
$no = $stage_info['stage_no'] == 0 ? ':' : '(' . $stage_info['stage_no'] . '):';
|
|
$cite = $v['abbr'] . '. ' . $v['title'] . '. <i>' . choiseJabbr($v['article_id'],$journal_info['jabbr']) . '</i>. ' . $stage_info['stage_year'] . ';' . $stage_info['stage_vol'] . $no . $v['npp'] . '. doi:' . $v['doi'];
|
|
$list[$k]['cite'] = $cite;
|
|
$list[$k]['authortitle'] = $this->getAuthor($v);
|
|
|
|
$list[$k]['mains'] = getArticleMains($v['article_id']);
|
|
}
|
|
$re['articles'] = $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) {
|
|
$ca = '';
|
|
if($v['orcid']!=''){
|
|
$ca = '<a href="https://orcid.org/'.$v['orcid'].'" target="_blank"><img src="img/or_id.png" alt="" style="width: 13px;margin-left: 3px;"></a>';
|
|
}
|
|
$frag = $frag == '' ? '' . $v['author_name'].$ca : $frag . ', ' . $v['author_name'].$ca;
|
|
// $frag = $frag == '' ? '' . $v['author_name'] : $frag . ', ' . $v['author_name'];
|
|
}
|
|
return $frag;
|
|
}
|
|
|
|
/**
|
|
* @title 客座期刊提示语(获取)
|
|
* @description 客座期刊提示语(获取)
|
|
* @author wangjinlei
|
|
* @url /api/Special/getSpecialAlert
|
|
* @method POST
|
|
*
|
|
* @param name:journal_id type:int require:1 desc:客座期刊id
|
|
*
|
|
* @return alertInfo:客座期刊提示语#
|
|
*/
|
|
public function getSpecialAlert(){
|
|
$data = $this->request->post();
|
|
$info = $this->journal_special_alert_obj->where('journal_id',$data['journal_id'])->find();
|
|
|
|
$re['alertInfo'] = $info;
|
|
|
|
return jsonSuccess($re);
|
|
}
|
|
|
|
|
|
/**
|
|
* 读取引用文件
|
|
*/
|
|
public function readCiteExcel(){
|
|
$path = ROOT_PATH.'public'.DS.'system'.DS;
|
|
$res = $this->readExcel($path.'savedrecs.xls');
|
|
foreach ($res as $k => $v){
|
|
if($k<6||$v['C']<1){
|
|
continue;
|
|
}
|
|
$doi = explode('/', $v['B']);
|
|
$article = '';
|
|
if(isset($doi[1])){
|
|
$article = $this->article_obj->where('doi','like','%'.$doi[1].'%')->find();
|
|
}else{
|
|
$article = $this->article_obj->where('title',$v['A'])->find();
|
|
}
|
|
$cache = $this->readExcel1($path.($k+1).'.xls');
|
|
foreach ($cache as $key => $val){
|
|
if($key == 0){
|
|
continue;
|
|
}
|
|
$insert['article_id'] = $article['article_id'];
|
|
$insert['journal_id'] = $article['journal_id'];
|
|
$insert['journal_name'] = $val['journal'];
|
|
$insert['article_name'] = $val['title'];
|
|
$day = $val['day']==''?'':$val['day'].' ';
|
|
$insert['date'] = $day.$val['year'];
|
|
$insert['ctime'] = time();
|
|
$this->article_cite_obj->insert($insert);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 读取excel数据
|
|
*/
|
|
private function readExcel1($path) {
|
|
$extension = substr($path, strrpos($path, '.') + 1);
|
|
vendor("PHPExcel.PHPExcel");
|
|
if ($extension == 'xlsx') {
|
|
$objReader = new \PHPExcel_Reader_Excel2007();
|
|
$objPHPExcel = $objReader->load($path);
|
|
} else if ($extension == 'xls') {
|
|
$objReader = new \PHPExcel_Reader_Excel5();
|
|
$objPHPExcel = $objReader->load($path);
|
|
}
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$highestRow = $sheet->getHighestRow();
|
|
$frag = [];
|
|
for ($i = 1; $i <= $highestRow; $i++) {
|
|
$cache['title'] = $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
|
|
$cache['journal'] = $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
|
|
$cache['year'] = $objPHPExcel->getActiveSheet()->getCell("AS".$i)->getValue();
|
|
$cache['day'] = $objPHPExcel->getActiveSheet()->getCell("AR".$i)->getValue();
|
|
$frag[] = $cache;
|
|
}
|
|
return $frag;
|
|
}
|
|
|
|
/**
|
|
* 读取excel数据
|
|
*/
|
|
private function readExcel($path) {
|
|
$extension = substr($path, strrpos($path, '.') + 1);
|
|
vendor("PHPExcel.PHPExcel");
|
|
if ($extension == 'xlsx') {
|
|
$objReader = new \PHPExcel_Reader_Excel2007();
|
|
$objPHPExcel = $objReader->load($path);
|
|
} else if ($extension == 'xls') {
|
|
$objReader = new \PHPExcel_Reader_Excel5();
|
|
$objPHPExcel = $objReader->load($path);
|
|
}
|
|
$sheet = $objPHPExcel->getSheet(0);
|
|
$highestRow = $sheet->getHighestRow();
|
|
$frag = [];
|
|
for ($i = 1; $i <= $highestRow; $i++) {
|
|
$cache['A'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
|
|
$cache['B'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
|
|
$cache['C'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
|
|
$frag[] = $cache;
|
|
}
|
|
return $frag;
|
|
}
|
|
|
|
|
|
/**
|
|
* @title 头像图片上传
|
|
* @description 头像图片上传
|
|
* @author wangjinlei
|
|
* @url /api/Special/up_icon_file
|
|
* @method POST
|
|
*
|
|
* @param name:name type:string require:1 default:specialIcon desc:文件域名称
|
|
*
|
|
* @return upurl:图片地址
|
|
*/
|
|
public function up_icon_file() {
|
|
$file = request()->file('specialIcon');
|
|
if ($file) {
|
|
$info = $file->move(ROOT_PATH . 'public' . DS . 'specialIcon');
|
|
if ($info) {
|
|
return json(['code' => 0, 'msg' => 'success', 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
|
|
} else {
|
|
return json(['code' => 1, 'msg' => $file->getError()]);
|
|
}
|
|
}
|
|
}
|
|
|
|
} |