Files
journal/application/master/service/push/EmailDataPusher.php

107 lines
4.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\master\service\push;
use think\Queue;
/**
* 邮件送交推送器(通用数据库 / 万方等)
* 打包整期 docx + PDF + 封面 zip作为附件发邮件给数据库收件人。
* 逻辑迁移自 Datebase::dataPush 的邮件部分 + createEmailFile。
*/
class EmailDataPusher extends AbstractPusher
{
public function code()
{
return 'email_data';
}
public function label()
{
return '数据库邮件送交';
}
public function pushStage($journal_stage_id, array $options = [])
{
$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();
// 幂等构建整期附件 zip
$zipfile = ROOT_PATH . "public/dataFile/" . $journal_stage_id . '/' . $journal_stage_id . '.zip';
if (!file_exists($zipfile)) {
$this->buildIssueZip($journal_stage_id, $stage_info, $journal_info);
}
// 收件人:渠道配置优先,否则用默认通用收件人
$recipients = !empty($options['recipients']) ? $options['recipients'] : $this->conf('data_recipients', []);
if (empty($recipients)) {
return PushResult::fail('未配置收件人');
}
$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";
foreach ($recipients 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");
}
return PushResult::success('已向 ' . count($recipients) . ' 个收件人加入邮件队列');
}
/**
* 构建整期 zipContents.docx + 各文章 PDF + 封面)
*/
private function buildIssueZip($journal_stage_id, $stage_info, $journal_info)
{
$ts_base_url = $this->conf('ts_base_url');
$pdfBase = $this->conf('article_pdf');
$publicBase = $this->conf('public_base');
$url = $ts_base_url . "api/dataApi/createTemplate";
$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 $v) {
$cache["type"] = $v["type"];
$cache["no"] = $v["npp"];
$cache["title"] = $v["title"];
$cache["author"] = $this->getAuthorNames($v['article_id']);
$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, 0777, true);
}
$zip = new \ZipArchive;
$zip->open($base_dir . '/' . $stage_info["journal_stage_id"] . '.zip', \ZipArchive::CREATE);
copy($ts_base_url . '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 $v) {
copy($pdfBase . $v['file_pdf'], $base_dir . '/' . $v["npp"] . ".pdf");
$zip->addFile($base_dir . '/' . $v["npp"] . ".pdf", $v["npp"] . ".pdf");
}
copy($publicBase . $stage_info["stage_icon"], $base_dir . "/journal.jpg");
$zip->addFile($base_dir . "/journal.jpg", "journal.jpg");
$zip->close();
}
}