model = new Course(); } //课程列表 public function list($id,$data) { $campus_person_role = new CampusPersonRole(); $where = []; if ($data['schedule_date']) { $where[] = ['course_date','=', $data['schedule_date']]; } $campus_id = $campus_person_role->where(['person_id' => $id])->column('campus_id'); $CourseSchedule = new CourseSchedule(); $search_model = $CourseSchedule ->where('campus_id','in',$campus_id) ->where($where) ->with(['course' => function($query) { $query->select(); },'venue' => function($query) { $query->select(); },'campus','studentCourses']); $list = $this->pageQuery($search_model); foreach ($list['data'] as $k => $v) { $student = Db::name('person_course_schedule') ->alias('pcs') ->where('pcs.schedule_id', $v['id']) // 建议加上表别名避免冲突 ->join('school_student st', 'pcs.student_id = st.id') ->join('school_customer_resources cr', 'st.user_id = cr.id') ->join('school_member sm', 'cr.member_id = sm.member_id') ->field('st.name, sm.headimg as avatar') // 👈 正确方式取字段 ->select(); $list['data'][$k]['student'] = $student; } return $list; } //获取课程详情 public function info($data) { $school_six_speed = new SixSpeed(); $CourseSchedule = new CourseSchedule(); $search_model = $CourseSchedule ->where('id', $data) ->with(['course' => function($query) { $query->select(); },'venue' => function($query) { $query->select(); },'coach' => function($query) { $query->select(); }]); $list = $search_model->find(); $student = Db::name('person_course_schedule') ->alias('pcs') ->where('pcs.schedule_id', $list['id']) ->join('school_student st', 'pcs.student_id = st.id') ->join('school_customer_resources cr', 'st.user_id = cr.id') ->join('school_member sm', 'cr.member_id = sm.member_id') ->field('st.name, sm.headimg as avatar') ->select(); $list['student'] = $student; $student_courses = Db::name('student_courses') ->alias('sc') ->where('sc.course_id', $list['id']) ->join('school_student_course_usage sscu', 'sc.id = sscu.student_course_id') ->field('sc.student_id,sc.end_date,sc.end_date,sc.start_date,sc.course_id') ->select()->toArray(); foreach ($student_courses as &$v){ $student = Db::name('student') ->alias('st') ->where('st.id', $v['student_id']) ->join('school_customer_resources cr', 'st.user_id = cr.id') ->join('school_member sm', 'cr.member_id = sm.member_id') ->field('st.name, sm.headimg as avatar,cr.id as resources_id,cr.source') ->find(); if($student){ $v['school_six_speed'] = $school_six_speed->where(['staff_id' => $student['resources_id']])->find(); }else{ $v['school_six_speed'] = []; } $v['source'] = get_dict_value("source",$student['source']); $v['name'] = $student['name']; $v['avatar'] = $student['avatar']; } $list['student_courses'] = $student_courses; $Assignment = new Assignment(); $search_model = $Assignment->where('course_id', $data) ->with(['student' => function($query) { $query->with(['customerResources' => function($query) { $query->with(['member' => function($query) { $query->select(); }]); }]); }]); $search_model_res = $search_model->select()->toArray(); $groupedByStatus1 = []; $groupedByStatus2 = []; $groupedByStatus3 = []; foreach ($search_model_res as $item) { if ($item['status'] == 1){ array_push($groupedByStatus1,$item); } else if ($item['status'] == 2){ array_push($groupedByStatus2,$item); } else if ($item['status'] == 3){ array_push($groupedByStatus3,$item); } } $list['groupedByStatus1'] = $groupedByStatus1; $list['groupedByStatus2'] = $groupedByStatus2; $list['groupedByStatus3'] = $groupedByStatus3; return $list; } public function classList($data) { $CourseSchedule = new CourseSchedule(); $search_model = $CourseSchedule ->where('coach_id', $data) ->with(['course' => function($query) { $query->with(['studentCourses' => function($query) { $query->select(); }]); },'venue' => function($query) { $query->select(); },'coach' => function($query) { $query->select(); },'campus']); $list = $this->pageQuery($search_model); foreach ($list['data'] as &$v){ $student = Db::name('person_course_schedule') ->alias('pcs') ->where('pcs.schedule_id', $v['id']) ->join('school_student st', 'pcs.student_id = st.id') ->join('school_customer_resources cr', 'st.user_id = cr.id') ->join('school_member sm', 'cr.member_id = sm.member_id') ->field('st.name, sm.headimg as avatar') ->select(); $v['student'] = $student; } foreach ($list['data'] as &$v) { $student_courses = Db::name('student_courses') ->alias('sc') ->where('sc.course_id', $v['id']) ->join('school_student_course_usage sscu', 'sc.id = sscu.student_course_id') ->field('sc.student_id,sc.end_date,sc.end_date,sc.start_date,sc.course_id') ->select()->toArray(); $v['student_courses'] = $student_courses; } return $list; } //获取添加学员列表 public function StudentList($id) { $StudentCourses = new StudentCourses(); $PersonCourseSchedule = new PersonCourseSchedule(); $student_arr = $PersonCourseSchedule->where('schedule_id',$id)->column('student_id'); // 获取当前时间 $now = date('Y-m-d H:i:s'); // 查询end_date大于当前时间的课程记录 $query = $StudentCourses->where('course_id', $id) ->where('end_date', '>', $now); if (!empty($student_arr)) { $query->whereNotIn('student_id', $student_arr); } $studentCourses = $query->field('student_id as value, resource_id')->select()->toArray(); // 如果没有符合条件的记录,直接返回空数组 if (empty($studentCourses)) { return []; } // 收集所有的resource_id $resourceIds = array_column($studentCourses, 'resource_id'); $resourceIds = array_filter($resourceIds); // 过滤掉空值 if (empty($resourceIds)) { return []; } // 查询客户资源表获取详细信息 $resources = Db::name('customer_resources') ->whereIn('id', $resourceIds) ->field('id, name, source_channel, source, age') ->select() ->toArray(); // 将资源信息与学生ID关联 $result = []; foreach ($resources as $resource) { // 查找对应的学生ID foreach ($studentCourses as $course) { if ($course['resource_id'] == $resource['id']) { // 源和来源渠道转换为字典值 $source = get_dict_value("source", $resource['source']); $sourceChannel = get_dict_value("source_channel", $resource['source_channel']); $result[] = [ 'value' => $course['value'], // 学生ID 'resource_id' => $resource['id'], 'text' => $resource['name'], // 学生姓名 'name' => $resource['name'], 'age' => $resource['age'], 'source' => $source, 'source_channel' => $sourceChannel, 'source_raw' => $resource['source'], 'source_channel_raw' => $resource['source_channel'] ]; break; } } } return $result; } public function addStudent($data) { $PersonCourseSchedule = new PersonCourseSchedule(); $res = $PersonCourseSchedule->create($data); return $res; } public function delStudentCourse($data) { $StudentCourseUsage = new StudentCourseUsage(); $StudentCourses = new StudentCourses(); $StudentCourses_id = $StudentCourses->where('student_id',$data['student_id'])->where('course_id',$data['course_id'])->value('id'); $PersonCourseSchedule_id = $StudentCourseUsage->where('student_course_id',$StudentCourses_id)->value('id'); if ($PersonCourseSchedule_id) { $StudentCourseUsage->where('student_course_id',$StudentCourses_id)->delete(); return true; } else { return false; } } public function getDate(array $baseDate) { $dates = []; $this_date = $baseDate['date'] ?: date('Y-m-d'); $date = new DateTime($this_date); for ($i = -2; $i <= 4; $i++) { $tempDate = clone $date; // 避免修改原始对象 $tempDate->modify("$i days"); $status = false; if($baseDate['day'] == $tempDate->format('d')){ $status = true; }else if(empty($baseDate['day'])){ if($tempDate->format('Y-m-d') === date('Y-m-d')){ $status = true; } } $dates[] = [ 'date' => $tempDate->format('Y-m-d'), 'day' => $tempDate->format('d'), 'week' => getChineseWeekday($tempDate), 'status' => $status ]; } return ['dates' => $dates,'date' => $this_date]; } public function listAll($data) { $where = []; if ($data['schedule_date']) { $where[] = ['course_date','=', $data['schedule_date']]; } $CourseSchedule = new CourseSchedule(); $list = $CourseSchedule ->where($where) ->with(['course' => function($query) { $query->select(); },'venue' => function($query) { $query->select(); },'campus','studentCourses']) ->select()->toArray(); foreach ($list as $k => $v) { $student = Db::name('person_course_schedule') ->alias('pcs') ->where('pcs.schedule_id', $v['id']) // 建议加上表别名避免冲突 ->join('school_student st', 'pcs.student_id = st.id') ->join('school_customer_resources cr', 'st.user_id = cr.id') ->join('school_member sm', 'cr.member_id = sm.member_id') ->field('st.name, sm.headimg as avatar') // 👈 正确方式取字段 ->select(); $list[$k]['student'] = $student; } return $list; } public function addSchedule(array $data){ $CourseSchedule = new CourseSchedule(); $personCourseSchedule = new PersonCourseSchedule(); if($personCourseSchedule->where([ 'resources_id' => $data['resources_id'], 'schedule_id' => $data['schedule_id'] ])->find()){ return fail("重复添加"); } $personCourseSchedule->insert([ 'resources_id' => $data['resources_id'], 'person_id' => $this->member_id, 'person_type' => $data['person_type'], 'schedule_id' => $data['schedule_id'], 'course_date' => $data['course_date'], 'time_slot' => $data['time_slot'], ]); $CourseSchedule->where(['id' => $data['schedule_id']])->dec("available_capacity")->update(); return success("添加成功"); } public function schedule_list(array $data){ $personCourseSchedule = new PersonCourseSchedule(); $list = $personCourseSchedule ->alias('a') ->join(['school_customer_resources' => 'b'],'a.resources_id = b.id','left') ->join(['school_course_schedule' => 'c'],'c.id = a.schedule_id','left') ->where('a.schedule_id',$data['schedule_id']) ->field("b.name,a.status,a.person_type,c.campus_id,b.id as resources_id,a.schedule_type,a.course_type") ->select() ->toArray(); return $list; } public function schedule_del(array $data) { $personCourseSchedule = new PersonCourseSchedule(); // 查询记录 $record = $personCourseSchedule->where([ 'schedule_id' => $data['id'], 'resources_id' => $data['resources_id'] ])->find(); if (!$record) { return fail('未找到相关记录'); } // 根据person_type执行不同操作 if ($record['person_type'] == 'customer_resource') { // 如果是客户资源类型,直接删除记录 $personCourseSchedule->where([ 'schedule_id' => $data['id'], 'resources_id' => $data['resources_id'] ])->delete(); // 更新课程安排表的可用容量 $CourseSchedule = new CourseSchedule(); $CourseSchedule->where(['id' => $record['schedule_id']])->inc("available_capacity")->update(); return success('删除成功'); } else if ($record['person_type'] == 'student') { // 如果是学生类型,更新状态为2并更新备注 $personCourseSchedule->where([ 'id' => $data['id'], 'resources_id' => $data['resources_id'] ])->update([ 'status' => 2, 'remark' => $data['remark'] ]); return success('更新成功'); } else { return fail('未知的人员类型'); } } /** * 更新学员课程人员配置 * @param array $data * @return array */ public function updateStudentCoursePersonnel(array $data) { $res = [ 'code' => 0, 'msg' => '更新失败', 'data' => [] ]; try { // 开启事务 Db::startTrans(); $studentCourseId = $data['student_course_id']; $mainCoachId = $data['main_coach_id'] ?? null; $educationId = $data['education_id'] ?? null; $assistantIds = $data['assistant_ids'] ?? ''; // 更新学员课程表 $updateData = [ 'updated_at' => date('Y-m-d H:i:s') ]; if ($mainCoachId !== null) { $updateData['main_coach_id'] = $mainCoachId; } if ($educationId !== null) { $updateData['education_id'] = $educationId; } if ($assistantIds !== '') { $updateData['assistant_ids'] = $assistantIds; } // 更新学员课程表 $updateResult = Db::name('student_courses') ->where('id', $studentCourseId) ->update($updateData); if (!$updateResult) { Db::rollback(); $res['msg'] = '更新学员课程配置失败'; return $res; } // 提交事务 Db::commit(); $res = [ 'code' => 1, 'msg' => '更新成功', 'data' => [ 'student_course_id' => $studentCourseId, 'main_coach_id' => $mainCoachId, 'education_id' => $educationId, 'assistant_ids' => $assistantIds ] ]; } catch (\Exception $e) { Db::rollback(); $res['msg'] = '更新学员课程人员配置异常:' . $e->getMessage(); } return $res; } }