0, 'msg' => '参数不完整']; } // 1. 获取学员课程基本信息 $courseInfo = $this->getCourseInfo($course_id, $resource_id); if (!$courseInfo) { return ['code' => 0, 'msg' => '课程信息不存在']; } // 2. 获取课程安排列表 $scheduleList = $this->getScheduleList($course_id, $resource_id); // 3. 获取课程使用记录 $usageList = $this->getUsageList($course_id, $resource_id); $result = [ 'course_info' => $courseInfo, 'schedule_list' => $scheduleList, 'usage_list' => $usageList ]; Log::debug('StudentCourseService::getCourseDetail - 返回数据: ' . json_encode($result)); return ['code' => 1, 'data' => $result]; } catch (\Exception $e) { Log::error('StudentCourseService::getCourseDetail - 异常: ' . $e->getMessage()); return ['code' => 0, 'msg' => '获取课程详情失败: ' . $e->getMessage()]; } } /** * 获取课程基本信息 * @param int $course_id * @param int $resource_id * @return array|null */ private function getCourseInfo($course_id, $resource_id) { $studentCourse = new StudentCourses(); $info = $studentCourse ->alias('sc') ->join(['school_course' => 'c'], 'sc.course_id = c.id', 'left') ->join(['school_campus' => 'campus'], 'sc.campus_id = campus.id', 'left') ->join(['school_personnel' => 'coach'], 'sc.main_coach_id = coach.id', 'left') ->join(['school_personnel' => 'education'], 'sc.education_id = education.id', 'left') ->where([ 'sc.course_id' => $course_id, 'sc.resource_id' => $resource_id ]) ->field([ 'sc.id', 'sc.course_id', 'sc.resource_id', 'sc.total_hours', 'sc.gift_hours', 'sc.start_date', 'sc.end_date', 'sc.use_total_hours', 'sc.use_gift_hours', 'sc.status', 'sc.single_session_count', 'c.course_name', 'campus.campus_name', 'coach.name as main_coach_name', 'education.name as education_name' ]) ->find(); return $info ? $info->toArray() : null; } /** * 获取课程安排列表 * @param int $course_id * @param int $resource_id * @return array */ private function getScheduleList($course_id, $resource_id) { // 首先获取学员课程ID $studentCourseId = $this->getStudentCourseId($course_id, $resource_id); if (!$studentCourseId) { return []; } $personCourseSchedule = new PersonCourseSchedule(); $list = $personCourseSchedule ->alias('pcs') ->join(['school_course_schedule' => 'cs'], 'pcs.schedule_id = cs.id', 'left') ->join(['school_venue' => 'v'], 'cs.venue_id = v.id', 'left') ->join(['school_personnel' => 'coach'], 'cs.coach_id = coach.id', 'left') ->where([ 'pcs.student_course_id' => $studentCourseId, 'pcs.resources_id' => $resource_id ]) ->field([ 'pcs.id', 'pcs.schedule_id', 'pcs.course_date', 'pcs.time_slot', 'pcs.schedule_type', 'pcs.course_type', 'pcs.status', 'pcs.remark', 'v.venue_name', 'coach.name as coach_name' ]) ->order('pcs.course_date desc, pcs.time_slot desc') ->select(); return $list ? $list->toArray() : []; } /** * 获取课程使用记录 * @param int $course_id * @param int $resource_id * @return array */ private function getUsageList($course_id, $resource_id) { // 首先获取学员课程ID $studentCourseId = $this->getStudentCourseId($course_id, $resource_id); if (!$studentCourseId) { return []; } $studentCourseUsage = new StudentCourseUsage(); $list = $studentCourseUsage ->alias('scu') ->join(['school_course_schedule' => 'cs'], 'scu.schedule_id = cs.id', 'left') ->join(['school_venue' => 'v'], 'cs.venue_id = v.id', 'left') ->where([ 'scu.student_course_id' => $studentCourseId, 'scu.resource_id' => $resource_id ]) ->field([ 'scu.id', 'scu.usage_date', 'scu.hours_used', 'scu.usage_type', 'scu.remark', 'cs.time_slot', 'v.venue_name' ]) ->order('scu.usage_date desc') ->select(); return $list ? $list->toArray() : []; } /** * 获取学员课程ID * @param int $course_id * @param int $resource_id * @return int|null */ private function getStudentCourseId($course_id, $resource_id) { $studentCourse = new StudentCourses(); $info = $studentCourse ->where([ 'course_id' => $course_id, 'resource_id' => $resource_id ]) ->find(); return $info ? $info->id : null; } /** * 获取教练列表 * @param int $campus_id * @return array */ public function getCoachList($campus_id = 0) { try { // 查询dept_id=24的教练角色 $roleIds = \app\model\sys_role\SysRole::where('dept_id', 24) ->where('status', 1) ->column('role_id'); if (empty($roleIds)) { return ['code' => 0, 'msg' => '没有找到教练角色']; } // 查询校区人员角色关系表 $query = \app\model\campus_person_role\CampusPersonRole::alias('cpr') ->join(['school_personnel' => 'p'], 'cpr.person_id = p.id', 'inner') ->whereIn('cpr.role_id', $roleIds) ->where('cpr.deleted_at', 0) ->where('p.status', 1); // 只查询状态正常的人员 // 如果指定了校区,添加校区筛选 if ($campus_id > 0) { $query->where('cpr.campus_id', $campus_id); } $list = $query->field([ 'p.id', 'p.name', 'p.phone', 'p.status', 'cpr.campus_id', 'cpr.role_id' ])->select(); return ['code' => 1, 'data' => $list ? $list->toArray() : []]; } catch (\Exception $e) { Log::error('StudentCourseService::getCoachList - 异常: ' . $e->getMessage()); return ['code' => 0, 'msg' => '获取教练列表失败: ' . $e->getMessage()]; } } /** * 获取教务人员列表 * @param int $campus_id * @return array */ public function getEducationList($campus_id = 0) { try { // 查询dept_id=2的教务角色 $roleIds = \app\model\sys_role\SysRole::where('dept_id', 2) ->where('status', 1) ->column('role_id'); if (empty($roleIds)) { return ['code' => 0, 'msg' => '没有找到教务角色']; } // 查询校区人员角色关系表 $query = \app\model\campus_person_role\CampusPersonRole::alias('cpr') ->join(['school_personnel' => 'p'], 'cpr.person_id = p.id', 'inner') ->whereIn('cpr.role_id', $roleIds) ->where('cpr.deleted_at', 0) ->where('p.status', 1); // 只查询状态正常的人员 // 如果指定了校区,添加校区筛选 if ($campus_id > 0) { $query->where('cpr.campus_id', $campus_id); } $list = $query->field([ 'p.id', 'p.name', 'p.phone', 'p.status', 'cpr.campus_id', 'cpr.role_id' ])->select(); return ['code' => 1, 'data' => $list ? $list->toArray() : []]; } catch (\Exception $e) { Log::error('StudentCourseService::getEducationList - 异常: ' . $e->getMessage()); return ['code' => 0, 'msg' => '获取教务人员列表失败: ' . $e->getMessage()]; } } /** * 更新学员课程信息 * @param array $data * @return array */ public function updateCourseInfo($data) { try { $studentCourseId = $data['student_course_id']; $mainCoachId = $data['main_coach_id'] ?? 0; $assistantIds = $data['assistant_ids'] ?? ''; $educationId = $data['education_id'] ?? 0; $classId = $data['class_id'] ?? 0; // 1. 更新学员课程表 $updateData = []; if ($mainCoachId > 0) { $updateData['main_coach_id'] = $mainCoachId; } if (!empty($assistantIds)) { $updateData['assistant_ids'] = $assistantIds; } if ($educationId > 0) { $updateData['education_id'] = $educationId; } if (!empty($updateData)) { $updateData['updated_at'] = date('Y-m-d H:i:s'); $result = StudentCourses::where('id', $studentCourseId)->update($updateData); if (!$result) { return ['code' => 0, 'msg' => '更新学员课程信息失败']; } } // 2. 如果需要更新班级关联 if ($classId > 0) { // 先获取学员的resource_id $studentCourse = StudentCourses::where('id', $studentCourseId)->find(); if (!$studentCourse) { return ['code' => 0, 'msg' => '学员课程不存在']; } $resourceId = $studentCourse->resource_id; // 检查是否已存在班级关联 $existingRel = \app\model\class_resources_rel\ClassResourcesRel::where([ 'resource_id' => $resourceId, 'status' => 1 ])->find(); if ($existingRel) { // 更新现有关联 $existingRel->class_id = $classId; $existingRel->update_time = date('Y-m-d H:i:s'); $existingRel->save(); } else { // 创建新的班级关联 $classRel = new \app\model\class_resources_rel\ClassResourcesRel(); $classRel->class_id = $classId; $classRel->resource_id = $resourceId; $classRel->campus_id = $studentCourse->campus_id ?? 1; // 默认校区ID $classRel->source_type = 'student'; $classRel->join_time = time(); $classRel->status = 1; $classRel->save(); } } return ['code' => 1, 'data' => ['id' => $studentCourseId], 'msg' => '更新成功']; } catch (\Exception $e) { Log::error('StudentCourseService::updateCourseInfo - 异常: ' . $e->getMessage()); return ['code' => 0, 'msg' => '更新失败: ' . $e->getMessage()]; } } /** * 检查学员班级关联情况 * @param int $resource_id * @return array */ public function checkClassRelation($resource_id) { try { $classRel = \app\model\class_resources_rel\ClassResourcesRel::alias('crr') ->join(['school_class' => 'c'], 'crr.class_id = c.id', 'left') ->where([ 'crr.resource_id' => $resource_id, 'crr.status' => 1 ]) ->field([ 'crr.id', 'crr.class_id', 'c.class_name', 'c.head_coach', 'c.educational_id' ]) ->find(); $hasClass = !empty($classRel); $classInfo = $hasClass ? $classRel->toArray() : null; return [ 'code' => 1, 'data' => [ 'has_class' => $hasClass, 'class_info' => $classInfo ] ]; } catch (\Exception $e) { Log::error('StudentCourseService::checkClassRelation - 异常: ' . $e->getMessage()); return ['code' => 0, 'msg' => '检查班级关联失败: ' . $e->getMessage()]; } } }