diff --git a/application/api/controller/Production.php b/application/api/controller/Production.php index c5916b0..5a3db62 100644 --- a/application/api/controller/Production.php +++ b/application/api/controller/Production.php @@ -98,7 +98,55 @@ class Production extends Controller if($check){ return jsonError($rule->getError()); } + $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['article_id'] = $data['article_id']; $insert['journal_id'] = $article_info['journal_id']; $insert['ctime'] = time(); @@ -129,7 +177,6 @@ class Production extends Controller $rule = new Validate([ 'p_article_id'=>'require|number', 'title'=>'require', - 'subtitle'=>'require', 'type'=>'require', 'icon'=>'require', 'tradition_tag'=>'require', @@ -145,13 +192,13 @@ class Production extends Controller return jsonError($rule->getError()); } $update['title'] = trim($data['title']); - $update['subtitle'] = trim($data['subtitle']); $update['type'] = trim($data['type']); $update['icon'] = trim($data['icon']); $update['tradition_tag'] = trim($data['tradition_tag']); $update['tradition'] = trim($data['tradition']); $update['mhoo'] = isset($data['mhoo'])?trim($data['mhoo']):''; $update['doi'] = trim($data['doi']); + $update['ltai'] = isset($data['ltai'])?trim($data['ltai']):''; $update['abstract'] = trim($data['abstract']); $update['keywords'] = trim($data['keywords']); $update['fund'] = trim($data['fund']); @@ -190,7 +237,7 @@ class Production extends Controller } /** - * 获取生产实例列表 + * 获取生产实例详情 */ public function getProductionDetail(){ $data = $this->request->post(); @@ -201,13 +248,20 @@ class Production extends Controller return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id',$data['p_article_id'])->find(); - - - - + $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('p_article_author_id',$v['p_article_author_id']) + ->select(); + } + $re['production'] = $p_info; + $re['author'] = $list; + return jsonSuccess($re); } - + /** * 添加作者机构 */ @@ -299,7 +353,7 @@ class Production extends Controller $insert['article_id'] = $p_info['article_id']; $insert['author_name'] = $data['first_name'].' '.$data['last_name']; $insert['first_name'] = $data['first_name']; - $insert['last_name'] = $data['las_name']; + $insert['last_name'] = $data['last_name']; $insert['orcid'] = isset($data['orcid'])?$data['orcid']:''; $insert['author_country'] = $data['author_country']; $insert['is_first'] = $data['is_first']; @@ -327,6 +381,142 @@ class Production extends Controller } + /** + * 更新引用条目 + */ + 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([]); + } + + /** + * 参考文献识别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); + } + /** * 删除作者 */ @@ -338,7 +528,7 @@ class Production extends Controller if(!$rule->check($data)){ return jsonError($rule->getError()); } - $this->production_article_author_obj->where('p_article_author_id',$data['p_artice_author_id'])->update(['state'=>1]); + $this->production_article_author_obj->where('p_article_author_id',$data['p_article_author_id'])->update(['state'=>1]); return jsonSuccess([]); } @@ -365,14 +555,44 @@ class Production extends Controller 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_file(){ - $file = request()->file('pdf'); + public function up_articlepic_file(){ + $file = request()->file('articleicon'); if ($file) { - $info = $file->move(ROOT_PATH . 'public' . DS . 'pdf'); + $info = $file->move(ROOT_PATH . 'public' . DS . 'articleicon'); if ($info) { return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]); } else { @@ -381,5 +601,25 @@ class Production extends Controller } } + /** + * @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()]); + } + } + } + } diff --git a/application/api/controller/User.php b/application/api/controller/User.php index 073707e..7a31b76 100644 --- a/application/api/controller/User.php +++ b/application/api/controller/User.php @@ -56,7 +56,7 @@ class User extends Controller } public function pstest(){ - echo md5('TMR893533'); + echo md5('tmrmhm!'); } /** diff --git a/application/api/job/ts.php b/application/api/job/ts.php index 0830c22..248190c 100644 --- a/application/api/job/ts.php +++ b/application/api/job/ts.php @@ -13,6 +13,11 @@ class ts { $job->delete(); } + public function fire1(Job $job, $data) { + my_doiToFrag1($data); + $job->delete(); + } + // public function doFrag($data){ // $ts_refer_obj = Db::name('ts_refer'); diff --git a/application/common.php b/application/common.php index ad63aa6..2b60682 100644 --- a/application/common.php +++ b/application/common.php @@ -261,6 +261,28 @@ function my_doiToFrag($data){ $ts_refer_obj->close(); } +function my_doiToFrag1($data){ + $p_refer_obj = Db::name('production_article_refer'); + if($data['refer_doi']==''){ + return 0; + } + $doi = str_replace('/','%2F',$data['refer_doi']); + $url = "https://citation.crosscite.org/format?doi=$doi&style=american-veterinary-medical-association&lang=en-US"; + $res = myGet($url); + $frag = trim(substr($res,strpos($res,'.')+1)); + $f = ''; + $cs = 0; + if($frag==""){ + $f = $data['refer_content']; + }else{ + $c_frag = rtrim($frag,'.'); + $f = substr_replace($c_frag,PHP_EOL,strripos($c_frag,"http"),0); + $cs = 1; + } + $p_refer_obj->where('p_refer_id',$data['p_refer_id'])->update(['refer_frag'=>$f,"cs"=>$cs]); + $p_refer_obj->close(); +} + function my_tg_pushmail($data){ $res = sendEmail($data['email'],$data['title'],$data['title'],$data['content'],$data['tmail'],$data['tpassword'],$data['attachmentFile']);