公众号接口调整

This commit is contained in:
chengxl
2025-05-14 16:57:22 +08:00
parent 03928363ac
commit 267a645e27

View File

@@ -32,31 +32,15 @@ class Aiarticle extends Base
protected $timeout = 60;
protected $aAiFileds = ['article_id','title_english','title_chinese','journal_id','covered','digest','research_result','content','highlights','discussion','prospect','research_background',];
protected $sJournalUrl = 'http://journalapi.tmrjournals.com/public/index.php';//'http://zmzm.journal.dev.com'; //
protected $sJournalUrl = 'http://journalapi.tmrjournals.com/public/index.php';//'http://zmzm.journal.dev.com'; //
protected $sJournalUsx = 'https://www.tmrjournals.com';
protected $sSubmissionUrl = 'https://submission.tmrjournals.com/';
protected $aOpenAiAsk = [
1 => '
**核心要求**
1 请将姓名翻译中文
{#author_name#}
2 请将单位翻译成中文
{#company#}
3 请将简介翻译成中文
{#introduction#}
4 请将职称翻译成中文
{#technical#}
**输出格式**
格式内容
```json
{
"author_name": "",
"company": "",
"introduction": "",
"technical": ""
}
',
**核心要求**
"将以下内容翻译中文,仅返回翻译结果,不要解释:\n {#content#}"
',
2 => '
**核心要求**
1 ​内容涵盖哪些学科及方法请罗列
@@ -236,11 +220,79 @@ class Aiarticle extends Base
//获取文章是否生成AI内容
$aResult = json_decode($this->getArticle($iArticleId),true);
if($aResult['status'] != 1){
$iStatus = empty($aResult['status']) ? 0 : $aResult['status'];
if($iStatus != 1){
return json_encode($aResult);
}
//获取数据
$aArticleContent = empty($aResult['data']) ? [] : $aResult['data'];
//文章数据
$aArticle = empty($aArticleContent['article']) ? [] : $aArticleContent['article'];
if(empty($aArticle)){
return json_encode(['status' => 3,'msg' => 'The content of the article is empty']);
}
//查询AI内容是否生成
$aAiArticle = json_decode($this->getAiArticle($iArticleId),true);
$aAiArticleContent = empty($aAiArticle['data']) ? [] : $aAiArticle['data'];
$aAiArticle = empty($aAiArticleContent['ai_article']) ? [] : $aAiArticleContent['ai_article'];
$iId = empty($aAiArticle['ai_article_id']) ? 0 : $aAiArticle['ai_article_id'];
if(empty($aAiArticle)){
//插入t_ai_article数据
$aInsert = ['title_english' => $aArticle['title'],'article_id' => $iArticleId,'create_time' => time()];
$iId = Db::name('ai_article')->insertGetId($aInsert);
if($iId === false){
return json_encode(['status' => 4,'msg' => 'Data insertion failed']);
}
}
//判断是否生成
if($aAiArticle['is_generate'] == 1){
return json_encode(['status' => 5,'msg' => 'The data has been generated, please proceed with the next steps']);
}
//请求OPENAI
return $this->createForOpenAi($aArticleContent,$aAiArticle);
// //返回数据
// return json_encode(['status' => 1,'msg' => 'Data generation takes some time, please do not cancel this operation','data' => ['ai_article_id' => $iId]]);
}
public function createForOpenAi($aArticleContent = [],$aAiArticle = []){
if(empty($aArticleContent)){
$aParam = $this->request->post();
$iId = empty($aParam['ai_article_id']) ? 0 : $aParam['ai_article_id'];
//查询AI内容是否生成
$aAiArticle = json_decode($this->getAiArticle(0,1,$iId),true);
$aAiArticleContent = empty($aAiArticle['data']) ? [] : $aAiArticle['data'];
$aAiArticle = empty($aAiArticleContent['ai_article']) ? [] : $aAiArticleContent['ai_article'];
if(empty($aAiArticle)){
return json_encode(['status' => 4,'msg' => 'The article has not been generated, please confirm']);
}
//判断是否生成
if($aAiArticle['is_generate'] == 1){
return json_encode(['status' => 5,'msg' => 'The data has been generated, please proceed with the next steps']);
}
$iArticleId = empty($aAiArticle['article_id']) ? '' : $aAiArticle['article_id'];
//获取文章是否生成AI内容
$aResult = json_decode($this->getArticle($iArticleId),true);
$iStatus = empty($aResult['status']) ? 0 : $aResult['status'];
if($iStatus != 1){
return json_encode($aResult);
}
//获取数据
$aArticleContent = empty($aResult['data']) ? [] : $aResult['data'];
}
$iId = empty($aAiArticle['ai_article_id']) ? 0 : $aAiArticle['ai_article_id'];
$iArticleId = empty($aAiArticle['article_id']) ? 0 : $aAiArticle['article_id'];
//文章数据
$aArticle = empty($aArticleContent['article']) ? [] : $aArticleContent['article'];
@@ -294,27 +346,76 @@ class Aiarticle extends Base
$aContent['journal_id'] = $aArticle['journal_id'];
//获取AI生成表里的数据判断是新增或更新
$aAiContent = json_decode($this->getAiArticle($iArticleId,1),true);
$aAiContent = empty($aAiContent['data']) ? [] : $aAiContent['data'];
$aAiArticle = empty($aAiContent['ai_article']) ? [] : $aAiContent['ai_article'];
$aAiAuthor = empty($aAiContent['ai_article_autho']) ? [] : $aAiContent['ai_article_autho'];
if(empty($aAiArticle)){//新增
//执行数据入库
$aResult = $this->addAiArticle($aContent);
}
if(!empty($aAiArticle)){//更新
if(empty($aAiArticle['ai_article_id'])){
return json_encode(array('status' => 8,'msg' => 'No AI article found to update'));
}
//执行数据入库
$aContent['ai_article_id'] = $aAiArticle['ai_article_id'];
$aContent['author_list'] = $aAuthor;
$aResult = $this->updateAiArticle($aContent);
}
//更新数据库
$aContent['ai_article_id'] = $iId;
$aResult = $this->updateAiArticle($aContent);
return $aResult;
}
// public function createForOpenAi($aArticleContent = [],$iId = 0){
// if(empty($aArticleContent) || empty($iId)){
// return json_encode(['status' => 2,'msg' => 'data is empty']);
// }
// //文章数据
// $aArticle = empty($aArticleContent['article']) ? [] : $aArticleContent['article'];
// //期刊数据
// $aJournal = empty($aArticleContent['journal']) ? [] : $aArticleContent['journal'];
// //子期刊数据
// $aJournalStage = empty($aArticleContent['journal_stage']) ? [] : $aArticleContent['journal_stage'];
// //通讯作者
// $aAuthor = empty($aArticleContent['author']) ? [] : $aArticleContent['author'];
// //生成期刊图片二维码
// $aJournalQrCode = $this->createJournalQrCode($aJournal);
// if(empty($aJournalQrCode['qrcode_url'])){
// return json_encode(['status' => 3,'msg' => 'Journal QR code not generated']);
// }
// //生成文章图片二维码
// $aArticleQrCode = $this->createArticleQrCode($aArticle);
// if(empty($aArticleQrCode['qrcode_url'])){
// return json_encode(['status' => 4,'msg' => 'Article QR code not generated']);
// }
// //查询文章内容
// $aMain = empty($aArticleContent['main']) ? [] : $aArticleContent['main'];;
// $sContent = empty($aMain) ? '' : implode(',', $aMain);
// //请求OPENAI生成微信公众号文章内容
// $aSearch = [];
// $aSearch['{#content#}'] = $this->basic_html_filter($sContent);
// $aSearch['{#abstract#}'] = $this->basic_html_filter($aArticle['abstract']);
// $aSearch['{#title_chinese#}'] = $this->basic_html_filter($aArticle['title']);
// $aSearch['{#journal_content#}'] = $this->basic_html_filter($aJournal['journal_content'] ?? '');
// $aSearch['{#journal_content#}'] = trim(trim($aSearch['{#journal_content#}'],'.'),'。');
// $aResult = $this->_createContentForOpenAI($aSearch,2);
// $aResult = json_decode($aResult,true);
// if($aResult['status'] != 1){
// return json_encode($aResult);
// }
// $aContent = empty($aResult['data']) ? [] : $aResult['data'];
// if(empty($aContent)){
// return json_encode(['status' => 4,'msg' => 'Data is empty']);
// }
// //组装数据
// $aContent['article_id'] = $iArticleId;
// $aContent['title_english'] = $aArticle['title'];
// $aContent['journal_id'] = $aArticle['journal_id'];
// //更新数据库
// $aContent['ai_article_id'] = $iId;
// $aResult = $this->updateAiArticle($aContent);
// return $aResult;
// }
/**
* 处理文章引用
@@ -427,17 +528,36 @@ class Aiarticle extends Base
* 获取Ai生成文章信息
* @param article_id 文章ID
*/
public function getAiArticle($iArticleId = 0,$iSelectAuthor = 2){
public function getAiArticle($iArticleId = 0,$iSelectAuthor = 2,$iAiArticleId = 0){
$aParam = $this->request->post();
$iArticleId = empty($iArticleId) ? $aParam['article_id'] : $iArticleId;
//文章ID
$iArticleId = empty($iArticleId) ? '' : $iArticleId;
$iArticleIdParam = empty($aParam['article_id']) ? '' : $aParam['article_id'];
$iArticleId = empty($iArticleId) ? $iArticleIdParam : $iArticleId;
//AI生成文章ID
$iAiArticleId = empty($iAiArticleId) ? '' : $iAiArticleId;
$iAiArticleIdParam = empty($aParam['ai_article_id']) ? '' : $aParam['ai_article_id'];
$iAiArticleId = empty($iAiArticleId) ? $iAiArticleIdParam : $iAiArticleId;
if(empty($iArticleId) && empty($iAiArticleId)){
return json_encode(['status' => 2,'msg' => 'Please select the article to be generated']);
}
//查询AI生成的文章内容
$aWhere['article_id'] = $iArticleId;
$aWhere['is_delete'] = 2;
$aWhere = ['is_delete' => 2];
if(!empty($iArticleId)){
$aWhere['article_id'] = $iArticleId;
}
if(!empty($iAiArticleId)){
$aWhere['ai_article_id'] = $iAiArticleId;
}
$aAiArticle = Db::name('ai_article')->where($aWhere)->find();
if(empty($aAiArticle)){
return json_encode(['status' => 1,'msg' => 'data is null','data' => ['ai_article' => []]]);
}
$iArticleId = empty($aAiArticle['article_id']) ? 0 : $aAiArticle['article_id'];
//查询文章通讯作者
$aAiAuthor = [];
@@ -532,7 +652,7 @@ class Aiarticle extends Base
$aResult = ['status' => 1,'msg' => 'AI article updated successfully','data' => []];
//获取参数
$aParam = $this->request->post();
$aParam = empty($aParam) ? $this->request->post() : $aParam;
//主键ID
$iAiArticleId = empty($aParam['ai_article_id']) ? 0 : $aParam['ai_article_id'];
@@ -571,13 +691,78 @@ class Aiarticle extends Base
return json_encode(['status' => 1,'msg' => 'No data currently being processed']);
}
Db::startTrans();
//执行入库
$aUpdateParam['update_time'] = time();
$aUpdateParam['is_generate'] = 1;
$result = Db::name('ai_article')->where('ai_article_id',$iAiArticleId)->limit(1)->update($aUpdateParam);
if($result === false){
$aResult = json_encode(['status' => 3,'msg' => 'UPDATEING AI article failed']);
}
$aResult['data'] = $aUpdateParam;
//更新作者信息
$aAuthorList = empty($aParam['author_list']) ? []: $aParam['author_list'];
$aAuthorList = is_array( $aAuthorList) ? $aAuthorList: json_decode($aAuthorList,true);
if(!empty($aAuthorList)){
$aAuthorList = array_column($aAuthorList, null,'email');
//根据邮箱查询作者信息
$aEmail = array_keys($aAuthorList);
$aUserInfo = $aUserReviewer = [];
if(!empty($aEmail)){
$aUserParam = ['email' => ['in',$aEmail]];
$aUserInfo = Db::name('user')->field('email,user_id')->where($aUserParam)->select();
if(!empty($aUserInfo)){
$aUserId = array_column($aUserInfo, 'user_id');
//查询用户附表
$aWhere = ['reviewer_id' => ['in',$aUserId]];
$aUserReviewer = Db::name('user_reviewer_info')->where($aWhere)->column('reviewer_id');
}
}
//更新用户信息
if(!empty($aUserInfo)){
foreach ($aUserInfo as $key => $value) {
$aUser = empty($aAuthorList[$value['email']]) ? [] : $aAuthorList[$value['email']];
if(empty($aUser)){
continue;
}
//更新作者名字
if(!empty($aUser['author_name'])){
$aUpdate = ['localname' => $aUser['author_name']];
Db::name('user')->where('user_id',$value['user_id'])->limit(1)->update($aUpdate);
}
//更新作者简介和单位
$aUpdateReviewer = [];
if(!empty($aUser['technical'])){
$aUpdateReviewer['technical'] = $aUser['technical'];
}
if(!empty($aUser['introduction'])){
$aUpdateReviewer['introduction'] = $aUser['introduction'];
}
if(!empty($aUser['company'])){
$aUpdateReviewer['company'] = $aUser['company'];
}
if(!empty($aUpdateReviewer)){
if(in_array($value['user_id'], $aUserReviewer)){//更新
Db::name('user_reviewer_info')->where('reviewer_id',$value['user_id'])->limit(1)->update($aUpdateReviewer);
}
if(!in_array($value['user_id'], $aUserReviewer)){//插入
$aUpdateReviewer['reviewer_id'] = $value['user_id'];
Db::name('user_reviewer_info')->insert($aUpdateReviewer);
}
}
}
}
}
Db::commit();
$aResult['data'] = $aUpdateParam;
return json_encode($aResult);
}
@@ -809,26 +994,32 @@ class Aiarticle extends Base
$aAuthorSerachInfo = [];
$sAuthorInfo = '';
$aLogo = $this->aLogo;
//请求AI翻译
$sContent = '';
$aSearch['{#content#}'] = json_encode($aAuthor);
$aResult = json_decode($this->_createContentForOpenAI($aSearch,1),true);
$aContent = empty($aResult['data']) ? [] : array_column($aResult['data'], null,'email');
foreach ($aAuthor as $key => $value) {
//请求AI翻译
$aSearch['{#company#}'] = empty($value['company']) ? '' : $value['company'];
$aSearch['{#technical#}'] = empty($value['technical']) ? '' : $value['technical'];
$aSearch['{#introduction#}'] = empty($value['introduction']) ? '' : $value['introduction'];
$aResult = $this->_createContentForOpenAI($aSearch,1);
$aResult = json_decode($aResult,true);
if($aResult['status'] == 1){
$aContent = empty($aResult['data']) ? [] : $aResult['data'];
$value['company'] = empty($aContent['company']) ? $value['company'] : $aContent['company'];
$value['technical'] = empty($aContent['technical']) ? $value['technical'] : $aContent['technical'];
$value['introduction'] = empty($aContent['introduction']) ? $value['introduction'] : $aContent['introduction'];
}
$aInfo = empty($aContent[$value['email']]) ? [] : $aContent[$value['email']];
$aAuthorSerach = [];
//所属单位处理
$value['company'] = empty($aInfo['company']) ? $value['company'] : $aInfo['company'];
if(!empty($value['company'])){
$value['company'] =str_replace('', ',', $value['company']);
$aCompany = explode(',', $value['company']);
}
$value['company'] = empty($aCompany[0]) ? $value['company'] : trim($aCompany[0],',');
//职称处理
$value['technical'] = empty($aInfo['technical']) ? $value['technical'] : $aInfo['technical'];
//简介处理
$value['introduction'] = empty($aInfo['introduction']) ? $value['introduction'] : $aInfo['introduction'];
foreach ($value as $k => $val) {
if($k == 'icon'){
$aAuthorSerach['{###icon_path###}'] = empty($val) ? $aLogo['url'] : trim($this->sSubmissionUrl,'/').'/public/usericon/'.$val;
@@ -1137,7 +1328,6 @@ class Aiarticle extends Base
$aParam['template_content'] = $aData['template'];
$aParam['template_id'] = $iTemplateId;
$aResult = $this->addDraft($aParam);
echo '<pre>';var_dump($aResult);exit;
return $aResult;
}
@@ -1430,7 +1620,6 @@ class Aiarticle extends Base
curl_close($curl);
return FALSE;
}
var_dump($this->sError,$result);
$result = json_decode($result, true);
if (!empty($result['access_token'])) {
@@ -1880,4 +2069,32 @@ $response['publish_id'] = '100000001';
$aResult['data'] = $aInsert;
return json_encode($aResult);
}
/**
* 获取Ai生成文章状态
* @param article_id 文章ID
*/
public function getAiArticleStatus(){
$aParam = $this->request->post();
//AI生成文章ID
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
if(empty($iArticleId)){
return json_encode(['status' => 2,'msg' => 'Please select the article to be generated']);
}
//查询AI生成的文章内容
$aWhere = ['is_delete' => 2];
if(!empty($iArticleId)){
$aWhere['article_id'] = $iArticleId;
}
$aAiArticle = Db::name('ai_article')->field('is_generate')->where($aWhere)->find();
// 生成状态
$aMsg = [1 => 'The data has been generated, please proceed with the next steps',2 => 'AI content generation in progress',3 => 'AI content not generated'];
$iStatus = empty($aAiArticle['is_generate']) ? 3 : $aAiArticle['is_generate'];
$sMsg = empty($aMsg[$iStatus]) ? 'illegal request' : $aMsg[$iStatus];
return json_encode(['status' => 1,'msg' => $sMsg,'data' => ['is_generate' => $iStatus]]);
}
}