Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1724,6 +1724,16 @@ class Article extends Base
|
|||||||
}
|
}
|
||||||
//文章状态修改为退修状态 给同意审稿但一直未审稿人发送邮件且扣减其分数值 chengxiaoling 20250617 end
|
//文章状态修改为退修状态 给同意审稿但一直未审稿人发送邮件且扣减其分数值 chengxiaoling 20250617 end
|
||||||
|
|
||||||
|
//文章状态修改为预接收 对作者提交的稿件内容进行校对 chengxiaoling 20251013 start
|
||||||
|
if ($data['state'] == 6) {
|
||||||
|
$iArticleId = empty($article_info['article_id']) ? 0 : $article_info['article_id'];
|
||||||
|
if (!empty($iArticleId)) {
|
||||||
|
$iSeconds = 120;//两分钟后执行
|
||||||
|
Queue::later($iSeconds,'app\api\job\ArticleProofRead@fire',['article_id' => $iArticleId], 'ArticleProofRead');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//文章状态修改为预接收 对作者提交的稿件内容进行校对 chengxiaoling 20251013 end
|
||||||
|
|
||||||
//重新计算审稿人的审稿质量 chengxiaoling start 0416
|
//重新计算审稿人的审稿质量 chengxiaoling start 0416
|
||||||
$this->reviewQuality($article_info['article_id']);
|
$this->reviewQuality($article_info['article_id']);
|
||||||
//重新计算审稿人的审稿质量 chengxiaoling end 0416
|
//重新计算审稿人的审稿质量 chengxiaoling end 0416
|
||||||
@@ -4610,7 +4620,7 @@ class Article extends Base
|
|||||||
*/
|
*/
|
||||||
private function messageTips($article_id, $user_id)
|
private function messageTips($article_id, $user_id)
|
||||||
{
|
{
|
||||||
$article = $this->article_obj->field('t_article.user_id,t_article.editor_id,t_article.accept_sn,t_journal.journal_id,t_journal.title,t_journal.email,t_journal.epassword')
|
$article = $this->article_obj->field('t_article.user_id,t_article.editor_id,t_article.accept_sn,t_journal.journal_id,t_journal.title,t_journal.email,t_journal.epassword,t_journal.issn as journal_issn,t_journal.website as journal_website')
|
||||||
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'LEFT')
|
->join('t_journal', 't_journal.journal_id = t_article.journal_id', 'LEFT')
|
||||||
->where('t_article.article_id', $article_id)
|
->where('t_article.article_id', $article_id)
|
||||||
->find();
|
->find();
|
||||||
@@ -4629,12 +4639,64 @@ class Article extends Base
|
|||||||
if ($res['type'] == 2) { //编辑 - 修改editor_act,并发送给作者发邮件
|
if ($res['type'] == 2) { //编辑 - 修改editor_act,并发送给作者发邮件
|
||||||
$this->article_obj->where('article_id', $article_id)->update(['editor_act' => 1]);
|
$this->article_obj->where('article_id', $article_id)->update(['editor_act' => 1]);
|
||||||
$author = $this->user_obj->where('user_id', $article['user_id'])->find();
|
$author = $this->user_obj->where('user_id', $article['user_id'])->find();
|
||||||
// 发邮件
|
// // 发邮件
|
||||||
$content = 'Dear ' . $author['realname'] . ',<br>';
|
// $content = 'Dear ' . $author['realname'] . ',<br>';
|
||||||
$content .= 'Thank you for contacting our editor. <br>ID: ' . $article['accept_sn'] . '.<br><br>';
|
// $content .= 'Thank you for contacting our editor. <br>ID: ' . $article['accept_sn'] . '.<br><br>';
|
||||||
$content .= ' Your manuscript: ' . $article['accept_sn'] . ' has received a new reply; please login https://submission.tmrjournals.com/login to check. <br>';
|
// $content .= ' Your manuscript: ' . $article['accept_sn'] . ' has received a new reply; please login https://submission.tmrjournals.com/login to check. <br>';
|
||||||
$content .= 'Sincerely,<br>' . $article['title'];
|
// $content .= 'Sincerely,<br>' . $article['title'];
|
||||||
sendEmail($author['email'], $article['title'], $article['title'], $content, $article['email'], $article['epassword']);
|
// sendEmail($author['email'], $article['title'], $article['title'], $content, $article['email'], $article['epassword']);
|
||||||
|
//邮件内容修改 chengxiaoling 20251015 start
|
||||||
|
//邮箱
|
||||||
|
$email = empty($author['email']) ? '' : $author['email'];
|
||||||
|
if(!empty($email)){
|
||||||
|
//邮件模版
|
||||||
|
$aEmailConfig = [
|
||||||
|
'email_subject' => 'Please Check the Editorial Comments in the Submission System',
|
||||||
|
'email_content' => 'Dear {author_name},<br><br>
|
||||||
|
|
||||||
|
We would like to inform you that our editors have left a message regarding your submission in the online submission system at https://submission.tmrjournals.com/login.<br>
|
||||||
|
Please log in to your account to view the message and respond at your earliest convenience.<br><br>
|
||||||
|
|
||||||
|
If you have any questions or encounter any issues accessing the submission system, please feel free to contact us.<br><br>
|
||||||
|
|
||||||
|
Sincerely,<br>
|
||||||
|
Editorial Office<br>
|
||||||
|
{journal_title}<br>
|
||||||
|
<a href="https://www.tmrjournals.com/draw_up.html?issn={journal_issn}">Subscribe to this journal</a><br>
|
||||||
|
Email: {journal_email}<br>
|
||||||
|
Website: {website}'
|
||||||
|
];
|
||||||
|
|
||||||
|
//作者姓名
|
||||||
|
$realname = empty($author['realname']) ? '' : $author['realname'];
|
||||||
|
$realname = empty($author['account']) ? $realname : $author['account'];
|
||||||
|
|
||||||
|
//期刊标题
|
||||||
|
$from_name = empty($article['title']) ? '' : $article['title'];
|
||||||
|
//发送邮件
|
||||||
|
$memail = empty($article['email']) ? '' : $article['email'];
|
||||||
|
$mpassword = empty($article['epassword']) ? '' : $article['epassword'];
|
||||||
|
//处理数据
|
||||||
|
$aSearch = [
|
||||||
|
'{journal_title}' => $from_name,//期刊名
|
||||||
|
'{journal_issn}' => empty($article['journal_issn']) ? '' : $article['journal_issn'],
|
||||||
|
'{journal_email}' => empty($article['email']) ? '' : $article['email'],
|
||||||
|
'{website}' => empty($article['journal_website']) ? '' : $article['journal_website'],
|
||||||
|
'{author_name}' => $realname
|
||||||
|
];
|
||||||
|
|
||||||
|
//邮件标题
|
||||||
|
$title = empty($aEmailConfig['email_subject']) ? '' : $aEmailConfig['email_subject'];
|
||||||
|
//邮件内容变量替换
|
||||||
|
$content = str_replace(array_keys($aSearch), array_values($aSearch), $aEmailConfig['email_content']);
|
||||||
|
$pre = \think\Env::get('emailtemplete.pre');
|
||||||
|
$net = \think\Env::get('emailtemplete.net');
|
||||||
|
$net1 = str_replace("{{email}}",trim($email),$net);
|
||||||
|
$content=$pre.$content.$net1;
|
||||||
|
//发送邮件
|
||||||
|
$result = sendEmail($email,$title,$from_name,$content,$memail,$mpassword);
|
||||||
|
}
|
||||||
|
//邮件内容修改 chengxiaoling 20251015 end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -838,6 +838,127 @@ class Board extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增编辑编委信息-新
|
||||||
|
*/
|
||||||
|
public function addBoardNew(){
|
||||||
|
$data = $this->request->post();
|
||||||
|
$rule = new Validate([
|
||||||
|
"user_id"=>"require",
|
||||||
|
"journal_id"=>"require",
|
||||||
|
"type"=>"require",
|
||||||
|
"board_group_id"=>"require",
|
||||||
|
"research_areas"=>"require",
|
||||||
|
"realname"=>"require",
|
||||||
|
"email"=>"require",
|
||||||
|
"website"=>"require",
|
||||||
|
"affiliation"=>"require",
|
||||||
|
"technical"=>"require",
|
||||||
|
'icon' => "require"
|
||||||
|
]);
|
||||||
|
if(!$rule->check($data)){
|
||||||
|
return jsonError($rule->getError());
|
||||||
|
}
|
||||||
|
$check = $this->board_to_journal_obj->where('user_id',$data['user_id'])->where('state',0)->find();
|
||||||
|
if($check){
|
||||||
|
return jsonError("According to TMR Publishing Group Policy, scientists are not allowed to serve on the editorial board of more than one journal at the same time.");
|
||||||
|
}
|
||||||
|
|
||||||
|
//新增必填字段 chengxiaoling 20251020 start
|
||||||
|
//必填验证
|
||||||
|
$sField = '';
|
||||||
|
$aFields = ['research_areas','realname','email','website','affiliation','technical','icon'];
|
||||||
|
foreach ($aFields as $value) {
|
||||||
|
$sInfo = empty($data[$value]) ? '' : trim($data[$value]);
|
||||||
|
if(empty($sInfo)){
|
||||||
|
$sField = $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!empty($sField)){
|
||||||
|
return jsonError($sField.' cannot be empty');
|
||||||
|
}
|
||||||
|
//新增必填字段 chengxiaoling 20251020 end
|
||||||
|
|
||||||
|
//添加对应关系
|
||||||
|
$insert['user_id'] = $data['user_id'];
|
||||||
|
$insert['journal_id'] = $data['journal_id'];
|
||||||
|
$insert['type'] = $data['type'];
|
||||||
|
$insert['board_group_id'] = $data['board_group_id'];
|
||||||
|
$insert['research_areas'] = trim($data['research_areas']);
|
||||||
|
//新增必填字段 chengxiaoling 20251020 start
|
||||||
|
$insert['realname'] = trim($data['realname']);
|
||||||
|
$insert['email'] = trim($data['email']);
|
||||||
|
$insert['website'] = trim($data['website']);
|
||||||
|
$insert['affiliation'] = trim($data['affiliation']);
|
||||||
|
$insert['technical'] = trim($data['technical']);
|
||||||
|
$insert['icon'] = trim($data['icon']);
|
||||||
|
//新增必填字段 chengxiaoling 20251020 end
|
||||||
|
$this->board_to_journal_obj->insert($insert);
|
||||||
|
return jsonSuccess([]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 修改编辑编委信息-新
|
||||||
|
*/
|
||||||
|
public function editBoardNew(){
|
||||||
|
$data = $this->request->post();
|
||||||
|
$rule = new Validate([
|
||||||
|
"btj_id"=>"require",
|
||||||
|
"type"=>'require',
|
||||||
|
"board_group_id"=>"require",
|
||||||
|
"research_areas"=>"require",
|
||||||
|
"realname"=>"require",
|
||||||
|
"email"=>"require",
|
||||||
|
"website"=>"require",
|
||||||
|
"affiliation"=>"require",
|
||||||
|
"technical"=>"require",
|
||||||
|
'icon' => "require"
|
||||||
|
]);
|
||||||
|
if(!$rule->check($data)){
|
||||||
|
return jsonError($rule->getError());
|
||||||
|
}
|
||||||
|
//新增必填字段 chengxiaoling 20251020 start
|
||||||
|
//必填验证
|
||||||
|
$sField = '';
|
||||||
|
$aFields = ['research_areas','realname','email','website','affiliation','technical','icon'];
|
||||||
|
foreach ($aFields as $value) {
|
||||||
|
$sInfo = empty($data[$value]) ? '' : trim($data[$value]);
|
||||||
|
if(empty($sInfo)){
|
||||||
|
$sField = $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!empty($sField)){
|
||||||
|
return jsonError($sField.' cannot be empty');
|
||||||
|
}
|
||||||
|
//新增必填字段 chengxiaoling 20251020 end
|
||||||
|
$update['type'] = $data['type'];
|
||||||
|
$update['board_group_id'] = $data['type']==2?$data['board_group_id']:0;
|
||||||
|
$update['research_areas'] = trim($data['research_areas']);
|
||||||
|
//新增必填字段 chengxiaoling 20251020 start
|
||||||
|
$update['realname'] = trim($data['realname']);
|
||||||
|
$update['email'] = trim($data['email']);
|
||||||
|
$update['website'] = trim($data['website']);
|
||||||
|
$update['affiliation'] = trim($data['affiliation']);
|
||||||
|
$update['technical'] = trim($data['technical']);
|
||||||
|
$update['icon'] = trim($data['icon']);
|
||||||
|
//新增必填字段 chengxiaoling 20251020 end
|
||||||
|
$this->board_to_journal_obj->where('btj_id',$data['btj_id'])->update($update);
|
||||||
|
return jsonSuccess([]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 编委上传头像
|
||||||
|
*/
|
||||||
|
public function uploadIcon()
|
||||||
|
{
|
||||||
|
$file = request()->file('icon');
|
||||||
|
if ($file) {
|
||||||
|
$info = $file->move(ROOT_PATH . 'public' . DS . 'boardusericon');
|
||||||
|
if ($info) {
|
||||||
|
return json(['code' => 0, 'upurl' => str_replace("\\", "/", $info->getSaveName())]);
|
||||||
|
} else {
|
||||||
|
return json(['code' => 1, 'msg' => $file->getError()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -531,6 +531,14 @@ class Chief extends Controller {
|
|||||||
public function checkEmailForUser(){
|
public function checkEmailForUser(){
|
||||||
$data = $this->request->post();
|
$data = $this->request->post();
|
||||||
$user_info = $this->user_obj->where('account|email',$data['email'])->find();
|
$user_info = $this->user_obj->where('account|email',$data['email'])->find();
|
||||||
|
|
||||||
|
//新增查询数据 chengxiaoling 20251020 start
|
||||||
|
if(!empty($user_info)){
|
||||||
|
$aWhere = ['reviewer_id' => $user_info['user_id']];
|
||||||
|
$user_reviewer_info = Db::name('user_reviewer_info')->field('technical,company as affiliation,website,field as research_areas')->where($aWhere)->find();
|
||||||
|
$user_info = empty($user_reviewer_info) ? $user_info : array_merge($user_info,$user_reviewer_info);
|
||||||
|
}
|
||||||
|
//新增查询数据 chengxiaoling 20251020 end
|
||||||
$re['user_info'] = $user_info;
|
$re['user_info'] = $user_info;
|
||||||
return jsonSuccess($re);
|
return jsonSuccess($re);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,33 +47,6 @@ class Preaccept extends Base
|
|||||||
return jsonSuccess($re);
|
return jsonSuccess($re);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function spiltContent(){
|
|
||||||
$data = $this->request->post();
|
|
||||||
$rule = new Validate([
|
|
||||||
"content"=>"require"
|
|
||||||
]);
|
|
||||||
if(!$rule->check($data)){
|
|
||||||
return jsonError($rule->getError());
|
|
||||||
}
|
|
||||||
$text = $data['content'];
|
|
||||||
|
|
||||||
$text = preg_replace('/(\d+)([a-zA-Z%℃°]+)/', '$1 $2', $text);
|
|
||||||
|
|
||||||
$text = preg_replace('/\s*%\s*/', '%', $text);
|
|
||||||
|
|
||||||
|
|
||||||
$pattern_en_dash = '/(\d+)–(\d+)/';
|
|
||||||
$text = preg_replace($pattern_en_dash, '$1-$2', $text);
|
|
||||||
|
|
||||||
|
|
||||||
$pattern_em_dash = '/(\d+)—(\d+)/';
|
|
||||||
$text = preg_replace($pattern_em_dash, '$1-$2', $text);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**清空引用文献
|
/**清空引用文献
|
||||||
* @return \think\response\Json
|
* @return \think\response\Json
|
||||||
* @throws \think\Exception
|
* @throws \think\Exception
|
||||||
@@ -1503,5 +1476,97 @@ return null;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getArticleMainsNew(){
|
||||||
|
$data = $this->request->post();
|
||||||
|
$rule = new Validate([
|
||||||
|
"article_id"=>"require"
|
||||||
|
]);
|
||||||
|
if(!$rule->check($data)){
|
||||||
|
return jsonError($rule->getError());
|
||||||
|
}
|
||||||
|
|
||||||
|
//定义空数组
|
||||||
|
$re = ['list' => []];
|
||||||
|
//获取数量
|
||||||
|
$aWhere = ['article_id' => $data['article_id'],'state' => ['in',[0,2]]];
|
||||||
|
$iCount = $this->article_main_obj->where($aWhere)->count();
|
||||||
|
if(empty($iCount)){
|
||||||
|
$this->addArticleMainEx($data['article_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取数据
|
||||||
|
$aArticleMain = Db::name("article_main")->where($aWhere)->order("sort asc")->select();
|
||||||
|
if(empty($aArticleMain)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//处理数据
|
||||||
|
$iSize = 300;
|
||||||
|
$aChunk = array_chunk($aArticleMain, $iSize);
|
||||||
|
$mains = [];
|
||||||
|
foreach ($aChunk as $item) {
|
||||||
|
$aMId = array_column($item, 'am_id');
|
||||||
|
//查询article_main_check
|
||||||
|
$aWhere = ['am_id' => ['in',$aMId],'state' => 0];
|
||||||
|
$aMainCheck = Db::name("article_main_check")->where($aWhere)->select();
|
||||||
|
$aMainCheckData = [];
|
||||||
|
if(!empty($aMainCheck)){
|
||||||
|
foreach ($aMainCheck as $value) {
|
||||||
|
if(empty($value['am_id'])){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$aMainCheckData[$value['am_id']][] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取图片信息
|
||||||
|
$aMiId = array_unique(array_column($item, 'ami_id'));
|
||||||
|
$aWhere = ['ami_id' => ['in',$aMiId],'state' => 0];
|
||||||
|
$aArticleMainImage = Db::name("article_main_image")->where($aWhere)->select();
|
||||||
|
$aArticleMainImage = empty($aArticleMainImage) ? [] : array_column($aArticleMainImage, null,'ami_id');
|
||||||
|
//获取表格信息
|
||||||
|
$aMiId = array_unique(array_column($item, 'amt_id'));
|
||||||
|
$aWhere = ['amt_id' => ['in',$aMiId],'state' => 0];
|
||||||
|
$aArticleMainTable = Db::name("article_main_table")->where($aWhere)->select();
|
||||||
|
$aArticleMainTable = empty($aArticleMainTable) ? [] : array_column($aArticleMainTable, null,'amt_id');
|
||||||
|
|
||||||
|
//查询校对数量 t_article_proofread
|
||||||
|
$aWhere = ['am_id' => ['in',$aMId],'state' => ['between',[1,2]],'is_delete' => 2];
|
||||||
|
$aArticleProofread = Db::name("article_proofread")->field('am_id,count(id) as num,state')->where($aWhere)->group('am_id,state')->select();
|
||||||
|
$aArticleProofreadData = [];
|
||||||
|
if(!empty($aArticleProofread)){
|
||||||
|
foreach ($aArticleProofread as $key => $value) {
|
||||||
|
$aArticleProofreadData[$value['am_id']][$value['state']] = $value['num'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($item as $k => $main) {
|
||||||
|
if($main['is_h1']==1){
|
||||||
|
$main['content'] = "<b><i>".$main['content']."</i></b>";
|
||||||
|
}
|
||||||
|
if($main['is_h2']==1||$main['is_h3']==1){
|
||||||
|
$main['content'] = "<b>".$main['content']."</b>";
|
||||||
|
}
|
||||||
|
$main['checks'] = empty($aMainCheckData[$main['am_id']]) ? [] : $aMainCheckData[$main['am_id']];
|
||||||
|
if($main['type'] == 1){
|
||||||
|
$main['image'] = empty($aArticleMainImage[$main['ami_id']]) ? [] : $aArticleMainImage[$main['ami_id']];
|
||||||
|
}
|
||||||
|
if($main['type'] == 2){
|
||||||
|
$main['table'] = empty($aArticleMainTable[$main['amt_id']]) ? [] : $aArticleMainTable[$main['amt_id']];
|
||||||
|
}
|
||||||
|
if($main['type'] == 0){
|
||||||
|
$aDataInfo = empty($aArticleProofreadData[$main['am_id']]) ? [] : $aArticleProofreadData[$main['am_id']];
|
||||||
|
$main['proof_read_num'] = -1;
|
||||||
|
if(!empty($aDataInfo)){
|
||||||
|
$main['proof_read_num'] = empty($aDataInfo[2]) ? 0 : $aDataInfo[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$mains[] = $main;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
$re['list'] = $mains;
|
||||||
|
return jsonSuccess($re);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -24,8 +24,6 @@ class Proofread extends Base
|
|||||||
if(empty($iArticleId)){
|
if(empty($iArticleId)){
|
||||||
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||||
}
|
}
|
||||||
//行号
|
|
||||||
$iAmId = empty($aParam['am_id']) ? 0 : $aParam['am_id'];
|
|
||||||
//查询文章
|
//查询文章
|
||||||
$aWhere = ['article_id' => $iArticleId];
|
$aWhere = ['article_id' => $iArticleId];
|
||||||
$oArticle = new Article;
|
$oArticle = new Article;
|
||||||
@@ -34,12 +32,13 @@ class Proofread extends Base
|
|||||||
if(empty($aArticle)){
|
if(empty($aArticle)){
|
||||||
return json_encode(array('status' => 3,'msg' => 'No articles requiring review were found' ));
|
return json_encode(array('status' => 3,'msg' => 'No articles requiring review were found' ));
|
||||||
}
|
}
|
||||||
if($aArticle['state'] != 6){
|
|
||||||
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询是否进行过校对
|
//查询是否进行过校对
|
||||||
$aProofReadWhere = ['article_id' => $iArticleId,'state' => 2];
|
$aProofReadWhere = ['article_id' => $iArticleId,'state' => 2,'is_delete' => 2];
|
||||||
if(!empty($iAmId)){
|
if(!empty($iAmId)){
|
||||||
$aProofReadWhere['am_id'] = $iAmId;
|
$aProofReadWhere['am_id'] = $iAmId;
|
||||||
}
|
}
|
||||||
@@ -47,15 +46,11 @@ class Proofread extends Base
|
|||||||
if(!empty($iCount)){
|
if(!empty($iCount)){
|
||||||
return json_encode(array('status' => 5,'msg' => 'The article or paragraph has been proofread'));
|
return json_encode(array('status' => 5,'msg' => 'The article or paragraph has been proofread'));
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询文章内容
|
//查询文章内容
|
||||||
$aWhere['type'] = 0;
|
$aWhere['type'] = 0;
|
||||||
$aWhere['content'] = ['<>',''];
|
$aWhere['content'] = ['<>',''];
|
||||||
$aWhere['state'] = 0;
|
$aWhere['state'] = 0;
|
||||||
if(!empty($iAmId)){
|
$aArticleMain = Db::table('t_article_main')->field('am_id,content,type,is_h1,is_h2,is_h3,is_proofread')->where($aWhere)->order('sort asc')->select();
|
||||||
$aWhere['am_id'] = $iAmId;
|
|
||||||
}
|
|
||||||
$aArticleMain = Db::table('t_article_main')->field('am_id,content,type,is_h1,is_h2,is_h3,ami_id,amt_id')->where($aWhere)->select();
|
|
||||||
if(empty($aArticleMain)){
|
if(empty($aArticleMain)){
|
||||||
return json_encode(array('status' => 5,'msg' => 'The content of the article is empty'));
|
return json_encode(array('status' => 5,'msg' => 'The content of the article is empty'));
|
||||||
}
|
}
|
||||||
@@ -64,11 +59,14 @@ class Proofread extends Base
|
|||||||
$oHelperFunction = new \app\common\HelperFunction;
|
$oHelperFunction = new \app\common\HelperFunction;
|
||||||
$oProofReadService = new \app\common\ProofReadService;
|
$oProofReadService = new \app\common\ProofReadService;
|
||||||
//数据处理
|
//数据处理
|
||||||
$aH = $aTable = [];
|
$aId = [];
|
||||||
foreach ($aArticleMain as $key => $value) {
|
foreach ($aArticleMain as $key => $value) {
|
||||||
if(empty($oHelperFunction->filterAllTags($value['content']))){
|
if(empty($oHelperFunction->filterAllTags($value['content']))){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if($value['is_proofread'] == 2){
|
||||||
|
$aId[] = $value['am_id'];
|
||||||
|
}
|
||||||
$aResult = $oProofReadService->proofread($value['content']);
|
$aResult = $oProofReadService->proofread($value['content']);
|
||||||
if(empty($aResult)){
|
if(empty($aResult)){
|
||||||
continue;
|
continue;
|
||||||
@@ -77,6 +75,15 @@ class Proofread extends Base
|
|||||||
$aError[] = $aResult;
|
$aError[] = $aResult;
|
||||||
}
|
}
|
||||||
if(empty($aError)){
|
if(empty($aError)){
|
||||||
|
//更新文章内容的校对时间及状态
|
||||||
|
$iCount = count($aId);
|
||||||
|
if($iCount > 0){
|
||||||
|
$aUpdateWhere = ['am_id' => ['in',$aId]];
|
||||||
|
$update_result = Db::name('article_main')->where($aUpdateWhere)->limit($iCount)->update(['is_proofread' => 1,'proofread_time' => time()]);
|
||||||
|
if($update_result === false){
|
||||||
|
return json_encode(array('status' => 6,'msg' => 'Failed to update paragraph proofreading status-'.$update_result));
|
||||||
|
}
|
||||||
|
}
|
||||||
return json_encode(array('status' => 1,'msg' => 'No errors found'));
|
return json_encode(array('status' => 1,'msg' => 'No errors found'));
|
||||||
}
|
}
|
||||||
//数据处理
|
//数据处理
|
||||||
@@ -89,21 +96,29 @@ class Proofread extends Base
|
|||||||
$val['article_id'] = $iArticleId;
|
$val['article_id'] = $iArticleId;
|
||||||
$val['proof_before'] = empty($value['proof_before']) ? '' : $value['proof_before'];
|
$val['proof_before'] = empty($value['proof_before']) ? '' : $value['proof_before'];
|
||||||
$val['proof_after'] = empty($value['proof_after']) ? '' : $value['proof_after'];
|
$val['proof_after'] = empty($value['proof_after']) ? '' : $value['proof_after'];
|
||||||
|
$val['create_time'] = time();
|
||||||
$aData[] = $val;
|
$aData[] = $val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(empty($aData)){
|
if(empty($aData)){
|
||||||
return json_encode(array('status' => 1,'msg' => 'Data processing failed'));
|
return json_encode(array('status' => 1,'msg' => 'Data processing failed'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
//更新文章内容的校对时间及状态
|
||||||
|
$iCount = count($aId);
|
||||||
|
$update_result = true;
|
||||||
|
if($iCount > 0){
|
||||||
|
$aUpdateWhere = ['am_id' => ['in',$aId]];
|
||||||
|
$update_result = Db::name('article_main')->where($aUpdateWhere)->limit($iCount)->update(['is_proofread' => 1,'proofread_time' => time()]);
|
||||||
|
}
|
||||||
//插入
|
//插入
|
||||||
$result = Db::name('article_proofread')->insertAll($aData);
|
$result = Db::name('article_proofread')->insertAll($aData);
|
||||||
if(!$result){
|
if(!$result || $update_result === false){
|
||||||
return json_encode(array('status' => 6,'msg' => 'No errors found'));
|
return json_encode(array('status' => 6,'msg' => 'Data operation failed:insert-'.$result.';update-'.$update_result));
|
||||||
}
|
}
|
||||||
|
Db::commit();
|
||||||
//查询参考文献
|
return json_encode(['status' => 1,'msg' => 'Proofreading successful']);
|
||||||
$aWhere = ['state' => ['in',[0,2]],'article_id' => $iArticleId];
|
|
||||||
return json_encode(['status' => 1,'msg' => 'success']);
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @title 获取每行校对记录
|
* @title 获取每行校对记录
|
||||||
@@ -129,7 +144,7 @@ class Proofread extends Base
|
|||||||
if(empty($aArticle)){
|
if(empty($aArticle)){
|
||||||
return json_encode(['status' => 3,'msg' => 'The query article does not exist']);
|
return json_encode(['status' => 3,'msg' => 'The query article does not exist']);
|
||||||
}
|
}
|
||||||
if($aArticle['state'] < 5 || $aArticle['state'] == 8){
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,8 +162,8 @@ class Proofread extends Base
|
|||||||
|
|
||||||
//查询校对内容
|
//查询校对内容
|
||||||
$aAmId = array_column($aArticleMain, 'am_id');
|
$aAmId = array_column($aArticleMain, 'am_id');
|
||||||
$aWhere = ['am_id' => ['in',$aAmId]];
|
$aWhere = ['am_id' => ['in',$aAmId],'is_delete' => 2];
|
||||||
$iState = empty($aParam['state']) ? 0 : $aParam['state'];
|
$iState = empty($aParam['state']) ? 0 : explode(',', $aParam['state']);
|
||||||
if(!empty($iState)){
|
if(!empty($iState)){
|
||||||
$aWhere['state'] = ['in',$iState];
|
$aWhere['state'] = ['in',$iState];
|
||||||
}
|
}
|
||||||
@@ -260,7 +275,7 @@ class Proofread extends Base
|
|||||||
}
|
}
|
||||||
|
|
||||||
//判断校对记录
|
//判断校对记录
|
||||||
$aWhere = ['am_id' => $iAmId,'article_id' => $iArticleId,'id' => $iId];
|
$aWhere = ['am_id' => $iAmId,'article_id' => $iArticleId,'id' => $iId,'is_delete' => 2];
|
||||||
$aProofRead = Db::name('article_proofread')->where($aWhere)->find();
|
$aProofRead = Db::name('article_proofread')->where($aWhere)->find();
|
||||||
|
|
||||||
if(empty($aProofRead)){
|
if(empty($aProofRead)){
|
||||||
@@ -316,6 +331,7 @@ class Proofread extends Base
|
|||||||
}
|
}
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
//更新原始内容
|
//更新原始内容
|
||||||
|
$result_main = true;
|
||||||
if(!empty($sUpdateContent)){
|
if(!empty($sUpdateContent)){
|
||||||
$aWhere = ['am_id' => $iAmId,'state' => 0,'type' => 0];
|
$aWhere = ['am_id' => $iAmId,'state' => 0,'type' => 0];
|
||||||
$aUpdate = ['content' => $sUpdateContent];
|
$aUpdate = ['content' => $sUpdateContent];
|
||||||
@@ -326,12 +342,20 @@ class Proofread extends Base
|
|||||||
//数据库更新
|
//数据库更新
|
||||||
$aWhere = ['id' => $iId];
|
$aWhere = ['id' => $iId];
|
||||||
$result_proofread= Db::name('article_proofread')->where($aWhere)->limit(1)->update($aUpdate);
|
$result_proofread= Db::name('article_proofread')->where($aWhere)->limit(1)->update($aUpdate);
|
||||||
if(!$result_proofread || !$result_main){
|
if($result_proofread === false || $result_main === false){
|
||||||
return json_encode(['status' => 7,'msg' => "Update failed"]);
|
return json_encode(['status' => 7,'msg' => "Update failed"]);
|
||||||
}
|
}
|
||||||
Db::commit();
|
Db::commit();
|
||||||
|
//查询未执行的数量
|
||||||
|
$aCount = json_decode($this->getCountByState(['article_id' => $iArticleId,'am_id' => $iAmId]),true);
|
||||||
|
$aCount = empty($aCount['data']) ? [] : $aCount['data'];
|
||||||
|
|
||||||
//返回结果
|
//返回结果
|
||||||
return json_encode(['status' => 1,'msg' => "Update successful",'data' => $sData]);
|
$aData = [];
|
||||||
|
$aData['sum_count'] = empty($aCount['sum_count']) ? 0 : $aCount['sum_count'];
|
||||||
|
$aData['am_id_count'] = empty($aCount['am_id_count']) ? 0 : $aCount['am_id_count'];
|
||||||
|
$aData['content'] = $sData;
|
||||||
|
return json_encode(['status' => 1,'msg' => "Update successful",'data' => $aData]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -469,7 +493,7 @@ class Proofread extends Base
|
|||||||
$iIsUpdateAll = empty($aParam['is_update_all']) ? 2 : $aParam['is_update_all'];
|
$iIsUpdateAll = empty($aParam['is_update_all']) ? 2 : $aParam['is_update_all'];
|
||||||
|
|
||||||
//查询内容是否存在
|
//查询内容是否存在
|
||||||
$aWhere = ['am_id' => $iAmId,'article_id' => $iArticleId,'id' => $iId];
|
$aWhere = ['am_id' => $iAmId,'article_id' => $iArticleId,'id' => $iId,'is_delete' => 2];
|
||||||
$aProofRead = Db::name('article_proofread')->field('verbatim_texts,revised_content,explanation,state')->where($aWhere)->find();
|
$aProofRead = Db::name('article_proofread')->field('verbatim_texts,revised_content,explanation,state')->where($aWhere)->find();
|
||||||
if(empty($aProofRead)){
|
if(empty($aProofRead)){
|
||||||
return json_encode(['status' => 3,'msg' => 'Proofreading record is empty']);
|
return json_encode(['status' => 3,'msg' => 'Proofreading record is empty']);
|
||||||
@@ -500,4 +524,244 @@ class Proofread extends Base
|
|||||||
//返回结果
|
//返回结果
|
||||||
return json_encode(['status' => 1,'msg' => "Update successful"]);
|
return json_encode(['status' => 1,'msg' => "Update successful"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @title 根据状态统计数量
|
||||||
|
* @param article_id 文章ID
|
||||||
|
* @param am_id 行号
|
||||||
|
* @param state 状态1已执行2未执行3删除
|
||||||
|
*/
|
||||||
|
public function getCountByState($aParam = []){
|
||||||
|
|
||||||
|
//获取参数
|
||||||
|
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||||
|
//参数验证-文章ID
|
||||||
|
$iArticleId = empty($aParam['article_id']) ? 0 : $aParam['article_id'];
|
||||||
|
if(empty($iArticleId)){
|
||||||
|
return json_encode(['status' => 2,'msg' => 'Please select a article']);
|
||||||
|
}
|
||||||
|
//行号
|
||||||
|
$iAmId = empty($aParam['am_id']) ? 0 : $aParam['am_id'];
|
||||||
|
|
||||||
|
//查询文章
|
||||||
|
$aWhere = ['article_id' => $iArticleId];
|
||||||
|
$aArticle = Db::name('article')->field('journal_id,state')->where($aWhere)->find();
|
||||||
|
if(empty($aArticle)){
|
||||||
|
return json_encode(['status' => 3,'msg' => 'The query article does not exist']);
|
||||||
|
}
|
||||||
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询校对内容
|
||||||
|
$aState = empty($aParam['state']) ? [1,2] : explode(',', $aParam['state']);
|
||||||
|
$aWhere['state'] = ['in',$aState];
|
||||||
|
$aWhere['is_delete'] = 2;
|
||||||
|
$aCount = Db::name('article_proofread')->field('am_id,count(id) as num,state')->where($aWhere)->group('am_id,state')->order('am_id')->select();
|
||||||
|
$aCountData = [];
|
||||||
|
$iCount = -1;
|
||||||
|
if(!empty($aCount)){
|
||||||
|
$iCount = 0;
|
||||||
|
foreach ($aCount as $key => $value) {
|
||||||
|
$aCountData[$value['am_id']][$value['state']] = $value['num'];
|
||||||
|
if($value['state'] == 2){
|
||||||
|
$iCount += $value['num'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//总数量
|
||||||
|
$am_id_count = -1;
|
||||||
|
if(!empty($aCountData[$iAmId])){
|
||||||
|
$am_id_count = empty($aCountData[$iAmId][2]) ? 0 : $aCountData[$iAmId][2];
|
||||||
|
}
|
||||||
|
$is_proofread = -1;
|
||||||
|
//查询是否校对
|
||||||
|
$aWhere = ['state' => 0,'is_proofread' => 1];
|
||||||
|
if(!empty($iAmId)){
|
||||||
|
$aWhere['am_id'] = $iAmId;
|
||||||
|
}
|
||||||
|
$iProofCount = Db::name('article_main')->where($aWhere)->count();
|
||||||
|
$is_proofread = $iProofCount > 0 ? 1 : 2;
|
||||||
|
|
||||||
|
//总数量统计
|
||||||
|
if($iCount == -1 && $iProofCount > 0){
|
||||||
|
$iCount = 0;
|
||||||
|
}
|
||||||
|
if($am_id_count == -1 && $iProofCount > 0){
|
||||||
|
$am_id_count = 0;
|
||||||
|
}
|
||||||
|
return json_encode(['status' => 1,'msg' => 'success','data' => ['sum_count' => $iCount,'am_id_count' => $am_id_count,'is_proofread' => $is_proofread]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @title AI文章校对-行
|
||||||
|
* @param article_id 文章ID
|
||||||
|
*/
|
||||||
|
public function proofReadByLine(){
|
||||||
|
|
||||||
|
//获取参数
|
||||||
|
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||||
|
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
|
||||||
|
if(empty($iArticleId)){
|
||||||
|
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||||
|
}
|
||||||
|
//行号
|
||||||
|
$iAmId = empty($aParam['am_id']) ? 0 : $aParam['am_id'];
|
||||||
|
if(empty($iAmId)){
|
||||||
|
return json_encode(array('status' => 2,'msg' => 'Please select the rows that need to be proofread' ));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询文章
|
||||||
|
$aWhere = ['article_id' => $iArticleId];
|
||||||
|
$oArticle = new Article;
|
||||||
|
$aArticle = json_decode($oArticle->get($aWhere),true);
|
||||||
|
$aArticle = empty($aArticle['data']) ? [] : $aArticle['data'];
|
||||||
|
if(empty($aArticle)){
|
||||||
|
return json_encode(array('status' => 3,'msg' => 'No articles requiring review were found' ));
|
||||||
|
}
|
||||||
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询文章内容
|
||||||
|
$aWhere['type'] = 0;
|
||||||
|
$aWhere['content'] = ['<>',''];
|
||||||
|
$aWhere['state'] = 0;
|
||||||
|
$aWhere['am_id'] = $iAmId;
|
||||||
|
$aArticleMain = Db::table('t_article_main')->field('am_id,content,type,is_h1,is_h2,is_h3,is_proofread')->where($aWhere)->find();
|
||||||
|
if(empty($aArticleMain['content'])){
|
||||||
|
return json_encode(array('status' => 5,'msg' => 'The content of the article is empty'));
|
||||||
|
}
|
||||||
|
//写入校对行队列
|
||||||
|
$sQueue = \think\Queue::push('app\api\job\ArticleProofReadLine@fire',$aParam,'ArticleProofReadLine');
|
||||||
|
return json_encode(array('status' => 1,'msg' => 'Proofreading in progress, check the results in one minute'));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @title AI文章校对-行队列
|
||||||
|
* @param article_id 文章ID
|
||||||
|
*/
|
||||||
|
public function proofReadLineQueue($aParam = []){
|
||||||
|
//获取参数
|
||||||
|
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||||
|
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
|
||||||
|
if(empty($iArticleId)){
|
||||||
|
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||||
|
}
|
||||||
|
//行号
|
||||||
|
$iAmId = empty($aParam['am_id']) ? 0 : $aParam['am_id'];
|
||||||
|
if(empty($iAmId)){
|
||||||
|
return json_encode(array('status' => 2,'msg' => 'Please select the rows that need to be proofread' ));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询文章
|
||||||
|
$aWhere = ['article_id' => $iArticleId];
|
||||||
|
$oArticle = new Article;
|
||||||
|
$aArticle = json_decode($oArticle->get($aWhere),true);
|
||||||
|
$aArticle = empty($aArticle['data']) ? [] : $aArticle['data'];
|
||||||
|
if(empty($aArticle)){
|
||||||
|
return json_encode(array('status' => 3,'msg' => 'No articles requiring review were found' ));
|
||||||
|
}
|
||||||
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询文章内容
|
||||||
|
$aWhere['type'] = 0;
|
||||||
|
$aWhere['content'] = ['<>',''];
|
||||||
|
$aWhere['state'] = 0;
|
||||||
|
$aWhere['am_id'] = $iAmId;
|
||||||
|
$aArticleMain = Db::table('t_article_main')->field('am_id,content,type,is_h1,is_h2,is_h3,is_proofread')->where($aWhere)->find();
|
||||||
|
if(empty($aArticleMain)){
|
||||||
|
return json_encode(array('status' => 5,'msg' => 'The content of the article is empty'));
|
||||||
|
}
|
||||||
|
|
||||||
|
//实例化公共方法
|
||||||
|
$oHelperFunction = new \app\common\HelperFunction;
|
||||||
|
$oProofReadService = new \app\common\ProofReadService;
|
||||||
|
//数据处理
|
||||||
|
|
||||||
|
if(empty($oHelperFunction->filterAllTags($aArticleMain['content']))){
|
||||||
|
return json_encode(array('status' => 6,'msg' => 'The proofreading content is empty'));
|
||||||
|
}
|
||||||
|
$aResult = $oProofReadService->proofread($aArticleMain['content']);
|
||||||
|
//数据处理
|
||||||
|
$aError = empty($aResult['errors']) ? [] : $aResult['errors'];
|
||||||
|
if(empty($aError)){
|
||||||
|
$aUpdateWhere = ['am_id' => $iAmId];
|
||||||
|
$update_result = Db::name('article_main')->where($aUpdateWhere)->limit(1)->update(['is_proofread' => 1,'proofread_time' => time()]);
|
||||||
|
if($update_result === false){
|
||||||
|
return json_encode(array('status' => 6,'msg' => 'Failed to update paragraph proofreading status-'.$update_result));
|
||||||
|
}
|
||||||
|
return json_encode(array('status' => 1,'msg' => 'No errors found'));
|
||||||
|
}
|
||||||
|
$aData = [];
|
||||||
|
foreach ($aError as $key => $value) {
|
||||||
|
$value['am_id'] = $iAmId;
|
||||||
|
$value['article_id'] = $iArticleId;
|
||||||
|
$value['proof_before'] = empty($aResult['proof_before']) ? '' : $aResult['proof_before'];
|
||||||
|
$value['proof_after'] = empty($aResult['proof_after']) ? '' : $aResult['proof_after'];
|
||||||
|
$value['create_time'] = time();
|
||||||
|
$aData[] = $value;
|
||||||
|
}
|
||||||
|
if(empty($aData)){
|
||||||
|
return json_encode(array('status' => 1,'msg' => 'Data processing failed'));
|
||||||
|
}
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
$aUpdateWhere = ['am_id' => $iAmId];
|
||||||
|
$update_result = Db::name('article_main')->where($aUpdateWhere)->limit(1)->update(['is_proofread' => 1,'proofread_time' => time()]);
|
||||||
|
//更新之前未执行的数据
|
||||||
|
$aWhere = ['am_id' => $iAmId,'article_id' => $iArticleId,'is_delete' => 2,'state' => 2];
|
||||||
|
$result_update = Db::name('article_proofread')->where($aWhere)->update(['is_delete' => 1,'update_time' => time()]);
|
||||||
|
//插入
|
||||||
|
$result = Db::name('article_proofread')->insertAll($aData);
|
||||||
|
if(!$result || $result_update === false || $update_result === false){
|
||||||
|
return json_encode(array('status' => 6,'msg' => 'Data operation failed:insert-'.$result.';result_update-'.$result_update.';update_result-'.$update_result));
|
||||||
|
}
|
||||||
|
Db::commit();
|
||||||
|
return json_encode(['status' => 1,'msg' => 'Proofreading successful']);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @title AI文章校对-全文章
|
||||||
|
* @param article_id 文章ID
|
||||||
|
*/
|
||||||
|
public function proofReadByArticle(){
|
||||||
|
|
||||||
|
//获取参数
|
||||||
|
$aParam = empty($aParam) ? $this->request->post() : $aParam;
|
||||||
|
$iArticleId = empty($aParam['article_id']) ? '' : $aParam['article_id'];
|
||||||
|
if(empty($iArticleId)){
|
||||||
|
return json_encode(array('status' => 2,'msg' => 'Please select an article' ));
|
||||||
|
}
|
||||||
|
//查询文章
|
||||||
|
$aWhere = ['article_id' => $iArticleId];
|
||||||
|
$oArticle = new Article;
|
||||||
|
$aArticle = json_decode($oArticle->get($aWhere),true);
|
||||||
|
$aArticle = empty($aArticle['data']) ? [] : $aArticle['data'];
|
||||||
|
if(empty($aArticle)){
|
||||||
|
return json_encode(array('status' => 3,'msg' => 'No articles requiring review were found' ));
|
||||||
|
}
|
||||||
|
if($aArticle['state'] != 6 && $aArticle['state'] != 5){
|
||||||
|
return json_encode(array('status' => 4,'msg' => 'The article has not entered the proofreading stage'));
|
||||||
|
}
|
||||||
|
|
||||||
|
//查询文章内容
|
||||||
|
$aWhere['type'] = 0;
|
||||||
|
$aWhere['content'] = ['<>',''];
|
||||||
|
$aWhere['state'] = 0;
|
||||||
|
$iCount = Db::table('t_article_main')->where($aWhere)->count();
|
||||||
|
if(empty($iCount)){
|
||||||
|
return json_encode(array('status' => 5,'msg' => 'The content of the article is empty'));
|
||||||
|
}
|
||||||
|
//查询是否进行过校对
|
||||||
|
$aProofReadWhere = ['article_id' => $iArticleId,'state' => 2,'is_delete' => 2];
|
||||||
|
$iCount = Db::name('article_proofread')->where($aProofReadWhere)->count();
|
||||||
|
if(!empty($iCount)){
|
||||||
|
return json_encode(array('status' => 6,'msg' => 'The article or paragraph has been proofread'));
|
||||||
|
}
|
||||||
|
//写入校对行队列
|
||||||
|
$sQueue = \think\Queue::push('app\api\job\ArticleProofReadedi@fire',$aParam,'ArticleProofReadedi');
|
||||||
|
return json_encode(array('status' => 1,'msg' => 'Proofreading in progress, check the results in one minute'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
85
application/api/job/ArticleProofReadLine.php
Normal file
85
application/api/job/ArticleProofReadLine.php
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
namespace app\api\job;
|
||||||
|
|
||||||
|
use think\queue\Job;
|
||||||
|
use app\common\QueueJob;
|
||||||
|
use app\common\QueueRedis;
|
||||||
|
use app\api\controller\Proofread;
|
||||||
|
class ArticleProofReadLine
|
||||||
|
{
|
||||||
|
private $oQueueJob;
|
||||||
|
private $QueueRedis;
|
||||||
|
private $completedExprie = 180;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->oQueueJob = new QueueJob;
|
||||||
|
$this->QueueRedis = QueueRedis::getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fire(Job $job, $data)
|
||||||
|
{
|
||||||
|
//任务开始判断
|
||||||
|
$this->oQueueJob->init($job);
|
||||||
|
|
||||||
|
// 获取 Redis 任务的原始数据
|
||||||
|
$rawBody = empty($job->getRawBody()) ? '' : $job->getRawBody();
|
||||||
|
$jobData = empty($rawBody) ? [] : json_decode($rawBody, true);
|
||||||
|
$jobId = empty($jobData['id']) ? 'unknown' : $jobData['id'];
|
||||||
|
|
||||||
|
$this->oQueueJob->log("-----------队列任务开始-----------");
|
||||||
|
$this->oQueueJob->log("当前任务ID: {$jobId}, 尝试次数: {$job->attempts()}");
|
||||||
|
|
||||||
|
// 获取文章ID
|
||||||
|
$iArticleId = empty($data['article_id']) ? 0 : $data['article_id'];
|
||||||
|
if (empty($iArticleId)) {
|
||||||
|
$this->oQueueJob->log("无效的article_id,删除任务");
|
||||||
|
$job->delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 获取文章行ID
|
||||||
|
$iAmId = empty($data['am_id']) ? 0 : $data['am_id'];
|
||||||
|
if (empty($iAmId)) {
|
||||||
|
$this->oQueueJob->log("无效的am_id,删除任务");
|
||||||
|
$job->delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 生成Redis键并尝试获取锁
|
||||||
|
$sClassName = get_class($this);
|
||||||
|
$sRedisKey = "queue_job:{$sClassName}:{$iArticleId}_{$iAmId}";
|
||||||
|
$sRedisValue = uniqid() . '_' . getmypid();
|
||||||
|
if (!$this->oQueueJob->acquireLock($sRedisKey, $sRedisValue, $job)) {
|
||||||
|
return; // 未获取到锁,已处理
|
||||||
|
}
|
||||||
|
|
||||||
|
//生成内容
|
||||||
|
$oProofRead = new Proofread;
|
||||||
|
$response = $oProofRead->proofReadLineQueue($data);
|
||||||
|
// 验证API响应
|
||||||
|
if (empty($response)) {
|
||||||
|
throw new \RuntimeException("OpenAI API返回空结果");
|
||||||
|
}
|
||||||
|
// 检查JSON解析错误
|
||||||
|
$aResult = json_decode($response, true);
|
||||||
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||||
|
throw new \RuntimeException("解析OpenAI响应失败: " . json_last_error_msg() . " | 原始响应: {$response}");
|
||||||
|
}
|
||||||
|
$sMsg = empty($aResult['msg']) ? 'success' : $aResult['msg'];
|
||||||
|
//更新完成标识
|
||||||
|
$this->QueueRedis->finishJob($sRedisKey, 'completed', $this->completedExprie,$sRedisValue);
|
||||||
|
$job->delete();
|
||||||
|
$this->oQueueJob->log("任务执行成功 | 日志ID: {$sRedisKey} | 执行日志:{$sMsg}");
|
||||||
|
|
||||||
|
} catch (\RuntimeException $e) {
|
||||||
|
$this->oQueueJob->handleRetryableException($e,$sRedisKey,$sRedisValue, $job);
|
||||||
|
} catch (\LogicException $e) {
|
||||||
|
$this->oQueueJob->handleNonRetryableException($e,$sRedisKey,$sRedisValue, $job);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->oQueueJob->handleRetryableException($e,$sRedisKey,$sRedisValue, $job);
|
||||||
|
} finally {
|
||||||
|
$this->oQueueJob->finnal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -187,14 +187,14 @@ class JournalArticle
|
|||||||
//发送邮件
|
//发送邮件
|
||||||
$memail = empty($aJournalInfo['email']) ? '' : $aJournalInfo['email'];
|
$memail = empty($aJournalInfo['email']) ? '' : $aJournalInfo['email'];
|
||||||
$mpassword = empty($aJournalInfo['epassword']) ? '' : $aJournalInfo['epassword'];
|
$mpassword = empty($aJournalInfo['epassword']) ? '' : $aJournalInfo['epassword'];
|
||||||
$aResult = sendEmail($email,$title,$from_name,$content,$memail,$mpassword);
|
// $aResult = sendEmail($email,$title,$from_name,$content,$memail,$mpassword);
|
||||||
$iStatus = empty($aResult['status']) ? 1 : $aResult['status'];
|
// $iStatus = empty($aResult['status']) ? 1 : $aResult['status'];
|
||||||
$iIsSuccess = 2;
|
// $iIsSuccess = 2;
|
||||||
$sMsg = empty($aResult['data']) ? '失败' : $aResult['data'];
|
// $sMsg = empty($aResult['data']) ? '失败' : $aResult['data'];
|
||||||
if($iStatus == 1){
|
// if($iStatus == 1){
|
||||||
$iIsSuccess = 1;
|
// $iIsSuccess = 1;
|
||||||
$sMsg = '成功';
|
// $sMsg = '成功';
|
||||||
}
|
// }
|
||||||
$aEmailParam = ['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'],'title' => $title,'from_name' => $from_name,'memail' => $memail,'mpassword' => $mpassword];
|
$aEmailParam = ['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'],'title' => $title,'from_name' => $from_name,'memail' => $memail,'mpassword' => $mpassword];
|
||||||
|
|
||||||
//邮件发送记录
|
//邮件发送记录
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user