getPageParam();//获取请求参数中的页码+分页数 $page = $page_params['page']; $limit = $page_params['limit']; $model = new PersonCourseSchedule(); //判断有没有客户资源id if (!empty($where['resources_id'])) { $model = $model->where('resources_id', $where['resources_id']); } //上课日期 if (!empty($where['course_date'])) { $model = $model->where('school_person_course_schedule.course_date', $where['course_date']); } //判断有没有客户上课状态 if (array_key_exists('status', $where) && $where['status'] != '') { // $model = $model->where('status', $where['status']); $model = $model->where('school_person_course_schedule.status', $where['status']); } $venues_info = [];//场地信息 // 判断有没有场地ID if (!empty($where['venue_id'])) { $model = $model->hasWhere('courseScheduleHasOne', ['venue_id' => $where['venue_id']]); $venues_info = Venue::where('id', $where['venue_id'])->find(); if ($venues_info) { $venues_info = $venues_info->toArray(); } else { $venues_info = []; } } $data = $model->order('course_date', 'desc') ->with([ //课程安排表 'courseScheduleHasOne' => function ($query) { $query->with([ 'venue',//场地 'campus',//校区 'course',//课程 'coach',//教练 ]); }, ]) ->paginate([ 'list_rows' => $limit, 'page' => $page, ]) ->toArray(); $data['venues_info'] = $venues_info;//场地信息详情 return $data; } //查询详情 public function getInfo(array $where) { $res = [ 'code' => 0, 'msg' => '暂无数据', 'data' => [] ]; $model = new PersonCourseSchedule(); //判断有无人员与课程安排关系表id if (!empty($where['person_course_schedule_id'])) { $model = $model->where('id', $where['person_course_schedule_id']); } $data = $model ->with([ //课程安排表 'courseScheduleHasOne' => function ($query) { $query->with([ 'venue',//场地 'campus',//校区 'course',//课程 'coach',//教练 ]); }, ]) ->find(); if ($data) { $data = $data->toArray(); if (empty($data['courseScheduleHasOne']['id'])) { $res = [ 'code' => 0, 'msg' => '暂无课程安排数据', 'data' => [] ]; return $res; } $res = [ 'code' => 1, 'msg' => '操作成功', 'data' => $data ]; return $res; } else { $res = [ 'code' => 0, 'msg' => '暂无数据', 'data' => [] ]; return $res; } } //修改人员与课程安排关系表 public function editStatus($person_course_schedule_id, array $data) { $res = [ 'code' => 0, 'msg' => '操作失败', 'data' => [] ]; if (empty($data['updated_at'])) { $data['updated_at'] = date('Y-m-d H:i:s'); } $model = PersonCourseSchedule::where('id', $person_course_schedule_id)->find(); if (!$model) { $res = [ 'code' => 0, 'msg' => '未找到课程安排信息', 'data' => [] ]; return $res; } //状态0待上课1已上课2请假 if (in_array($model['status'], [0, 2])) { $edit = PersonCourseSchedule::where('id', $person_course_schedule_id)->update($data); if ($edit) { $res = [ 'code' => 1, 'msg' => '操作成功', 'data' => [] ]; } return $res; } elseif ($model['status'] == 1) { $res = [ 'code' => 0, 'msg' => '该课程已上课无法请假', 'data' => [] ]; return $res; } } //获取排课日期 public function getCalendar(array $where) { $data = PersonCourseSchedule::where('resources_id', $where['resources_id']) ->where('course_date', '>=', $where['start_date']) ->where('course_date', '<=', $where['end_date']) ->select() ->toArray(); $result = []; $currentDate = strtotime($where['start_date']); $endDate = strtotime($where['end_date']); while ($currentDate <= $endDate) { $dateStr = date('Y-m-d', $currentDate); $today = date('d', $currentDate); $weekDay = date('w', $currentDate); $weekMap = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; $weekStr = $weekMap[$weekDay]; $result[] = [ 'date' => $dateStr, 'status' => '1', // 默认状态为正常 'is_sign' => '0', // 是否有课|1=有课,0=没课 'week' => $weekStr, 'today' => $today ]; $currentDate = strtotime('+1 day', $currentDate); } foreach ($data as $v) { foreach ($result as &$rv) { if ($rv['date'] == $v['course_date']) { //0待上课1已上课2请假 if (in_array($v['status'], [0, 1])) { $status = '1'; } else { $status = '2'; } $rv['status'] = $status;//状态1是正常 2请假 $rv['is_sign'] = '1';//是否有课|1=有课,0=没课 } } } return $result; } //获取学生排课的全部场地列表 public function getVenueListAll(array $where) { $schedule_id = PersonCourseSchedule::where('resources_id', $where['resources_id']) ->where('course_date', $where['course_date']) ->distinct(true) ->column('schedule_id'); if(!$schedule_id){ return []; } $venue_id = CourseSchedule::whereIn('id',$schedule_id)->distinct(true)->column('venue_id'); if(!$venue_id){ return []; } $res = Venue::whereIn('id',$venue_id) ->with([ 'campus' ]) ->select()->toArray(); return $res; } //获取学生排课的教练列表 public function memberCoachList(array $where) { $page_params = $this->getPageParam();//获取请求参数中的页码+分页数 $page = $page_params['page']; $limit = $page_params['limit']; $res = [ 'code' => 0, 'msg' => '暂无课程安排', 'data' => [] ]; $schedule_id = PersonCourseSchedule::where('resources_id', $where['resources_id'])->distinct(true)->column('schedule_id'); if(!$schedule_id){ return $res; } $coach_id = CourseSchedule::whereIn('id',$schedule_id)->distinct(true)->column('coach_id'); if(!$coach_id){ return $res; } $data = Personnel::whereIn('id', $coach_id) ->paginate([ 'list_rows' => $limit, 'page' => $page, ]) ->toArray(); $res = [ 'code' => 1, 'msg' => '操作成功', 'data' => $data ]; return $res; } //获取学生课时消费记录列表 public function getStudentCourseUsageList(array $where) { $page_params = $this->getPageParam();//获取请求参数中的页码+分页数 $page = $page_params['page']; $limit = $page_params['limit']; $res = [ 'code' => 0, 'msg' => '暂无更多', 'data' => [] ]; $schedule_id = PersonCourseSchedule::where('resources_id',$where['resources_id']) ->where('status',1) ->distinct(true) ->column('schedule_id'); if(!$schedule_id){ return $res; } $data = StudentCourseUsage::whereIn('student_course_id',$schedule_id) ->order('usage_date', 'desc') ->with([ 'studentCourseHasOne' => function ($query) { $query->append(['course']); } ]) ->paginate([ 'list_rows' => $limit, 'page' => $page, ]) ->toArray(); if(!count($data['data'])){ return $res; } $res = [ 'code' => 1, 'msg' => '操作成功', 'data' => $data ]; return $res; } //获取学生课程信息列表(包含教练配置) public function getStudentCourseInfo(array $where) { $res = [ 'code' => 1, 'msg' => '暂无课程信息', 'data' => [] ]; // 直接通过resource_id查询学员课程表 $studentCourses = StudentCourses::where('resource_id', $where['resource_id']) ->with([ 'course' => function($query) { $query->field('id,course_name'); }, 'student' => function($query) { $query->field('id,name'); } ]) ->select() ->toArray(); if (empty($studentCourses)) { $res['msg'] = '该客户暂无课程信息'; return $res; } $courseData = []; foreach ($studentCourses as $course) { // 计算总课时数(正式课时 + 赠送课时) $totalHours = ($course['total_hours'] ?? 0) + ($course['gift_hours'] ?? 0); // 计算已使用课时数(已使用正式课时 + 已使用赠送课时) $usedHours = ($course['use_total_hours'] ?? 0) + ($course['use_gift_hours'] ?? 0); // 计算剩余课时数 $remainingHours = $totalHours - $usedHours; // 计算请假次数(通过课程安排表统计该资源下的请假记录) $leaveCount = PersonCourseSchedule::where('resources_id', $where['resource_id']) ->where('status', 2) // 2表示请假 ->count(); // 获取教练配置信息 $mainCoach = null; $education = null; $assistants = []; if (!empty($course['main_coach_id'])) { $mainCoach = Personnel::where('id', $course['main_coach_id'])->field('id,name')->find(); } if (!empty($course['education_id'])) { $education = Personnel::where('id', $course['education_id'])->field('id,name')->find(); } if (!empty($course['assistant_ids'])) { $assistantIds = array_filter(explode(',', $course['assistant_ids'])); if (!empty($assistantIds)) { $assistants = Personnel::whereIn('id', $assistantIds)->field('id,name')->select()->toArray(); } } // 根据数据库状态字段和日期计算课程状态 $status = 'active'; // 默认进行中 $dbStatus = $course['status'] ?? 1; switch ($dbStatus) { case 1: $status = 'active'; // 有效 break; case 2: $status = 'expired'; // 过期 break; case 3: $status = 'waiting'; // 等待期 break; case 4: $status = 'delayed'; // 延期 break; } // 如果课程已到期但状态还是有效,更新为过期 if ($status === 'active' && !empty($course['end_date'])) { if (strtotime($course['end_date']) < time()) { $status = 'expired'; } } // 如果课时已用完,标记为已完成 if ($remainingHours <= 0) { $status = 'completed'; } $courseData[] = [ 'id' => $course['id'], 'course_name' => $course['course']['course_name'] ?? '未知课程', 'total_count' => $totalHours, // 总课时(正式+赠送) 'used_count' => $usedHours, // 已使用课时 'remaining_count' => $remainingHours, // 剩余课时 'formal_hours' => $course['total_hours'] ?? 0, // 正式课时 'gift_hours' => $course['gift_hours'] ?? 0, // 赠送课时 'used_formal_hours' => $course['use_total_hours'] ?? 0, // 已使用正式课时 'used_gift_hours' => $course['use_gift_hours'] ?? 0, // 已使用赠送课时 'leave_count' => $leaveCount, // 请假次数 'start_date' => $course['start_date'] ?? '', // 开始日期 'expiry_date' => $course['end_date'] ?? '', // 结束日期 'status' => $status, // 课程状态 'db_status' => $dbStatus, // 数据库原始状态 'single_session_count' => $course['single_session_count'] ?? 1, // 单次消课数量 'main_coach_id' => $course['main_coach_id'] ?? null, 'main_coach_name' => $mainCoach['name'] ?? '未分配', 'education_id' => $course['education_id'] ?? null, 'education_name' => $education['name'] ?? '未分配', 'assistant_ids' => $course['assistant_ids'] ?? '', 'assistant_names' => implode(', ', array_column($assistants, 'name')) ?: '无' ]; } $res = [ 'code' => 1, 'msg' => '获取成功', 'data' => $courseData ]; return $res; } //获取人员列表(教练、教务、助教) public function getPersonnelList() { $res = [ 'code' => 0, 'msg' => '获取人员列表失败', 'data' => [] ]; try { // 先从校区人员角色关系表查询dept_id=2的所有人员ID $personIds = CampusPersonRole::where('dept_id', 2) ->where('deleted_at', 0) // 未删除 ->distinct(true) ->column('person_id'); if (empty($personIds)) { $res['msg'] = '暂无相关人员'; return $res; } // 根据获取到的人员ID查询人员详情,并关联角色信息 $personnel = Personnel::whereIn('id', $personIds) ->field('id,name') ->where('status', 1) // 正常状态 ->select() ->toArray(); // 为每个人员获取角色信息 foreach ($personnel as &$person) { $roles = CampusPersonRole::where('person_id', $person['id']) ->where('dept_id', 2) ->where('deleted_at', 0) ->with(['sysRole' => function($query) { $query->field('role_id,role_name'); }]) ->select() ->toArray(); // 提取角色名称 $roleNames = []; foreach ($roles as $role) { if (!empty($role['sys_role']['role_name'])) { $roleNames[] = $role['sys_role']['role_name']; } } $person['role_name'] = implode(',', $roleNames); $person['roles'] = $roleNames; // 保留数组格式便于前端判断 } $res = [ 'code' => 1, 'msg' => '获取成功', 'data' => $personnel ]; } catch (\Exception $e) { $res['msg'] = '获取人员列表异常:' . $e->getMessage(); } return $res; } //更新学生课程人员配置 public function updateStudentCoursePersonnel($studentCourseId, array $data) { $res = [ 'code' => 0, 'msg' => '更新失败', 'data' => [] ]; try { // 检查学生课程是否存在 $studentCourse = StudentCourses::where('id', $studentCourseId)->find(); if (!$studentCourse) { $res['msg'] = '学生课程不存在'; return $res; } // 准备更新数据 $updateData = []; if (isset($data['main_coach_id']) && $data['main_coach_id'] !== '') { $updateData['main_coach_id'] = intval($data['main_coach_id']); } if (isset($data['education_id']) && $data['education_id'] !== '') { $updateData['education_id'] = intval($data['education_id']); } if (isset($data['assistant_ids'])) { $updateData['assistant_ids'] = strval($data['assistant_ids']); } $updateData['update_time'] = date('Y-m-d H:i:s'); // 执行更新 $result = StudentCourses::where('id', $studentCourseId)->update($updateData); if ($result !== false) { $res = [ 'code' => 1, 'msg' => '更新成功', 'data' => $updateData ]; } else { $res['msg'] = '更新数据库失败'; } } catch (\Exception $e) { $res['msg'] = '更新异常:' . $e->getMessage(); } return $res; } }