create table class_course
(
    id                   bigint         not null comment '主键ID（由程序生成，不自增）'
        primary key,
    class_id             bigint         not null comment '所属班级ID（关联training_class.id）',
    course_name          varchar(200)   not null comment '课程名称',
    course_id            bigint         not null comment '课程id',
    required_total_hours decimal(10, 2) null comment '要求完成总学时（小时）',
    video_duration       decimal(10, 2) null comment '视频累计时长（小时）',
    delete_enum          varchar(32)    null comment '删除标识true false',
    remarks              varchar(255)   null comment '备注',
    create_name          varchar(50)    null comment '创建人姓名',
    update_name          varchar(50)    null comment '更新人姓名',
    tenant_id            bigint         null comment '租户id',
    version              int            null comment '版本',
    create_time          datetime       null comment '创建时间',
    update_time          datetime       null comment '修改时间',
    create_id            bigint         null comment '创建人id',
    update_id            bigint         null comment '修改人id',
    env                  varchar(50)    null comment '环境',
    courseware_id        text           null comment '课件id集合'
)
    comment '课程管理表' charset = utf8mb4;

create index idx_class_id
    on class_course (class_id);

create table class_management
(
    id                    bigint unsigned zerofill not null comment '主键ID（由程序生成，不自增）'
        primary key,
    class_code            varchar(50)              null comment '班级编码（唯一）',
    class_name            varchar(100)             null comment '班级名称',
    training_type         varchar(50)              null comment '培训类型',
    unit_type             int                      null comment '参训单位类型（1本企业2相关方）',
    unit_name             varchar(100)             null comment '参训单位名称',
    recorder              varchar(50)              null comment '记录人员（姓名或ID）',
    assessor              varchar(50)              null comment '考核人员（姓名或ID）',
    safety_manager        varchar(50)              null comment '安全管理部门负责人（姓名或ID）',
    start_date            datetime                 null comment '培训开始日期',
    end_date              datetime                 null comment '培训结束日期',
    open_exam             tinyint(1) default 0     null comment '是否开启考试（0-否，1-是）',
    exam_face_recognition tinyint(1) default 0     null comment '考试前人脸识别（0-否，1-是）',
    exam_count            int                      null comment '考试次数',
    face_recognition      tinyint(1) default 0     null comment '是否人脸识别（0-否，1-是）',
    face_recognition_time int                      null comment '人脸识别时间（分钟，可选5/10/20/30）',
    shuffle_questions     tinyint(1) default 0     null comment '是否打乱试题顺序（0-否，1-是）',
    status                int        default 0     null comment '班级状态：0-未申请，1-待开班，2-培训中，3-培训结束',
    delete_enum           varchar(32)              null comment '删除标识true false',
    remarks               varchar(255)             null comment '备注',
    create_name           varchar(50)              null comment '创建人姓名',
    update_name           varchar(50)              null comment '更新人姓名',
    tenant_id             bigint                   null comment '租户id',
    version               int                      null comment '版本',
    create_time           datetime                 null comment '创建时间',
    update_time           datetime                 null comment '修改时间',
    create_id             bigint                   null comment '创建人id',
    update_id             bigint                   null comment '修改人id',
    env                   varchar(50)              null comment '环境',
    delay_time            datetime                 null comment '延期时间',
    paper_type            int                      null comment '试卷类型（如：1自动生成试卷、2平台组卷等）',
    exam_minutes          int                      null comment '考试时长（分钟）',
    paper_id              bigint                   null comment '试卷id'
)
    comment '班级管理表' charset = utf8mb4;

