request->post(); $rule = new Validate([ "article_id" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $production_info = $this->production_article_obj->where('article_id', $data['article_id'])->find(); if ($production_info == null) { return jsonError("Object is null"); } $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); } /**清空引用文献 * @return \think\response\Json * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function discardRefers() { $data = $this->request->post(); $rule = new Validate([ "article_id" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $production_info = $this->production_article_obj->where('article_id', $data['article_id'])->find(); $this->production_article_refer_obj->where('p_article_id', $production_info['p_article_id'])->update(['state' => 1]); return jsonSuccess([]); } /**清空引用文献byp_article_id * @return void */ public function discardRefersByParticleid(){ $data = $this->request->post(); $rule = new Validate([ "p_article_id"=>"require" ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } $this->production_article_refer_obj->where('p_article_id',$data['p_article_id'])->update(["state"=>1]); return jsonSuccess([]); } /**添加refer * @return \think\response\Json * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function addRefer() { $data = $this->request->post(); $rule = new Validate([ "article_id" => "require", "pre_p_refer_id" => "require", "refer_type"=>"require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->find(); $pre_refer = $this->production_article_refer_obj->where('p_refer_id', $data['pre_p_refer_id'])->find(); $insert['p_article_id'] = $p_info['p_article_id']; $insert['index'] = $pre_refer['index'] + 1; $insert['ctime'] = time(); $insert['is_change'] = 1; $insert['refer_type'] = $data['refer_type']; if($data['refer_type']=="journal"){ $insert['refer_doi'] = isset($data['doi'])?$data['doi']:''; $insert['author'] = trim($data['author']); $insert['title'] = trim($data['title']); $insert['joura'] = trim($data['joura']); $insert['dateno'] = $data['dateno']; $insert['doilink'] = $data['doilink']; $insert['cs'] = 1; $insert['is_ja'] = 1; }elseif($data['refer_type']=="book"){ $insert['author'] = trim($data['author']); $insert['title'] = trim($data['title']); $insert['dateno'] = $data['dateno']; $insert['isbn'] = $data['isbn']; $insert['cs'] = 1; $insert['is_ja'] = 1; }else{ $insert['cs'] = 0; $insert['refer_frag'] = trim($data['content']); } $adId= $this->production_article_refer_obj->insertGetId($insert); $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where("p_refer_id", "<>", $adId)->where("index", ">", $pre_refer['index'])->where('state', 0)->setInc('index'); return jsonSuccess([]); // $adId = $this->production_article_refer_obj->insertGetId($insert); // my_doiToFrag2($this->production_article_refer_obj->where('p_refer_id', $adId)->find()); // //判断是否合法 // $check = $this->production_article_refer_obj->where('p_refer_id', $adId)->find(); // if ($check['author']) {//合法 // $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where("p_refer_id", "<>", $adId)->where("index", ">", $pre_refer['index'])->where('state', 0)->setInc('index'); // return jsonSuccess([]); // } else {//非法 // $this->production_article_refer_obj->where('p_refer_id', $adId)->update(['state' => 1]); // return jsonError("Doi error"); // } } public function addReferByParticleid(){ $data = $this->request->post(); $rule = new Validate([ "p_article_id" => "require", "pre_p_refer_id" => "require", "refer_type"=>"require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('p_article_id', $data['p_article_id'])->find(); $pre_refer = $this->production_article_refer_obj->where('p_refer_id', $data['pre_p_refer_id'])->find(); $insert['p_article_id'] = $p_info['p_article_id']; $insert['index'] = $pre_refer['index'] + 1; $insert['ctime'] = time(); $insert['is_change'] = 1; $insert['refer_type'] = $data['refer_type']; if($data['refer_type']=="journal"){ $insert['refer_doi'] = isset($data['doi'])?$data['doi']:''; $insert['author'] = trim($data['author']); $insert['title'] = trim($data['title']); $insert['joura'] = trim($data['joura']); $insert['dateno'] = $data['dateno']; $insert['doilink'] = $data['doilink']; $insert['cs'] = 1; $insert['is_ja'] = 1; }elseif($data['refer_type']=="book"){ $insert['author'] = trim($data['author']); $insert['title'] = trim($data['title']); $insert['dateno'] = $data['dateno']; $insert['isbn'] = $data['isbn']; $insert['cs'] = 1; $insert['is_ja'] = 1; }else{ $insert['cs'] = 0; $insert['refer_frag'] = trim($data['content']); } $adId= $this->production_article_refer_obj->insertGetId($insert); $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where("p_refer_id", "<>", $adId)->where("index", ">", $pre_refer['index'])->where('state', 0)->setInc('index'); return jsonSuccess([]); } /**非doi形式添加refer节点 * @return void */ public function addReferNotdoi() { $data = $this->request->post(); $rule = new Validate([ "article_id" => "require", "pre_p_refer_id" => "require", "author" => "require", "title" => "require", "joura" => "require", "dateno" => "require", "doilink" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $p_info = $this->production_article_obj->where('article_id', $data['article_id'])->where('state', 0)->find(); $pre_refer = $this->production_article_refer_obj->where('p_refer_id', $data['pre_p_refer_id'])->find(); $insert['p_article_id'] = $p_info['p_article_id']; $insert['index'] = $pre_refer['index'] + 1; $insert['author'] = trim($data['author']); $insert['title'] = trim($data['title']); $insert['joura'] = trim($data['joura']); $insert['dateno'] = trim($data['dateno']); $insert['doilink'] = trim($data['doilink']); $insert['refer_doi'] = trim($data['doilink']); $insert['is_web'] = 1; $insert['cs'] = 1; $adId = $this->production_article_refer_obj->insertGetId($insert); $this->production_article_refer_obj->where('p_article_id', $p_info['p_article_id'])->where("p_refer_id", "<>", $adId)->where("index", ">", $pre_refer['index'])->where('state', 0)->setInc('index'); return jsonSuccess([]); } public function editReferNotdoi() { $data = $this->request->post(); $rule = new Validate([ "p_refer_id" => "require", "author" => "require", "title" => "require", "joura" => "require", "dateno" => "require", "doilink" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $update['author'] = trim($data['author']); $update['title'] = trim($data['title']); $update['joura'] = trim($data['joura']); $update['dateno'] = trim($data['dateno']); $update['doilink'] = trim($data['doilink']); $update['refer_doi'] = trim($data['doilink']); $this->production_article_refer_obj->where('p_refer_id', $data['p_refer_id'])->update($update); return jsonSuccess([]); } // public function aaa(){ // $list = $this->production_article_refer_obj->where('p_article_id',423)->where('state',0)->where('index',">",0)->setInc('index'); // dump($list); // } /**删除refer * @return \think\response\Json * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function delRefer() { $data = $this->request->post(); $rule = new Validate([ "p_refer_id" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $this->delOneRefer($data['p_refer_id']); return jsonSuccess([]); } public function delRefers(){ $data = $this->request->post(); $rule = new Validate([ "ids" => "require|array" ]); if(!$rule->check($data)){ return jsonError($rule->getError()); } foreach ($data['ids'] as $v){ $this->delOneRefer($v); } return jsonSuccess([]); } /**编辑refer * @return \think\response\Json * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function editRefer() { $data = $this->request->post(); $rule = new Validate([ "p_refer_id" => "require", "refer_type" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $old_refer_info = $this->production_article_refer_obj->where('p_refer_id',$data['p_refer_id'])->find(); $updata['refer_type'] = $data['refer_type']; $updata['is_change'] = 1; if($data['refer_type']=="journal"){ $updata['refer_doi'] = isset($data['doi'])?$data['doi']:''; $updata['author'] = trim($data['author']); $updata['title'] = trim($data['title']); $updata['joura'] = trim($data['joura']); $updata['dateno'] = $data['dateno']; $updata['doilink'] = $data['doilink']; $updata['cs'] = 1; $updata['is_ja'] = 1; }elseif($data['refer_type']=="book"){ $updata['author'] = trim($data['author']); $updata['title'] = trim($data['title']); $updata['dateno'] = $data['dateno']; $updata['isbn'] = $data['isbn']; $updata['cs'] = 1; $updata['is_ja'] = 1; }else{ $updata['cs'] = 0; $updata['refer_frag'] = trim($data['content']); } $this->production_article_refer_obj->where('p_refer_id',$data['p_refer_id'])->update($updata); // $doi = trim($data['doi']); // $url = "https://citation.crosscite.org/format?doi=$doi&style=cancer-translational-medicine&lang=en-US"; // $res = myGet($url); // $frag = trim(substr($res, strpos($res, '.') + 1)); // if ($frag == "") { // return jsonError("doi error"); // } // $this->production_article_refer_obj->where('p_refer_id', $data['p_refer_id'])->update(['refer_doi' => $data['doi']]); // my_doiToFrag2($this->production_article_refer_obj->where('p_refer_id', $data['p_refer_id'])->find()); return jsonSuccess([]); } public function searchDoi() { $data = $this->request->post(); $rule = new Validate([ "doi" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $doi = str_replace('/', '%2F', $data['doi']); $url = "https://citation.crosscite.org/format?doi=$doi&style=cancer-translational-medicine&lang=en-US"; $res = myGet($url); $frag = trim(substr($res, strpos($res, '.') + 1)); if ($frag == "") { return jsonError("not find"); } if (mb_substr_count($frag, '.') != 3) { return jsonError("formate fail"); } $res = explode('.', $frag); $f['author'] = prgeAuthor($res[0]); $f['title'] = trim($res[1]); $bj = bekjournal($res[2]); $joura = formateJournal(trim($bj[0])); $f['joura'] = $joura; $f['dateno'] = str_replace(' ', '', str_replace('-', '–', trim($bj[1]))); $f['doilink'] = strpos($data['doi'], "http") === false ? "http://doi.org/" . $data['doi'] : $data['doi']; $re['formate'] = $f; return jsonSuccess($re); } /**调整refer排序 * @return \think\response\Json * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function sortRefer() { $data = $this->request->post(); $rule = new Validate([ "p_refer_id" => "require", "act" => "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(); if ($data['act'] == "up") { $up_info = $this->production_article_refer_obj->where('p_article_id', $refer_info['p_article_id'])->where('index', $refer_info['index'] - 1)->where('state', 0)->find(); if (!$up_info) { return jsonError("system error"); } $this->production_article_refer_obj->where('p_refer_id', $up_info['p_refer_id'])->setInc("index"); $this->production_article_refer_obj->where('p_refer_id', $refer_info['p_refer_id'])->setDec("index"); } else { $down_info = $this->production_article_refer_obj->where('p_article_id', $refer_info['p_article_id'])->where('index', $refer_info['index'] + 1)->where('state', 0)->find(); if (!$down_info) { return jsonError("system error"); } $this->production_article_refer_obj->where('p_refer_id', $refer_info['p_refer_id'])->setInc("index"); $this->production_article_refer_obj->where('p_refer_id', $down_info['p_refer_id'])->setDec("index"); } return jsonSuccess([]); } public function addRefersByExcel() { $data = $this->request->post(); $rule = new Validate([ "article_id" => "require", "referFile" => "require" ]); if (!$rule->check($data)) { return jsonError($rule->getError()); } $production_info = $this->production_article_obj->where('article_id', $data['article_id'])->where("state", 0)->find(); if (!$production_info) { return jsonError("Object is null"); } $file = ROOT_PATH . 'public' . DS . "referFile" . DS . $data['referFile']; $list = $this->readRefersExcel($file); foreach ($list as $k => $v) { $ca['p_article_id'] = $production_info['p_article_id']; $ca['refer_content'] = $v['content']; $ca['refer_doi'] = $v['doi']; $ca['index'] = $k; $ca['ctime'] = time(); $adId = $this->production_article_refer_obj->insertGetId($ca); my_doiToFrag2($this->production_article_refer_obj->where('p_refer_id', $adId)->find()); } return jsonSuccess([]); } /**读取excel文件获取refer列表 * @param $afile * @return array * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function readRefersExcel($afile) { $extension = substr($afile, strrpos($afile, '.') + 1); vendor("PHPExcel.PHPExcel"); if ($extension == 'xlsx') { $objReader = new \PHPExcel_Reader_Excel2007(); $objPHPExcel = $objReader->load($afile); } else if ($extension == 'xls') { $objReader = new \PHPExcel_Reader_Excel5(); $objPHPExcel = $objReader->load($afile); } $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); $frag = []; for ($i = 2; $i <= $highestRow; $i++) { if ($objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue() == '') { continue; } $aa['content'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue(); $aa['doi'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue(); $frag[] = $aa; } return $frag; } /**上传引用文献文件,并返回读取到的内容 * @return \think\response\Json|void */ public function up_refer_file() { $file = request()->file("referFile"); if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . "referFile"); if ($info) { $file = ROOT_PATH . 'public' . DS . "referFile" . DS . str_replace("\\", "/", $info->getSaveName()); $re["refers"] = $this->readRefersExcel($file); $re["upurl"] = str_replace("\\", "/", $info->getSaveName()); $re['code'] = 0; return json($re); } else { return json(['code' => 1, 'msg' => $file->getError()]); } } } }