diff --git a/application/api/controller/Reviewer.php b/application/api/controller/Reviewer.php index 5000229..f98db9c 100644 --- a/application/api/controller/Reviewer.php +++ b/application/api/controller/Reviewer.php @@ -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(); + + //查询文章期刊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']; - $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; + //查询条件 + $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); } - /** * 获取作者推荐审稿人 */