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(); //数据排序调整 chengxiaoling 20250627 start // $boards = $this->getBoardsForJournal($journal_info['journal_id']); $boards = $this->getBoardListsForJournal($journal_info['journal_id']); //数据排序调整 chengxiaoling 20250627 end //获取委员会和编辑信息 $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 getArticleMainsByPID(){ $data = $this->request->post(); $rule = new Validate([ "p_article_id"=>"require" ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where("p_article_id",$data['p_article_id'])->find(); $mains = getArticleMains($p_info["article_id"]); $list = $this->production_article_refer_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->order('index')->select(); return jsonSuccess(['mains'=>$mains,"refers"=>$list]); } 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")->find(); if(!$mains){ $this->addArticleMainEx($data['article_id']); } $mains = $this->article_main_obj->where("article_id",$production_article_info['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); } public function checkArticleMain(){ $data = $this->request->post(); $rule = new Validate([ "article_id"=>"require" ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $product = $this->production_article_obj->where("w_article_id",$data['article_id'])->find(); if(!$product){ return jsonError("system error,no product for article"); } $check = $this->article_main_obj->where("article_id",$product['article_id'])->find(); $re["check"] = $check?1:0; 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 // ){ if( $article_info['journal_id']==3&&$p_info['journal_stage_id']<526 ){ $reviewers[$k]['question'] = null; $reviewers[$k]['re_question'] = null; }else{ //添加初审问卷 $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; // } } //查询终审信息 chengxiaoling 20250825 start $iArticleId = empty($article_info['article_id']) ? 0 : $article_info['article_id']; $aWhere = ['state' => ['between',[1,3]],'article_id' => $iArticleId]; $aFinal = Db::name('article_reviewer_final')->field('state,suggest_for_editor,suggest_for_author,invited_time,review_time,is_anonymous,reviewer_id')->where($aWhere)->select(); if(!empty($aFinal)){ $aUserId = array_unique(array_column($aFinal, 'reviewer_id')); $aWhere = ['user_id' => ['in',$aUserId],'state' => 0]; $aUser = Db::name('user')->where($aWhere)->column('user_id,realname'); foreach ($aFinal as $key => $value) { $aFinal[$key]['realname'] = empty($aUser[$value['reviewer_id']]) ? '' : $aUser[$value['reviewer_id']]; } } //查询终审信息 chengxiaoling 20250825 end $begin['type'] = 0; $begin['time'] = $article_info['ctime']; $frag[] = $begin; $reviewer_has = false; $reciv = false; $bFinal = 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&&count($reviewers)>0&& (($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 ||$article_info['journal_id']==10 )){ $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; } } if($v['state_to']==8 &&!$bFinal && $reviewer_has){ $bFinal = true; if(!empty($aFinal)){ $frag[] = [ "type"=>$v['state_to'], "response" => $aFinal, "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); } /**获取期刊编辑信息 * @return void */ private function getBoardListsForJournal($journal_id, $aar = false) { $ca_board = []; $boards = $this->board_to_journal_obj ->field("t_board_to_journal.btj_id,t_board_to_journal.user_id,t_board_to_journal.board_group_id,t_board_to_journal.journal_id,t_board_to_journal.type,t_board_to_journal.research_areas,t_board_to_journal.realname as board_realname,t_board_to_journal.email as board_email,t_board_to_journal.website as board_website,t_board_to_journal.affiliation as board_affiliation,t_board_to_journal.icon as board_icon,t_board_to_journal.technical as board_technical,t_board_to_journal.remark,t_board_to_journal.state,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_id) ->where('t_board_to_journal.state', 0) ->order("t_board_group.board_group_id asc,t_user.realname") ->select(); foreach ($boards as $val) { if ($aar) { $article1 = $this->article_obj->where('user_id', $val['user_id'])->where('journal_id', $val['journal_id'])->where('state', 5)->where('ctime', ">", strtotime("-1 year"))->select(); $article11 = $this->article_obj->where('user_id', $val['user_id'])->where('journal_id', $val['journal_id'])->where('ctime', ">", strtotime("-1 year"))->select(); $ids = $this->article_author_obj->where('email', $val['email'])->column("article_id"); $article2 = $this->article_obj->where('state', 5)->where('journal_id', $val['journal_id'])->where('article_id', "in", $ids)->select(); $article22 = $this->article_obj->where('journal_id', $val['journal_id'])->where('article_id', "in", $ids)->select(); $articles = my_array_merge($article1, $article2); $articles_all = my_array_merge($article11, $article22); $reviewes = $this->article_reviewer_obj->join("t_article", "t_article.article_id = t_article_reviewer.article_id", "left")->where('t_article_reviewer.reviewer_id', $val['user_id'])->where('t_article.journal_id', $journal_id)->where('t_article_reviewer.ctime', ">", strtotime("-1 year"))->where('t_article_reviewer.state', "in", [1, 2, 3])->select(); $val['articles'] = $articles; $val['articles_all'] = $articles_all; $val['reviewes'] = $reviewes; } //编委数据隔离加默认数据 chengxiaoling 20251022 start $val['realname'] = empty($val['board_realname']) ? $val['realname'] : $val['board_realname']; $val['email'] = empty($val['board_email']) ? $val['email'] : $val['board_email']; $val['technical'] = empty($val['board_technical']) ? $val['technical'] : $val['board_technical']; $val['website'] = empty($val['board_website']) ? $val['website'] : $val['board_website']; $val['icon'] = empty($val['board_icon']) ? $val['icon'] : $val['board_icon']; $val['company'] = empty($val['board_affiliation']) ? $val['company'] : $val['board_affiliation']; //编委数据隔离加默认数据 chengxiaoling 20251022 end if ($val['type'] == 0) {//主编 $ca_board['main'][] = $val; } elseif ($val['type'] == 1) {//副主编 $ca_board['remain'][] = $val; } else {//编委会成员 if ($val['board_group_id'] == 0) { $ca_board['member']['nogroup'][] = $val; } else { $ca_board['member'][$val['group_name']][] = $val; } } } return $ca_board; } } ?>