679 lines
28 KiB
PHP
679 lines
28 KiB
PHP
<?php
|
||
|
||
namespace app\master\controller;
|
||
|
||
use think\Controller;
|
||
use think\Db;
|
||
use think\Queue;
|
||
use sftp\Sftp;
|
||
|
||
/**
|
||
* @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([]);
|
||
}
|
||
|
||
public function push_db(){
|
||
$data = $this->request->post();
|
||
return $this->bf_db_push($data['stage']);
|
||
}
|
||
|
||
/**
|
||
* 备份数据推送至sftp
|
||
*/
|
||
public function bf_db_push($stage)
|
||
{
|
||
Vendor('PHPExcel.PHPExcel');
|
||
Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
|
||
Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
|
||
$baseDir = ROOT_PATH . 'public' . DS . 'davExcel' . DS . $stage . DS;
|
||
if (!is_dir($baseDir)) {
|
||
@mkdir($baseDir);
|
||
}
|
||
$objExcel = new \PHPExcel();
|
||
//set document Property
|
||
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
|
||
|
||
$objActSheet = $objExcel->getActiveSheet();
|
||
$letter = explode(',', "A,B,C,D,E,F,G,H,I,J,K,L,M,N");
|
||
$arrHeader = array('Journal Title', 'Journal P-ISSN', 'Journal E-ISSN', 'Article DOI/ID', 'PDF File Name', 'Article Title', 'Authors', 'Publication Date', 'Volume', 'Issue', 'Supplement', 'First Page', 'Last Page', 'Copyright Statement');
|
||
//填充表头信息
|
||
$lenth = count($arrHeader);
|
||
for ($i = 0; $i < $lenth; $i++) {
|
||
$objActSheet->setCellValue("$letter[$i]1", "$arrHeader[$i]");
|
||
// 设置表头高度
|
||
$objActSheet->getRowDimension('1')->setRowHeight(25);
|
||
};
|
||
|
||
//查找数据
|
||
$stage_info = $this->journal_stage_obj->where('journal_stage_id', $stage)->find();
|
||
$journal_info = $this->journal_obj->where('journal_id',$stage_info['journal_id'])->find();
|
||
$articles = $this->article_obj
|
||
->field('j_article.*,j_journal.title journalTitle,j_journal.issn')
|
||
->join("j_journal", "j_article.journal_id = j_journal.journal_id", 'left')
|
||
->where('j_article.journal_stage_id', $stage)
|
||
->where('j_article.state', 0)
|
||
->select();
|
||
//填充表格信息
|
||
foreach ($articles as $k => $v) {
|
||
$k += 2;
|
||
|
||
$objActSheet->setCellValue('A' . $k, choiseti1($v['article_id'],$v['journalTitle']));
|
||
$objActSheet->setCellValue('B' . $k, $v['issn']);
|
||
$objActSheet->setCellValue('C' . $k, '');
|
||
$objActSheet->setCellValue('D' . $k, $v['doi']);
|
||
$fpdf = explode("/", $v['file_pdf']);
|
||
$objActSheet->setCellValue('E' . $k, $fpdf[1]);
|
||
//下载pdf
|
||
copy('http://journalapi.tmrjournals.com/public/articlePDF/' . $v['file_pdf'], $baseDir . $fpdf[1]);
|
||
$objActSheet->setCellValue('F' . $k, $v['title']);
|
||
|
||
//构建作者
|
||
$cache_author = $this->article_author_obj->where('article_id', $v['article_id'])->where('state', 0)->column('author_name');
|
||
$objActSheet->setCellValue('G' . $k, implode(",", $cache_author));
|
||
$objActSheet->setCellValue('H' . $k, $v['pub_date']);
|
||
$objActSheet->setCellValue('I' . $k, $stage_info['stage_vol']);
|
||
//连续出版的issue为空
|
||
if(($journal_info['journal_id']==2&&$stage_info['stage_year']>=2022)||($journal_info['journal_id']==3&&$stage_info['stage_year']>=2022)||($journal_info['journal_id']==17&&$stage_info['stage_year']>=2019)){
|
||
$objActSheet->setCellValue('J' . $k, '');
|
||
}else{
|
||
$objActSheet->setCellValue('J' . $k, $stage_info['issue_date']);
|
||
}
|
||
|
||
if ($v['file_sub'] != '') {
|
||
$spdf = explode("/", $v['file_sub']);
|
||
//下载附加信息
|
||
copy('http://journalapi.tmrjournals.com/public/articleSUB/' . $v['file_sub'], $baseDir . $spdf[1]);
|
||
$objActSheet->setCellValue('K' . $k, $spdf[1]);
|
||
} else {
|
||
$objActSheet->setCellValue('K' . $k, '');
|
||
}
|
||
|
||
//整理分期
|
||
$npp = trim($v['npp']);
|
||
$npp = str_replace('–','-',$npp);
|
||
$npp = str_replace("—",'-',$npp);
|
||
if (strpos($npp, '-') == false) {
|
||
$objActSheet->setCellValue('L' . $k, '');
|
||
$objActSheet->setCellValue('M' . $k, '');
|
||
} else {
|
||
$cc = explode('-', trim($npp));
|
||
$objActSheet->setCellValue('L' . $k, $cc[0]);
|
||
$objActSheet->setCellValue('M' . $k, $cc[1]);
|
||
}
|
||
$objActSheet->setCellValue('N' . $k, "© " . $stage_info['stage_year'] . " By Author(s). Published by TMR Publishing Group Limited. This is an open access article under the CC-BY license. (http://creativecommons.org/licenses/BY/4.0/)");
|
||
// 表格高度
|
||
$objActSheet->getRowDimension($k)->setRowHeight(25);
|
||
}
|
||
$width = array(10, 15, 20, 25, 30);
|
||
//设置表格的宽度
|
||
$objActSheet->getColumnDimension('A')->setWidth($width[2]);
|
||
$objActSheet->getColumnDimension('B')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('C')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('D')->setWidth($width[2]);
|
||
$objActSheet->getColumnDimension('E')->setWidth($width[4]);
|
||
$objActSheet->getColumnDimension('F')->setWidth($width[4]);
|
||
$objActSheet->getColumnDimension('G')->setWidth($width[4]);
|
||
$objActSheet->getColumnDimension('H')->setWidth($width[2]);
|
||
$objActSheet->getColumnDimension('I')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('J')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('K')->setWidth($width[4]);
|
||
$objActSheet->getColumnDimension('L')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('M')->setWidth($width[1]);
|
||
$objActSheet->getColumnDimension('N')->setWidth($width[4]);
|
||
|
||
$outfileTitle = $stage_info['journal_stage_id'] . "dav";
|
||
$res = $objWriter->save($baseDir . $outfileTitle . ".xlsx");
|
||
|
||
$this->push_sftp($stage);
|
||
|
||
return json_encode(['code' => 0, 'msg' => '成功']);
|
||
}
|
||
|
||
// public function ls_push(){
|
||
// $stages = $this->journal_stage_obj->where('state',0)->where('is_publish',1)
|
||
// ->where('journal_stage_id',">",360)
|
||
// ->where('journal_stage_id',"<=",360)
|
||
// ->select();
|
||
// foreach($stages as $v){
|
||
// $this->push_sftp($v['journal_stage_id']);
|
||
// file_put_contents('/home/wwwroot/journalapi.tmrjournals.com/public/system/1.txt','****'.$v['journal_stage_id'],FILE_APPEND);
|
||
// }
|
||
// }
|
||
|
||
|
||
|
||
private function push_sftp($stage)
|
||
{
|
||
$stage_info = $this->journal_stage_obj->where('journal_stage_id',$stage)->find();
|
||
$journal_info = $this->journal_obj->where('journal_id',$stage_info['journal_id'])->find();
|
||
//链接sftp服务器
|
||
$config['host'] = 'ftp.portico.org';
|
||
$config['port'] = 22;
|
||
$config['username'] = "TMR";
|
||
$config['password'] = "h6EHD8";
|
||
$sftp_obj = new Sftp($config);
|
||
|
||
//判断目录是否存在,不存在创建
|
||
$j_base = $sftp_obj->ssh2_dir_exits("/SPREADSHEET/".$journal_info['issn']);
|
||
if(!$j_base){
|
||
$sftp_obj->ssh2_sftp_mchkdir("/SPREADSHEET/".$journal_info['issn']);
|
||
}
|
||
$m_base = $sftp_obj->ssh2_dir_exits("/SPREADSHEET/".$journal_info['issn'].'/'.$stage_info['stage_year'].'-'.$stage_info['stage_vol'].'-'.$stage_info['stage_no']);
|
||
if(!$m_base){
|
||
$sftp_obj->ssh2_sftp_mchkdir("/SPREADSHEET/".$journal_info['issn'].'/'.$stage_info['stage_year'].'-'.$stage_info['stage_vol'].'-'.$stage_info['stage_no']);
|
||
}
|
||
|
||
//读取文件夹内的内容
|
||
$files = scandir(ROOT_PATH . 'public' . DS . 'davExcel' . DS . $stage);
|
||
foreach($files as $v){
|
||
if($v=='.'||$v=='..'){
|
||
continue;
|
||
}
|
||
$cdata['local'] = ROOT_PATH . 'public' . DS . 'davExcel' . DS . $stage.DS.$v;
|
||
$cdata['remote'] = "/SPREADSHEET/".$journal_info['issn'].'/'.$stage_info['stage_year'].'-'.$stage_info['stage_vol'].'-'.$stage_info['stage_no']."/".$v;
|
||
Queue::push('app\api\job\mysftp@push', $cdata, "mysftp");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @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();
|
||
$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"]);
|
||
|
||
//发送sftp
|
||
$this->bf_db_push($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 Mycreate(){
|
||
$data = $this->request->post();
|
||
$url = "http://ts.tmrjournals.com/api/dataApi/createTemplate";
|
||
$stage_info = $this->journal_stage_obj->where("journal_stage_id", $data['journal_stage_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", $data['journal_stage_id'])->where("state", 0)->orderRaw("npp + 0")->select();
|
||
foreach ($alist as $k => $v) {
|
||
$cache["type"] = $v["type"];
|
||
$cache["no"] = $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);
|
||
}
|
||
copy('http://ts.tmrjournals.com/upload/' . $file, $base_dir . '/' . $stage_info["journal_stage_id"] . ".docx");
|
||
echo 'success !';
|
||
}
|
||
|
||
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)->orderRaw("npp + 0")->select();
|
||
foreach ($alist as $k => $v) {
|
||
$cache["type"] = $v["type"];
|
||
$cache["no"] = $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/" . $stage_info["stage_icon"], $base_dir . "/journal.jpg");
|
||
$zip->addFile($base_dir . "/journal.jpg", "journal.jpg");
|
||
$zip->close();
|
||
}
|
||
|
||
|
||
|
||
public function puttt(){
|
||
$this->createFtpFileInfo(320);
|
||
}
|
||
|
||
|
||
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['issn'];
|
||
$articles[$k]['vol'] = $stage_info['stage_vol'];
|
||
$articles[$k]['issue'] = $stage_info['stage_no'];
|
||
$articles[$k]['pdf'] = 'https://www.tmrjournals.com/public/articlePDF/' . $v['pdf'];
|
||
$articles[$k]['linkToAbstract'] = 'https://www.tmrjournals.com/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]);
|
||
}
|
||
|
||
public function phpinfo()
|
||
{
|
||
|
||
phpinfo();
|
||
}
|
||
|
||
// 连接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');
|
||
ftp_pasv($con, true);
|
||
$data = ftp_put($con, '/' . $name, $url, FTP_BINARY);
|
||
if (!$data) { // 上传失败
|
||
exit('上传失败');
|
||
}
|
||
ftp_close($con);
|
||
}
|
||
}
|