From 2ca099a25c80c73eb9f75604edd1c1028d1a93c2 Mon Sep 17 00:00:00 2001 From: chengxl Date: Thu, 5 Jun 2025 17:38:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=87=E7=AB=A0=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=98=9F=E5=88=97=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/common/JournalArticle.php | 128 +++++++++++++------------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/application/common/JournalArticle.php b/application/common/JournalArticle.php index 08091a7..9f4d49f 100644 --- a/application/common/JournalArticle.php +++ b/application/common/JournalArticle.php @@ -2,6 +2,7 @@ namespace app\common; use think\Db; use think\Env; +use think\Queue; class JournalArticle { @@ -37,6 +38,9 @@ class JournalArticle protected static $sDoiUrl = 'https://doi.org/'; + //必填参数 + protected static $aField = ['article_id','journal_id','journal_issn','related_article_id','article_author_id','email','content','is_success','msg','create_time']; + /** * 查询文章所关联的文章并发送邮件提醒 @@ -87,26 +91,13 @@ class JournalArticle return json_encode(['status' => 6,'msg' => 'No author information found for the article']); } - //数据处理-获取文章作者 - $aArticleAuthor = []; - foreach ($aAuthor as $key => $value) { - if(empty($value['email'])){ - continue; - } - $aArticleAuthor[$value['article_id']][$value['email']] = $value['author_name']; - } - - if(empty($aArticleAuthor)){ - return json_encode(['status' => 7,'msg' => 'No author information found for the article']); - } - //查询邮件发送日志 $aWhere = ['article_id' => $iArticleId,'is_success' => 1]; - $aEmailLog = Db::name('email_related_article')->field('related_article_id,email')->where($aWhere)->select(); + $aEmailLog = Db::name('email_related_article')->field('related_article_id,article_author_id')->where($aWhere)->select(); $aLog = []; if(!empty($aEmailLog)){ foreach ($aEmailLog as $key => $value) { - $aLog[$value['related_article_id']][] = $value['email']; + $aLog[$value['related_article_id']][] = $value['article_author_id']; } } @@ -114,14 +105,23 @@ class JournalArticle $aEmailInfo =self::$aEmailTemplate; //数据处理 $aEmailLog = []; - foreach ($aArticleAuthor as $key => $value) { + foreach ($aAuthor as $key => $value) { - if(empty($value)){ + //作者邮箱-发送信息 + $email = empty($value['email']) ? '' : $value['email']; + if(empty($email)){ + continue; + } + $email = '1172937051@qq.com';//'tmr@tmrjournals.com'; + //判断是否发送过邮件 + //邮件日志 + $aEmailLogInfo = empty($aLog[$value['article_id']]) ? [] : $aLog[$value['article_id']]; + if(in_array($value['article_author_id'], $aEmailLogInfo)){ continue; } //关联文章信息 - $aRelatedArticleInfo = empty($aRelatedArticle[$key]) ? [] : $aRelatedArticle[$key]; + $aRelatedArticleInfo = empty($aRelatedArticle[$value['article_id']]) ? [] : $aRelatedArticle[$value['article_id']]; if(empty($aRelatedArticleInfo)){ continue; } @@ -137,6 +137,7 @@ class JournalArticle $title = str_replace('{#email_subject#}', $from_name, $aEmailInfo['email_subject']); //邮件内容 $aSearch = [ + '{#author_name#}' => empty($value['author_name']) ? $email : $value['author_name'], '{#article_title#}' => empty($aRelatedArticleInfo['title']) ? '' : strip_tags($aRelatedArticleInfo['title']),//文章标题 '{#editorinchief#}' => 'Editorial Office',//empty($aJournalInfo['editorinchief']) ? '' : $aJournalInfo['editorinchief'],//总编辑 '{#journal_title#}' => $from_name,//期刊名 @@ -147,7 +148,7 @@ class JournalArticle $sArticleInfo = ''; $i = 1; foreach ($aRelatedArticle as $v) { - if($v['article_id'] == $key){ + if($v['article_id'] == $value['article_id']){ continue; } $sDoi = empty($v['doi']) ? '' : self::$sDoiUrl.$v['doi']; @@ -163,54 +164,55 @@ class JournalArticle } $aSearch['{#article_info#}'] = empty($sArticleInfo) ? '' : $sArticleInfo; - //邮件日志 - $aEmailLogInfo = empty($aLog[$key]) ? [] : $aLog[$key]; + $content = str_replace(array_keys($aSearch), array_values($aSearch), $aEmailInfo['email_content']); - //作者邮箱-发送信息 - foreach ($value as $k => $val) { - - $email = 'tmr@tmrjournals.com';//$k; - - //判断是否发送过邮件 - if(in_array($email, $aEmailLogInfo)){ - continue; - } - - $aSearch['{#author_name#}'] = empty($val) ? $email : $val; - $content = str_replace(array_keys($aSearch), array_values($aSearch), $aEmailInfo['email_content']); - - //判断标题和内容是否为空 - if(empty($title) || empty($content)){ - continue; - } - $pre = Env::get('emailtemplete.pre'); - $net = Env::get('emailtemplete.net'); - $net1 = str_replace("{{email}}",trim($email),$net); - $content=$pre.$content.$net1; - //发送邮件 - $memail = empty($aJournalInfo['email']) ? '' : $aJournalInfo['email']; - $mpassword = empty($aJournalInfo['epassword']) ? '' : $aJournalInfo['epassword']; - $aResult = sendEmail($email,$title,$from_name,$content,$memail,$mpassword); - exit; - $iStatus = empty($aResult['status']) ? 0 : $aResult['status']; - $iIsSuccess = 2; - $sMsg = empty($aResult['data']) ? '失败' : $aResult['data']; - if($iStatus == 1){ - $iIsSuccess = 1; - $sMsg = '成功'; - } - $aEmailLog[] = ['article_id' => $iArticleId,'related_article_id' => $key,'email' => $email,'content' => $content,'create_time' => time(),'is_success' => $iIsSuccess,'journal_id' => $aJournalInfo['journal_id'],'journal_issn' => $aJournalInfo['issn'],'msg' => $sMsg]; + //判断标题和内容是否为空 + if(empty($title) || empty($content)){ + continue; } - - } - //插入日志记录 - if(!empty($aEmailLog)){ - $result = Db::name('email_related_article')->insertAll($aEmailLog); - if($result === false){ - return json_encode(['status' => 8,'msg' => 'Email sending log insertion failed:'.json_encode($aEmailLog)]); + $pre = Env::get('emailtemplete.pre'); + $net = Env::get('emailtemplete.net'); + $net1 = str_replace("{{email}}",trim($email),$net); + $content=$pre.$content.$net1; + //发送邮件 + $memail = empty($aJournalInfo['email']) ? '' : $aJournalInfo['email']; + $mpassword = empty($aJournalInfo['epassword']) ? '' : $aJournalInfo['epassword']; + $aResult = sendEmail($email,$title,$from_name,$content,$memail,$mpassword); + $iStatus = empty($aResult['status']) ? 1 : $aResult['status']; + $iIsSuccess = 2; + $sMsg = empty($aResult['data']) ? '失败' : $aResult['data']; + if($iStatus == 1){ + $iIsSuccess = 1; + $sMsg = '成功'; } + $aEmaiParam = ['article_id' => $iArticleId,'article_author_id' =>$value['article_author_id'],'related_article_id' => $value['article_id'],'email' => $email,'content' => $content,'create_time' => time(),'journal_id' => $aJournalInfo['journal_id'],'journal_issn' => $aJournalInfo['issn'],'email' => $email,'title' => $title,'from_name' => $from_name,'content' => $content,'memail' => $memail,'mpassword' => $mpassword]; + //调用邮件发送队列 + Queue::push('app\api\job\SendRelatedArticleEmail@fire', $aEmaiParam, 'SendRelatedArticleEmail'); } - return json_encode(['status' => 1,'msg' => 'Email sent successfully']); + + return json_encode(['status' => 1,'msg' => 'Added to email sending queue']); + } + + /** + * 插入日志 + * + * @return void + */ + static function addLog($aParam = []) { + + //数据处理 + $aField = self::$aField; + $aInsert = []; + foreach ($aField as $key => $value) { + if(isset($aParam[$value])){ + $aInsert[$value] = $aParam[$value]; + } + } + $result = 0; + if(!empty($aInsert)){ + $result = DB::name('email_related_article')->insertGetId($aParam); + } + return $result; } }