StudentProgressController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Services\StudentProgressService;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Support\Facades\Log;
  8. class StudentProgressController extends Controller
  9. {
  10. protected StudentProgressService $progressService;
  11. public function __construct(StudentProgressService $progressService)
  12. {
  13. $this->progressService = $progressService;
  14. }
  15. /**
  16. * 获取学生学习进度
  17. *
  18. * @param string $studentId
  19. * @return JsonResponse
  20. */
  21. public function getLearningProgress(string $studentId): JsonResponse
  22. {
  23. try {
  24. Log::info('获取学生学习进度', ['student_id' => $studentId]);
  25. $result = $this->progressService->calculateLearningProgress($studentId);
  26. if ($result['success']) {
  27. return response()->json([
  28. 'success' => true,
  29. 'data' => $result['data'],
  30. 'message' => '学习进度计算成功'
  31. ]);
  32. }
  33. return response()->json([
  34. 'success' => false,
  35. 'message' => $result['error'] ?? '计算学习进度失败'
  36. ], 400);
  37. } catch (\Exception $e) {
  38. Log::error('获取学生学习进度失败', [
  39. 'student_id' => $studentId,
  40. 'error' => $e->getMessage(),
  41. 'trace' => $e->getTraceAsString()
  42. ]);
  43. return response()->json([
  44. 'success' => false,
  45. 'message' => '获取学习进度失败: ' . $e->getMessage()
  46. ], 500);
  47. }
  48. }
  49. /**
  50. * 获取学生知识点掌握度详情
  51. *
  52. * @param string $studentId
  53. * @return JsonResponse
  54. */
  55. public function getKnowledgePointDetails(string $studentId): JsonResponse
  56. {
  57. try {
  58. Log::info('获取学生知识点掌握度详情', ['student_id' => $studentId]);
  59. $details = $this->progressService->getKnowledgePointDetails($studentId);
  60. return response()->json([
  61. 'success' => true,
  62. 'data' => $details,
  63. 'message' => '获取知识点详情成功'
  64. ]);
  65. } catch (\Exception $e) {
  66. Log::error('获取学生知识点掌握度详情失败', [
  67. 'student_id' => $studentId,
  68. 'error' => $e->getMessage()
  69. ]);
  70. return response()->json([
  71. 'success' => false,
  72. 'message' => '获取知识点详情失败: ' . $e->getMessage()
  73. ], 500);
  74. }
  75. }
  76. /**
  77. * 批量获取学生学习进度
  78. *
  79. * @param Request $request
  80. * @return JsonResponse
  81. */
  82. public function batchGetLearningProgress(Request $request): JsonResponse
  83. {
  84. try {
  85. $studentIds = $request->input('student_ids', []);
  86. $studentIds = array_filter(array_map('trim', $studentIds));
  87. if (empty($studentIds)) {
  88. return response()->json([
  89. 'success' => false,
  90. 'message' => '学生ID列表不能为空'
  91. ], 400);
  92. }
  93. if (count($studentIds) > 100) {
  94. return response()->json([
  95. 'success' => false,
  96. 'message' => '单次最多查询100个学生'
  97. ], 400);
  98. }
  99. Log::info('批量获取学生学习进度', ['student_ids' => $studentIds]);
  100. $results = $this->progressService->batchCalculateLearningProgress($studentIds);
  101. return response()->json([
  102. 'success' => true,
  103. 'data' => $results,
  104. 'message' => '批量获取学习进度成功'
  105. ]);
  106. } catch (\Exception $e) {
  107. Log::error('批量获取学生学习进度失败', [
  108. 'error' => $e->getMessage(),
  109. 'student_ids' => $request->input('student_ids', [])
  110. ]);
  111. return response()->json([
  112. 'success' => false,
  113. 'message' => '批量获取学习进度失败: ' . $e->getMessage()
  114. ], 500);
  115. }
  116. }
  117. }