diff --git a/application/common/Reviewer.php b/application/common/Reviewer.php index 99ae67e..a5b2182 100644 --- a/application/common/Reviewer.php +++ b/application/common/Reviewer.php @@ -191,6 +191,8 @@ class Reviewer //获取审稿人信息 // 获取时间点 $iSixMonth = strtotime(date('Y-m-d 00:00:00',strtotime('-6 months'))); + // 计算10天之前的时间戳 + $iTeenDaysLater = strtotime('-10 days'); // 先查询符合专业条件的审稿人ID $aWhere = ['state' => 0, 'major_id' => ['in', $aMajorId]]; @@ -213,8 +215,11 @@ class Reviewer if(!empty($aParam['field'])){//根据领域搜索 $aWhere['field'] = ['like',"%" . $aParam["field"] . "%"]; } - $sCompanyQuery = Db::name('user_reviewer_info')->field('reviewer_id,technical,country,introduction,company,field')->where($aWhere)->buildSql(); - + $sCompanyQuery = Db::name('user_reviewer_info')->field('reviewer_id,technical,country,introduction,company,field,last_invite_time') + ->where($aWhere)->where(function($query) use ($iTeenDaysLater) { + $query->where('last_invite_time', '<', $iTeenDaysLater) + ->whereOr('last_invite_time', '=', 0); + })->buildSql(); // 主查询条件 $iSize = empty($aParam['size']) ? $this->iReviewerNum : $aParam['size'];//每页显示条数 $iPage = empty($aParam['page']) ? 1 : $aParam['page'];// 当前页码 @@ -258,7 +263,7 @@ class Reviewer ->field($sSelect) ->fieldRaw(" CASE - WHEN t_reviewer_to_journal.is_yboard = 1 AND t_reviewer_to_journal.ctime < {$iSixMonth} THEN 1 + WHEN t_reviewer_to_journal.is_yboard = 1 AND t_reviewer_to_journal.ctime < {$iSixMonth} THEN 1 ELSE 2 END AS new_level ") @@ -385,20 +390,31 @@ class Reviewer //数据处理 $aInsert = []; + $iNowTime = time(); foreach ($aReviewerId as $value) { if(in_array($value, $aReviewer)){ continue; } - $aInsert[] = ['reviewer_id' => $value,'article_id' => $iArticleId,'editor_act' => 1,'ctime' => time(),'state' => 5,'invited_time' => time()]; + $aInsert[] = ['reviewer_id' => $value,'article_id' => $iArticleId,'editor_act' => 1,'ctime' => time(),'state' => 5,'invited_time' => $iNowTime]; } if(empty($aInsert)){ return json_encode(['status' => 3,'msg' => 'Reviewers have been invited to review, please do not repeat the process']); } //插入审稿人数据 + Db::startTrans(); $result = Db::name('article_reviewer')->insertAll($aInsert); if($result === false){ return json_encode(['status' => 4,'msg' => 'Reviewer data insertion failed:'.json_encode($aInsert)]); } + //更新审稿人最后一次审稿时间 + $aReviewerId = array_column($aInsert, 'reviewer_id'); + $aUpdate = ['last_invite_time'=>$iNowTime]; + $aWhere = ['reviewer_id' => ['in',$aReviewerId]]; + $updateResult = Db::name('user_reviewer_info')->where($aWhere)->limit(count($aReviewerId))->update($aUpdate); + if($updateResult === false){ + return json_encode(['status' => 5,'msg' => 'Invitation time update failed:'.json_encode($aReviewerId)]); + } + Db::commit(); return json_encode(['status' => 1,'msg' => 'Reviewer data insertion successful, execute email queue']); }