Files
journal/application/master/controller/Datebase.php
wangzhaocui f658f816cd 修改
2022-04-12 13:38:24 +08:00

470 lines
18 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\master\controller;
use think\Controller;
use think\Db;
use think\Queue;
/**
* @title 数据库接口
* @description 数据库接口
* @group 数据库接口
*/
class Datebase extends Controller{
protected $admin_obj = '';
protected $journal_obj = '';
protected $article_obj = '';
protected $journal_topic_obj = '';
protected $article_author_obj = '';
protected $journal_stage_obj = '';
protected $journal_line_obj = '';
protected $journal_notices_obj = '';
protected $journal_abs_obj = '';
protected $article_to_topic_obj = '';
protected $article_to_line_obj = '';
protected $journal_cfp_obj = '';
protected $journal_paper_obj = '';
protected $journal_paper_art_obj = '';
protected $db_obj = '';
protected $db_data_obj = '';
public function __construct(\think\Request $request = null) {
parent::__construct($request);
$this->admin_obj = Db::name('admin');
$this->journal_obj = Db::name('journal');
$this->article_obj = Db::name('article');
$this->journal_topic_obj = Db::name('journal_topic');
$this->article_author_obj = Db::name('article_author');
$this->journal_stage_obj = Db::name('journal_stage');
$this->journal_line_obj = Db::name('journal_line');
$this->journal_notices_obj = Db::name('journal_notices');
$this->journal_abs_obj = Db::name('journal_abstracting');
$this->article_to_topic_obj = Db::name('article_to_topic');
$this->article_to_line_obj = Db::name('article_to_line');
$this->journal_cfp_obj = Db::name('journal_cfp');
$this->journal_paper_obj = Db::name('journal_paper');
$this->journal_paper_art_obj = Db::name('journal_paper_art');
$this->db_obj = Db::name('db');
$this->db_data_obj = Db::name('db_data');
}
/**
* @title 增加数据库
* @description 增加数据库
* @author wangjinlei
* @url /master/Datebase/addDb
* @method POST
*
* @param name:name type:string require:1 desc:数据库名字
* @param name:intro type:string require:1 desc:简介
*/
public function addDb(){
$data = $this->request->post();
$insert['name'] = $data['name'];
$insert['intro'] = $data['intro'];
$insert['ctime'] = time();
$this->db_obj->insert($insert);
return jsonSuccess([]);
}
/**
* @title 删除数据库
* @description 删除数据库
* @author wangjinlei
* @url /master/Datebase/delDb
* @method POST
*
* @param name:db_id type:int require:1 desc:数据库id
*/
public function delDb(){
$data = $this->request->post();
$this->db_obj->where('db_id',$data['db_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* @title 获取数据库
* @description 获取数据库
* @author wangjinlei
* @url /master/Datebase/getDbs
* @method POST
*
* @return dblist:数据库列表array#
*/
public function getDbs(){
$list = $this->db_obj->where('state',0)->select();
$re['dblist'] = $list;
return jsonSuccess($re);
}
/**
* @title 获取数据库主页
* @description 获取数据库主页
* @author wangjinlei
* @url /master/Datebase/getDbMain
* @method POST
*
* @param name:db_id type:int require:1 desc:数据库id
* @param name:journal_id type:int require:1 desc:期刊id
*
* @return dbInfo:数据库信息#
*/
public function getDbMain(){
$data = $this->request->post();
$info = $this->db_obj->where('db_id',$data['db_id'])->find();
//获取数据库完成情况(预留)
$re['dbInfo'] = $info;
return jsonSuccess($re);
}
/**
* @title 增加数据库资料
* @description 增加数据库资料
* @author wangjinlei
* @url /master/Datebase/addData
* @method POST
*
* @param name:db_id type:int require:1 desc:数据库id
* @param name:name type:string require:1 desc:资料名称
* @param name:url type:string require:1 desc:资料地址
*/
public function addData(){
$data = $this->request->post();
$insert['db_id'] = $data['db_id'];
$insert['title'] = $data['name'];
$insert['url'] = $data['url'];
$insert['ctime'] = time();
$this->db_data_obj->insert($insert);
return jsonSuccess([]);
}
/**
* @title 删除数据库资料
* @description 删除数据库资料
* @author wangjinlei
* @url /master/Datebase/delData
* @method POST
*
* @param name:db_data_id type:int require:1 desc:数据库资料id
*/
public function delData(){
$data = $this->request->post();
$this->db_data_obj->where('db_data_id',$data['db_data_id'])->update(['state'=>1]);
return jsonSuccess([]);
}
/**
* @title 获取数据库资料
* @description 获取数据库资料
* @author wangjinlei
* @url /master/Datebase/getDatas
* @method POST
*
* @param name:db_id type:int require:1 desc:数据库id
* @param name:pageIndex type:int require:1 desc:当前页码数
* @param name:pageSize type:int require:1 desc:单页数据条数
*
* @return dbinfo:数据库信息#
* @return count:总数据数
* @return dataList:array#
*/
public function getDatas(){
$data = $this->request->post();
$db_info = $this->db_obj->where('db_id',$data['db_id'])->find();
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = $this->db_data_obj->where('db_id',$data['db_id'])->where('state',0)->limit($limit_start,$data['pageSize'])->select();
$count = $this->db_data_obj->where('db_id',$data['db_id'])->count();
$re['dbinfo'] = $db_info;
$re['dataList'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* @title 图片上传
* @description 图片上传
* @author wangjinlei
* @url /master/Datebase/up_file
* @method POST
*
* @param name:name type:string require:1 default:dbdata desc:文件域名称
*
* @return upurl:图片地址
*/
public function up_file() {
$file = request()->file('dbdata');
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'dbdata');
if ($info) {
return json(['code'=>0 , 'msg'=>'success', 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
} else {
return json(['code' => 1, 'msg' => $file->getError()]);
}
}
}
/**
* @title 提交数据库
* @description 提交数据库
* @author wangjinlei
* @url /master/Datebase/dataPush
* @method POST
*
* @param name:journal_stage_id type:int require:1 desc:分期id
*
*/
public function dataPush(){
$data = $this->request->post();
// $data["journal_stage_id"] = 305;
$stage_info = $this->journal_stage_obj->where("journal_stage_id",$data["journal_stage_id"])->find();
$this->createEmailFile($data["journal_stage_id"]);
// 发送ftp
$this->createFtpFileInfo($data["journal_stage_id"]);
$journal_info = $this->journal_obj->where("journal_id",$stage_info["journal_id"])->find();
$zipfile = ROOT_PATH."public/dataFile/".$data["journal_stage_id"].'/'.$data["journal_stage_id"].'.zip';
$tt = "Dear Database,<br><br>";
$tt .= "Please find the PDF files in attachment of published issue (Vol. ".$stage_info['stage_vol'].", No.".$stage_info['stage_no'].") of ".$journal_info['title'].".<br><br>";
$tt .= "Yours Sincerely<br>";
$tt .= "Dan Chen<br>";
$tt .= "Manager<br>";
$tt .= "TMR Publishing Group | Editorial Office | New Zealand<br>";
$tt .= "Telephone: +64 02108293806<br>";
$tt .= "Email: publisher@tmrjournals.com<br>";
$tt .= "Website:www.tmrjournals.com";
$elist = [];
$elist[] = "jgatelicensing@informaticsglobal.com";
$elist[] = "3601240974@qq.com";
if($journal_info["journal_id"]==1){
$elist[] = "958518573@qq.com";
$elist[] = "swyy2@wanfangdata.com.cn";
}
$elist[] = "3097953993@qq.com";
$elist[] = "849192806@qq.com";//皮皮
$elist[] = "751475802@qq.com";//我
$elist[] = "ELD@dia.govt.nz";
foreach ($elist as $v){
$cdata['email'] = $v;
$cdata['title'] = "Data submitted-TMR Publishing Group";
$cdata["fromname"] = "Data submitted-TMR Publishing Group";
$cdata["content"] = $tt;
$cdata["temail"] = $journal_info['email'];
$cdata["tpassword"] = $journal_info['epassword'];
$cdata["fj"] = $zipfile;
Queue::push('app\api\job\mail@puchAndFJ', $cdata, "mail");
// sendEmail_data($v, "Data submitted-TMR Publishing Group", "Data submitted-TMR Publishing Group", $tt, $journal_info['email'], $journal_info['epassword'],$zipfile);
}
return jsonSuccess([]);
}
public function mycreat(){
$data = $this->request->post();
$this->createEmailFile($data['stage_id']);
echo 'ok';
}
private function createEmailFile($journal_stage_id){
$url = "http://ts.tmrjournals.com/api/dataApi/createTemplate";
//查找分期信息
$stage_info = $this->journal_stage_obj->where("journal_stage_id",$journal_stage_id)->find();
$journal_info = $this->journal_obj->where("journal_id",$stage_info["journal_id"])->find();
$re['issue'] = $stage_info['issue_date'].", Volume ".$stage_info['stage_vol']." Issue ".$stage_info["stage_no"];
$adate = [];
$alist = $this->article_obj->where("journal_stage_id",$journal_stage_id)->where("state",0)->order("npp")->select();
foreach ($alist as $k => $v){
$cache["type"] = $v["type"];
$cache["npp"] = $v["npp"];
$cache["title"] = $v["title"];
$cache["author"] = $this->getAuthor($v);
$adate[] = $cache;
}
$re["date_list"] = json_encode($adate);
$res = myPost($url, $re);
$r = object_to_array(json_decode($res));
$file = $r['data']["file"];
//创建目录加压缩操作
$base_dir = ROOT_PATH."public/dataFile/".$stage_info["journal_stage_id"];
if(!is_dir($base_dir)){
@mkdir($base_dir);
}
$zip = new \ZipArchive;
$zip->open($base_dir.'/'.$stage_info["journal_stage_id"].'.zip', \ZipArchive::CREATE);
copy('http://ts.tmrjournals.com/upload/'.$file,$base_dir.'/'.$stage_info["journal_stage_id"].".docx");
$zip->addFile($base_dir.'/'.$stage_info["journal_stage_id"].".docx","Contents.docx");
foreach ($alist as $k=>$v){
copy("https://www.tmrjournals.com/public/articlePDF/".$v['file_pdf'],$base_dir.'/'.$v["npp"].".pdf");
$zip->addFile($base_dir.'/'.$v["npp"].".pdf",$v["npp"].".pdf");
}
//添加封面图片
copy("https://www.tmrjournals.com/public/journalicon/".$journal_info["icon"],$base_dir."/journal.jpg");
$zip->addFile($base_dir."/journal.jpg","journal.jpg");
$zip->close();
}
private function createFtpFileInfo($journal_stage_id){
//查找分期信息
$stage_info = $this->journal_stage_obj->where("journal_stage_id",$journal_stage_id)->find();
$journalInfo = $this->journal_obj->where('journal_id',$stage_info['journal_id'])->find();
//获取分期文章
$articles = $this->article_obj->where(['journal_stage_id'=>$journal_stage_id,'state'=>0])->field('title as articleTitle,abbr as author,pub_date as date,keywords as keyWords,doi,abstract,file_pdf as pdf,article_id,journal_id')->select();
foreach ($articles as $k=>$v){
$articles[$k]['abstract'] = strip_tags($v['abstract']);
$articles[$k]['journalTitle'] = $journalInfo['title'];
$articles[$k]['issn'] = $journalInfo['title'];
$articles[$k]['vol'] = $stage_info['stage_vol'];
$articles[$k]['issue'] = $stage_info['stage_no'];
$articles[$k]['pdf'] = 'https://www.tmrjournals.cn/public/articlePDF/'.$v['pdf'];
$articles[$k]['linkToAbstract'] = 'https://www.tmrjournals.cn/article.html?J_num='.$v['journal_id'].'&a_id='.$v['article_id'];
$articles[$k]['publisher'] = 'TMR publishing group';
$articles[$k]['reference'] = '';
$articles[$k]['eissn'] = '';
}
$baseDir = ROOT_PATH.'public' . DS . 'ftpFile' . DS . '/';
$outfileTitle = $journalInfo['title']."-".$stage_info['stage_vol']."".$stage_info['stage_no']."";
// 生成zip
$res= $this->createZip($articles,$baseDir,$outfileTitle);
$resJosn = json_decode($res,true);
// zip生成成功后发送ftp
if($resJosn['code'] == 0){
$url = $baseDir.$outfileTitle.".zip";
// 发送ftp
$this->sendFtp($url,$outfileTitle);
}
}
private function getAuthor($article) {
$where['article_id'] = $article['article_id'];
$where['state'] = 0;
$list = $this->article_author_obj->where($where)->select();
$frag = '';
foreach ($list as $k => $v) {
$frag = $frag == '' ? '' . $v['author_name'] : $frag . ', ' . $v['author_name'];
}
return $frag;
}
// 先生成excel - 再压缩zip - 删除excel
private function createZip($articles,$baseDir,$outfileTitle){
Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
$objExcel = new \PHPExcel();
//set document Property
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
$objActSheet = $objExcel->getActiveSheet();
$key = ord("A");
$letter =explode(',',"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O");
$arrHeader = array('Article Title','Author','Publishing Date','Key Words','Journal Title','ISSN','EISSN','Volume','Issue','Link to Full-Text Articles (PDF)','Abstract','DOI','Link to Abstract','Publisher','Reference');
//填充表头信息
$lenth = count($arrHeader);
for($i = 0;$i < $lenth;$i++) {
$objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
// 设置表头高度
$objActSheet->getRowDimension('1')->setRowHeight(25);
};
//填充表格信息
foreach($articles as $k=>$v){
$k +=2;
$objActSheet->setCellValue('A'.$k,$v['articleTitle']);
$objActSheet->setCellValue('B'.$k, $v['author']);
$objActSheet->setCellValue('C'.$k, $v['date']);
$objActSheet->setCellValue('D'.$k, $v['keyWords']);
$objActSheet->setCellValue('E'.$k, $v['journalTitle']);
$objActSheet->setCellValue('F'.$k, $v['issn']);
$objActSheet->setCellValue('G'.$k, $v['eissn']);
$objActSheet->setCellValue('H'.$k, $v['vol']);
$objActSheet->setCellValue('I'.$k, $v['issue']);
$objActSheet->setCellValue('J'.$k, $v['pdf']);
$objActSheet->setCellValue('K'.$k, $v['abstract']);
$objActSheet->setCellValue('L'.$k, $v['doi']);
$objActSheet->setCellValue('M'.$k, $v['linkToAbstract']);
$objActSheet->setCellValue('N'.$k, $v['publisher']);
$objActSheet->setCellValue('O'.$k, $v['reference']);
// 表格高度
$objActSheet->getRowDimension($k)->setRowHeight(25);
}
$width = array(10,15,20,25,30);
//设置表格的宽度
$objActSheet->getColumnDimension('A')->setWidth($width[4]);
$objActSheet->getColumnDimension('B')->setWidth($width[2]);
$objActSheet->getColumnDimension('C')->setWidth($width[1]);
$objActSheet->getColumnDimension('D')->setWidth($width[4]);
$objActSheet->getColumnDimension('E')->setWidth($width[4]);
$objActSheet->getColumnDimension('F')->setWidth($width[2]);
$objActSheet->getColumnDimension('G')->setWidth($width[3]);
$objActSheet->getColumnDimension('H')->setWidth($width[1]);
$objActSheet->getColumnDimension('I')->setWidth($width[1]);
$objActSheet->getColumnDimension('J')->setWidth($width[4]);
$objActSheet->getColumnDimension('K')->setWidth($width[3]);
$objActSheet->getColumnDimension('L')->setWidth($width[3]);
$objActSheet->getColumnDimension('M')->setWidth($width[4]);
$objActSheet->getColumnDimension('N')->setWidth($width[2]);
$objActSheet->getColumnDimension('O')->setWidth($width[1]);
if(!is_dir($baseDir)){
@mkdir($baseDir);
}
$res = $objWriter->save($baseDir.$outfileTitle.".xlsx");
// 生成zip
$path = $baseDir.$outfileTitle.".xlsx";
$fileName = $outfileTitle.".zip";
$zip = new \ZipArchive;
$zip->open($baseDir.$fileName,\ZipArchive::CREATE);
$zip->addFile($path,basename($path));
$zip->close();
unlink($baseDir.$outfileTitle.".xlsx");
if (!file_exists($baseDir.$fileName)) {
return json_encode(['code'=>1,'msg'=>'无法找到文件']);
}
return json_encode(['code'=>0,'msg'=>'成功','data'=>$baseDir.$fileName]);
}
// 连接ftp
private function sendFtp($url,$title){
$ftp=[
'server'=>'FTP.cnki.net',
'user'=>'glo616cnki',
'pass'=>'glo616cnki'
];
$con = ftp_connect($ftp['server']);
$res = ftp_login($con, $ftp['user'], $ftp['pass']);
if(!$res){ //连接失败
exit('连接失败');
}
$name = iconv("UTF-8","GBK",$title.'.zip');
$data = ftp_put($con,'/'.$name,$url,FTP_BINARY);
if(!$data){ // 上传失败
exit('上传失败');
}
ftp_close($con);
}
}