checkLogin(); // 查询条件 $map = [['status','=','0'],['start_time','<=',time()],['end_time','>=',time()]]; // 查询课程数据 $Paginator = $Model->query()->where($map)->orderByDesc('id')->select(['id','name','type_id','thumb','end_time'])->paginate(request('limit',config('page_num',10))); // 获取用户学习记录 $record = $LearnRecord->query()->where([['custom_uid','=',$uid]])->groupBy('course_id')->select(['course_id',DB::raw('max(`status`) as status')])->get()->toArray(); // 获取报告 $report = $ExamRecord->query()->where([['custom_uid','=',$uid],['status','=',1]])->groupBy('course_id')->pluck('id','course_id')->toArray(); // 记录列表 $recordList = []; // 以课程重组课程状态 foreach ($record as $key => $value) { // 重组 $recordList[$value['course_id']] = $value['status']; } // 循环处理数据 foreach ($Paginator as $key => $value) { // 类型名称 $value['type_name'] = (string) $CourseType->getOne($value['type_id'],'name'); // 如果没有缩略图,使用海报图 $value['thumb'] = path_compat($value['thumb']); // 用户学习状态 $value['learn_status'] = isset($recordList[$value['id']]) ? $recordList[$value['id']] : -1; // 学习报告 $value['report_id'] = isset($report[$value['id']]) ? $report[$value['id']] : 0; // 结束时间 $value['end_time'] = date('Y-m-d H:i',$value['end_time']); // 重组 $Paginator[$key] = $value; } // 获取数据 $data['total'] = $Paginator->total(); $data['current_page'] = $Paginator->currentPage(); $data['per_page'] = $Paginator->perPage(); $data['last_page'] = $Paginator->lastPage(); $data['data'] = $Paginator->items(); // 分配数据 return json_send(['code'=>'success','msg'=>'列表数据','data'=>$data]); } /** * 课程详情 /api/video_course/get_detail * * */ public function get_detail(Model $Model,LearnRecord $LearnRecord,LearnQuestion $LearnQuestion,VideoQuestion $VideoQuestion,VideoAnswer $VideoAnswer){ // 检查登录 $uid = $this->checkLogin(); // 接受参数 $id = request('id',0); // 用户是否点赞 if( !$id ) return json_send(['code'=>'error','msg'=>'课程ID不能为空']); // 获取旧数据 $courseData = $Model->query()->where([['status','=',0]])->find($id,['id','name','thumb','video_src','content','start_time','end_time','insert_time']); // 用户是否点赞 if( !$courseData ) return json_send(['code'=>'error','msg'=>'课程不存在或者已下架']); // 转数组 $courseData = $courseData->toArray(); // 用户是否点赞和推荐 $courseData['thumb'] = $courseData['thumb'] ? path_compat($courseData['thumb']) : ''; // 获取用户学习进度 $courseData['inittime'] = 0;//(int)$LearnRecord->query()->where([['course_id','=',$id],['custom_uid','=',$uid],['status','=',0]])->orderByDesc('id')->value('video_lasttime'); // 查询是不是有记录在使用中 $oldRecordId = $LearnRecord->query()->where([['custom_uid','=',$uid],['course_id','=',$id],['status','=',0]])->value('id'); // 查询课程数据 $questionList = $LearnQuestion->getList($id); // 以时间排序 $questionList = array_sort($questionList,'play_time',SORT_ASC); // 获取数据 foreach ($questionList as $key => $value) { # 获取习题数据 $value['question_title'] = $VideoQuestion->getOne($value['question_id'],'title'); // 如果没有题目选项,删除 if( !$value['question_title'] ){ // 如果没有题目选项,删除 unset($questionList[$key]); continue; } $value['answer_list'] = $VideoAnswer->getListByQuestion($value['question_id']); $value['answer_list'] = array_values($value['answer_list']); // 如果没有题目选项,删除 if( !$value['answer_list'] ){ // 如果没有题目选项,删除 unset($questionList[$key]); continue; } // 重组 $questionList[$key] = $value; } // 习题列表 $courseData['question_list'] = array_values($questionList); // 学习状态 $courseData['learn_status'] = (int)$LearnRecord->query()->where([['custom_uid','=',$uid],['course_id','=',$id]])->value(DB::raw('max(`status`) as status')); // 接收参数 $data['custom_uid'] = $uid; $data['course_id'] = $id; $data['start_time'] = time(); $data['video_inittime'] = $courseData['inittime']; $data['video_lasttime'] = $courseData['inittime']; $data['question_total'] = count($questionList); // 新增记录 $courseData['record_id'] = $oldRecordId ? $LearnRecord->edit($oldRecordId,$data) : $LearnRecord->add($data); // 如果记录失败 if( !$courseData['record_id'] ) return json_send(['code'=>'error','msg'=>'获取详情失败,请重试']); // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$courseData]); } }