request->param('force', 0)) === 1; $delay = max(0, intval($this->request->param('delay', 1))); $svc = new UserFieldAiService(); $started = $svc->startChain($force, $delay); return jsonSuccess([ 'started' => $started, 'queue' => UserFieldAiService::QUEUE_NAME, 'force' => $force, 'msg' => $started ? 'chain enqueued' : 'no pending users', ]); } /** * 同步处理单个用户(不调队列)。 */ public function processOne() { $userId = intval($this->request->param('user_id', 0)); $force = intval($this->request->param('force', 0)) === 1; if ($userId <= 0) { return jsonError('user_id required'); } $svc = new UserFieldAiService(); $result = $svc->processUser($userId, $force); if (empty($result['ok'])) { return jsonError(isset($result['error']) ? $result['error'] : 'failed'); } return jsonSuccess($result); } /** * 预览:是否满足条件、当前 field_ai 状态。 */ public function preview() { $userId = intval($this->request->param('user_id', 0)); if ($userId <= 0) { return jsonError('user_id required'); } $svc = new UserFieldAiService(); $svc->ensureReviewerInfoRow($userId); $uri = Db::name('user_reviewer_info')->where('reviewer_id', $userId)->find(); return jsonSuccess([ 'user_id' => $userId, 'has_articles' => $svc->hasSubmittedArticles($userId), 'profile_complete' => $svc->isReviewerProfileComplete($uri), 'eligible' => $svc->isEligible($userId, $uri), 'field_ai' => $uri ? (string) $uri['field_ai'] : '', 'field_ai_status' => $uri ? intval($uri['field_ai_status']) : 0, 'field_ai_utime' => $uri ? intval($uri['field_ai_utime']) : 0, 'field_ai_status_text' => $this->statusLabel($uri ? intval($uri['field_ai_status']) : 0), ]); } private function statusLabel($status) { $map = [ UserFieldAiService::STATUS_PENDING => 'pending', UserFieldAiService::STATUS_DONE => 'done', UserFieldAiService::STATUS_INSUFFICIENT => 'insufficient', UserFieldAiService::STATUS_FAILED => 'failed', ]; return isset($map[$status]) ? $map[$status] : 'unknown'; } }