class Subject(EntityMixin, db.Model): subject_name = Column(String(120), nullable=False, comment='学科名称-英文') subject_desc = Column(String(120), nullable=True, comment='学科描述-英文') subject_open_grade = Column(String(120), nullable=True, comment='学科年级-英文') subject_requirements = Column(String(120), nullable=True, comment='学科要求-英文') subject_name_zh = Column(String(120), nullable=True, comment='学科名称-中文') subject_desc_zh = Column(String(120), nullable=True, comment='学科描述-中文') subject_open_grade_zh = Column(String(120), nullable=True, comment='学科年级-中文') subject_requirements_zh = Column(String(120), nullable=True, comment='学科要求-中文') cover_url = Column(String(255), nullable=True, comment='封面地址') state = Column(Integer, nullable=False, comment='有效:98,无效:99') curriculum_id = Column(Integer, ForeignKey('curriculum.id'), nullable=True) subject_of_curriculum = db.relationship('Curriculum', backref='curriculum_subjects', lazy=True) subject_category_id = Column(Integer, ForeignKey('subject_category.id'), nullable=True) subject_of_category = db.relationship('SubjectCategory', backref='category_subjects', lazy=True)
class StudyResult(EntityMixin, db.Model): score = Column(Float, nullable=True, comment='分数') evaluation = Column(String(2000), nullable=True, comment='阶段性评价 json') score_type = Column(String(60), nullable=True, comment='得分类型') score_full_mark = Column(Float, nullable=True, comment="满分") score_reason = Column(String(2000), nullable=True, comment='得分原因') score_remark = Column(String(2000), nullable=True, comment='分数标记') score_comment = Column(String(2000), nullable=True, comment='分数确认') report_card_url = Column(String(200), nullable=True, comment='成绩单地址') report_card_name = Column(String(100), nullable=True, comment='成绩单名称') result_type = Column(Enum(StudyResultTypeEnum), nullable=True, comment='结果类型', server_default=StudyResultTypeEnum.SUMMARY.name) student_id = Column(Integer, ForeignKey('student.id'), nullable=False) student_study_results = db.relationship('Student', backref='study_results', lazy=True) course_exam_id = Column(Integer, ForeignKey('course_exam.id'), nullable=True) course_exam_results = db.relationship('CourseExam', backref='course_exam_results', lazy=True) course_id = Column(Integer, ForeignKey('course.id'), nullable=True)
class StudySchedule(EntityMixin, db.Model): actual_start = Column(DateTime, nullable=False, comment='实际上课开始时间') actual_end = Column(DateTime, nullable=False, comment='实际上课结束时间') name = Column(String(50), nullable=False, comment='课程名称') study_state = Column(Integer, nullable=False, comment='学习状态,1:进行中,2:已经学完') student_evaluation = Column(Text, nullable=True, comment='老师给学生的评价') student_result = Column(String(2000), nullable=True, comment='老师给学生反馈') teacher_evaluation = Column(Text, nullable=True, comment='这个是学生给老师的评价') teacher_result = Column(String(2000), nullable=True, comment='学生给老师的的反馈') homework = Column(String(255), nullable=True, comment='作业') test = Column(String(2000), nullable=True, comment='课后测试') student_score = Column(Float, nullable=True, comment='学生评分') teacher_score = Column(Float, nullable=True, comment='教师评分') order_id = Column(Integer, ForeignKey('order.id'), nullable=False) schedule_type = Column( Enum(CourseScheduleStatueEnum), nullable=True, comment='课程类型', server_default=CourseScheduleStatueEnum.COMMON_CLASS.name) order_studys = db.relationship('Order', backref='order_studys', lazy=True) course_schedule_id = Column(Integer, ForeignKey('course_schedule.id'), nullable=False) course_schedule = db.relationship('CourseSchedule', backref='study_timetable', lazy=True) student_id = Column(Integer, ForeignKey('student.id'), nullable=False) study_courses = db.relationship('Student', backref='study_courses', lazy=True)
class TeacherSubject(EntityMixin, db.Model): advantage = Column(String(120), nullable=False, comment='教师特点英文') desc = Column(String(255), nullable=True, comment='教师描述英文') advantage_zh = Column(String(120), nullable=True, comment='教师特点英文') desc_zh = Column(String(255), nullable=True, comment='教师描述中文') teacher_id = Column(Integer, ForeignKey('teacher.id'), nullable=False) subjects = db.relationship('Teacher', backref='subjects', lazy=True) subject_id = Column(Integer, ForeignKey('subject.id'), nullable=False) teachers = db.relationship('Subject', backref='teachers', lazy=True)
class StudentSubject(EntityMixin, db.Model): optional = Column(Integer, nullable=False, comment='是否必修,1:选修,2;必修') desc = Column(String(2000), nullable=True, comment='英文描述信息') desc_zh = Column(String(2000), nullable=True, comment='中文描述信息') subject_name = Column(String(120), nullable=True, comment='科目名称') subject_type = Column(Integer, nullable=True, comment='1:学习科目,2:意向科目') student_id = Column(Integer, ForeignKey('student.id'), nullable=False) subjects = db.relationship('Student', backref='subjects', lazy=True) subject_id = Column(Integer, ForeignKey('subject.id'), nullable=True) students = db.relationship('Subject', backref='students', lazy=True)
class StudentAppraisal(EntityMixin, db.Model): form_no = Column(Integer, primary_key=True, comment='表单编号') form_submitted = Column(String(255), nullable=True, comment='表单提交内容-英文') provider = Column(String(255), nullable=True, comment='评估机构-英文') result = Column(String(4000), nullable=True, comment='评估结果-英文') form_submitted_zh = Column(String(255), nullable=True, comment='表单提交内容-中文') provider_zh = Column(String(255), nullable=True, comment='评估机构-中文') result_zh = Column(String(4000), nullable=True, comment='评估结果-中文') subject_id = Column(Integer, ForeignKey('subject.id'), nullable=True) subjects = db.relationship('Subject', backref='appraisals', lazy=True) student_id = Column(Integer, ForeignKey('student.id'), nullable=False) appraisals = db.relationship('Student', backref='appraisals', lazy=True)
class Student(UserBaseMixin, db.Model): state = Column(Enum(StudentState), nullable=False, server_default=StudentState.FRESH.name) level = Column(String(50), nullable=True, comment='等级') city = Column(String(50), nullable=True, comment='城市') grade = Column(Integer, nullable=True, comment='当前学校班级') read_country = Column(String(100), nullable=True, comment='在读国家') read_province = Column(String(100), nullable=True, comment='在读省/州') read_city = Column(String(100), nullable=True, comment='在读城市') read_school = Column(String(100), nullable=True, comment='在读学校英文') read_school_zh = Column(String(100), nullable=True, comment='在读学校中文') interest = Column(String(1000), nullable=True, comment='兴趣爱好英文') interest_zh = Column(String(1000), nullable=True, comment='兴趣爱好中文') award = Column(String(500), nullable=True, comment='获得奖项英文') award_zh = Column(String(500), nullable=True, comment='获得奖项中文') go_abroad = Column(String(5), nullable=True, comment='是否出国YES/NO') go_abroad_at = Column(DateTime, nullable=True, comment='预计出国时间') go_abroad_country = Column(String(50), nullable=True, comment='预计出国国家') go_abroad_province = Column(String(50), nullable=True, comment='预计出国国家省/州') overseas = Column(String(500), nullable=True, comment='海外经历英文') overseas_zh = Column(String(500), nullable=True, comment='海外经历中文中文') english = Column(String(500), nullable=True, comment='英语情况英文') english_zh = Column(String(500), nullable=True, comment='英语情况中文') exam_results = Column(String(500), nullable=True, comment='考试与成绩英文') exam_results_zh = Column(String(500), nullable=True, comment='考试与成绩中文') parent = Column(String(50), nullable=True, comment='家长姓名') parent_mobile = Column(String(20), nullable=True, comment='家长联系电话') parent_email = Column(String(60), nullable=True, comment='家长邮件') parent_role = Column(String(20), nullable=True, comment='家长称谓') remark = Column(String(500), nullable=True, comment='标注信息') learning_goals = Column(String(1000), nullable=True, comment='学习目标英文') learning_goals_zh = Column(String(1000), nullable=True, comment='学习目标中文') consultant_id = Column(Integer, ForeignKey('sys_user.id'), nullable=True, comment='sales person provide consultant' ' services or other customer ' 'services') consultants = db.relationship('SysUser', backref='sales_customers', lazy=True, foreign_keys=consultant_id) student_helper_id = Column(Integer, ForeignKey('sys_user.id'), nullable=True, comment='customer services providers') student_helpers = db.relationship('SysUser', backref='student_helpers', lazy=True, foreign_keys=student_helper_id) channel_id = Column(Integer, ForeignKey('channel.id'), nullable=True)
class Homework(EntityMixin, db.Model): homework_type = Column(Integer, nullable=False, comment='作业类型1:教师留作业,2:学生完成作业') question_name = Column(String(100), nullable=True, comment='作业名称') question_text = Column(String(2000), nullable=True, comment='问题') question_attachment_url = Column(String(255), nullable=True, comment='问题附件地址可以多个,JSON') answer_text = Column(String(2000), nullable=True, comment='答案') evaluation = Column(Text, nullable=True, comment='评价') answer_attachment_url = Column(String(255), nullable=True, comment='答案附件地址可以多个json') score = Column(Float, nullable=True, comment='分数') score_remark = Column(String(2000), nullable=True, comment='分数标记') score_reason = Column(String(2000), nullable=True, comment='分数得分原因') homework_id = Column(Integer, nullable=True, comment='自关联ID完成作业使用') review_at = Column(DateTime, nullable=True, comment='点评时间') study_schedule_id = Column(Integer, ForeignKey('study_schedule.id'), nullable=True) course_schedule_id = Column(Integer, ForeignKey('course_schedule.id'), nullable=True) homeworks = db.relationship('StudySchedule', backref='homeworks', lazy=True)
class CourseAppraisal(EntityMixin, db.Model): """ After study the whole course, record the study result and credit """ course_study_result = Column(String(255), nullable=True, comment='试听英文反馈') course_study_result_zh = Column(String(255), nullable=True, comment='试听中文反馈') course_credit = Column(Float, nullable=True, comment='') course_id = Column(Integer, ForeignKey('course.id'), nullable=False) course_appraisals = db.relationship('Course', backref='study_results', lazy=True) student_id = Column(Integer, ForeignKey('student.id'), nullable=False) course_results = db.relationship('Student', backref='course_appraisals', lazy=True)
class PayLog(EntityMixin, db.Model): direction = Column(Integer, nullable=False, comment='收款还是付款,1:收款,2:付款') state = Column(Integer, nullable=False, comment='状态') state_reason = Column(String(255), nullable=False, comment='该状态原因') amount = Column(Integer, nullable=False, comment='退款金额') result = Column(Integer, nullable=False, comment='最终退款金额') payment_method = Column(Integer, nullable=False, comment='支付,退款方式') payment_fee = Column(Integer, nullable=False, comment='订单支付费用') remark = Column(String(1000), nullable=True, comment='备注信息') order_id = Column(Integer, ForeignKey('order.id'), nullable=False) order_paylogs = db.relationship('Order', backref='order_paylogs', lazy=True) account_id = Column(Integer, ForeignKey('account.id'), nullable=True) account_paylogs = db.relationship('Account', backref='account_paylogs', lazy=True)
class TeacherTime(EntityMixin, db.Model): week = Column(db.String(10), nullable=False, comment='星期几,1,2,3,4,5,6,7') end = Column(DateTime, nullable=False, comment='可授课结束时间') start = Column(DateTime, nullable=False, comment='可以授课开始时间') teacher_id = Column(db.Integer, db.ForeignKey('teacher.id'), nullable=False) teachers = db.relationship('Teacher', backref='teachertime', lazy=True)
class CourseExam(EntityMixin, db.Model): start = Column(DateTime, nullable=False, comment='考试开始见') end = Column(DateTime, nullable=False, comment='考试结束时间') state = Column(Integer, nullable=False, comment='状态参考枚举值') exam_form = Column(String(255), nullable=True, comment='考试来源') exam_desc = Column(String(255), nullable=False, comment='考试描述') course_id = Column(Integer, ForeignKey('course.id'), nullable=False) course_schedules = db.relationship('Course', backref='course_exams', lazy=True)
class Certificate(EntityMixin, db.Model): cert_name = Column(db.String(120), nullable=False, comment='证书英文名称') cert_desc = Column(db.String(120), nullable=True, comment='证书英文描述') cert_name_zh = Column(db.String(120), nullable=True, comment='证书中文名称') cert_desc_zh = Column(db.String(120), nullable=True, comment='证书中文描述') cert_level = Column(db.String(120), nullable=True, comment='证书级别') teacher_id = Column(db.Integer, db.ForeignKey('teacher.id'), nullable=False) teachers = db.relationship('Teacher', backref='certificates', lazy=True)
class CourseAppointment(EntityMixin, db.Model): teacher_id = Column(Integer, ForeignKey('teacher.id'), nullable=True) study_appointment_id = Column(Integer, ForeignKey('study_appointment.id'), nullable=False) study_appointment = db.relationship('StudyAppointment', backref='study_appointment', lazy=True) appointment_state = Column(Enum(CourseAppointmentState), nullable=False, server_default=CourseAppointmentState.APPLY.name)
class Interview(EntityMixin, db.Model): start = Column(DateTime, nullable=True, comment='预计面试开始时间') end = Column(DateTime, nullable=True, comment='预计面试结束时间') state = Column(Integer, nullable=False, comment='1:未面试,2:已经面试,3:取消') reason = Column(String(2000), nullable=True, comment="state change to history, record change reason") result = Column(String(2000), nullable=True, comment='面试结果') set_time = Column(String(2000), nullable=True, comment='设置面试时间 json') interviewer_id = Column(db.Integer, db.ForeignKey('sys_user.id'), nullable=True) interviewers = db.relationship('SysUser', backref='interviewers', lazy=True) course_schedule_id = Column(Integer, nullable=True) teacher_id = Column(db.Integer, db.ForeignKey('teacher.id'), nullable=False) teachers = db.relationship('Teacher', backref='interviews', lazy=True)
class StudentRequirements(EntityMixin, db.Model): content = Column(String(1000), nullable=True, comment='英文内容') content_zh = Column(String(1000), nullable=True, comment='中文内容') translate_by = Column(Integer, nullable=True, comment='翻译人') translate_at = Column(DateTime, nullable=True, comment='翻译时间') student_id = Column(db.Integer, db.ForeignKey('student.id'), nullable=False) student_requirements = db.relationship('Student', backref='studentrequirements', lazy=True)
class Course(EntityMixin, db.Model): course_name = Column(String(120), nullable=False, comment='课程名称-英文') course_name_zh = Column(String(120), nullable=True, comment='课程名称-中文') course_type = Column(Integer, nullable=False, comment='全部:1,在线:2,公开:3') package_type = Column(Enum(PackageTypeEnum), nullable=True, comment='课包类型', server_default=PackageTypeEnum.COMMON.name) class_type = Column(Integer, nullable=False, comment='enum, e.g. 1 v 1, 1 v 4, 1 v n') classes_number = Column(Integer, nullable=False, comment='课节数') open_grade = Column(String(120), nullable=True, comment='开设年级') course_desc = Column(String(120), nullable=True, comment='课程描述-英文') course_desc_zh = Column(String(120), nullable=True, comment='课程描述-中文') difficult_level = Column(Integer, nullable=True, comment='困难级别') critical_level = Column(Integer, nullable=True, comment='重要程度') start = Column(DateTime, nullable=True, comment='上课开始时间') end = Column(DateTime, nullable=True, comment='上课结束时间') course_requirements = Column(String(120), nullable=True, comment='课程要求-英文') course_requirements_zh = Column(String(120), nullable=True, comment='课程要求-中文') state = Column(Integer, nullable=False, comment='有效:98,无效:99') price = Column(Integer, nullable=False, comment='金额') project_type = Column(Enum(CourseProjetTypeEnum), nullable=True, comment='课程类型', server_default=CourseProjetTypeEnum.ALL.name) primary_teacher_id = Column(Integer, ForeignKey('teacher.id'), nullable=False) primary_teacher = db.relationship('Teacher', backref='primary_courses', lazy=True, foreign_keys=primary_teacher_id) assist_teacher_id = Column(Integer, ForeignKey('teacher.id'), nullable=True) assist_teacher = db.relationship('Teacher', backref='assist_courses', lazy=True, foreign_keys=assist_teacher_id) subject_id = Column(Integer, ForeignKey('subject.id'), nullable=False) courses_of_subject = db.relationship('Subject', backref='courses', lazy=True)
class TeacherHistory(EntityMixin, db.Model): subject_id = Column(Integer, nullable=True, comment='可教授的科目id') subject_name = Column(String(50), nullable=True, comment='可教授的科目名称') grade = Column( String(100), nullable=True, comment='Kindergarten:幼儿园,primary_school:小学,junior_middle_school:初中,' 'high_school:高中,university:大学,adult:成人,other:其他 JSON串') type = Column(Integer, nullable=False, comment='类型,1:可以交的科目,2:现在交的科目') teacher_id = Column(db.Integer, db.ForeignKey('teacher.id'), nullable=False) teachers = db.relationship('Teacher', backref='teacherhistory', lazy=True)
class Channel(EntityMixin, db.Model): channel_name = Column(String(255), nullable=False, comment='渠道名称') channel_desc = Column(String(255), nullable=True, comment='渠道描述') contact_tel = Column(String(255), nullable=True, comment='联系电话') contact_email = Column(String(255), nullable=True, comment='联系人邮件') contact_address = Column(String(255), nullable=True, comment='联系地址') contact_name = Column(String(255), nullable=True, comment='联系人名称') state = Column(Integer, nullable=False, comment='有效:98,无效:99') app_key = Column(String(255), nullable=True, comment='渠道key') partner_id = Column(String(255), nullable=True, comment='渠道id') logo_url = Column(String(255), nullable=True, comment='logourl') domain_address = Column(String(255), nullable=True, comment='主页地址') service_helper = Column(Integer, ForeignKey('sys_user.id'), nullable=True) channels = db.relationship('SysUser', backref='serve_channels', lazy=True)
class Order(EntityMixin, db.Model): order_type = Column(Integer, nullable=False) order_desc = Column(String(255), nullable=False) state = Column(Integer, nullable=False) cancel_checkby = Column(String(120), nullable=True, comment="when state change to cancel, this field " "save the one who approved cancel") payment_state = Column(Integer, nullable=False) amount = Column(Integer, nullable=False) discount = Column(Integer, nullable=False) promotion = Column(String(255), nullable=False) student_id = Column(Integer, ForeignKey('student.id'), nullable=False) created_by = Column(Integer, nullable=True) student_orders = db.relationship('Student', backref='student_orders', lazy=True) course_id = Column(Integer, ForeignKey('course.id'), nullable=False) course = db.relationship('Course', backref='course_orders', lazy=True) channel_id = Column(Integer, ForeignKey('channel.id'), nullable=False) channel_orders = db.relationship('Channel', backref='channel_orders', lazy=True)
class CourseSchedule(EntityMixin, db.Model): start = Column(DateTime, nullable=False, comment='开始时间') end = Column(DateTime, nullable=False, comment='结束时间') state = Column(Integer, nullable=False, comment='状态参考枚举值') name = Column(String(50), nullable=False, comment='课程名称') override_course_type = Column(Integer, nullable=True, comment='value used to override course_type ' 'defined in course, e.g. in a 1V4 ' 'course, the teacher want to teach ' 'one of his student due to the ' 'student resorting to help.') schedule_type = Column(Enum(CourseScheduleStatueEnum), nullable=True, comment='课程类型', server_default=CourseScheduleStatueEnum.COMMON_CLASS.name) progress = Column(String(255), nullable=True, comment='after finish this class, the progress desc of ' 'this course') course_id = Column(Integer, ForeignKey('course.id'), nullable=False) course_schedules = db.relationship('Course', backref='course_schedules', lazy=True)
class CourseClassroom(EntityMixin, db.Model): provider = Column(Integer, nullable=False, comment='1:duobei, 2:xxx') room_title = Column(String(255), nullable=False) video_ready = Column(Integer, nullable=False, comment='0:disable, 1:enable') room_url = Column(String(8000), nullable=True) room_id = Column(String(120), nullable=True, index=True, comment='provider returned id after room created') room_type = Column(Enum(ClassroomTypeEnum), nullable=False, server_default=ClassroomTypeEnum.ONE_VS_ONE.name) room_uid = Column(String(255), nullable=True, comment='room uuid') host_code = Column(String(255), nullable=True, comment='store duobei host_code used as invite code') state = Column(Enum(ClassroomStateEnum), nullable=False, server_default=ClassroomStateEnum.CREATED.name) duration_start = Column(DateTime, nullable=True) duration_end = Column(DateTime, nullable=True) course_schedule_id = Column(Integer, ForeignKey('course_schedule.id'), nullable=False) class_rooms = db.relationship('CourseSchedule', backref='class_rooms', lazy=True)
class CourseClassParticipant(EntityMixin, db.Model): role_in_course = Column(Enum(ClassroomRoleEnum), nullable=False, server_default=ClassroomRoleEnum.ASSISTANT.name) role_id = Column(String(255), nullable=True) role_uid = Column(String(255), nullable=True) access_url = Column(String(4000), nullable=True) device_type = Column(Enum(ClassroomDeviceEnum), nullable=False, server_default=ClassroomDeviceEnum.PC.name) role_id = Column(String(255), nullable=True) role_table = Column(String(60), nullable=True) role_table_id = Column(Integer, nullable=True) role_username = Column(String(60), nullable=True) attend_start = Column(DateTime, nullable=True) attend_end = Column(DateTime, nullable=True) assessment = Column(String(2000), nullable=True) remark = Column(String(2000), nullable=True) course_classroom_id = Column(Integer, ForeignKey('course_classroom.id'), nullable=False) classroom_participants = db.relationship('CourseClassroom', backref='classroom_participants', lazy=True)
class Courseware(EntityMixin, db.Model): """ PPT or something showing in course uploaded by teacher before course study, needs to be checked by admin """ ware_desc = Column(String(2000), nullable=False, comment='课件描述') ware_name = Column(String(100), nullable=False, comment='课件名称') ware_url = Column(String(255), nullable=True, comment='课件存储地址') ware_uid = Column(String(120), nullable=True, index=True, comment='e.g. duobei use') room_id = Column(String(2000), nullable=True, comment='classroom list') other_desc = Column(String(2000), nullable=True, comment="e.g. duobei use") checked_result = Column(Enum(CoursewareCheckResultEnum), nullable=True, comment='admin check result', server_default=CoursewareCheckResultEnum. BEFORE_CHECK.name) is_view = Column(String(20), nullable=False,comment='是否允许查看',server_default='YES') course_id = Column(Integer, ForeignKey('course.id'), nullable=False) course_wares = db.relationship('Course', backref='course_wares', lazy=True) course_schedule_id = Column(Integer, ForeignKey('course_schedule.id'), nullable=True)
class Enrollment(EntityMixin, db.Model): student_id = Column(Integer, ForeignKey('student.id'), nullable=False) channel_id = Column(Integer, ForeignKey('channel.id'), nullable=True) channel_enrollments = db.relationship('Channel', backref='channel_enrollments', lazy=True)