user_obj = Db::name('user'); $this->user_act_obj = Db::name('user_act'); $this->article_obj = Db::name('article'); $this->journal_obj = Db::name('journal'); $this->user_log_obj = Db::name('user_log'); $this->user_reviewer_info_obj = Db::name("user_reviewer_info"); $this->reviewer_major_obj = Db::name('reviewer_major'); $this->reviewer_to_journal_obj = Db::name('reviewer_to_journal'); $this->article_reviewer_question_obj = Db::name('article_reviewer_question'); $this->article_msg_obj = Db::name('article_msg'); $this->article_file_obj = Db::name('article_file'); $this->article_reviewer_obj = Db::name('article_reviewer'); $this->article_author_obj = Db::name('article_author'); $this->article_transfer_obj = Db::name('article_transfer'); $this->chief_to_journal_obj = Db::name('chief_to_journal'); $this->login_auto_obj = Db::name('login_auto'); $this->major_obj = Db::name("major"); $this->major_to_journal_obj = Db::name('major_to_journal'); $this->reviewer_from_author_obj = Db::name("reviewer_from_author"); $this->article_dialog_obj = Db::name('article_dialog'); $this->article_proposal_obj = Db::name('article_proposal'); $this->user_black_obj = Db::name('user_black'); $this->user_reviewer_recommend_obj = Db::name('user_reviewer_recommend'); $this->ts_obj = Db::name('ts'); $this->ts_refer_obj = Db::name('ts_refer'); $this->ts_frag_obj = Db::name('ts_frag'); $this->online_obj = Db::name('online'); $this->production_article_obj = Db::name('production_article'); $this->production_article_author_obj = Db::name('production_article_author'); $this->production_article_organ_obj = Db::name('production_article_organ'); $this->production_article_refer_obj = Db::name('production_article_refer'); $this->production_article_author_to_organ_obj = Db::name('production_article_author_to_organ'); $this->production_article_frag_obj = Db::name('production_article_frag'); } /** * 添加生产实例 */ public function addProduction() { $data = $this->request->post(); $rule = new Validate([ 'article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } // $data['article_id'] = 1144; $check = $this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->find(); if ($check) { return jsonError('Instance already exists'); } $article_info = $this->article_obj->where('article_id', $data['article_id'])->find(); $files = $this->article_file_obj ->where('article_id', $article_info['article_id']) ->where('type_name', 'manuscirpt') ->order('ctime desc') ->limit(1) ->select(); if (count($files) == 0) { return jsonError('No Manuscript'); } $url = "http://ts.tmrjournals.com/api/typeset/webReaddoc"; $program['fileRoute'] = "https://submission.tmrjournals.com/public/" . $files[0]['file_url']; $res = object_to_array(json_decode(myPost($url, $program))); $file_runs = $res['data']; //整理信息 $frag = []; $aa = []; $frag['title'] = $article_info['title']; $start_refer = false; foreach ($file_runs as $k => $v) { if ($start_refer && $v != '') { if (strlen($v) > 500) { $start_refer = false; $frag['main'][] = $v; continue; } $frag['references'][] = $v; continue; } $g_val = trim(preg_replace('/\<.*?\>/', '', $v)); $aa[] = $g_val; if ((strpos(strtolower(trim($g_val)), "keyword") == 0 || strpos(strtolower(trim($g_val)), "keyword") == 1) && !isset($frag['keywords'])) { $frag['keywords'] = $v; continue; } if (strtolower($g_val) == 'reference:' || strtolower($g_val) == 'references:' || strtolower($g_val) == 'references' || strtolower($g_val) == 'reference') { $start_refer = true; continue; } $frag['main'][] = $v; } $insert['main'] = isset($frag['main']) ? json_encode($frag['main']) : ''; $insert['article_id'] = $data['article_id']; $insert['journal_id'] = $article_info['journal_id']; $insert['ctime'] = time(); $this->production_article_obj->insert($insert); return jsonSuccess([]); } /** * 删除生产实例 */ public function delProduction() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $this->production_article_obj->where('p_article_id', $data['p_article_id'])->update(['state' => 1]); return jsonSuccess([]); } public function mytest(){ $p_info = $this->production_article_obj->where('p_article_id',10)->find(); dump(json_decode($p_info['main'])); } /** * 编辑生产实例 */ public function editProduction() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number', 'journal_stage_id' => 'require', 'title' => 'require', 'type' => 'require', 'acknowledgment' => 'require', 'keywords' => 'require', 'author_contribution'=>'require', 'abbr' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find(); $update['title'] = trim($data['title']); $update['journal_stage_id'] = $data['journal_stage_id']; $update['type'] = trim($data['type']); $update['icon'] = isset($data['icon'])?trim($data['icon']):''; $update['tradition_tag'] = isset($data['tradition_tag'])?trim($data['tradition_tag']):''; $update['tradition'] = isset($data['tradition'])?trim($data['tradition']):''; $update['author_contribution'] = trim($data['author_contribution']); $update['mhoo'] = isset($data['mhoo']) ? trim($data['mhoo']) : ''; $update['ltai'] = isset($data['ltai']) ? trim($data['ltai']) : ''; // $update['abstract'] = trim($data['abstract']); $update['keywords'] = trim($data['keywords']); $update['abbreviation'] = isset($data['abbreviation'])?trim($data['abbreviation']):''; $update['acknowledgment'] = trim($data['acknowledgment']); $update['abbr'] = trim($data['abbr']); // $update['pub_date'] = trim($data['pub_date']); $update['npp'] = isset($data['npp'])?$data['npp']:''; //生成doi号 // $doi = ''; // if ($p_info['doi'] == '') { // $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail'; // $cs['journal_stage_id'] = $data['journal_stage_id']; // $list = object_to_array(json_decode(myPost($url, $cs))); // $re = $list['data']['stage']; // $doi = $this->createdoi($re['stage_year'], $re['stage_vol'], $journal_info['abbr']); // }else{ // $doi = $p_info['doi']; // } // $update['doi'] = $doi; $this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($update); return jsonSuccess($update); } /** * 获取文章排版结果列表 */ public function getArticleFrags(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_frag_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select(); $re['frags'] = $list; return jsonSuccess($re); } /** * 编辑文章主要内容 */ public function editMainContent(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number', 'main'=>'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $update['main'] = $data['main']; $this->production_article_obj->where('p_article_id',$data['p_article_id'])->update($update); return jsonSuccess([]); } private function createdoi($year, $vol, $abbr) { $frag = ''; $doi = $abbr . $year . $vol . rand(1000, 9999); $frag = $doi; $check = $this->production_article_obj->where('doi', $doi)->find(); if ($check) { $frag = $this->createdoi($year, $vol, $abbr); } return $frag; } /** * 获取引用文献列表 */ public function getReferList(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_refer_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select(); $re['refers'] = $list; return jsonSuccess($re); } /** * 修改参考文献的最终结果 */ public function editReferFrag() { $data = $this->request->post(); $rule = new Validate([ 'p_refer_id' => 'require', 'refer_frag' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $update['refer_frag'] = trim($data['refer_frag']); $updata['cs'] = 1; $this->production_article_refer_obj->where('p_refer_id',$data['p_refer_id'])->update($updata); return jsonSuccess([]); } /** * 获取生产实例列表 */ public function getProductionList() { $data = $this->request->post(); $rule = new Validate([ 'editor_id' => 'require|number', 'journal_id' => 'require', 'pageIndex' => 'require', 'pageSize' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $journalids = []; if ($data['journal_id'] == 0) { $journalids = $this->journal_obj->where('editor_id', $data['editor_id'])->column('journal_id'); } $limit_start = ($data['pageIndex'] - 1) * $data['pageSize']; $list = $this->production_article_obj ->field('t_production_article.*,t_article.accept_sn') ->join('t_article','t_article.article_id = t_production_article.article_id','left') ->where('t_production_article.journal_id', 'in', $journalids) ->where('t_production_article.state', 0) ->limit($limit_start, $data['pageSize']) ->select(); $count = $this->production_article_obj->where('journal_id', 'in', $journalids)->where('state', 0)->count(); $re['productions'] = $list; $re['count'] = $count; return jsonSuccess($re); } /** * 编辑文章信息在排版之后 */ public function editArticleLast(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number', 'abstract' => 'require', 'doi' => 'require', 'pub_date' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $updata['abstract'] = trim($data['abstract']); $updata['doi'] = $data['doi']; $updata['pub_date'] = $data['pub_date']; $this->production_article_obj->where('p_article_id',$data['p_article_id'])->update($updata); return jsonSuccess([]); } /** * 推送文章到官网系统 */ public function pushArticleToSystem(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id'=>'require' ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } // $data['p_article_id'] = 7; $p_info = $this->production_article_obj->where('p_article_id',$data['p_article_id'])->find(); if($p_info['state']!=0){ return jsonError("Non repeatable submission"); } if($p_info['proof_state']!=2){ return jsonError('Warning: It is a violation to publish your article online without completing PROOF. The ONLINE step will only continue if you have completed the PROOF step.'); } $article_info = $this->article_obj->where('article_id',$p_info['article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find(); $authors = $this->production_article_author_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select(); foreach($authors as $k => $v){ $cache = $this->production_article_author_to_organ_obj ->field('t_production_article_organ.organ_name') ->join('t_production_article_organ','t_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id','left') ->where('t_production_article_author_to_organ.p_article_author_id',$v['p_article_author_id']) ->where('t_production_article_author_to_organ.state',0) ->select(); $authors[$k]['organs'] = $cache; } $organs = $this->production_article_organ_obj->where('p_article_id',$data['p_article_id'])->where('state',0)->select(); //check信息是否完整 if(count($authors)==0||$p_info['journal_stage_id']==''||$p_info['doi']==''||$p_info['abstract']==''||$p_info['npp']==''){ return jsonError('Incomplete information'); } //发送推送请求 // $url = "http://www.journal.com/master/Article/addArticleForSubmission"; $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Article/addArticleForSubmission'; $pra = []; $pra['title'] = $p_info['title']; $pra['journal_stage_id'] = $p_info['journal_stage_id']; $pra['issn'] = $journal_info['issn']; $pra['type'] = $p_info['type']; $pra['doi'] = $p_info['doi']; $pra['tradition_tag'] = $p_info['tradition_tag']; $pra['tradition'] = $p_info['tradition']; $pra['abstract'] = $p_info['abstract']; $pra['pub_date'] = $p_info['pub_date']; $pra['abbr'] = $p_info['abbr']; $pra['icon'] = $p_info['icon']; if($p_info['file_sub']!=''){ $pra['file_sub'] = $p_info['file_sub']; } if($p_info['file_sub2']!=''){ $pra['file_sub2'] = $p_info['file_sub2']; } if($p_info['file_cdf']!=''){ $pra['file_cdf'] = $p_info['file_cdf']; } if($p_info['endnote']!=''){ $pra['endnote'] = $p_info['endnote']; } if($p_info['bibtex']!=''){ $pra['bibtex'] = $p_info['bibtex']; } $pra['file_pdf'] = $p_info['file_pdf']; $pra['keywords'] = $p_info['keywords']; $pra['npp'] = $p_info['npp']; $pra['authors'] = json_encode($authors); $pra['organs'] = json_encode($organs); $res = object_to_array(json_decode(myPost($url, $pra))); if($res['code']==0){ $this->production_article_obj->where('p_article_id',$data['p_article_id'])->update(['state'=>2]); return jsonSuccess([]); }else{ return jsonError('system error:'.$res['msg']); } } /** * 排版主方法入口 */ public function doTypeSetting() { $data = $this->request->post(); // 验证规则 $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id',$data['p_article_id'])->find(); $article_info = $this->article_obj->where('article_id', $p_info['article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id', $p_info['journal_id'])->find(); $editor_info = $this->user_obj->where('user_id', $journal_info['editor_id'])->find(); $typesetInfo = []; $typesetInfo['info_title'] = $p_info['title']; $typesetInfo['info_type'] = $p_info['type']; $typesetInfo['doi'] = $p_info['doi']; $typesetInfo['topic'] = ''; $typesetInfo['mainText'] = $p_info['main']; $au_res = $this->authorFormate($data['p_article_id']); $typesetInfo['author'] = $au_res['author']; $typesetInfo['authorAddress'] = $au_res['address']; $typesetInfo['authorContribution'] = $p_info['author_contribution']; //查询通讯作者 $corr_authors = $this->production_article_author_obj->where('p_article_id',$data['p_article_id'])->where('is_report',1)->where('state',0)->select(); $corrauthor = ''; $corremail = ''; foreach($corr_authors as $v){ $corrauthor .= trim($v['first_name']). ' '.trim($v['last_name']).'. '; $corremail .= $v['email'].'. '; } $typesetInfo['authorCorresponding'] = substr(trim($corrauthor),0,-1); $typesetInfo['authorCorrespondingEmail'] = substr(trim($corremail),0,-1); $typesetInfo['traditon'] = $p_info['tradition']; $typesetInfo['journal'] = $journal_info['title']; $typesetInfo['jabbr'] = $journal_info['jabbr']; //查询分期 $url = 'http://journalapi.tmrjournals.com/public/index.php/master/Journal/getStageDetail'; $cs['journal_stage_id'] = $p_info['journal_stage_id']; $list = object_to_array(json_decode(myPost($url, $cs))); $stage_re = $list['data']['stage']; $typesetInfo['stage'] = $stage_re['stage_year'].';'.$stage_re['stage_vol'].'('.$stage_re['stage_no'].'):'.$p_info['npp'];//2022;6(1):17 $typesetInfo['little_author'] = $p_info['abbr']; $typesetInfo['website'] = $journal_info['website']; $typesetInfo['acknowledgment'] = $p_info['acknowledgment']; $typesetInfo['received_date'] = date("d F Y", $article_info['ctime']);; $typesetInfo['accepted_date'] = date("d F Y", $article_info['rtime']); $typesetInfo['online_date'] = $p_info['pub_date'];//这里可能会有问题 $typesetInfo['abbreviation'] = $p_info['abbreviation']; $typesetInfo['abstractText'] = $p_info['abstract']; $typesetInfo['keywords'] = $p_info['keywords']; $typesetInfo['userAccount'] = $editor_info['nickname']; //获取文件 $files = $this->article_file_obj ->where('article_id', $article_info['article_id']) ->where('type_name', 'manuscirpt') ->order('ctime desc') ->limit(1) ->select(); if (count($files) == 0) { return jsonError('No Manuscript'); } $typesetInfo['filename'] = "http://api.tmrjournals.com/public/" . $files[0]['file_url']; $rs = $this->production_article_refer_obj->where('p_article_id',$p_info['p_article_id'])->where('state',0)->select(); $refers = []; foreach ($rs as $v) { $refers[] = $v['refer_frag']; } $typesetInfo['refers'] = json_encode($refers); $url = "http://ts.tmrjournals.com/api/typeset/webGetDocx"; $res = object_to_array(json_decode(myPost1($url, $typesetInfo))); if (!isset($res['data']['file']) || $res['data']['file'] == '') { return jsonError('create error'); } $file_res = date('Ymd').DS.$res['data']['file']; $tf_insert['p_article_id'] = $p_info['p_article_id']; $tf_insert['url'] = $file_res; $tf_insert['ctime'] = time(); $this->production_article_frag_obj->insert($tf_insert); return jsonSuccess([]); } /** * 获取生产实例详情 */ public function getProductionDetail() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); proofState($p_info['article_id']); $list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); foreach ($list as $k => $v) { $list[$k]['organs'] = $this->production_article_author_to_organ_obj ->field("t_production_article_organ.*") ->join("t_production_article_organ", 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left') ->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id']) ->where('t_production_article_author_to_organ.state',0) ->select(); } $re['production'] = $p_info; $re['author'] = $list; return jsonSuccess($re); } public function getProductionPreview(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); $article_info = $this->article_obj->where('article_id',$p_info['article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find(); // $list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); $re['production'] = $p_info; $re['author'] = $this->authorFormate($data['p_article_id']); $re['journal'] = $journal_info; return jsonSuccess($re); } /** * 获取生产实例详情通过文章id */ public function getProductionDetailByArticleid() { $data = $this->request->post(); $rule = new Validate([ 'article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('article_id', $data['article_id'])->where('state',0)->find(); $article_info = $this->article_obj->where('article_id',$p_info['article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find(); $re['production'] = $p_info; $re['article'] = $article_info; $re['journal'] = $journal_info; return jsonSuccess($re); } /** * 添加作者机构 */ public function addAuthorOrgan() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number', 'organ_name' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); $insert['p_article_id'] = $data['p_article_id']; $insert['article_id'] = $p_info['article_id']; $insert['organ_name'] = trim($data['organ_name']); $this->production_article_organ_obj->insert($insert); return jsonSuccess([]); } /** * 删除作者机构 */ public function delAuthorOrgan() { $data = $this->request->post(); $rule = new Validate([ 'p_article_organ_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $this->production_article_organ_obj->where('p_article_organ_id', $data['p_article_organ_id'])->update(['state' => 1]); $this->production_article_author_to_organ_obj->where('p_article_organ_id',$data['p_article_organ_id'])->update(['state'=>1]); return jsonSuccess([]); } /** * 编辑作者信息 */ public function editAuthor(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_author_id' => 'require', 'first_name' => 'require', 'last_name' => 'require', 'author_country' => 'require', 'is_first' => 'require', 'is_report' => 'require', 'organs'=>'require' ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $old_article_author_info = $this->production_article_author_obj->where('p_article_author_id',$data['p_article_author_id'])->find(); $updata['author_name'] = trim($data['first_name']) . ' ' . trim($data['last_name']); $updata['first_name'] = trim($data['first_name']); $updata['last_name'] = trim($data['last_name']); $updata['orcid'] = isset($data['orcid']) ? $data['orcid'] : ''; $updata['author_country'] = $data['author_country']; $updata['is_first'] = $data['is_first']; $updata['is_report'] = $data['is_report']; $updata['email'] = isset($data['email']) ? trim($data['email']) : ''; $this->production_article_author_obj->where('p_article_author_id',$data['p_article_author_id'])->update($updata); if (is_array($data['organs'])) { $has_ids = []; foreach ($data['organs'] as $v) { $cache_one = $this->production_article_author_to_organ_obj ->where('p_article_author_id',$data['p_article_author_id']) ->where('p_article_organ_id',$v) ->where('state',0) ->find(); if ($cache_one == null) { $insert['p_article_id'] = $old_article_author_info['p_article_id']; $insert['p_article_author_id'] = $data['p_article_author_id']; $insert['p_article_organ_id'] = $v; $this->production_article_author_to_organ_obj->insert($insert); } $has_ids[] = intval($v); } $this->production_article_author_to_organ_obj->where('p_article_author_id', $data['p_article_author_id'])->where('state', 0)->where('p_article_organ_id', 'not in', $has_ids)->update(['state' => 1]); }else{ $this->production_article_author_to_organ_obj->where('p_article_author_id', $data['p_article_author_id'])->where('state', 0)->update(['state' => 1]); } return jsonSuccess([]); } /** * 编辑作者机构信息 */ public function editAuthorOrgan() { $data = $this->request->post(); $rule = new Validate([ 'p_article_organ_id' => 'require|number', 'organ_name' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $this->production_article_organ_obj->where('p_article_organ_id', $data['p_article_organ_id'])->update(['organ_name' => $data['organ_name']]); return jsonSuccess([]); } /** * 获取机构列表 */ public function getOrganList() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_organ_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); $re['organs'] = $list; return jsonSuccess($re); } /** * 添加作者 */ public function addAuthor() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require|number', 'first_name' => 'require', 'last_name' => 'require', 'author_country' => 'require', 'is_first' => 'require', 'is_report' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); $insert['p_article_id'] = $data['p_article_id']; $insert['article_id'] = $p_info['article_id']; $insert['author_name'] = trim($data['first_name']) . ' ' . trim($data['last_name']); $insert['first_name'] = trim($data['first_name']); $insert['last_name'] = trim($data['last_name']); $insert['orcid'] = isset($data['orcid']) ? $data['orcid'] : ''; $insert['author_country'] = $data['author_country']; $insert['is_first'] = $data['is_first']; $insert['is_report'] = $data['is_report']; $insert['email'] = isset($data['email']) ? trim($data['email']) : ''; Db::startTrans(); $pa_id = $this->production_article_author_obj->insertGetId($insert); $or_res = true; if (isset($data['organs']) && is_array($data['organs'])) { foreach ($data['organs'] as $v) { $cache_ins['p_article_id'] = $data['p_article_id']; $cache_ins['p_article_author_id'] = $pa_id; $cache_ins['p_article_organ_id'] = $v; $or_res = $this->production_article_author_to_organ_obj->insert($cache_ins) ? true : false; } } if ($pa_id && $or_res) { Db::commit(); return jsonSuccess([]); } else { Db::rollback(); return jsonError("system error"); } } /** * 更新引用条目 */ public function freshRefers() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require', 'refers' => 'require|array' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->find(); //清空之前的引用条目 $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->update(['state' => 1]); foreach ($data['refers'] as $k => $v) { $cache_insert['p_article_id'] = $p_info['p_article_id']; $cache_insert['refer_content'] = $v; $cache_insert['ctime'] = time(); $this->production_article_refer_obj->insert($cache_insert); } $this->referToDoi($data['p_article_id']); $this->doiTofrag($data['p_article_id']); return jsonSuccess([]); } /** * 合并到上个文献中 */ public function referHB(){ $data = $this->request->post(); $rule = new Validate([ 'p_refer_id' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $refer_info = $this->production_article_refer_obj->where('p_refer_id',$data['p_refer_id'])->find(); $refer_rev_res = $this->production_article_refer_obj ->where('p_article_id',$refer_info['p_article_id']) ->where('state',0) ->where('p_refer_id','<',$refer_info['p_refer_id']) ->order('p_refer_id desc') ->limit(1)->select(); $refer_rev_info = $refer_rev_res[0]; $updata['refer_frag'] = $refer_rev_info['refer_frag'].$refer_info['refer_frag']; $updata['cs'] = 0; $this->production_article_refer_obj->where('p_refer_id',$refer_rev_info['p_refer_id'])->update($updata); $this->production_article_refer_obj->where('p_refer_id',$refer_info['p_refer_id'])->update(['state'=>1]); return jsonSuccess([]); } /** * 参考文献识别doi */ public function referToDoi($p_article_id) { $p_info = $this->production_article_obj->where('p_article_id', $p_article_id)->find(); $refers = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->select(); foreach ($refers as $v) { //处理doi if (strripos($v['refer_content'], 'doi:') == false && strripos($v['refer_content'], 'doi.org/') == false) { continue; } $doi = ''; if (strripos($v['refer_content'], 'doi.org/') != false) { $cache_arr = explode(' ', trim(substr($v['refer_content'], strripos($v['refer_content'], 'doi.org/') + 8))); if (substr($cache_arr[0], -1) == '.') { $doi = substr($cache_arr[0], 0, -1); } else { $doi = $cache_arr[0]; } } else { $cache_arr = explode(' ', trim(substr($v['refer_content'], strripos($v['refer_content'], 'doi:') + 4))); if (substr($cache_arr[0], -1) == '.') { $doi = substr($cache_arr[0], 0, -1); } else { $doi = $cache_arr[0]; } } $this->production_article_refer_obj->where('p_refer_id', $v['p_refer_id'])->update(['refer_doi' => $doi]); } return jsonSuccess([]); } public function doiTofrag($p_article_id) { $p_info = $this->production_article_obj->where('p_article_id', $p_article_id)->find(); $refers = $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where('state', 0)->select(); foreach ($refers as $v) { if ($v['refer_doi'] == '') { $this->production_article_refer_obj->where('p_refer_id', $v['p_refer_id'])->update(['refer_frag' => $v['refer_content']]); } else { Queue::push('app\api\job\ts@fire1', $v, 'ts'); } } return jsonSuccess([]); } /** * 验证参考文献是否全部通过 */ public function checkRefer() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_refer_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); if (!$list) { return jsonError('references error'); } $frag = 1; foreach ($list as $v) { if ($v['cs'] == 0) { $frag = 0; break; } } if ($frag == 0) { return jsonError('references check error'); } else { return jsonSuccess([]); } } public function getFragBF() { $data = $this->request->post(); // 验证规则 $rule = new Validate([ 'p_article_id' => 'require|number' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_refer_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); $z = count($list); $m = 0; foreach ($list as $v) { if ($v['refer_frag'] != '') { $m++; } } if ($z == 0) { return jsonError('system error!'); } $f = intval($m * 100 / $z); $re['bf'] = $f; return jsonSuccess($re); } /** * 删除作者 */ public function delAuthor() { $data = $this->request->post(); $rule = new Validate([ 'p_article_author_id' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $this->production_article_author_obj->where('p_article_author_id', $data['p_article_author_id'])->update(['state' => 1]); return jsonSuccess([]); } /** * 获取作者列表 */ public function getAuthorlist() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $list = $this->production_article_author_obj->where('p_article_id', $data['p_article_id'])->where('state', 0)->select(); foreach ($list as $k => $v) { $list[$k]['organs'] = $this->production_article_author_to_organ_obj ->field("t_production_article_organ.*") ->join("t_production_article_organ", 't_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id', 'left') ->where('t_production_article_author_to_organ.p_article_author_id', $v['p_article_author_id']) ->where('t_production_article_author_to_organ.state',0) ->select(); } $re['authors'] = $list; return jsonSuccess($re); } /** * 更改附加文件 */ public function editArticleFile() { $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require', 'filetype' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } if ($data['filetype'] == 'PDF') { $updata['file_pdf'] = $data['fileURL']; } elseif ($data['filetype'] == 'HTML') { $updata['file_html'] = $data['fileURL']; } elseif ($data['filetype'] == 'SUB') { $updata['file_sub'] = $data['fileURL']; } elseif ($data['filetype'] == 'SUB2') { $updata['file_sub2'] = $data['fileURL']; } elseif ($data['filetype'] == 'endNote') { $updata['endnote'] = $data['fileURL']; } elseif ($data['filetype'] == 'bibTex') { $updata['bibtex'] = $data['fileURL']; } elseif ($data['filetype'] == 'CDF') { $updata['file_cdf'] = $data['fileURL']; } $this->production_article_obj->where('p_article_id', $data['p_article_id'])->update($updata); return jsonSuccess([]); } /** * 上传文章图片文件 */ public function up_articlepic_file() { $file = request()->file('articleicon'); if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . 'articleicon'); if ($info) { return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]); } else { return json(['code' => 1, 'msg' => $file->getError()]); } } } /** * 开始proof */ public function pushProof(){ $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(); $article_info = $this->article_obj->where('article_id',$p_info['article_id'])->find(); $journal_info = $this->journal_obj->where('journal_id',$article_info['journal_id'])->find(); $user_info = $this->user_obj->where('user_id',$article_info['user_id'])->find(); $this->pdfAddProof($p_info['article_id']); if($p_info['file_pdf']==''){ return jsonError('To the editor: PROOF is the final form before the article goes online. The PROOF link step not be opened if you have not completed the previous steps.'); } //发送邮件 $tt = "Dear Author,

"; $tt .= "Please confirm proof of your manuscript on the submission website within 48 hours. (https://submission.tmrjournals.com)

"; // $tt .= "Click here to confirm the proof.
"; $tt .= "Click here to view and confirm the proof.

"; $tt .= "If your response is not received, we will regard the author's consent to the version if the time exceeds.

"; $tt .= "If you have any questions, please feel free to contact us.
"; $tt .= "Note: Double-check the authors' information carefully to ensure they are correct."; // $maidata['email'] = '751475802@qq.com'; $maidata['email'] = $user_info['email']; $maidata['title'] = "PROOF|".$journal_info['title']; $maidata['content'] = $tt; $maidata['tmail'] = $journal_info['email']; $maidata['tpassword'] = $journal_info['epassword']; $file = ROOT_PATH . 'public' . DS.'proofPDF'.DS.$p_info['article_id'].'.pdf'; sendEmail($maidata['email'],$maidata['title'],$journal_info['title'],$maidata['content'],$maidata['tmail'],$maidata['tpassword'],$file); //更改数据库 $updata['proof_state'] = 1; $updata['proof_stime'] = time(); $updata['proof_etime'] = strtotime("+2 day"); $this->production_article_obj->where('p_article_id',$data['p_article_id'])->update($updata); return jsonSuccess(['msg'=>$this->production_article_obj->getLastSql()]); } /** * 自动执行 */ public function proofState(){ $this->production_article_obj->where('proof_state',1)->where('proof_etime','<',time())->update(['proof_state'=>2]); } /** * 作者反馈proof */ public function editProof(){ $data = $this->request->post(); $rule = new Validate([ 'article_id'=>'require', 'code'=>'require' ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $updata = []; $updata['proof_rtime'] = time(); if($data['code']==0){//同意 $updata['proof_state'] = 2; }else{//拒绝 $updata['proof_state'] = 2; $updata['proof_content'] = trim($data['content']); } $this->production_article_obj->where('article_id',$data['article_id'])->where('state',0)->update($updata); return jsonSuccess([]); } /** * 同意proof通过邮件链接 */ public function editProofFromEmail($articleId){ $this->production_article_obj->where('article_id',$articleId)->where('state',0)->update(['proof_state'=>2,'proof_rtime'=>time()]); echo 'Commit Succeeded'; } private function pdfAddProof($article_id) { $p_info = $this->production_article_obj->where('article_id',$article_id)->where('state',0)->find(); vendor('fpdf.fpdf'); vendor('fpdi/fpdi'); $pdf = new \FPDI(); $pageCount = $pdf->setSourceFile(ROOT_PATH . 'public' . DS.$p_info['file_pdf']); // iterate through all pages for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { // import a page $templateId = $pdf->importPage($pageNo); // get the size of the imported page $size = $pdf->getTemplateSize($templateId); // create a page (landscape or portrait depending on the imported page size) if ($size['w'] > $size['h']) $pdf->AddPage('L', array($size['w'], $size['h'])); else $pdf->AddPage('P', array($size['w'], $size['h'])); // use the imported page // $pdf->useTemplate($templateId); $pdf->image(ROOT_PATH . 'public' . DS.'pdf'.DS.'bg2.png',55, 25, 80); $pdf->image(ROOT_PATH . 'public' . DS.'pdf'.DS.'bg2.png',55, 155, 80); $pdf->useTemplate($templateId); // $pdf->SetFont('Arial', 'B', '12'); // // sign with current date // $pdf->SetXY(0, 0); // you should keep testing untill you find out correct x,y values // $pdf->Write(7, date('Y-m-d')); } $pdf->Output(ROOT_PATH . 'public' . DS.'proofPDF'.DS.$article_id.'.pdf'); } /** * @title 文章文件上传 * * @param name:name type:string require:1 desc:文件域名称(articleSUB/articleSUB2/bibTex/endNote/articleCDF) * @param name:type type:string require:1 desc:pathinfo(articleSUB/articleSUB2/bibTex/endNote/articleCDF) * * @return upurl:图片地址 */ public function up_article_file($type) { $file = request()->file($type); if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . $type); if ($info) { return json(['code' => 0, 'msg' => 'success', 'upurl' => str_replace("\\", "/", $info->getSaveName())]); } else { return json(['code' => 1, 'msg' => $file->getError()]); } } } private function authorFormate($p_article_id) { // $authors = $this->article_author_obj->where('article_id', $article_id)->where('state', 0)->select(); $authors = $this->production_article_author_obj->where('p_article_id',$p_article_id)->where('state',0)->select(); //组装地址数组 $address = []; foreach ($authors as $v) { $cac = $this->production_article_author_to_organ_obj ->field('t_production_article_organ.*') ->join('t_production_article_organ','t_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id','left') ->where('t_production_article_author_to_organ.p_article_author_id',$v['p_article_author_id']) ->where('t_production_article_author_to_organ.state',0) ->select(); foreach($cac as $val){ if(!in_array($val['organ_name'],$address)){ $address[] = $val['organ_name']; } } } $first_num = 0;//第一作者的总数 foreach($authors as $v){ if($v['is_first']==1){ $first_num++; } } //构建数组字符串 $author = ''; foreach ($authors as $v) { $cache_str = trim($v['first_name']) . ' ' . trim($v['last_name']) . ''; $cac = $this->production_article_author_to_organ_obj ->field('t_production_article_organ.*') ->join('t_production_article_organ','t_production_article_organ.p_article_organ_id = t_production_article_author_to_organ.p_article_organ_id','left') ->where('t_production_article_author_to_organ.p_article_author_id',$v['p_article_author_id']) ->where('t_production_article_author_to_organ.state',0) ->select(); foreach ($cac as $val) { $cache_str .= (intval(search_array_val($address, $val['organ_name'])) + 1) . ", "; } $cache_str = trim($cache_str); $cache_str = substr($cache_str,0,-1); if ($first_num>1&&$v['is_first'] == 1) { $cache_str .= '#'; } if ($v['is_report'] == 1) { $cache_str .= '*'; } $cache_str .= ''; $author .= $cache_str; } //组装address $address_str = ''; foreach ($address as $k => $v) { $address_str .= ($k + 1) . ' ' . $v . ' '; } $frag['author'] = $author; $frag['address'] = $address_str; $frag['addressList'] = $address; return $frag; } /** * 更改文章pdf文件 */ public function updateArticlePDF(){ $data = $this->request->post(); $rule = new Validate([ 'p_article_id' => 'require', 'pdf' => 'require' ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $update['file_pdf'] = $data['pdf']; $this->production_article_obj->where('p_article_id',$data['p_article_id'])->update($update); return jsonSuccess([]); } /** * 上传pdf文件 */ public function up_pdf_file() { $file = request()->file('pdf'); if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . 'pdf'); if ($info) { return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]); } else { return json(['code' => 1, 'msg' => $file->getError()]); } } } }