自动化审稿人相关调整

This commit is contained in:
chengxl
2025-06-19 10:39:33 +08:00
parent 7a671116a8
commit deb0c4a583

View File

@@ -929,7 +929,12 @@ class Reviewer extends Base
} else {
$artrevstate = 2;
}
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => $artrevstate, 'reviewer_act' => 1]);
//审稿加审稿时间 chengxiaoling start 20250612
// $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => $artrevstate, 'reviewer_act' => 1]);
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => $artrevstate, 'reviewer_act' => 1,'review_time' => time()]);
//审稿加审稿时间 chengxiaoling end 20250612
//文章是从初始状态到其他状态,增加审稿人成功审核次数
if ($art_rev_info['state'] == 0) {
$this->user_obj->where('user_id', $art_rev_info['reviewer_id'])->setInc('rs_num');
@@ -1005,6 +1010,21 @@ class Reviewer extends Base
//记录usermsg
add_usermsg($journal_info['editor_id'], 'Feedback questionnaire be uploaded:'.$article_info['accept_sn']."(".$reviewer_info['account'].":".$reviewer_info['email'].")", '/articleReviewerDetail?id=' . $data['art_rev_id']);
//审稿人提交答卷之后进行审稿行为评分 chengxiaoling 20250617 start
if(!empty($artrevstate) && in_array($artrevstate, [1,2,3])){
//文章ID
$iArticleId = empty($art_rev_info['article_id']) ? 0 : $art_rev_info['article_id'];
//审稿人ID
$iReviewerId = empty($art_rev_info['reviewer_id']) ? 0 : $art_rev_info['reviewer_id'];
//主键ID
$iArtRevId = empty($art_rev_info['art_rev_id']) ? 0 : $art_rev_info['art_rev_id'];
if(!empty($iArticleId) && !empty($iReviewerId) && !empty($iArtRevId)){
$aParam = ['article_id' => $iArticleId,'reviewer_id' => $iReviewerId,'art_rev_id' => $iArtRevId];
$iSeconds = 180;//3分钟后执行
Queue::later($iSeconds,'app\api\job\ReviewerScore@fire',$aParam, 'ReviewerScore');
}
}
//审稿人提交答卷之后进行审稿行为评分 chengxiaoling 20250617 end
return json(['code' => 0]);
}
@@ -1347,7 +1367,10 @@ class Reviewer extends Base
$insert_data['ctime'] = time();
// $this->article_msg_obj->insert($insert_data);
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 0]);
//同意审稿加同意时间 chengxiaoling start
//$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 0]);
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 0,'agree_review_time' => time()]);
//同意审稿加同意时间 chengxiaoling end
return jsonSuccess([]);
} else {
return jsonError("Status changed fail");
@@ -1368,10 +1391,15 @@ class Reviewer extends Base
$data = $this->request->post();
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
if ($art_rev_info['state'] == 5) {
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 4]);
//记录审稿失败次数
$art_rev_info = $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->find();
$this->user_obj->where("user_id", $art_rev_info["reviewer_id"])->setInc("rd_num");
//拒绝审稿加拒绝时间 chengxiaoling start 20250617
// $this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 4]);
$this->article_reviewer_obj->where('art_rev_id', $data['art_rev_id'])->update(['state' => 4,'refuse_review_time' => time()]);
//拒绝审稿加拒绝时间 chengxiaoling end 20250617
//拒绝审稿扣减分数及拒绝次数+1 chengxiaoling start 20250617
// $this->user_obj->where("user_id", $art_rev_info["reviewer_id"])->setInc("rd_num");
$this->user_obj->where("user_id", $art_rev_info["reviewer_id"])->update(['rd_num' => Db::raw('rd_num+1'),'review_score' => Db::raw('review_score-1')]);
//拒绝审稿扣减分数及拒绝次数+1 chengxiaoling end 20250617
return jsonSuccess([]);
} else {
return jsonError("Status changed fail");
@@ -1908,10 +1936,18 @@ class Reviewer extends Base
return json(['code' => 0, 'data' => [], 'total' => 0]);
}
//获取数据详情
// 获取时间点
$iSixMonth= strtotime('-6 months');
$aResult = $this->reviewer_to_journal_obj
->field('t_reviewer_to_journal.is_yboard,t_reviewer_to_journal.grade,t_reviewer_to_journal.journal_id,t_reviewer_to_journal.reviewer_id,t_user.user_id,t_user.account,t_user.email,t_user.phone,t_user.nickname,t_user.realname,t_user.localname,t_user.type,t_user.score,t_user.remark,t_user.wos_index,t_user.wos_time,t_user.g_author,t_user.g_website,t_user.google_index,t_user.google_time,t_user.google_editor,t_user.scopus_index,t_user.scopus_time,t_user.scopus_website,t_user.scopus_editor,t_user.code,t_user.orcid,t_user.orcid_code,t_user.review_num_two_year')
->field('t_reviewer_to_journal.is_yboard,t_reviewer_to_journal.grade,t_reviewer_to_journal.journal_id,t_reviewer_to_journal.reviewer_id,t_user.user_id,t_user.account,t_user.email,t_user.phone,t_user.nickname,t_user.realname,t_user.localname,t_user.type,t_user.score,t_user.remark,t_user.wos_index,t_user.wos_time,t_user.g_author,t_user.g_website,t_user.google_index,t_user.google_time,t_user.google_editor,t_user.scopus_index,t_user.scopus_time,t_user.scopus_website,t_user.scopus_editor,t_user.code,t_user.orcid,t_user.orcid_code,t_user.review_activity_num')
->fieldRaw("
CASE
WHEN t_reviewer_to_journal.ctime < {$iSixMonth} THEN 1
ELSE 2
END AS new_level
")
->join('t_user', 't_user.user_id = t_reviewer_to_journal.reviewer_id', 'left')
->order('t_user.review_num_two_year desc')
->order('new_level asc,t_user.review_activity_num desc')
->where($aWhere)
->limit($iOffset, $iSize)
->select();
@@ -1965,6 +2001,7 @@ class Reviewer extends Base
$aUserCvInfo = empty($aUserCvArray[$value['reviewer_id']]) ? [] : $aUserCvArray[$value['reviewer_id']];
$aResult[$key]['cvs'] = empty($aUserCvInfo) ? [] : $aUserCvInfo;
unset($aResult[$key]['reviewer_id']);
$aResult[$key]['review_num_two_year'] = empty($value['review_activity_num']) ? 0 : $value['review_activity_num'];
}
}
return json(['code' => 0, 'data' => $aResult, 'total' => $count]);
@@ -2049,6 +2086,63 @@ class Reviewer extends Base
*
* @return reviewers:审稿人列表#
*/
// public function searchReviewer()
// {
// $data = $this->request->post();
// $rule = new Validate([
// 'article_id'=>'require',
// 'pageIndex'=>'require',
// 'pageSize'=>'require'
// ]);
// if(!$rule->check($data)){
// return jsonError($rule->getError());
// }
// $article_info = $this->article_obj->where("article_id", $data['article_id'])->find();
// $noids = $this->article_reviewer_obj->where('article_id', $data['article_id'])->column('reviewer_id');
// $limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
// $list = [];
// $where['t_reviewer_to_journal.journal_id'] = $article_info['journal_id'];
// $where['t_reviewer_to_journal.reviewer_id'] = ['not in',$noids];
// $where['t_reviewer_to_journal.state'] = 0;
// if(isset($data['email'])&&$data['email']!=''){
// $where['t_user.email'] = ['like',"%" . $data["email"] . "%"];
// }
// if(isset($data['field'])&&$data['field']!=''){
// $where['t_user_reviewer_info.field'] = ['like',"%" . $data["field"] . "%"];
// }
// if (isset($data['major_id'])&&$data['major_id']!=0){
// $where['t_user_reviewer_info.major'] = ['in',$this->majorids($data['major_id'])];
// }
// // if(isset($data['keywords'])&&$data['keywords']!=''){
// // $where['t_user_reviewer_info.field|t_user.account|t_user.email|t_user.realname'] = ['like',"%" . $data["keywords"] . "%"];
// // }
// // if(isset($data['major_id'])&&$data['major_id']!=0){
// // $where['t_user_reviewer_info.major'] = $data['major_id'];
// // }
// $list = $this->reviewer_to_journal_obj
// ->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
// ->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
// ->where($where)
// ->order('t_user.rs_num desc')
// ->limit($limit_start, $data['pageSize'])
// ->select();
// $count = $this->reviewer_to_journal_obj
// ->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
// ->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
// ->where($where)
// ->count();
// foreach($list as $k => $v){
// //注释查询审稿人领域 修改为异步操作 chengxiaoling 20250617 start
// // $list[$k]['majorstr'] = getMajorStr($v['major']);
// //注释查询审稿人领域 修改为异步操作 chengxiaoling 20250617 end
// $list[$k]['now'] = $this->article_reviewer_obj->where('reviewer_id',$v['user_id'])->where('state',0)->count();
// }
// $re['reviewers'] = $list;
// $re['count'] = $count;
// return jsonSuccess($re);
// }
public function searchReviewer()
{
$data = $this->request->post();
@@ -2060,14 +2154,25 @@ class Reviewer extends Base
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$article_info = $this->article_obj->where("article_id", $data['article_id'])->find();
$noids = $this->article_reviewer_obj->where('article_id', $data['article_id'])->column('reviewer_id');
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
$list = [];
$where['t_reviewer_to_journal.journal_id'] = $article_info['journal_id'];
$where['t_reviewer_to_journal.reviewer_id'] = ['not in',$noids];
$where['t_reviewer_to_journal.state'] = 0;
//查询文章期刊ID
$article_info = $this->article_obj->field('journal_id')->where("article_id", $data['article_id'])->find();
//期刊ID
$iJournalId = empty($article_info['journal_id']) ? 0 : $article_info['journal_id'];
//查询文章现有审稿人
$noids = $this->article_reviewer_obj->where('article_id', $data['article_id'])->column('reviewer_id');
//分页配置
$limit_start = ($data['pageIndex'] - 1) * $data['pageSize'];
//查询条件
$where = [
't_reviewer_to_journal.journal_id' => $iJournalId,
't_reviewer_to_journal.state' => 0
];
if(!empty($noids)){
$where['t_reviewer_to_journal.reviewer_id'] = ['not in',$noids];
}
if(isset($data['email'])&&$data['email']!=''){
$where['t_user.email'] = ['like',"%" . $data["email"] . "%"];
}
@@ -2077,34 +2182,39 @@ class Reviewer extends Base
if (isset($data['major_id'])&&$data['major_id']!=0){
$where['t_user_reviewer_info.major'] = ['in',$this->majorids($data['major_id'])];
}
// if(isset($data['keywords'])&&$data['keywords']!=''){
// $where['t_user_reviewer_info.field|t_user.account|t_user.email|t_user.realname'] = ['like',"%" . $data["keywords"] . "%"];
// }
// if(isset($data['major_id'])&&$data['major_id']!=0){
// $where['t_user_reviewer_info.major'] = $data['major_id'];
// }
$list = $this->reviewer_to_journal_obj
->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->where($where)
->order('t_user.rs_num desc')
->limit($limit_start, $data['pageSize'])
->select();
//获取总条数
$count = $this->reviewer_to_journal_obj
->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->where($where)
->count();
foreach($list as $k => $v){
$list[$k]['majorstr'] = getMajorStr($v['major']);
$list[$k]['now'] = $this->article_reviewer_obj->where('reviewer_id',$v['user_id'])->where('state',0)->count();
if(empty($count)){
return jsonSuccess(['reviewers' => [],'count' => 0]);
}
//获取数据
$list = $this->reviewer_to_journal_obj
->join("t_user", "t_user.user_id = t_reviewer_to_journal.reviewer_id", "left")
->join("t_user_reviewer_info", "t_user_reviewer_info.reviewer_id = t_reviewer_to_journal.reviewer_id", "left")
->field('t_user.account,t_user.email,t_user.realname,t_user_reviewer_info.company,t_user_reviewer_info.field,t_user.user_id,t_user.rs_num')
->where($where)
->order('t_user.rs_num desc')
->limit($limit_start, $data['pageSize'])
->select();
if(!empty($list)){
$aUserId = array_column($list, 'user_id');
$aWhere = ['state' => 0,'reviewer_id' => ['in',$aUserId]];
$aReviewerInfo = $this->article_reviewer_obj->field('reviewer_id,count(art_rev_id) as num')->where($aWhere)->group('reviewer_id')->select();
$aReviewerInfo = empty($aReviewerInfo) ? [] : array_column($aReviewerInfo, 'num','reviewer_id');
foreach($list as $k => $v){
$list[$k]['now'] = empty($aReviewerInfo[$v['user_id']]) ? 0 : $aReviewerInfo[$v['user_id']];
}
}
$re['reviewers'] = $list;
$re['count'] = $count;
return jsonSuccess($re);
}
/**
* 获取作者推荐审稿人
*/