490 lines
19 KiB
PHP
490 lines
19 KiB
PHP
<?php
|
||
|
||
namespace app\api\controller;
|
||
|
||
use think\Db;
|
||
use think\Queue;
|
||
use think\Validate;
|
||
|
||
class Preaccept extends Base
|
||
{
|
||
public function __construct(\think\Request $request = null)
|
||
{
|
||
parent::__construct($request);
|
||
}
|
||
|
||
|
||
/**获取文章参考文献列表
|
||
* @return \think\response\Json
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @throws \think\exception\DbException
|
||
*/
|
||
public function getArticleReferences()
|
||
{
|
||
$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();
|
||
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()]);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
} |