大更新,1投稿系统参考文献的类型增加功能,,,2官网数据库功能

This commit is contained in:
wangjinlei
2026-07-08 11:15:44 +08:00
parent 186126a726
commit 05af67bc1a
22 changed files with 1634 additions and 81 deletions

View File

@@ -0,0 +1,62 @@
<?php
namespace app\master\service\push;
use app\master\service\XmlBuilder;
/**
* EBSCO 推送器
* 为每篇文章生成 XML连同 PDF 通过 FTP 上传到 EBSCO。
* 逻辑迁移自 Datebase::pushXmlToEp / pushFtpForEp。
*/
class EbscoPusher extends AbstractPusher
{
public function code()
{
return 'ebsco';
}
public function label()
{
return 'EBSCO';
}
public function pushStage($stage_id, array $options = [])
{
$stage_info = $this->journal_stage_obj->where("journal_stage_id", $stage_id)->find();
$list = $this->article_obj->where("journal_stage_id", $stage_id)->select();
$journal_info = $this->journal_obj->where("journal_id", $stage_info['journal_id'])->find();
$count = 0;
foreach ($list as $v) {
$local_file = XmlBuilder::forArticle($v['article_id']);
$file = substr($v['doi'], strpos($v['doi'], "/") + 1) . ".xml";
$remote_file = "/" . $journal_info['title'] . "/" . $stage_info['stage_year'] . "v" . $stage_info['stage_vol'] . "n" . $stage_info['stage_no'] . "-" . $file;
$this->pushFtp($remote_file, $local_file);
$localPdf = ROOT_PATH . "public/articlePDF/" . $v['file_pdf'];
$remotePdf = "/" . $journal_info['title'] . "/" . $stage_info['stage_year'] . "v" . $stage_info['stage_vol'] . "n" . $stage_info['stage_no'] . "-" . substr($v['doi'], strpos($v['doi'], "/") + 1) . ".pdf";
$this->pushFtp($remotePdf, $localPdf);
$count++;
}
return PushResult::success("EBSCO 已上传 {$count} 篇文章的 XML/PDF");
}
private function pushFtp($remote_file, $local_file)
{
$cred = $this->cred('ebsco');
$con = ftp_connect($cred['host'], $cred['port']);
if (!$con) {
throw new \Exception('EBSCO FTP 连接失败');
}
$res = ftp_login($con, $cred['user'], $cred['pass']);
if (!$res) {
ftp_close($con);
throw new \Exception('EBSCO FTP 登录失败');
}
ftp_pasv($con, true);
$data = ftp_put($con, $remote_file, $local_file, FTP_BINARY);
ftp_close($con);
if (!$data) {
throw new \Exception('EBSCO FTP 上传失败: ' . $remote_file);
}
}
}