332 lines
13 KiB
PHP
332 lines
13 KiB
PHP
<?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);
|
||
}
|
||
|
||
|
||
|
||
public function getArticleMainsForJournal(){
|
||
$data = $this->request->post();
|
||
$rule = new Validate([
|
||
"article_id"=>"require"
|
||
]);
|
||
if(!$rule->check($data)){
|
||
return jsonError($rule->getError());
|
||
}
|
||
$production_article_info = $this->production_article_obj->where("w_article_id",$data['article_id'])->find();
|
||
if(!$production_article_info){
|
||
return jsonError("production error");
|
||
}
|
||
$mains = $this->article_main_obj->where("article_id",$production_article_info['article_id'])->whereIn("state",[0,2])->order("sort asc")->select();
|
||
if(!$mains){
|
||
$this->addArticleMainEx($data['article_id']);
|
||
}
|
||
$mains = $this->article_main_obj->where("article_id",$data['article_id'])->whereIn("state",[0,2])->order("sort asc")->select();
|
||
if(!$mains){
|
||
return jsonError("error");
|
||
}
|
||
foreach ($mains as $k=>$main) {
|
||
if($main['type']==0){
|
||
continue;
|
||
}elseif($main['type']==1){
|
||
$c_d = $this->article_main_image_obj->where("ami_id",$main['ami_id'])->find();
|
||
$mains[$k]['image'] = $c_d;
|
||
}else{
|
||
$c_d_t = $this->article_main_table_obj->where("amt_id",$main['amt_id'])->find();
|
||
$mains[$k]['table'] = $c_d_t;
|
||
}
|
||
}
|
||
$re['list'] = $mains;
|
||
|
||
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']>=4523||$article_info['article_id']==4094||$article_info['article_id']==4369))
|
||
// ||($article_info['journal_id']==2&&$article_info['article_id']>=4361)
|
||
// ||($article_info['journal_id']==9&&$p_info['journal_stage_id']>=545)
|
||
// ||$article_info['journal_id']==23||$article_info['journal_id']==4||$article_info['journal_id']==8||$article_info['journal_id']==11
|
||
// ||$article_info['journal_id']==12||$article_info['journal_id']==13||$article_info['journal_id']==14||$article_info['journal_id']==16
|
||
// ||$article_info['journal_id']==17||$article_info['journal_id']==18||$article_info['journal_id']==19||$article_info['journal_id']==24||$article_info['journal_id']==25
|
||
// ){
|
||
//添加初审问卷
|
||
$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
|
||
||$article_info['journal_id']==2
|
||
||$article_info['journal_id']==9
|
||
)){
|
||
$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);
|
||
}
|
||
|
||
}
|
||
?>
|