This commit is contained in:
wangjinlei
2021-08-30 11:43:22 +08:00
parent 68de3a8fd6
commit 375b62ab9d
7 changed files with 453 additions and 17 deletions

View File

@@ -38,6 +38,7 @@ class Publish extends Controller{
protected $board_obj = '';
protected $board_group_obj = '';
protected $visit_log_obj = '';
protected $article_cite_obj = '';
public function __construct(\think\Request $request = null) {
parent::__construct($request);
@@ -62,6 +63,7 @@ class Publish extends Controller{
$this->board_obj = Db::name('board');
$this->board_group_obj = Db::name('board_group');
$this->visit_log_obj = Db::name('visit_log');
$this->article_cite_obj = Db::name('article_cite');
}
/**
@@ -257,6 +259,7 @@ class Publish extends Controller{
*/
public function addVisitNum(){
$data = $this->request->post();
// $data['type'] = 1;
$data['is_detail'] = isset($data['is_detail'])?$data['is_detail']:0;
$up_id = 0;
if($data['type']=='de'){//数据库访问
@@ -280,7 +283,7 @@ class Publish extends Controller{
}
}
else{//期刊访问
$res = $this->visit_log_obj->where('type',$data['type'])->where('stime',date('Ym'))->find();
$res = $this->visit_log_obj->where('type',$data['type'])->where('is_detail',0)->where('stime',date('Ym'))->find();
if($res==null){
$insert['type']= $data['type'];
$insert['stime'] = date('Ym');
@@ -524,4 +527,222 @@ class Publish extends Controller{
}
return $arr;
}
/**
* @title 获取全部期刊
* @description 获取全部期刊
* @author wangjinlei
* @url /super/Publish/getAllJournals
* @method POST
*
* @return journals:期刊列表#
*/
public function getAllJournals(){
$list = $this->journal_obj->where('state',0)->select();
$re['journals'] = $list;
return jsonSuccess($re);
}
/**
* @title 获取引用数据统计
* @description 获取引用数据统计
* @author wangjinlei
* @url /super/Publish/getCiteDate
* @method POST
*
* @param name:journal_id type:int require:1 desc:期刊id
*
*/
public function getCiteDate(){
$data = $this->request->post();
// $data['journal_id'] = 1;
$list = $this->article_cite_obj->where('journal_id',$data['journal_id'])->select();
$frag = [];
$frag['country'] = [];
$frag['topic'] = [];
$frag['time'] = [];
$frag['type'] = [];
$frag['articles'] = [];
foreach ($list as $v){
$cache_article = $this->article_obj->where('article_id',$v['article_id'])->find();
//判断国家
$cou_res = $this->checkCountry($cache_article);
if($cou_res=='n'){
isset($frag['country']['n'])?$frag['country']['n']++:$frag['country']['n']=1;
}else{
isset($frag['country']['w'])?$frag['country']['w']++:$frag['country']['w']=1;
}
//判断领域
$topic_res = $this->checkTopic($cache_article);
foreach ($topic_res as $key=>$val){
if(isset($frag['topic'][$val['title']])){
$frag['topic'][$val['title']] += 1;
}else{
$frag['topic'][$val['title']] = 1;
}
}
//关键词
$gjz = explode(',', $cache_article['keywords']);
foreach ($gjz as $key => $val){
if(isset($frag['gjz'][$val])){
$frag['gjz'][$val] +=1;
}else{
$frag['gjz'][$val] = 1;
}
}
//时间
$ca_time = $this->journal_stage_obj->where('journal_stage_id',$cache_article['journal_stage_id'])->find();
if(isset($frag['time'][$ca_time['stage_year']])){
$frag['time'][$ca_time['stage_year']] += 1;
}else{
$frag['time'][$ca_time['stage_year']] = 1;
}
//文章类型
if(isset($frag['type'][$cache_article['type']])){
$frag['type'][$cache_article['type']] += 1;
}else{
$frag['type'][$cache_article['type']] = 1;
}
//组成文章数组构建
if(isset($frag['articles'][$cache_article['article_id']])){
$frag['articles'][$cache_article['article_id']] += 1;
}else{
$frag['articles'][$cache_article['article_id']] =1;
}
}
//阅读和下载量
$articles = $this->article_obj->field('j_article.*,(abs_num+pdf_num+html_num) num')
->where('journal_id',$data['journal_id'])
->where('state',0)
->order('num desc')->select();
foreach ($frag['articles'] as $k => $v){
$art = $this->article_obj->where('article_id',$k)->find();
$cnum = $v;
$frag['articles'][$k] = $art;
$frag['articles'][$k]['cite_num'] = $cnum;
//阅读和下载数
foreach ($articles as $key => $val){
if($val['article_id']==$k){
$frag['articles'][$k]['read_pm'] = $key+1;//阅读量排名
$frag['articles'][$k]['read_num'] = $val["num"];//阅读数
}
}
}
$frag['read'] = $this->sort_art($frag['articles']);
//标题吸引力
$bty_articles = $this->article_obj->where('journal_id',$data['journal_id'])->where('state',0)->orderRaw('LENGTH(title) desc')->limit(10)->select();
foreach ($bty_articles as $k => $v){
foreach ($frag['articles'] as $key => $val){
if($v['article_id'] == $val['article_id']){
$bty_articles[$k]['cite_num'] = $val['cite_num'];
break;
}else{
$bty_articles[$k]['cite_num'] = 0;
}
}
}
$frag['zs_title'] = $bty_articles;//标题字数
$btzf_articles = $this->article_obj
->where('journal_id',$data['journal_id'])
->where('state',0)
->where('title',['like','%?%'],['like','%!%'],'or')
->select();
foreach ($btzf_articles as $k => $v){
foreach ($frag['articles'] as $key => $val){
if($v['article_id'] == $val['article_id']){
$btzf_articles[$k]['cite_num'] = $val['cite_num'];
break;
}else{
$btzf_articles[$k]['cite_num'] = 0;
}
}
}
$frag['zf_title'] = $btzf_articles;
//摘要吸引力
$ab_articles = $this->article_obj->where('journal_id',$data['journal_id'])->where('state',0)->orderRaw('LENGTH(abstract) desc')->limit(10)->select();
foreach ($ab_articles as $k => $v){
foreach ($frag['articles'] as $key => $val){
if($v['article_id'] == $key){
$ab_articles[$k]['cite_num'] = $val['cite_num'];
break;
}else{
$ab_articles[$k]['cite_num'] = 0;
}
}
}
$frag['zs_abstract'] = $ab_articles;//摘要字数
$abzf_articles = $this->article_obj
->where('journal_id',$data['journal_id'])
->where('state',0)
->where('abstract',['like','%?%'],['like','%!%'],'or')
->select();
foreach ($abzf_articles as $k => $v){
foreach ($frag['articles'] as $key => $val){
if($v['article_id'] == $key){
$abzf_articles[$k]['cite_num'] = $val['cite_num'];
break;
}else{
$abzf_articles[$k]['cite_num'] = 0;
}
}
}
$frag['zf_abstract'] = $abzf_articles;
return jsonSuccess($frag);
}
private function sort_art($articles){
$arr = array_values($articles);
for($i = 0;$i<count($arr);$i++){
for($j= $i;$j<count($arr)-1;$j++){
if($arr[$i]['read_num']<$arr[$j+1]['read_num']){
$data = $arr[$i];
$arr[$i] = $arr[$j+1];
$arr[$j+1] = $data;
}
}
}
return $arr;
}
private function checkTopic($article){
$tops = $this->article_to_topic_obj->where('article_id',$article['article_id'])->where('state',0)->select();
$frag = [];
foreach ($tops as $v){
$ca = $this->journal_topic_obj->where('journal_topic_id',$v['topic_id'])->find();
if($ca['level']==3){
$cac = $this->journal_topic_obj->where('journal_topic_id',$ca['parent_id'])->find();
if(isset($frag[$cac['journal_topic_id']])){
$frag[$cac['journal_topic_id']]['num'] += 1;
}else{
$frag[$cac['journal_topic_id']] = $cac;
$frag[$cac['journal_topic_id']]['num'] = 1;
}
}else{
if(isset($frag[$ca['journal_topic_id']])){
$frag[$ca['journal_topic_id']]['num'] += 1;
}else{
$frag[$ca['journal_topic_id']] = $ca;
$frag[$ca['journal_topic_id']]['num'] = 1;
}
}
}
return $frag;
}
private function checkCountry($article){
$res = $this->article_author_obj->where('article_id',$article['article_id'])->where('state',0)->where('author_country','<>','China')->find();
return $res==null?'n':'w';
}
}