From d541f35ff471ae75dc6ddfe2bc0e0b0176dc60d9 Mon Sep 17 00:00:00 2001 From: chengxl Date: Thu, 29 May 2025 13:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E7=A8=BF=E4=BA=BA=E9=A2=86=E5=9F=9F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Reviewer.php | 275 ++++++++++++++++++++---- 1 file changed, 233 insertions(+), 42 deletions(-) diff --git a/application/api/controller/Reviewer.php b/application/api/controller/Reviewer.php index d19c140..bffc632 100644 --- a/application/api/controller/Reviewer.php +++ b/application/api/controller/Reviewer.php @@ -1786,56 +1786,174 @@ class Reviewer extends Base * @param name:pageIndex type:int require:1 desc:开始页码 * @param name:pageSize type:int require:1 desc:每页是数据条数 */ + // public function getReviewerListByJournal() + // { + // $data = $this->request->post(); + // $editor_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find(); + // $limit_start = ($data['pageIndex'] - 1) * $data['pageSize']; + // $jous = []; + // $res = []; + // $count = 0; + // if ($data['journalId'] == 0) { + // $jous = $this->journal_obj->where('editor_id', $editor_info['user_id'])->where('state', 0)->column('journal_id'); + // } else { + // $jous[] = $data['journalId']; + // } + // $gradewhere = ''; + // if(isset($data['grade'])){ + // $gradewhere = 't_reviewer_to_journal.grade = "'.$data['grade'].'"'; + // } + // if (isset($data['keyword'])) { + // $res = $this->reviewer_to_journal_obj + // ->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title') + // ->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left') + // ->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('t_reviewer_to_journal.journal_id', 'in', $jous) + // ->where($gradewhere) + // ->where('t_reviewer_to_journal.state', 0) + // ->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%') + // ->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('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%')->count(); + // } else { + // $res = $this->reviewer_to_journal_obj + // ->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title') + // ->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left') + // ->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('t_reviewer_to_journal.journal_id', 'in', $jous) + // ->where($gradewhere) + // ->where('t_reviewer_to_journal.state', 0) + // ->limit($limit_start, $data['pageSize']) + // ->select(); + // $count = $this->reviewer_to_journal_obj->where('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->count(); + // } + // foreach($res as $k => $v){ + // $res[$k]['major_title'] = getMajorStr($v['major']); + // $res[$k]['cvs'] = $this->getCvs($v['user_id']); + // } + // return json(['code' => 0, 'data' => $res, 'total' => $count]); + // } + public function getReviewerListByJournal() { $data = $this->request->post(); - $editor_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find(); - $limit_start = ($data['pageIndex'] - 1) * $data['pageSize']; + $sUserName = empty($data['username']) ? '' : $data['username']; + if(!empty($sUserName)){ + $editor_info = $this->user_obj->where('account', $data['username'])->where('state', 0)->find(); + } + + //每页显示数据 + $iSize = empty($data['pageSize']) ? 15 : $data['pageSize']; + //当前页 + $iPage = empty($data['pageIndex']) ? 1 : $data['pageIndex']; + $iOffset = ($iPage - 1) * $iSize; + $jous = []; - $res = []; - $count = 0; - if ($data['journalId'] == 0) { - $jous = $this->journal_obj->where('editor_id', $editor_info['user_id'])->where('state', 0)->column('journal_id'); + if(empty($data['journalId'])) { + if(!empty($editor_info['user_id'])){ + $jous = $this->journal_obj->where('editor_id', $editor_info['user_id'])->where('state', 0)->column('journal_id'); + } } else { $jous[] = $data['journalId']; } - $gradewhere = ''; - if(isset($data['grade'])){ - $gradewhere = 't_reviewer_to_journal.grade = "'.$data['grade'].'"'; - } - if (isset($data['keyword'])) { - $res = $this->reviewer_to_journal_obj - ->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title') - ->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left') - ->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('t_reviewer_to_journal.journal_id', 'in', $jous) - ->where($gradewhere) - ->where('t_reviewer_to_journal.state', 0) - ->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%') - ->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('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->where("t_user.account|t_user.email", "like", '%' . $data['keyword'] . '%')->count(); - } else { - $res = $this->reviewer_to_journal_obj - ->field('t_reviewer_to_journal.is_yboard,t_user.*,t_reviewer_to_journal.grade,t_user_reviewer_info.*,t_journal.journal_id,t_journal.title journal_title') - ->join('t_journal', 't_journal.journal_id = t_reviewer_to_journal.journal_id', 'left') - ->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('t_reviewer_to_journal.journal_id', 'in', $jous) - ->where($gradewhere) - ->where('t_reviewer_to_journal.state', 0) - ->limit($limit_start, $data['pageSize']) - ->select(); - $count = $this->reviewer_to_journal_obj->where('t_reviewer_to_journal.journal_id', 'in', $jous)->where($gradewhere)->where('t_reviewer_to_journal.state', 0)->count(); - } - foreach($res as $k => $v){ - $res[$k]['major_title'] = getMajorStr($v['major']); - $res[$k]['cvs'] = $this->getCvs($v['user_id']); - } - return json(['code' => 0, 'data' => $res, 'total' => $count]); - } + + //查询基本条件 + $aWhere = ['journal_id' => ['in',$jous],'state' => 0]; + if(!empty($data['grade'])){ + $aWhere['grade'] = trim($data['grade']); + } + + //根据邮箱查询 + if(!empty($data['keyword'])){ + $aUserId = Db::name('user')->where(['email'=>['like','%' . $data['keyword'] . '%'],'state' => 0])->column('user_id'); + if(empty($aUserId)){ + return json(['code' => 0, 'data' => [], 'total' => 0]); + } + $aWhere['reviewer_id'] = ['in',$aUserId]; + } + + //根据领域 + if(!empty($data['user_field'])){ + $aMajorWhere = ['state' => 0,'major_id' => $data['user_field']]; + if(!empty($aWhere['reviewer_id'])){ + $aMajorWhere['user_id'] = $aWhere['reviewer_id']; + } + $aUserId = Db::name('major_to_user')->where($aMajorWhere)->order('user_id asc')->column('user_id'); + if(empty($aUserId)){ + return json(['code' => 0, 'data' => [], 'total' => 0]); + } + // $aWhere['t_user.email'] = ['like','%' . $data['keyword'] . '%']; + $aWhere['reviewer_id'] = ['in',$aUserId]; + } + + //获取数量 + $count = $this->reviewer_to_journal_obj->where($aWhere)->count(); + if(empty($count)){ + return json(['code' => 0, 'data' => [], 'total' => 0]); + } + //获取数据详情 + $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') + ->where($aWhere) + ->limit($iOffset, $iSize) + ->select(); + if(!empty($aResult)){ + //获取期刊信息 + $aJournalId = array_unique(array_column($aResult, 'journal_id')); + $aJournal = Db::name('journal')->where(['journal_id'=>['in',$aJournalId]])->column('journal_id,title'); + + //获取审稿人信息 + $aReviewerId = array_column($aResult, 'reviewer_id'); + $aReviewer = Db::name('user_reviewer_info')->field('reviewer_id,gender,technical,country,introduction,company,website,field,qualifications')->where(['reviewer_id'=>['in',$aReviewerId]])->select(); + $aReviewer = empty($aReviewer) ? [] : array_column($aReviewer, null,'reviewer_id'); + + //用户基本信息 + $aUser = Db::name('user')->field('user_id,account,email,phone,nickname,realname,localname,type,score,remark,wos_index,wos_time,g_author,g_website,google_index,google_time,google_editor,scopus_index,scopus_time,scopus_website,scopus_editor,code,orcid,orcid_code')->where(['user_id'=>['in',$aReviewerId]])->select(); + $aUser = empty($aUser) ? [] : array_column($aUser, null,'user_id'); + + //查询CV + $aUserCv = $this->user_cv_obj->where(['user_id'=>['in',$aReviewerId],'state' =>0])->select(); + if(!empty($aUserCv)){ + $aUserCvArray = []; + foreach ($aUserCv as $key => $value) { + $aUserCvArray[$value['user_id']][] = $value; + } + } + $aUserCv = empty($aUserCv) ? [] : array_column($aUserCv, null,'user_id'); + foreach ($aResult as $key => $value) { + + //期刊信息 + $aJournalInfo = empty($aJournal[$value['journal_id']]) ? [] : $aJournal[$value['journal_id']]; + if(!empty($aJournalInfo['title'])){ + + $aJournalInfo['journal_title'] = $aJournalInfo['title']; + unset($aJournalInfo['title']); + unset($aResult[$key]['journal_id']); + $aResult[$key] += $aJournalInfo; + } + + //审稿人信息 + $aReviewerInfo = empty($aReviewer[$value['reviewer_id']]) ? [] : $aReviewer[$value['reviewer_id']]; + if(!empty($aReviewerInfo)){ + $aResult[$key] += $aReviewerInfo; + } + + //审稿人信息 + $aUserInfo = empty($aUser[$value['reviewer_id']]) ? [] : $aUser[$value['reviewer_id']]; + if(!empty($aUserInfo)){ + $aResult[$key] += $aUserInfo; + } + //用户CVS信息 + $aUserCvInfo = empty($aUserCvArray[$value['reviewer_id']]) ? [] : $aUserCvArray[$value['reviewer_id']]; + $aResult[$key]['cvs'] = empty($aUserCvInfo) ? [] : $aUserCvInfo; + unset($aResult[$key]['reviewer_id']); + } + } + return json(['code' => 0, 'data' => $aResult, 'total' => $count]); + } /** * @title 获取国家 * @description 获取国家 @@ -2119,4 +2237,77 @@ class Reviewer extends Base // $pdf->Output($pdf_wj, 'F'); // return $pdf_wj; // } + + /** + * 获取用户所属领域 + * @param reviewer_id 审核人ID + * @param + */ + public function getUserField($aParam = []){ + + $aParam = empty($aParam) ? $this->request->post() : $this->request->post(); + + if(empty($aParam['user_id'])){ + return json_encode(['status' => 2,'msg' => 'Please select a reviewer']); + } + + //查询审稿人领域信息 + $aParam['state'] = 0; + $aReviewerMajor = Db::name('major_to_user')->field('major_id')->where($aParam)->order('major_id asc')->select(); + if(empty($aReviewerMajor)){ + return json_encode(['status' => 1,'msg' => "Reviewer's field information is empty",'data' => []]); + } + + //数据处理 + foreach ($aReviewerMajor as $key => $value) { + $aReviewerMajor[$key]['major_title'] = getMajorStr($value['major_id']); + } + return json_encode(['status' => 1,'msg' => "Reviewer's field information is empty",'data' => $aReviewerMajor]); + } + /** + * 修改用户所属领域 + * @param reviewer_id 审核人ID + * @param + */ + public function updateUserField($aParam = []){ + + $aParam = empty($aParam) ? $this->request->post() : $this->request->post(); + $iUserId = empty($aParam['user_id']) ? 0 : $aParam['user_id']; + if(empty($iUserId)){ + return json_encode(['status' => 2,'msg' => 'Please select a reviewer']); + } + $sField = empty($aParam['user_field']) ? '' : $aParam['user_field']; + if(empty($sField)){ + return json_encode(['status' => 2,'msg' => "Please select the user's field of expertise"]); + } + $aField = is_array($sField) ? $sField : explode(',', trim($sField,',')); + if(empty($aField)){ + return json_encode(['status' => 3,'msg' => "Please select the user's field of expertise"]); + } + //查询审稿人领域信息 + $aWhere = ['state' => 0,'user_id' => $iUserId]; + $aReviewerMajor = Db::name('major_to_user')->where($aWhere)->order('major_id asc')->column('major_id'); + + //新增 + $aInsert = array_diff($aField,$aReviewerMajor); + //删除 + $aDelete = array_diff($aReviewerMajor,$aField); + + //数据处理 + Db::startTrans(); + if(!empty($aInsert)){//新增 + foreach ($aInsert as $key => $value) { + $aAdd[] = ['major_id' => $value,'user_id' => $iUserId,'ctime' => time(),'state' => 0]; + } + $result = Db::name('major_to_user')->insertAll($aAdd); + echo Db::getLastSql(); + } + if(!empty($aDelete)){//修改状态为1 + $aWhere = ['user_id' => $iUserId,'state' => 0,'major_id' => ['in',$aDelete]]; + $result = Db::name('major_to_user')->where($aWhere)->limit(count($aDelete))->update(['state' => 1,'ctime' => time()]); + echo Db::getLastSql(); + } + Db::commit(); + return json_encode(['status' => 1,'msg' => "Reviewer's field has been successfully modified"]); + } }