From 4cabe79a589135e68c9d274ef38633aadcd0f60d Mon Sep 17 00:00:00 2001 From: chengxl Date: Thu, 15 May 2025 15:32:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Aiarticle.php | 134 +++++++++++++++++++---- 1 file changed, 111 insertions(+), 23 deletions(-) diff --git a/application/api/controller/Aiarticle.php b/application/api/controller/Aiarticle.php index 1415711..ba6dabe 100644 --- a/application/api/controller/Aiarticle.php +++ b/application/api/controller/Aiarticle.php @@ -93,6 +93,8 @@ class Aiarticle extends Base protected $sArticleIcon = '/public/articleicon/'; //期刊图片icon地址 protected $sJournalIcon = '/public/journalicon/'; + //期刊编辑二维码地址 + protected $sJournalEditorQrcode = '/public/journaleditorqrcode/'; //"highlights": { // "theory_innovation": "【中西医理论结合点】", // "methodology": "【关键技术+量化指标】", @@ -349,6 +351,7 @@ class Aiarticle extends Base //更新数据库 $aContent['ai_article_id'] = $iId; + $aContent['author'] = empty($aJournal['publish_author']) ? 'TMR编辑部' : $aJournal['publish_author']; $aResult = $this->updateAiArticle($aContent); return $aResult; } @@ -580,6 +583,13 @@ class Aiarticle extends Base } } + + //查询是否上传到微信草稿箱 + if(!empty($iArticleId)){ + $aDraft = Db::name('ai_wechat_article')->where(['article_id' => $iArticleId,'is_delete' => 2])->column('template_id'); + $aAiArticle['upload_draft'] = $aDraft; + } + return json_encode(['status' => 1,'msg' => 'success','data' => ['ai_article' => $aAiArticle,'ai_article_author' => $aAiAuthor]]); } /** @@ -589,7 +599,7 @@ class Aiarticle extends Base */ private function basic_html_filter($html) { // 移除所有HTML标签及PHP标签 - $text = strip_tags($html); + $text = empty($html) ? '' : strip_tags($html); // 转换HTML实体 $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'UTF-8'); @@ -626,7 +636,7 @@ class Aiarticle extends Base $aInsertParam[$val] = $aParam[$val]; continue; } - $aInsertParam[$val] = addslashes(strip_tags($aParam[$val])); + $aInsertParam[$val] = empty($aParam[$val]) ? '' : addslashes(strip_tags($aParam[$val])); } if($bStatus == false){ return json_encode(['status' => 2,'msg' => $sFiled.'cannot be empty']); @@ -686,7 +696,7 @@ class Aiarticle extends Base if(!isset($aParam[$val])){ continue; } - $aUpdateParam[$val] = addslashes(strip_tags($aParam[$val])); + $aUpdateParam[$val] = empty($aParam[$val]) ? '' : addslashes(strip_tags($aParam[$val])); } if(empty($aUpdateParam)){ return json_encode(['status' => 1,'msg' => 'No data currently being processed']); @@ -695,7 +705,7 @@ class Aiarticle extends Base Db::startTrans(); //执行入库 $aUpdateParam['update_time'] = time(); - $aUpdateParam['author'] = empty($aUpdateParam['author']) ? 'TMR编辑部' : $aUpdateParam['author']; + // $aUpdateParam['author'] = empty($aUpdateParam['author']) ? 'TMR编辑部' : $aUpdateParam['author']; $aUpdateParam['is_generate'] = 1; $result = Db::name('ai_article')->where('ai_article_id',$iAiArticleId)->limit(1)->update($aUpdateParam); if($result === false){ @@ -828,6 +838,10 @@ class Aiarticle extends Base //期刊图片 $sJournalIcon = trim($this->sJournalUsx,'/').$this->sJournalIcon.$aJournal['journal_icon']; + //期刊编辑二维码 + $sEditorQrcode = empty($aJournal['editor_qrcode']) ? '' : $aJournal['editor_qrcode']; + $sEditorQrcode = trim($this->sSubmissionUrl,'/').$this->sJournalEditorQrcode.$sEditorQrcode; + //获取期刊图片二维码 $aJournalQrCode = $this->createJournalQrCode($aJournal); $sJournalCode = empty($aJournalQrCode['qrcode_url']) ? '' : $this->sSubmissionUrl.'public/qrcode/'.$aJournalQrCode['qrcode_url']; @@ -882,12 +896,20 @@ class Aiarticle extends Base $aAiAuthor[$key]['icon'] = empty($aAuthorData['media_url']) ? $value['icon'] : $aAuthorData['media_url']; } } + + //上传期刊编辑二维码 + $aUpload = ['editor_qrcode' => $aJournal['editor_qrcode']??'','journal_id' => $aAiArticle['journal_id']]; + $aJournalEditorQrCodeResult = json_decode($this->_updateJournalEditorQrcode($aUpload),true); + $aJournalEditorQrCodeData = empty($aJournalEditorQrCodeResult['data']) ? [] : $aJournalEditorQrCodeResult['data']; + $aAiArticle['editor_qrcode'] = empty($aJournalEditorQrCodeData['media_url']) ? $sEditorQrcode : $aJournalEditorQrCodeData['media_url']; }else{ //处理文章图片地址数据 $aAiArticle['article_icon'] = $sArticleIcon; //处理文章期刊图片地址数据 $aAiArticle['journal_icon'] = $sJournalIcon; + //期刊编辑二维码图片地址数据 + $aAiArticle['editor_qrcode'] = $sEditorQrcode; } //期刊访问地址 @@ -919,7 +941,10 @@ class Aiarticle extends Base //数据处理 $aSearch = []; foreach ($aAiArticle as $key => $value) { - $aSearch['{###'.$key.'###}'] = htmlspecialchars(strip_tags($value)); + if(is_array($value)){ + continue; + } + $aSearch['{###'.$key.'###}'] = empty($value) ? '' : htmlspecialchars(strip_tags($value)); } //处理通讯作者信息数据 $aAuthorInfo = json_decode($this->dealTemplateAuthor($aAuthor,$iTemplateId),true); @@ -1407,12 +1432,6 @@ class Aiarticle extends Base if(empty($iJournalId) || empty($sIcon)){ return json_encode(['status' => 2,'msg' => 'journal_id or image is empty']); } - //查询是否添加素材 - $aWhere = ['journal_id' => $iJournalId,'is_delete' => 2]; - $aMaterial = Db::name('ai_journal_material')->field('media_id,media_url')->where($aWhere)->find(); - if(!empty($aMaterial)){ - return json_encode(['status' => 1,'msg' => 'success','data' => $aMaterial]); - } //处理图片地址 $aImageInfo = pathinfo($sIcon); @@ -1420,12 +1439,12 @@ class Aiarticle extends Base $sExtension = empty($aImageInfo['extension']) ? 'jpg' : $aImageInfo['extension']; $sImagePath = 'journal/imgae_'.$iJournalId.'.'.$sExtension; $sImagePath = ROOT_PATH.'public/qrcode/'.$sImagePath; - if (!file_exists($sImagePath)) {//下载图片 - $aImageInfo = json_decode($this->getImage($sIcon,$iJournalId,'journal'),true); - if(empty($aImageInfo['data'])){ - return json_encode(['status' => 3,'msg' => 'Image download failed']); - } + // if (!file_exists($sImagePath)) {//下载图片 + $aImageInfo = json_decode($this->getImage($sIcon,$iJournalId,'journal'),true); + if(empty($aImageInfo['data'])){ + return json_encode(['status' => 3,'msg' => 'Image download failed']); } + // } //调用微信新增素材接口上传 $aUploadResult = json_decode($this->uploadMaterial($sImagePath),true); @@ -1439,16 +1458,31 @@ class Aiarticle extends Base return json_encode(['status' => 5,'msg' => 'Material not obtained']); } + //查询是否添加素材 + $aWhere = ['journal_id' => $iJournalId,'is_delete' => 2]; + $aMaterial = Db::name('ai_journal_material')->field('id,media_id,media_url')->where($aWhere)->find(); + //处理入库数据 $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; - //入库数据组装 - $aInsert = ['type' => 'image','media_id' => $sMediaId,'create_time' => $iTime,'journal_id' => $iJournalId,'media_url' => $sMediaUrl]; - $response = Db::name('ai_journal_material')->insert($aInsert); - if($response === false){ - return json_encode(['status' => 6,'msg' => 'Add fail']); + + + //操作数据组装 + $aInsert = ['type' => 'image','media_id' => $sMediaId,'journal_id' => $iJournalId,'media_url' => $sMediaUrl]; + + Db::startTrans(); + + $aInsert['create_time'] = $iTime; + $responseInsert = Db::name('ai_journal_material')->insert($aInsert); + + if(!empty($aMaterial)){ + $aUpdate['update_time'] = $iTime; + $aUpdate['is_delete'] = 1; + $responseUpdate = Db::name('ai_journal_material')->where('id',$aMaterial['id'])->limit(1)->update($aUpdate); } + Db::commit(); + return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } /** @@ -1594,6 +1628,60 @@ class Aiarticle extends Base return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); } + /** + * 更新通讯作者关联微信公众号素材 + */ + private function _updateJournalEditorQrcode($aParam = []){ + + $iJournalId = empty($aParam['journal_id']) ? '' : $aParam['journal_id']; + //文章图片 + $sIcon = empty($aParam['editor_qrcode']) ? '20250515/103a7cdf2f76dc4d522b7273d4b149e5.jpg' : $aParam['editor_qrcode']; + + if(empty($iJournalId) || empty($sIcon)){ + return json_encode(['status' => 2,'msg' => 'The journal editor did not upload the QR code']); + } + + //处理图片地址 + $sImagePath = ROOT_PATH.'/public/journaleditorqrcode/'.trim($sIcon,'/'); + + //调用微信新增素材接口上传 + $aUploadResult = json_decode($this->uploadMaterial($sImagePath),true); + $iStatus = empty($aUploadResult['status']) ? 0 : $aUploadResult['status']; + $sMsg = empty($aUploadResult['msg']) ? 'Failed to upload materials' : $aUploadResult['msg']; + if($iStatus != 1){ + return json_encode(['status' => 4,'msg' => $sMsg]); + } + $aData = empty($aUploadResult['data']) ? [] : $aUploadResult['data']; + if(empty($aData['url'])){ + return json_encode(['status' => 5,'msg' => 'Material not obtained']); + } + //查询是否添加素材 + $aWhere = ['journal_id' => $iJournalId,'is_delete' => 2]; + $aMaterial = Db::name('ai_journal_editor_material')->field('id,media_id,media_url')->where($aWhere)->find(); + + //处理入库数据 + $sMediaId = empty($aData['media_id']) ? [] : $aData['media_id']; + $sMediaUrl = empty($aData['url']) ? [] : $aData['url']; + $iTime = empty($aUploadResult['created_at']) ? time() : $aUploadResult['created_at']; + + + //操作数据组装 + $aInsert = ['type' => 'image','media_id' => $sMediaId,'journal_id' => $iJournalId,'media_url' => $sMediaUrl]; + + Db::startTrans(); + + $aInsert['create_time'] = $iTime; + $responseInsert = Db::name('ai_journal_editor_material')->insert($aInsert); + + if(!empty($aMaterial)){ + $aUpdate['update_time'] = $iTime; + $aUpdate['is_delete'] = 1; + $responseUpdate = Db::name('ai_journal_editor_material')->where('id',$aMaterial['id'])->limit(1)->update($aUpdate); + } + Db::commit(); + return json_encode(['status' => 1,'msg' => 'success','data' => $aInsert]); + } + /** * CURL 发送请求获取Token * @param $appid AppID(小程序ID) @@ -1814,10 +1902,10 @@ class Aiarticle extends Base } //是否打开评论,0不打开(默认),1打开 - $need_open_comment = empty($aParam['need_open_comment']) ? 0 : $aParam['need_open_comment']; + $need_open_comment = empty($aParam['need_open_comment']) ? 1 : $aParam['need_open_comment']; //是否粉丝才可评论,0所有人可评论(默认),1粉丝才可评论 - $only_fans_can_comment = empty($aParam['only_fans_can_comment']) ? 0 : $aParam['only_fans_can_comment']; + $only_fans_can_comment = empty($aParam['only_fans_can_comment']) ? 1 : $aParam['only_fans_can_comment']; //插入文章表 $aParam = ['media_id' => $response['media_id'],'update_time' => time(),'template_id' => $iTemplateId,'template_content' => $aParam['template_content'],'article_id' => $iArticleId,'article_type' => $article_type,'need_open_comment' => $need_open_comment,'only_fans_can_comment' => $only_fans_can_comment,'template_id' => $iTemplateId,'create_time' => time()];