ExamAnalysisApiController.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Paper;
  5. use App\Services\ExamPdfExportService;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\URL;
  9. class ExamAnalysisApiController extends Controller
  10. {
  11. public function store(Request $request, ExamPdfExportService $pdfExportService): JsonResponse
  12. {
  13. $data = $request->validate([
  14. 'paper_id' => 'required|string',
  15. 'student_id' => 'nullable|string',
  16. ]);
  17. $paperId = $data['paper_id'];
  18. $studentId = $data['student_id'] ?? null;
  19. $paper = Paper::find($paperId);
  20. if (!$paper) {
  21. return response()->json([
  22. 'success' => false,
  23. 'message' => '未找到试卷',
  24. ], 404);
  25. }
  26. if (!$studentId) {
  27. $studentId = $paper->student_id;
  28. }
  29. if (!$studentId) {
  30. return response()->json([
  31. 'success' => false,
  32. 'message' => '缺少 student_id',
  33. ], 422);
  34. }
  35. $pdfUrl = $pdfExportService->generateAnalysisReportPdf($paperId, $studentId);
  36. if (!$pdfUrl) {
  37. return response()->json([
  38. 'success' => false,
  39. 'message' => '生成学情报告失败',
  40. ], 500);
  41. }
  42. $viewUrl = URL::to("/admin/exam-analysis?paperId={$paperId}&studentId={$studentId}");
  43. return response()->json([
  44. 'success' => true,
  45. 'message' => '学情报告生成成功',
  46. 'data' => [
  47. 'paper_id' => $paperId,
  48. 'student_id' => $studentId,
  49. 'pdf_url' => $pdfUrl,
  50. 'analysis_url' => $viewUrl,
  51. ],
  52. ], 200, [], JSON_UNESCAPED_SLASHES);
  53. }
  54. }