From e9a354c6633e1753e2719f408570205e2ca29d23 Mon Sep 17 00:00:00 2001 From: wangjinlei <751475802@qq.com> Date: Thu, 16 Apr 2026 16:16:08 +0800 Subject: [PATCH] 1 --- application/api/controller/ExpertFinder.php | 16 ++++++++++----- application/api/job/FillExpertCountry.php | 3 +++ application/common/ExpertFinderService.php | 22 ++++++++++++--------- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/application/api/controller/ExpertFinder.php b/application/api/controller/ExpertFinder.php index 2078b9a..2f1ff8e 100644 --- a/application/api/controller/ExpertFinder.php +++ b/application/api/controller/ExpertFinder.php @@ -4,6 +4,7 @@ namespace app\api\controller; use think\Cache; use think\Db; +use think\Queue; use think\Validate; use app\common\ExpertFinderService; @@ -65,6 +66,15 @@ class ExpertFinder extends Base if(!$rule->check($data)){ return jsonError($rule->getError()); } + $data1 = [ + 'expert_id' => intval($data['expert_id']), + 'affiliation' => trim((string)$data['aff']), + ]; + +// Queue::push('app\api\job\FillExpertCountry@fire', $data1, 'FetchExpertCity'); + + + $service = new ExpertFinderService(); $service->fillExpertCountry($data['expert_id'], $data['aff']); $expert = Db::name('expert')->where('expert_id', intval($data['expert_id']))->find(); @@ -85,11 +95,7 @@ class ExpertFinder extends Base $pending = Db::name('expert') ->where('affiliation', '<>', '') - ->where(function ($q) { - $q->where('country_id', 0) - ->whereOr('country_id', 'null') - ->whereOr('country', ''); - }) + ->where('country_id', 0) ->where('state', '<>', 5) ->count(); diff --git a/application/api/job/FillExpertCountry.php b/application/api/job/FillExpertCountry.php index 8c9a3cf..f6fd8a5 100644 --- a/application/api/job/FillExpertCountry.php +++ b/application/api/job/FillExpertCountry.php @@ -16,6 +16,9 @@ class FillExpertCountry { public function fire(Job $job, $data) { + + + $expertId = intval(isset($data['expert_id']) ? $data['expert_id'] : 0); $affiliation = isset($data['affiliation']) ? trim((string)$data['affiliation']) : ''; diff --git a/application/common/ExpertFinderService.php b/application/common/ExpertFinderService.php index 1728685..acb6815 100644 --- a/application/common/ExpertFinderService.php +++ b/application/common/ExpertFinderService.php @@ -593,11 +593,7 @@ class ExpertFinderService { $row = Db::name('expert') ->where('affiliation', '<>', '') - ->where(function ($q) { - $q->where('country_id', 0) - ->whereOr('country_id', 'null') - ->whereOr('country', ''); - }) + ->where('country_id', 0) ->where('state', '<>', 5) ->field('expert_id, affiliation') ->order('expert_id asc') @@ -614,9 +610,9 @@ class ExpertFinderService ]; if ($delay > 0) { - Queue::later($delay, 'app\api\job\FillExpertCountry@fire', $data, 'FetchExperts'); + Queue::later($delay, 'app\api\job\FillExpertCountry@fire', $data, 'FetchExpertCity'); } else { - Queue::push('app\api\job\FillExpertCountry@fire', $data, 'FetchExperts'); + Queue::push('app\api\job\FillExpertCountry@fire', $data, 'FetchExpertCity'); } return true; @@ -628,7 +624,10 @@ class ExpertFinderService public function fillExpertCountry($expertId, $affiliation) { $affiliation = trim((string)$affiliation); - if ($affiliation === '') return; + if ($affiliation === '') { + Db::name('expert')->where('expert_id', intval($expertId))->update(['country_id' => -1]); + return; + } $resolver = new CountryResolverService([ 'chat_url' => trim((string)Env::get('expert_country_chat_url', Env::get('citation_chat_url', 'http://chat.taimed.cn/v1/chat/completions'))), @@ -638,7 +637,6 @@ class ExpertFinderService ]); $result = $resolver->resolve($affiliation); - if (empty($result)) return; $countryId = 0; $enName = ''; @@ -666,6 +664,12 @@ class ExpertFinderService 'country_id' => $countryId, 'country' => $enName, ]); + } else { + // country_id = -1 表示「已尝试但未识别」,避免链式执行时反复卡在同一条 + Db::name('expert')->where('expert_id', intval($expertId))->update([ + 'country_id' => -1, + ]); + $this->log('[CountryFill] expert_id=' . $expertId . ' unresolved, code=' . ($result['code'] ?? '') . ' en_name=' . ($result['en_name'] ?? '')); } }