GenerateQuestionsBulkAction.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Filament\Resources\SourcePaperResource\Actions;
  3. use App\Jobs\PromoteSourcePapersJob;
  4. use App\Services\TaskManager;
  5. use Filament\Actions\BulkAction;
  6. use Filament\Notifications\Notification;
  7. use Illuminate\Database\Eloquent\Collection;
  8. use Illuminate\Support\Facades\Log;
  9. class GenerateQuestionsBulkAction extends BulkAction
  10. {
  11. public function getName(): string
  12. {
  13. return 'generate_questions';
  14. }
  15. protected function setUp(): void
  16. {
  17. parent::setUp();
  18. $this->label('一键生成题库');
  19. $this->color('primary');
  20. $this->icon('heroicon-o-sparkles');
  21. $this->requiresConfirmation();
  22. $this->modalHeading('一键生成题库');
  23. $this->modalDescription('将选中的源卷子下已校对题目入库到题库,并上传图片到春笋云。');
  24. $this->action(function (Collection $records) {
  25. $this->generateQuestions($records);
  26. });
  27. }
  28. private function generateQuestions(Collection $records): void
  29. {
  30. try {
  31. $paperIds = $records->pluck('id')->map(fn ($id) => (int) $id)->all();
  32. if (empty($paperIds)) {
  33. Notification::make()
  34. ->title('未选择任何卷子')
  35. ->warning()
  36. ->send();
  37. return;
  38. }
  39. $taskId = app(TaskManager::class)->createTask(
  40. TaskManager::TASK_TYPE_ANALYSIS,
  41. ['type' => 'source_paper_import', 'paper_ids' => $paperIds]
  42. );
  43. PromoteSourcePapersJob::dispatch($taskId, $paperIds);
  44. Notification::make()
  45. ->title("已加入队列,任务号:{$taskId}")
  46. ->success()
  47. ->send();
  48. } catch (\Throwable $e) {
  49. Log::error('Generate questions bulk action failed', [
  50. 'error' => $e->getMessage(),
  51. ]);
  52. Notification::make()
  53. ->title('入库失败:' . $e->getMessage())
  54. ->danger()
  55. ->send();
  56. }
  57. }
  58. }