Files
tougao/application/api/controller/Web.php
wangjinlei 5607aad50f 1
2024-07-12 16:26:22 +08:00

285 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\api\controller;
use app\api\controller\Base;
use think\Db;
use think\Queue;
use think\Url;
use think\Validate;
class Web extends Base
{
private $Base_url = "http://journalapi.tmrjournals.com/public/index.php/";
public function __construct(\think\Request $request = null)
{
parent::__construct($request);
}
public function getStages(){
$data = $this->request->post();
$rule = new Validate([
"journal_id" => 'require'
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$journal_info = $this->journal_obj->where('journal_id',$data['journal_id'])->find();
//发送请求到官网
$url = $this->Base_url."master/Submision/getJournalStages";
$program['issn'] = $journal_info['issn'];
$res = object_to_array(json_decode(myPost($url,$program)));
$list = $res['data']['stages'];
$re['stages'] = $list;
return jsonSuccess($re);
}
/**获取分期文章列表
* @return \think\response\Json|void
*/
public function getArticlesByStage(){
$data = $this->request->post();
$rule = new Validate([
"journal_stage_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$url = $this->Base_url."master/Submision/getArticlesByStage";
$program['journal_stage_id'] = $data['journal_stage_id'];
$res = object_to_array(json_decode(myPost($url,$program)));
$list = $res['data']['articles'];
$re['articles'] = $list;
return jsonSuccess($re);
}
/**获取编委国际化
* @return void
*/
public function getBWGJHByIssn(){
$data = $this->request->post();
$rule = new Validate([
"issn"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$journal_info = $this->journal_obj->where('issn',$data['issn'])->find();
$list = $this->board_to_journal_obj
->field("t_board_to_journal.*,t_board_group.group_name,t_user.account,t_user.email,t_user.realname,t_user.icon,t_user.google_index,t_user.google_time,t_user.wos_index,t_user.wos_time,t_user_reviewer_info.*")
->join("t_board_group","t_board_group.board_group_id = t_board_to_journal.board_group_id","left")
->join("t_user","t_user.user_id = t_board_to_journal.user_id","left")
->join("t_user_reviewer_info","t_user_reviewer_info.reviewer_id=t_board_to_journal.user_id","left")
->where('t_board_to_journal.journal_id',$journal_info['journal_id'])
->where('t_board_to_journal.state',0)
->select();
$frag = [];
foreach ($list as $v) {
if (isset($frag[$v['country']])) {
$frag[$v['country']]++;
} else {
$frag[$v['country']] = 1;
}
}
$re['count'] = count($list);
$re['country'] = $frag;
return jsonSuccess($re);
}
/**
* @return void
*/
public function getBoardsByIssn(){
$data = $this->request->post();
$rule = new Validate([
"issn"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$journal_info = $this->journal_obj->where('issn',$data['issn'])->find();
$boards = $this->getBoardsForJournal($journal_info['journal_id']);
//获取委员会和编辑信息
$committees = $this->committee_to_journal_obj
->field("t_committee_to_journal.*,t_user.account,t_user.email,t_user.realname,t_user.icon,t_user.google_index,t_user.google_time,t_user.wos_index,t_user.wos_time,t_user_reviewer_info.*")
->join("t_user","t_user.user_id = t_committee_to_journal.user_id","left")
->join("t_user_reviewer_info","t_user_reviewer_info.reviewer_id = t_committee_to_journal.user_id","left")
->where('t_committee_to_journal.journal_id',$journal_info['journal_id'])
->where('t_committee_to_journal.state',0)
->select();
$editors = $this->editor_to_journal_obj
->field("t_editor_to_journal.*,t_user.account,t_user.email,t_user.realname,t_user.icon,t_user.google_index,t_user.google_time,t_user.wos_index,t_user.wos_time,t_user_reviewer_info.*")
->join("t_user","t_user.user_id = t_editor_to_journal.user_id","left")
->join("t_user_reviewer_info","t_user_reviewer_info.reviewer_id = t_editor_to_journal.user_id","left")
->where('t_editor_to_journal.journal_id',$journal_info['journal_id'])
->where('t_editor_to_journal.state',0)
->select();
$re['editors'] = $editors;
$re['committees'] = $committees;
$re['boards'] = $boards;
return jsonSuccess($re);
}
public function getJournalEthics(){
$data = $this->request->post();
$rule = new Validate([
"issn"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$info = $this->journal_obj->where("issn",$data['issn'])->find();
$re['ethics'] = $info['ethics'];
return jsonSuccess($re);
}
public function getRefers(){
$data = $this->request->post();
$rule = new Validate([
"w_article_id"=>"require",
"doi"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$production_info = $this->production_article_obj->where('w_article_id',$data['w_article_id'])->find();
if (!$production_info){//一次验证如果w_article_id获取失败
$production_info = $this->production_article_obj->where('doi',$data['doi'])->find();
}
if(!$production_info){//如果两次获取都失败
$refers = [];
return jsonSuccess(['refer'=>$refers]);
}
$list = $this->production_article_refer_obj->where('p_article_id',$production_info['p_article_id'])->where('state',0)->order('index')->select();
$re['refers'] = $list;
return jsonSuccess($re);
}
/**获取文章流程通过doi
* @return void
*/
public function getStackByDoi(){
$data = $this->request->post();
$rule = new Validate([
"doi"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$r = explode("/",$data['doi']);
$p_info = $this->production_article_obj->where('doi',$r[1])->where("state",2)->find();
if(!$p_info){
return jsonError("production error");
}
$article_info = $this->article_obj->where('article_id',$p_info['article_id'])->find();
//只显示2023年5。1之后的文章流程
// if($article_info['rtime']<1682870400){
// return jsonError("time error");
// }
$msgs = $this->article_msg_obj->where('article_id',$article_info['article_id'])->select();
$reviewers = $this->article_reviewer_obj
->field("t_article_reviewer.*,t_article_reviewer_question.ctime qtime,t_article_reviewer_question.rated,t_article_reviewer_question.is_anonymous")
->join("t_article_reviewer_question","t_article_reviewer_question.art_rev_id = t_article_reviewer.art_rev_id","left")
->where('t_article_reviewer.article_id',$p_info['article_id'])
->where('t_article_reviewer.state','in',[1,2,3])
->select();
foreach ($reviewers as $k => $v){
if($v['is_anonymous']==0){
$u_info = $this->user_obj->where('user_id',$v['reviewer_id'])->find();
$reviewers[$k]['reviewer_name'] = $u_info['realname'];
}else{
$reviewers[$k]['reviewer_name'] = "anonymous";
}
if(($article_info['journal_id']==1&&$p_info['journal_stage_id']>=453)
||($article_info['journal_id']==2&&$p_info['journal_stage_id']>=4747)
||($article_info['journal_id']==6&&$p_info['journal_stage_id']>=515)
||($article_info['journal_id']==15&&($article_info['article_id']>=4465||$article_info['article_id']==4349))
||($article_info['journal_id']==10&&$p_info['journal_stage_id']>=534)
||($article_info['journal_id']==3&&$article_info['article_id']>=4552)
||($article_info['journal_id']==2&&$article_info['article_id']>=4361)
||$article_info['journal_id']==23){
//添加初审问卷
$reviewers[$k]['question'] = $this->article_reviewer_question_obj->where('art_rev_id',$v['art_rev_id'])->find();
//添加复审问卷
$reviewers[$k]['re_question']=$this->article_reviewer_repeat_obj->where('art_rev_id',$v['art_rev_id'])->select();
}else {
$reviewers[$k]['question'] = null;
$reviewers[$k]['re_question'] = null;
}
}
$begin['type'] = 0;
$begin['time'] = $article_info['ctime'];
$frag[] = $begin;
$reviewer_has = false;
$reciv = false;
foreach ($msgs as $v){
if($v['state_to']==2&&!$reviewer_has){
$reviewer_has = true;
$frag[] = [
"type"=>$v['state_to'],
"reviewers"=>$reviewers,
"time"=>$v['ctime']
];
continue;
}
if($v['state_to']==4&&!$reciv&&$reviewer_has&&(($article_info['journal_id']==1&&$p_info['journal_stage_id']>=453)||$article_info['journal_id']==23)){
$r_files = $this->article_response_to_reviewer_obj->where('article_id',$article_info['article_id'])->select();
$reciv=true;
if($r_files){
$frag[] = [
"type"=>$v['state_to'],
"response" => $r_files,
"time"=>$v['ctime']
];
continue;
}
}
$frag[] = [
"type"=>$v['state_to'],
"time"=>$v['ctime']
];
}
//如果没有审稿状态,添加
if(!$reviewer_has&&count($reviewers)>0){
$frag[] = [
"type"=>2,
"reviewers"=>$reviewers,
"time"=>$reviewers[0]['ctime']
];
}
//没有接收。添加
//如果没有proof增加
if($p_info['proof_stime']>0){
$frag[] = [
"type"=>7,
"time"=>$p_info['proof_stime']
];
}
//没有online添加
//冒泡排序法
for ($i = 0; $i < count($frag) -1; $i++) {//循环对比的轮数
for ($j = 0; $j < count($frag) - $i - 1; $j++) {//当前轮相邻元素循环对比
if ($frag[$j]["time"] > $frag[$j + 1]["time"]) {//如果前边的大于后边的
$tmp = $frag[$j];//交换数据
$frag[$j] = $frag[$j + 1];
$frag[$j + 1] = $tmp;
}
}
}
$re['msgs'] = $frag;
return jsonSuccess($re);
}
}
?>