create table class_student
(
    id              bigint                      not null comment '主键ID（由程序生成，不自增）'
        primary key,
    class_id        bigint                      not null comment '关联班级ID（training_class.id）',
    student_name    varchar(50)                 null comment '姓名',
    unit_name       varchar(100)                null comment '参训单位',
    department      varchar(100)                null comment '部门',
    phone           varchar(20)                 null comment '手机号',
    file_number     varchar(50)                 null comment '档案编号',
    face_auth       tinyint(1)     default 0    null comment '人脸认证（0-未认证，1-已认证）',
    required_hours  decimal(10, 2)              null comment '要求学时（小时）',
    completed_hours decimal(10, 2) default 0.00 null comment '已完成学时（小时）',
    study_status    int            default 0    null comment '学习状态：0-未学习，1-学习中，2-已学完，3-已完成',
    exam_status     int            default 0    null comment '考试状态：0-不考试，1-待考试，2-考试未通过，3-考试通过，4-未参加',
    entry_time      datetime                    null comment '入班时间',
    student_id varchar(20) null comment '学员(来源id)',
    delete_enum     varchar(32)                 null comment '删除标识true false',
    remarks         varchar(255)                null comment '备注',
    create_name     varchar(50)                 null comment '创建人姓名',
    update_name     varchar(50)                 null comment '更新人姓名',
    tenant_id       bigint                      null comment '租户id',
    version         int                         null comment '版本',
    create_time     datetime                    null comment '创建时间',
    update_time     datetime                    null comment '修改时间',
    create_id       bigint                      null comment '创建人id',
    update_id       bigint                      null comment '修改人id',
    env             varchar(50)                 null comment '环境'
)
    comment '班级学员学习记录表' charset = utf8mb4;

create index idx_class_id
    on class_student (class_id);

create table class_student_exam_record
(
    id           bigint               not null comment '主键ID（由程序生成，不自增）'
        primary key,
    student_id   bigint               not null comment '学员ID（关联class_student.id）',
    student_name varchar(20)          not null comment '学员名称',
    class_id     bigint               not null comment '所属班级ID（关联training_class.id）',
    paper_name   varchar(200)         not null comment '试卷名称',
    paper_id     bigint               not null comment '试卷id',
    score        decimal(10, 2)       null comment '得分',
    passed       tinyint(1) default 0 null comment '是否通过（0-未通过，1-通过）',
    wrong_count  int        default 0 null comment '错误题数',
    accuracy     decimal(5, 2)        null comment '正确率（百分比，如 96.66）',
    start_time   datetime             null comment '考试开始时间',
    end_time     datetime             null comment '考试结束时间',
    delete_enum  varchar(32)          null comment '删除标识true false',
    remarks      varchar(255)         null comment '备注',
    create_name  varchar(50)          null comment '创建人姓名',
    update_name  varchar(50)          null comment '更新人姓名',
    tenant_id    bigint               null comment '租户id',
    version      int                  null comment '版本',
    create_time  datetime             null comment '创建时间',
    update_time  datetime             null comment '修改时间',
    create_id    bigint               null comment '创建人id',
    update_id    bigint               null comment '修改人id',
    env          varchar(50)          null comment '环境'
)
    comment '学员考试记录表' charset = utf8mb4;

create index idx_student_id
    on class_student_exam_record (student_id);

create table class_student_learning_record
(
    id                bigint        not null comment '主键ID（由程序生成，不自增）'
        primary key,
    student_id        bigint        not null comment '学员ID（关联class_student.id）',
    class_id          bigint        not null comment '所属班级ID（关联training_class.id）',
    course_id         bigint        not null comment '课程ID（关联training_course.id）',
    course_name       varchar(200)  not null comment '课程名称',
    courseware_name   varchar(200)  null comment '小节点名称（如章节名、视频文件名）',
    study_status      int default 0 null comment '学习状态：0-未学习，1-学习中，2-已完成',
    learning_progress varchar(50)   null comment '学习情况（如进度百分比或简要描述，冗余字段便于展示）',
    start_time        datetime      null comment '开始学习时间（第一次开始观看/学习的时间）',
    end_time          datetime      null comment '完成时间（标记为“已学完”或“已完成”的时间）',
    last_watch_time   datetime      null comment '最近观看时间（最后一条学习行为的时间戳）',
    delete_enum       varchar(32)   null comment '删除标识true false',
    remarks           varchar(255)  null comment '备注',
    create_name       varchar(50)   null comment '创建人姓名',
    update_name       varchar(50)   null comment '更新人姓名',
    tenant_id         bigint        null comment '租户id',
    version           int           null comment '版本',
    create_time       datetime      null comment '创建时间',
    update_time       datetime      null comment '修改时间',
    create_id         bigint        null comment '创建人id',
    update_id         bigint        null comment '修改人id',
    env               varchar(50)   null comment '环境'
)
    comment '学员学习记录表（节点级）' charset = utf8mb4;

