| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?php
- namespace App\Jobs;
- use App\Services\QuestionTemReviewService;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Log;
- class ImportTemToQuestionsJob implements ShouldQueue
- {
- use Dispatchable;
- use InteractsWithQueue;
- use Queueable;
- use SerializesModels;
- public int $timeout = 120;
- public function __construct(
- public int $temId,
- public ?int $userId = null,
- public ?string $kpCode = null
- ) {
- }
- public function handle(QuestionTemReviewService $service): void
- {
- $statusKey = self::statusKey($this->temId);
- Cache::put($statusKey, ['state' => 'running', 'at' => now()->toDateTimeString()], now()->addMinutes(30));
- $result = $service->importTemRowToQuestions($this->temId);
- if (! empty($result['ok'])) {
- Cache::put($statusKey, [
- 'state' => 'done',
- 'question_id' => $result['question_id'] ?? null,
- 'message' => $result['message'] ?? '已入库',
- 'at' => now()->toDateTimeString(),
- ], now()->addMinutes(30));
- $this->bumpPageVersion();
- return;
- }
- Cache::put($statusKey, [
- 'state' => 'failed',
- 'message' => $result['message'] ?? '入库失败',
- 'at' => now()->toDateTimeString(),
- ], now()->addMinutes(30));
- }
- public function failed(\Throwable $e): void
- {
- Cache::put(self::statusKey($this->temId), [
- 'state' => 'failed',
- 'message' => $e->getMessage(),
- 'at' => now()->toDateTimeString(),
- ], now()->addMinutes(30));
- Log::error('ImportTemToQuestionsJob failed', ['tem_id' => $this->temId, 'error' => $e->getMessage()]);
- }
- public static function statusKey(int $temId): string
- {
- return "qtr:import:tem:{$temId}";
- }
- private function bumpPageVersion(): void
- {
- if (! $this->userId || ! $this->kpCode) {
- return;
- }
- $versionKey = "qtr:version:u{$this->userId}:kp{$this->kpCode}";
- Cache::add($versionKey, 1, now()->addHours(2));
- Cache::increment($versionKey);
- }
- }
|