自动查重
This commit is contained in:
92
application/api/controller/UserFieldAi.php
Normal file
92
application/api/controller/UserFieldAi.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use think\Db;
|
||||
use think\Validate;
|
||||
use app\common\UserFieldAiService;
|
||||
|
||||
/**
|
||||
* 用户主领域 AI 总结(写入 t_user_reviewer_info.field_ai)。
|
||||
*
|
||||
* POST startChain 启动链式队列(扫描全部符合条件的用户)
|
||||
* POST processOne 同步处理单个 user_id(调试)
|
||||
* GET preview 预览某用户是否 eligible 及上下文摘要
|
||||
*/
|
||||
class UserFieldAi extends Base
|
||||
{
|
||||
/**
|
||||
* 启动链式处理。需 worker: php think queue:work --queue UserFieldAi
|
||||
*/
|
||||
public function startChain()
|
||||
{
|
||||
$force = intval($this->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';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user