create index idx_course_id
    on class_student_learning_record (course_id);

create index idx_student_id
    on class_student_learning_record (student_id);

create index idx_study_status
    on class_student_learning_record (study_status);

create table course_management
(
    delete_enum         varchar(32) charset utf8mb4        null comment '删除标识true false',
    remarks             varchar(255) charset utf8mb4       null comment '备注',
    create_name         varchar(50) charset utf8mb4        null comment '创建人姓名',
    update_name         varchar(50) charset utf8mb4        null comment '更新人姓名',
    tenant_id           bigint                             null comment '租户id',
    version             int                                null comment '版本',
    create_time         datetime                           null comment '创建时间',
    update_time         datetime                           null comment '修改时间',
    create_id           bigint                             null comment '创建人id',
    update_id           bigint                             null comment '修改人id',
    env                 varchar(50) charset utf8mb4        null comment '环境',
    id                  bigint                             not null comment '主键'
        primary key,
    course_name         varchar(200)                       null comment '课程名称',
    training_type       varchar(100)                       null comment '培训类型',
    course_description  varchar(512)                       null comment '课称描述',
    course_cover        varchar(255)                       null comment '课程封面',
    class_hour_duration decimal(5, 1) unsigned default 0.0 null comment '课时时长（小时）',
    upload_unit         varchar(200)                       null comment '上传单位',
    status              int                    default 0   null comment '状态（1启用/0禁用）',
    used                int                    default 0   null comment '是否已被使用（0-未使用，1-已使用）',
    exam_type           int                                null comment '试卷类型（如：1自动生成试卷、2平台组卷等）',
    exam_minutes        int                                null comment '考试时长（分钟）',
    exam_id             bigint                             not null comment '试卷id'
)
    comment '课程管理';

create table course_rel_courseware
(
    id                       bigint                                not null comment '主键'
        primary key,
    courseware_name          varchar(200)                          null comment '课件名称',
    courseware_document      varchar(512)                          null comment '课件文档（文件名或路径）',
    courseware_id            bigint                                null comment '课件id',
    course_id                bigint                                null comment '课程id',
    sort                     int                                   null comment '排序',
    class_hour_duration_unit varchar(10)            default '小时' null comment '课时时长单位',
    credit_hours             decimal(5, 1) unsigned default 0.0    null comment '学时'
)
    comment '课程关联课件表';

create table courseware_management
(
    delete_enum            varchar(32) charset utf8mb4        null comment '删除标识true false',
    remarks                varchar(255) charset utf8mb4       null comment '备注',
    create_name            varchar(50) charset utf8mb4        null comment '创建人姓名',
    update_name            varchar(50) charset utf8mb4        null comment '更新人姓名',
    tenant_id              bigint                             null comment '租户id',
    version                int                                null comment '版本',
    create_time            datetime                           null comment '创建时间',
    update_time            datetime                           null comment '修改时间',
    create_id              bigint                             null comment '创建人id',
    update_id              bigint                             null comment '修改人id',
    env                    varchar(50) charset utf8mb4        null comment '环境',
    id                     bigint                             not null comment '主键'
        primary key,
    courseware_name        varchar(200)                       null comment '课件名称',
    training_type          varchar(100)                       null comment '培训类型',
    lecturer_name          varchar(100)                       null comment '讲师名称',
    credit_hours           decimal(5, 1) unsigned default 0.0 null comment '学时',
    class_hour_duration    decimal(5, 1) unsigned default 0.0 null comment '课时时长（小时）',
    upload_unit            varchar(200)                       null comment '上传单位',
    status                 int                    default 0   null comment '状态（1启用/0禁用）',
    courseware_type        int                                null comment '课件类型（1视频课件/2文档课件）',
    courseware_document    varchar(512)                       null comment '课件文档（文件名或路径）',
    courseware_description varchar(512)                       null comment '课件描述'
)
    comment '课件表';

