-- ============================================================================= -- 玻思韬 TMS 培训管理系统 · PostgreSQL 18 建表脚本 -- 适用:JNPF 6.x(字段风格对齐现有 lims_/dms_ 表) -- 来源:玻思韬TMS功能设计书 V1 + 老飞企界面字段 -- -- 使用 -- 1) 推荐:JNPF「数据建模」按表清单建表,再绑表单(系统字段会自动带) -- 2) 或先执行本脚本,再到数据建模「同步数据表」 -- -- 约定 -- f_id 主键 varchar(50);子表 f_foreign_id = 主表 f_id -- 流程表单含 f_flow_id / f_flow_task_id / f_flow_state -- 用户/组织/岗位存 JNPF ID;多选 text;附件 text(JSON) -- 业务状态存编码,选项用 JNPF 字典 -- ============================================================================= BEGIN; -- --------------------------------------------------------------------------- -- 1. 基础设置 -- --------------------------------------------------------------------------- -- 培训地点。在线学习任务地点可空;占用按小时与未取消任务时间交叉校验。 CREATE TABLE IF NOT EXISTS tms_place ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), place_no varchar(50) NOT NULL, place_name varchar(200) NOT NULL, place_group varchar(50), enabled varchar(20) NOT NULL DEFAULT '1', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_place PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_place IS '培训地点。在线学习任务地点可空;占用按小时与未取消任务时间交叉校验。'; COMMENT ON COLUMN tms_place.f_id IS '主键'; COMMENT ON COLUMN tms_place.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_place.place_no IS '地点编号,单据规则 A+YYYYMM+4,如 A2026090001'; COMMENT ON COLUMN tms_place.place_name IS '地点名称'; COMMENT ON COLUMN tms_place.place_group IS '组别/分区,字典:办公区/生产区/A区/B区'; COMMENT ON COLUMN tms_place.enabled IS '1启用 0停用'; COMMENT ON COLUMN tms_place.remark IS '备注'; COMMENT ON COLUMN tms_place.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_place.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_place.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_place.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_place.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_place.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_place.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_place_no ON tms_place (place_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_place_group ON tms_place (place_group, enabled); -- 培训师档案,关联系统用户;重复录入按user_id识别;账号注销后自动废弃。 CREATE TABLE IF NOT EXISTS tms_trainer ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), archive_no varchar(50), user_id varchar(50) NOT NULL, trainer_name varchar(100), dept_id varchar(50), post_id varchar(50), school varchar(200), education varchar(50), major varchar(100), tech_title varchar(100), hire_date date, license varchar(200), work_years varchar(50), trainer_level varchar(50), biz_status varchar(20) NOT NULL DEFAULT 'valid', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_trainer PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_trainer IS '培训师档案,关联系统用户;重复录入按user_id识别;账号注销后自动废弃。'; COMMENT ON COLUMN tms_trainer.f_id IS '主键'; COMMENT ON COLUMN tms_trainer.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_trainer.archive_no IS '档案编号 AR+YYYY+4,可与个人培训档案共用'; COMMENT ON COLUMN tms_trainer.user_id IS '系统用户ID'; COMMENT ON COLUMN tms_trainer.trainer_name IS '姓名(冗余,便于列表)'; COMMENT ON COLUMN tms_trainer.dept_id IS '部门'; COMMENT ON COLUMN tms_trainer.post_id IS '岗位'; COMMENT ON COLUMN tms_trainer.school IS '毕业院校'; COMMENT ON COLUMN tms_trainer.education IS '学历'; COMMENT ON COLUMN tms_trainer.major IS '专业'; COMMENT ON COLUMN tms_trainer.tech_title IS '技术职称'; COMMENT ON COLUMN tms_trainer.hire_date IS '入职时间'; COMMENT ON COLUMN tms_trainer.license IS '执业证书'; COMMENT ON COLUMN tms_trainer.work_years IS '工作年限'; COMMENT ON COLUMN tms_trainer.trainer_level IS '培训师级别'; COMMENT ON COLUMN tms_trainer.biz_status IS 'valid有效期内 / revoked已撤销'; COMMENT ON COLUMN tms_trainer.remark IS '备注'; COMMENT ON COLUMN tms_trainer.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_trainer.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_trainer.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_trainer.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_trainer.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_trainer.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_trainer.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_trainer_user ON tms_trainer (user_id) WHERE f_delete_mark = 0; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_trainer_no ON tms_trainer (archive_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_trainer_status ON tms_trainer (biz_status); -- 培训师个人工作经历子表 CREATE TABLE IF NOT EXISTS tms_trainer_work ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, sort_no int, hire_date date, leave_date date, company_name varchar(200), post_name varchar(100), leave_reason varchar(200), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_trainer_work PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_trainer_work IS '培训师个人工作经历子表'; COMMENT ON COLUMN tms_trainer_work.f_id IS '主键'; COMMENT ON COLUMN tms_trainer_work.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_trainer_work.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_trainer_work.sort_no IS '序号'; COMMENT ON COLUMN tms_trainer_work.hire_date IS '入职时间'; COMMENT ON COLUMN tms_trainer_work.leave_date IS '离职时间'; COMMENT ON COLUMN tms_trainer_work.company_name IS '公司名称'; COMMENT ON COLUMN tms_trainer_work.post_name IS '任职岗位'; COMMENT ON COLUMN tms_trainer_work.leave_reason IS '离职原因'; COMMENT ON COLUMN tms_trainer_work.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_trainer_work.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_trainer_work.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_trainer_work.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_trainer_work.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_trainer_work_fid ON tms_trainer_work (f_foreign_id); -- 培训师个人培训经历子表 CREATE TABLE IF NOT EXISTS tms_trainer_exp ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, sort_no int, train_date date, org_name varchar(200), cert_name varchar(200), cert_file text, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_trainer_exp PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_trainer_exp IS '培训师个人培训经历子表'; COMMENT ON COLUMN tms_trainer_exp.f_id IS '主键'; COMMENT ON COLUMN tms_trainer_exp.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_trainer_exp.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_trainer_exp.sort_no IS '序号'; COMMENT ON COLUMN tms_trainer_exp.train_date IS '培训时间'; COMMENT ON COLUMN tms_trainer_exp.org_name IS '培训机构'; COMMENT ON COLUMN tms_trainer_exp.cert_name IS '培训证书'; COMMENT ON COLUMN tms_trainer_exp.cert_file IS '证书附件'; COMMENT ON COLUMN tms_trainer_exp.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_trainer_exp.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_trainer_exp.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_trainer_exp.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_trainer_exp.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_trainer_exp_fid ON tms_trainer_exp (f_foreign_id); -- 培训管理员跨部门授权。到期前一个月提醒管理员/培训师。 CREATE TABLE IF NOT EXISTS tms_admin_auth ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), admin_user_id varchar(50) NOT NULL, scope_dept_id text NOT NULL, include_child varchar(10) NOT NULL DEFAULT '1', registrar_id varchar(50), register_date date, expire_date date, biz_status varchar(20) NOT NULL DEFAULT 'valid', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_admin_auth PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_admin_auth IS '培训管理员跨部门授权。到期前一个月提醒管理员/培训师。'; COMMENT ON COLUMN tms_admin_auth.f_id IS '主键'; COMMENT ON COLUMN tms_admin_auth.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_admin_auth.admin_user_id IS '培训管理员'; COMMENT ON COLUMN tms_admin_auth.scope_dept_id IS '管理范围,组织多选'; COMMENT ON COLUMN tms_admin_auth.include_child IS '是否包含下级部门 1是 0否'; COMMENT ON COLUMN tms_admin_auth.registrar_id IS '登记人'; COMMENT ON COLUMN tms_admin_auth.register_date IS '登记日期'; COMMENT ON COLUMN tms_admin_auth.expire_date IS '授权到期日,可空表示长期'; COMMENT ON COLUMN tms_admin_auth.biz_status IS 'valid有效 / revoked废弃'; COMMENT ON COLUMN tms_admin_auth.remark IS '备注'; COMMENT ON COLUMN tms_admin_auth.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_admin_auth.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_admin_auth.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_admin_auth.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_admin_auth.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_admin_auth.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_admin_auth.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_admin_auth_user ON tms_admin_auth (admin_user_id, biz_status); -- 培训方式配置(含签到规则,不仅是字典) CREATE TABLE IF NOT EXISTS tms_train_mode ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), mode_code varchar(50) NOT NULL, mode_name varchar(100) NOT NULL, sign_rule varchar(20) NOT NULL DEFAULT 'both', allow_guest_sign varchar(10) NOT NULL DEFAULT '0', same_day_required varchar(10) NOT NULL DEFAULT '0', place_required varchar(10) NOT NULL DEFAULT '1', sort_no int, enabled varchar(10) NOT NULL DEFAULT '1', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_train_mode PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_train_mode IS '培训方式配置(含签到规则,不仅是字典)'; COMMENT ON COLUMN tms_train_mode.f_id IS '主键'; COMMENT ON COLUMN tms_train_mode.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_train_mode.mode_code IS '编码:onsite/practice/online'; COMMENT ON COLUMN tms_train_mode.mode_name IS '名称:集中授课/操作授课/在线学习'; COMMENT ON COLUMN tms_train_mode.sign_rule IS 'scan仅扫码 / both扫码+在线'; COMMENT ON COLUMN tms_train_mode.allow_guest_sign IS '允许名单外签到,集中授课=1'; COMMENT ON COLUMN tms_train_mode.same_day_required IS '开始结束必须同一天,集中/操作=1'; COMMENT ON COLUMN tms_train_mode.place_required IS '地点必填,在线学习=0'; COMMENT ON COLUMN tms_train_mode.sort_no IS '排序'; COMMENT ON COLUMN tms_train_mode.enabled IS '启用'; COMMENT ON COLUMN tms_train_mode.remark IS '备注'; COMMENT ON COLUMN tms_train_mode.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_train_mode.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_train_mode.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_train_mode.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_train_mode.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_train_mode.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_train_mode.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_train_mode_code ON tms_train_mode (mode_code) WHERE f_delete_mark = 0; -- 签到方式:APP扫码 / 微信扫码 / 在线签到 CREATE TABLE IF NOT EXISTS tms_sign_mode ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), mode_code varchar(50) NOT NULL, mode_name varchar(100) NOT NULL, tip_seconds int NOT NULL DEFAULT 30, match_roster varchar(10) NOT NULL DEFAULT '1', enabled varchar(10) NOT NULL DEFAULT '1', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_sign_mode PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_sign_mode IS '签到方式:APP扫码 / 微信扫码 / 在线签到'; COMMENT ON COLUMN tms_sign_mode.f_id IS '主键'; COMMENT ON COLUMN tms_sign_mode.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_sign_mode.mode_code IS '编码:app_scan/wx_scan/online'; COMMENT ON COLUMN tms_sign_mode.mode_name IS '名称'; COMMENT ON COLUMN tms_sign_mode.tip_seconds IS '有培训要点时强制阅读秒数,IT可调'; COMMENT ON COLUMN tms_sign_mode.match_roster IS '是否必须匹配培训对象名单'; COMMENT ON COLUMN tms_sign_mode.enabled IS '启用'; COMMENT ON COLUMN tms_sign_mode.remark IS '备注'; COMMENT ON COLUMN tms_sign_mode.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_sign_mode.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_sign_mode.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_sign_mode.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_sign_mode.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_sign_mode.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_sign_mode.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_sign_mode_code ON tms_sign_mode (mode_code) WHERE f_delete_mark = 0; -- 培训效果评估方式:提问 / 现场操作 / 在线考试 / 无需考核 CREATE TABLE IF NOT EXISTS tms_eval_mode ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), mode_code varchar(50) NOT NULL, mode_name varchar(100) NOT NULL, need_paper varchar(10) NOT NULL DEFAULT '0', need_quiz varchar(10) NOT NULL DEFAULT '0', need_practice varchar(10) NOT NULL DEFAULT '0', enabled varchar(10) NOT NULL DEFAULT '1', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_eval_mode PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_eval_mode IS '培训效果评估方式:提问 / 现场操作 / 在线考试 / 无需考核'; COMMENT ON COLUMN tms_eval_mode.f_id IS '主键'; COMMENT ON COLUMN tms_eval_mode.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_eval_mode.mode_code IS '编码:quiz/practice/exam/none'; COMMENT ON COLUMN tms_eval_mode.mode_name IS '名称'; COMMENT ON COLUMN tms_eval_mode.need_paper IS '是否需要试卷'; COMMENT ON COLUMN tms_eval_mode.need_quiz IS '是否需要提问预设'; COMMENT ON COLUMN tms_eval_mode.need_practice IS '是否需要实操评分'; COMMENT ON COLUMN tms_eval_mode.enabled IS '启用'; COMMENT ON COLUMN tms_eval_mode.remark IS '备注'; COMMENT ON COLUMN tms_eval_mode.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_eval_mode.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_eval_mode.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_eval_mode.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_eval_mode.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_eval_mode.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_eval_mode.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_eval_mode_code ON tms_eval_mode (mode_code) WHERE f_delete_mark = 0; -- 培训课程主数据,计划/任务可引用 CREATE TABLE IF NOT EXISTS tms_course ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), course_no varchar(50), course_name varchar(200) NOT NULL, category varchar(50), train_mode varchar(50), eval_mode varchar(50), paper_id varchar(50), hours numeric(8,1), enabled varchar(10) NOT NULL DEFAULT '1', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_course PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_course IS '培训课程主数据,计划/任务可引用'; COMMENT ON COLUMN tms_course.f_id IS '主键'; COMMENT ON COLUMN tms_course.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_course.course_no IS '课程编号'; COMMENT ON COLUMN tms_course.course_name IS '课程名称'; COMMENT ON COLUMN tms_course.category IS '课程分类'; COMMENT ON COLUMN tms_course.train_mode IS '培训方式编码'; COMMENT ON COLUMN tms_course.eval_mode IS '考核方式编码'; COMMENT ON COLUMN tms_course.paper_id IS '关联试卷'; COMMENT ON COLUMN tms_course.hours IS '学时'; COMMENT ON COLUMN tms_course.enabled IS '启用'; COMMENT ON COLUMN tms_course.remark IS '备注'; COMMENT ON COLUMN tms_course.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_course.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_course.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_course.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_course.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_course.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_course.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_course_no ON tms_course (course_no) WHERE f_delete_mark = 0; -- 培训教材/企业知识库。可上传本地或引用DMS(需鉴权)。撤销后不可再引用。 CREATE TABLE IF NOT EXISTS tms_material ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), material_no varchar(50) NOT NULL, material_name varchar(500) NOT NULL, file_type varchar(50), apply_time date, applicant_id varchar(50), apply_dept_id varchar(50), file_json text, dms_file_id varchar(50), quote_count int NOT NULL DEFAULT 0, biz_status varchar(20) NOT NULL DEFAULT 'valid', remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_material PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_material IS '培训教材/企业知识库。可上传本地或引用DMS(需鉴权)。撤销后不可再引用。'; COMMENT ON COLUMN tms_material.f_id IS '主键'; COMMENT ON COLUMN tms_material.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_material.material_no IS '教材编号 TM+YYYYMM+4'; COMMENT ON COLUMN tms_material.material_name IS '教材名称'; COMMENT ON COLUMN tms_material.file_type IS 'Word/PPT/Excel/PDF/视频/音频'; COMMENT ON COLUMN tms_material.apply_time IS '申请时间'; COMMENT ON COLUMN tms_material.applicant_id IS '上传申请人'; COMMENT ON COLUMN tms_material.apply_dept_id IS '申请人部门'; COMMENT ON COLUMN tms_material.file_json IS '教材附件(JNPF附件JSON)'; COMMENT ON COLUMN tms_material.dms_file_id IS '引用的DMS文件ID'; COMMENT ON COLUMN tms_material.quote_count IS '被任务引用次数'; COMMENT ON COLUMN tms_material.biz_status IS 'valid有效 / revoked已撤销'; COMMENT ON COLUMN tms_material.remark IS '备注'; COMMENT ON COLUMN tms_material.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_material.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_material.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_material.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_material.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_material.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_material.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_material_no ON tms_material (material_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_material_type ON tms_material (file_type, biz_status); -- --------------------------------------------------------------------------- -- 2. 题库试卷 -- --------------------------------------------------------------------------- -- 题库 CREATE TABLE IF NOT EXISTS tms_question_bank ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), bank_name varchar(200) NOT NULL, question_count int NOT NULL DEFAULT 0, biz_status varchar(20) NOT NULL DEFAULT 'normal', remark text, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_question_bank PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_question_bank IS '题库'; COMMENT ON COLUMN tms_question_bank.f_id IS '主键'; COMMENT ON COLUMN tms_question_bank.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_question_bank.bank_name IS '题库名称'; COMMENT ON COLUMN tms_question_bank.question_count IS '试题数量(维护时回写)'; COMMENT ON COLUMN tms_question_bank.biz_status IS 'normal正常 / invalid失效'; COMMENT ON COLUMN tms_question_bank.remark IS '备注'; COMMENT ON COLUMN tms_question_bank.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_question_bank.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_question_bank.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_question_bank.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_question_bank.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_question_bank.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_question_bank.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_qbank_status ON tms_question_bank (biz_status); -- 试题。修改不影响已完成考试快照。 CREATE TABLE IF NOT EXISTS tms_question ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), question_no varchar(50), bank_id varchar(50) NOT NULL, question_type varchar(20) NOT NULL, difficulty varchar(20), source_type varchar(50), stem text NOT NULL, analysis text, admin_user_id varchar(50), biz_status varchar(20) NOT NULL DEFAULT 'open', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_question PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_question IS '试题。修改不影响已完成考试快照。'; COMMENT ON COLUMN tms_question.f_id IS '主键'; COMMENT ON COLUMN tms_question.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_question.question_no IS '试题编号,可流水'; COMMENT ON COLUMN tms_question.bank_id IS '所属题库 tms_question_bank.f_id'; COMMENT ON COLUMN tms_question.question_type IS 'single单选 / multi多选 / judge判断 / blank填空 / essay问答'; COMMENT ON COLUMN tms_question.difficulty IS 'easy/normal/hard,界面默认一般'; COMMENT ON COLUMN tms_question.source_type IS '试题来源,默认自命题'; COMMENT ON COLUMN tms_question.stem IS '题干,富文本'; COMMENT ON COLUMN tms_question.analysis IS '答案解析/备注,错题可显示'; COMMENT ON COLUMN tms_question.admin_user_id IS '管理员'; COMMENT ON COLUMN tms_question.biz_status IS 'open开放 / closed不开放 / invalid废弃'; COMMENT ON COLUMN tms_question.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_question.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_question.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_question.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_question.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_question.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_question.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_question_bank ON tms_question (bank_id, question_type, biz_status); -- 试题选项。单选单选中,多选可多选中,判断可做成A对B错。 CREATE TABLE IF NOT EXISTS tms_question_option ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, sort_no int, option_label varchar(10), option_content text, is_correct varchar(10) NOT NULL DEFAULT '0', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_question_option PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_question_option IS '试题选项。单选单选中,多选可多选中,判断可做成A对B错。'; COMMENT ON COLUMN tms_question_option.f_id IS '主键'; COMMENT ON COLUMN tms_question_option.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_question_option.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_question_option.sort_no IS '序号'; COMMENT ON COLUMN tms_question_option.option_label IS 'A/B/C/D...'; COMMENT ON COLUMN tms_question_option.option_content IS '选项内容'; COMMENT ON COLUMN tms_question_option.is_correct IS '是否正确答案 1是 0否'; COMMENT ON COLUMN tms_question_option.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_question_option.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_question_option.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_question_option.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_question_option.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_qopt_fid ON tms_question_option (f_foreign_id); -- 试卷。失效试卷不得再用于新任务;改卷不影响已考记录。 CREATE TABLE IF NOT EXISTS tms_paper ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), paper_name varchar(300) NOT NULL, biz_status varchar(20) NOT NULL DEFAULT 'open', duration_min int NOT NULL DEFAULT 60, exam_start timestamp, exam_end timestamp, score_publish_time timestamp, pass_score numeric(8,1), total_score numeric(8,1), sort_mode varchar(20) NOT NULL DEFAULT 'paper', has_subjective varchar(10) NOT NULL DEFAULT '0', remark text, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_paper PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_paper IS '试卷。失效试卷不得再用于新任务;改卷不影响已考记录。'; COMMENT ON COLUMN tms_paper.f_id IS '主键'; COMMENT ON COLUMN tms_paper.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_paper.paper_name IS '试卷名称'; COMMENT ON COLUMN tms_paper.biz_status IS 'open开放 / closed不开放 / invalid失效'; COMMENT ON COLUMN tms_paper.duration_min IS '考试时长(分钟)'; COMMENT ON COLUMN tms_paper.exam_start IS '试卷级开考时间,可空,任务上再设'; COMMENT ON COLUMN tms_paper.exam_end IS '试卷级结考时间,可空'; COMMENT ON COLUMN tms_paper.score_publish_time IS '成绩公布时间,空=立即公布'; COMMENT ON COLUMN tms_paper.pass_score IS '合格分数'; COMMENT ON COLUMN tms_paper.total_score IS '试卷总分'; COMMENT ON COLUMN tms_paper.sort_mode IS 'paper试卷自身顺序 / random随机'; COMMENT ON COLUMN tms_paper.has_subjective IS '是否含主观题,组卷时回写'; COMMENT ON COLUMN tms_paper.remark IS '备注'; COMMENT ON COLUMN tms_paper.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_paper.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_paper.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_paper.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_paper.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_paper.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_paper.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_paper_status ON tms_paper (biz_status); -- 试卷章节,可按题型归类 CREATE TABLE IF NOT EXISTS tms_paper_section ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, section_name varchar(100), question_type varchar(20), sort_no int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_paper_section PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_paper_section IS '试卷章节,可按题型归类'; COMMENT ON COLUMN tms_paper_section.f_id IS '主键'; COMMENT ON COLUMN tms_paper_section.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_paper_section.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_paper_section.section_name IS '章节名,如 一、单选题'; COMMENT ON COLUMN tms_paper_section.question_type IS '默认题型'; COMMENT ON COLUMN tms_paper_section.sort_no IS '排序'; COMMENT ON COLUMN tms_paper_section.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_paper_section.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_paper_section.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_paper_section.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_paper_section.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_psec_fid ON tms_paper_section (f_foreign_id); -- 试卷组成试题(当前版本)。已考试卷走 tms_exam_item 快照。 CREATE TABLE IF NOT EXISTS tms_paper_question ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, section_id varchar(50), question_id varchar(50) NOT NULL, score numeric(8,1), sort_no int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_paper_question PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_paper_question IS '试卷组成试题(当前版本)。已考试卷走 tms_exam_item 快照。'; COMMENT ON COLUMN tms_paper_question.f_id IS '主键'; COMMENT ON COLUMN tms_paper_question.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_paper_question.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_paper_question.section_id IS '章节ID'; COMMENT ON COLUMN tms_paper_question.question_id IS '试题ID'; COMMENT ON COLUMN tms_paper_question.score IS '本题分值'; COMMENT ON COLUMN tms_paper_question.sort_no IS '自定义排序'; COMMENT ON COLUMN tms_paper_question.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_paper_question.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_paper_question.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_paper_question.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_paper_question.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_pq_fid ON tms_paper_question (f_foreign_id); CREATE INDEX IF NOT EXISTS idx_tms_pq_qid ON tms_paper_question (question_id); -- --------------------------------------------------------------------------- -- 3. 岗位/年度计划 -- --------------------------------------------------------------------------- -- 岗位培训目录。支持升版、废弃。审批通过后可整单复制。 CREATE TABLE IF NOT EXISTS tms_post_catalog ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), catalog_no varchar(50), post_id varchar(50) NOT NULL, post_name varchar(100), dept_id varchar(50), version_no int NOT NULL DEFAULT 1, biz_status varchar(20) NOT NULL DEFAULT 'valid', remark varchar(500), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_post_catalog PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_post_catalog IS '岗位培训目录。支持升版、废弃。审批通过后可整单复制。'; COMMENT ON COLUMN tms_post_catalog.f_id IS '主键'; COMMENT ON COLUMN tms_post_catalog.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_post_catalog.catalog_no IS '目录编号'; COMMENT ON COLUMN tms_post_catalog.post_id IS '岗位'; COMMENT ON COLUMN tms_post_catalog.post_name IS '岗位名称冗余'; COMMENT ON COLUMN tms_post_catalog.dept_id IS '所属部门'; COMMENT ON COLUMN tms_post_catalog.version_no IS '版本号,升版+1'; COMMENT ON COLUMN tms_post_catalog.biz_status IS 'valid有效 / revoked废弃'; COMMENT ON COLUMN tms_post_catalog.remark IS '备注'; COMMENT ON COLUMN tms_post_catalog.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_post_catalog.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_post_catalog.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_post_catalog.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_post_catalog.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_post_catalog.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_post_catalog.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_post_catalog.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_post_catalog.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_post_catalog.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_pcat_post ON tms_post_catalog (post_id, biz_status); -- 岗位培训目录内容行,支持回车多行、手动排序 CREATE TABLE IF NOT EXISTS tms_post_catalog_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, sort_no int, subject varchar(500), train_mode varchar(50), hours numeric(8,1), eval_mode varchar(50), material_id varchar(50), course_id varchar(50), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_post_catalog_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_post_catalog_item IS '岗位培训目录内容行,支持回车多行、手动排序'; COMMENT ON COLUMN tms_post_catalog_item.f_id IS '主键'; COMMENT ON COLUMN tms_post_catalog_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_post_catalog_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_post_catalog_item.sort_no IS '顺序'; COMMENT ON COLUMN tms_post_catalog_item.subject IS '培训内容'; COMMENT ON COLUMN tms_post_catalog_item.train_mode IS '培训方式'; COMMENT ON COLUMN tms_post_catalog_item.hours IS '课时'; COMMENT ON COLUMN tms_post_catalog_item.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_post_catalog_item.material_id IS '教材'; COMMENT ON COLUMN tms_post_catalog_item.course_id IS '课程'; COMMENT ON COLUMN tms_post_catalog_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_post_catalog_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_post_catalog_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_post_catalog_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_post_catalog_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_pcati_fid ON tms_post_catalog_item (f_foreign_id); -- 岗位培训计划。由目录推送,可生成个人岗位培训和培训任务。 CREATE TABLE IF NOT EXISTS tms_post_plan ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), plan_no varchar(50) NOT NULL, post_id varchar(50), post_name varchar(100), dept_id varchar(50), plan_end_time date, post_desc text, trainees text, catalog_id varchar(50), publish_status varchar(20) NOT NULL DEFAULT 'draft', remark varchar(500), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_post_plan PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_post_plan IS '岗位培训计划。由目录推送,可生成个人岗位培训和培训任务。'; COMMENT ON COLUMN tms_post_plan.f_id IS '主键'; COMMENT ON COLUMN tms_post_plan.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_post_plan.plan_no IS '计划编号 JP+YYYYMM+4,如 JP2026090012'; COMMENT ON COLUMN tms_post_plan.post_id IS '岗位编码/ID'; COMMENT ON COLUMN tms_post_plan.post_name IS '岗位名称'; COMMENT ON COLUMN tms_post_plan.dept_id IS '所属部门'; COMMENT ON COLUMN tms_post_plan.plan_end_time IS '计划结束时间,带入个人岗位培训'; COMMENT ON COLUMN tms_post_plan.post_desc IS '岗位描述'; COMMENT ON COLUMN tms_post_plan.trainees IS '培训对象,用户多选'; COMMENT ON COLUMN tms_post_plan.catalog_id IS '来源目录'; COMMENT ON COLUMN tms_post_plan.publish_status IS 'draft未发布 / published已发布'; COMMENT ON COLUMN tms_post_plan.remark IS '备注'; COMMENT ON COLUMN tms_post_plan.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_post_plan.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_post_plan.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_post_plan.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_post_plan.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_post_plan.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_post_plan.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_post_plan.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_post_plan.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_post_plan.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_pplan_no ON tms_post_plan (plan_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_pplan_post ON tms_post_plan (post_id, publish_status); -- 岗位培训计划明细 CREATE TABLE IF NOT EXISTS tms_post_plan_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, plan_time date, teacher_id varchar(50), subject varchar(500), train_mode varchar(50), hours numeric(8,1), eval_mode varchar(50), material_id varchar(50), task_id varchar(50), line_status varchar(20), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_post_plan_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_post_plan_item IS '岗位培训计划明细'; COMMENT ON COLUMN tms_post_plan_item.f_id IS '主键'; COMMENT ON COLUMN tms_post_plan_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_post_plan_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_post_plan_item.plan_time IS '培训计划时间'; COMMENT ON COLUMN tms_post_plan_item.teacher_id IS '培训师'; COMMENT ON COLUMN tms_post_plan_item.subject IS '培训内容'; COMMENT ON COLUMN tms_post_plan_item.train_mode IS '培训方式'; COMMENT ON COLUMN tms_post_plan_item.hours IS '培训课时'; COMMENT ON COLUMN tms_post_plan_item.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_post_plan_item.material_id IS '教材'; COMMENT ON COLUMN tms_post_plan_item.task_id IS '生成的培训任务ID'; COMMENT ON COLUMN tms_post_plan_item.line_status IS 'pending待发布 / published已发布 / done已完成'; COMMENT ON COLUMN tms_post_plan_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_post_plan_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_post_plan_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_post_plan_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_post_plan_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_pplani_fid ON tms_post_plan_item (f_foreign_id); -- 个人岗位培训清单。转岗时子表标记已培训过则不生成任务。 CREATE TABLE IF NOT EXISTS tms_person_post ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), plan_id varchar(50), catalog_id varchar(50), user_id varchar(50) NOT NULL, post_id varchar(50), plan_end_time date, biz_status varchar(20) NOT NULL DEFAULT 'doing', person_remark varchar(500), audit_remark varchar(500), approve_remark varchar(500), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_person_post PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_post IS '个人岗位培训清单。转岗时子表标记已培训过则不生成任务。'; COMMENT ON COLUMN tms_person_post.f_id IS '主键'; COMMENT ON COLUMN tms_person_post.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_post.plan_id IS '岗位培训计划ID'; COMMENT ON COLUMN tms_person_post.catalog_id IS '目录ID'; COMMENT ON COLUMN tms_person_post.user_id IS '培训对象'; COMMENT ON COLUMN tms_person_post.post_id IS '岗位'; COMMENT ON COLUMN tms_person_post.plan_end_time IS '计划结束时间(由计划带出)'; COMMENT ON COLUMN tms_person_post.biz_status IS 'doing执行中 / done完成 / returned退回'; COMMENT ON COLUMN tms_person_post.person_remark IS '个人备注'; COMMENT ON COLUMN tms_person_post.audit_remark IS '审核备注'; COMMENT ON COLUMN tms_person_post.approve_remark IS '审批备注'; COMMENT ON COLUMN tms_person_post.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_person_post.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_person_post.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_person_post.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_post.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_post.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_post.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_post.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_person_post.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_person_post.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_ppost_user ON tms_person_post (user_id, biz_status); CREATE INDEX IF NOT EXISTS idx_tms_ppost_plan ON tms_person_post (plan_id); -- 个人岗位培训明细 CREATE TABLE IF NOT EXISTS tms_person_post_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, subject varchar(500), train_mode varchar(50), hours numeric(8,1), eval_mode varchar(50), already_trained varchar(10) NOT NULL DEFAULT '0', task_id varchar(50), line_status varchar(20), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_person_post_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_post_item IS '个人岗位培训明细'; COMMENT ON COLUMN tms_person_post_item.f_id IS '主键'; COMMENT ON COLUMN tms_person_post_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_post_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_person_post_item.subject IS '培训内容'; COMMENT ON COLUMN tms_person_post_item.train_mode IS '培训方式'; COMMENT ON COLUMN tms_person_post_item.hours IS '课时'; COMMENT ON COLUMN tms_person_post_item.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_person_post_item.already_trained IS '转岗:是否已培训过,是则不生成任务'; COMMENT ON COLUMN tms_person_post_item.task_id IS '生成的培训任务'; COMMENT ON COLUMN tms_person_post_item.line_status IS '状态'; COMMENT ON COLUMN tms_person_post_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_post_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_post_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_post_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_post_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_pposti_fid ON tms_person_post_item (f_foreign_id); -- 年度培训计划(公司/部门)。办结后生成培训任务。流程:部门负责人→QA负责人。 CREATE TABLE IF NOT EXISTS tms_annual_plan ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), plan_year int NOT NULL, plan_no varchar(50) NOT NULL, plan_type varchar(20), author_id varchar(50), author_dept_id varchar(50), author_date date, version_no int NOT NULL DEFAULT 1, dept_leader_id varchar(50), qa_leader_id varchar(50), biz_status varchar(20) NOT NULL DEFAULT 'draft', remark text, f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_annual_plan PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_annual_plan IS '年度培训计划(公司/部门)。办结后生成培训任务。流程:部门负责人→QA负责人。'; COMMENT ON COLUMN tms_annual_plan.f_id IS '主键'; COMMENT ON COLUMN tms_annual_plan.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_annual_plan.plan_year IS '年份,制定时默认当前年+1'; COMMENT ON COLUMN tms_annual_plan.plan_no IS '计划编号,如 20260001'; COMMENT ON COLUMN tms_annual_plan.plan_type IS 'company公司级 / dept部门级'; COMMENT ON COLUMN tms_annual_plan.author_id IS '制定人'; COMMENT ON COLUMN tms_annual_plan.author_dept_id IS '制定部门'; COMMENT ON COLUMN tms_annual_plan.author_date IS '制定日期'; COMMENT ON COLUMN tms_annual_plan.version_no IS '版本'; COMMENT ON COLUMN tms_annual_plan.dept_leader_id IS '部门负责人(签核展示)'; COMMENT ON COLUMN tms_annual_plan.qa_leader_id IS 'QA部负责人'; COMMENT ON COLUMN tms_annual_plan.biz_status IS 'draft草稿 / approving审批中 / approved已批准'; COMMENT ON COLUMN tms_annual_plan.remark IS '备注'; COMMENT ON COLUMN tms_annual_plan.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_annual_plan.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_annual_plan.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_annual_plan.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_annual_plan.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_annual_plan.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_annual_plan.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_annual_plan.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_annual_plan.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_annual_plan.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_aplan_no ON tms_annual_plan (plan_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_aplan_year ON tms_annual_plan (plan_year, plan_type, author_dept_id); -- 年度培训计划明细 CREATE TABLE IF NOT EXISTS tms_annual_plan_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, train_month varchar(6), subject varchar(500), train_mode varchar(50), trainees text, hours numeric(8,1), teacher_id varchar(50), eval_mode varchar(50), course_id varchar(50), line_status varchar(20) NOT NULL DEFAULT 'pending', task_id varchar(50), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_annual_plan_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_annual_plan_item IS '年度培训计划明细'; COMMENT ON COLUMN tms_annual_plan_item.f_id IS '主键'; COMMENT ON COLUMN tms_annual_plan_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_annual_plan_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_annual_plan_item.train_month IS '培训月份 YYYYMM,如 202609'; COMMENT ON COLUMN tms_annual_plan_item.subject IS '培训内容'; COMMENT ON COLUMN tms_annual_plan_item.train_mode IS '培训方式'; COMMENT ON COLUMN tms_annual_plan_item.trainees IS '培训对象'; COMMENT ON COLUMN tms_annual_plan_item.hours IS '培训课时'; COMMENT ON COLUMN tms_annual_plan_item.teacher_id IS '培训师'; COMMENT ON COLUMN tms_annual_plan_item.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_annual_plan_item.course_id IS '培训课程'; COMMENT ON COLUMN tms_annual_plan_item.line_status IS 'pending待执行 / tasked已生成任务 / done已完成 / delayed已延期'; COMMENT ON COLUMN tms_annual_plan_item.task_id IS '生成的培训任务'; COMMENT ON COLUMN tms_annual_plan_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_annual_plan_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_annual_plan_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_annual_plan_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_annual_plan_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_aplani_fid ON tms_annual_plan_item (f_foreign_id); CREATE INDEX IF NOT EXISTS idx_tms_aplani_month ON tms_annual_plan_item (train_month); -- 年度培训计划延期申请 CREATE TABLE IF NOT EXISTS tms_annual_delay ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), plan_id varchar(50) NOT NULL, item_id varchar(50), old_month varchar(6), new_month varchar(6), reason text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_annual_delay PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_annual_delay IS '年度培训计划延期申请'; COMMENT ON COLUMN tms_annual_delay.f_id IS '主键'; COMMENT ON COLUMN tms_annual_delay.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_annual_delay.plan_id IS '年度计划ID'; COMMENT ON COLUMN tms_annual_delay.item_id IS '计划明细ID'; COMMENT ON COLUMN tms_annual_delay.old_month IS '原月份'; COMMENT ON COLUMN tms_annual_delay.new_month IS '延期至月份'; COMMENT ON COLUMN tms_annual_delay.reason IS '延期原因'; COMMENT ON COLUMN tms_annual_delay.biz_status IS '审批状态'; COMMENT ON COLUMN tms_annual_delay.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_annual_delay.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_annual_delay.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_annual_delay.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_annual_delay.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_annual_delay.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_annual_delay.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_annual_delay.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_annual_delay.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_annual_delay.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_adelay_plan ON tms_annual_delay (plan_id); -- --------------------------------------------------------------------------- -- 4. 培训任务与记录 -- --------------------------------------------------------------------------- -- 培训任务(核心)。来源:岗位计划/年度计划/文件生效/临时/外出/再维护。 CREATE TABLE IF NOT EXISTS tms_task ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), task_no varchar(50) NOT NULL, category varchar(50), train_type varchar(50), source_type varchar(50), source_plan_no varchar(50), source_id varchar(50), source_item_id varchar(50), subject text, key_points text, material_id varchar(50), material_no varchar(50), place_id varchar(50), place_no varchar(50), place_name varchar(200), start_time timestamp, end_time timestamp, close_time timestamp, paper_id varchar(50), paper_name varchar(300), exam_start timestamp, exam_end timestamp, teacher_id text, train_mode varchar(50), eval_mode varchar(50), trainees text, task_kind varchar(20), prev_task_no varchar(50), publish_status varchar(20) NOT NULL DEFAULT 'draft', publish_time timestamp, retake_limit int NOT NULL DEFAULT 1, pass_score numeric(8,1), quiz_ratio int, sign_rate int, pass_rate int, unfinished_rate int, overdue_remind varchar(10) NOT NULL DEFAULT '0', invite_flag varchar(10) NOT NULL DEFAULT '0', dms_file_id varchar(50), remark varchar(500), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_task PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_task IS '培训任务(核心)。来源:岗位计划/年度计划/文件生效/临时/外出/再维护。'; COMMENT ON COLUMN tms_task.f_id IS '主键'; COMMENT ON COLUMN tms_task.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_task.task_no IS '任务编号 TT+YYYYMM+4,如 TT2026090618'; COMMENT ON COLUMN tms_task.category IS '培训分类:临时培训/岗位培训计划/年度培训计划/文件生效培训/外出培训/再维护'; COMMENT ON COLUMN tms_task.train_type IS '培训类型(列表字段,可与分类并存)'; COMMENT ON COLUMN tms_task.source_type IS '来源类型编码'; COMMENT ON COLUMN tms_task.source_plan_no IS '来源计划编号'; COMMENT ON COLUMN tms_task.source_id IS '来源主表ID'; COMMENT ON COLUMN tms_task.source_item_id IS '来源明细ID,归档回写'; COMMENT ON COLUMN tms_task.subject IS '培训主题'; COMMENT ON COLUMN tms_task.key_points IS '培训要点,签到前强制阅读'; COMMENT ON COLUMN tms_task.material_id IS '培训教材'; COMMENT ON COLUMN tms_task.material_no IS '教材编号冗余'; COMMENT ON COLUMN tms_task.place_id IS '培训地点'; COMMENT ON COLUMN tms_task.place_no IS '地点编号冗余'; COMMENT ON COLUMN tms_task.place_name IS '地点名称冗余'; COMMENT ON COLUMN tms_task.start_time IS '培训开始时间'; COMMENT ON COLUMN tms_task.end_time IS '培训结束时间'; COMMENT ON COLUMN tms_task.close_time IS '任务关闭时间,到达后记录进待归档'; COMMENT ON COLUMN tms_task.paper_id IS '试卷'; COMMENT ON COLUMN tms_task.paper_name IS '试卷名称冗余'; COMMENT ON COLUMN tms_task.exam_start IS '考试开始时间'; COMMENT ON COLUMN tms_task.exam_end IS '考试结束时间'; COMMENT ON COLUMN tms_task.teacher_id IS '培训师,可多选'; COMMENT ON COLUMN tms_task.train_mode IS '培训方式'; COMMENT ON COLUMN tms_task.eval_mode IS '培训效果评估方式/考核方式'; COMMENT ON COLUMN tms_task.trainees IS '培训对象,用户多选;发布时拆个人任务'; COMMENT ON COLUMN tms_task.task_kind IS '任务类型:new新增 / continue继续(再维护)'; COMMENT ON COLUMN tms_task.prev_task_no IS '上一次培训任务编号'; COMMENT ON COLUMN tms_task.publish_status IS 'draft未发布 / published已发布 / cancelled已取消 / done已完成'; COMMENT ON COLUMN tms_task.publish_time IS '发布时间'; COMMENT ON COLUMN tms_task.retake_limit IS '不合格可重考次数'; COMMENT ON COLUMN tms_task.pass_score IS '通过分数,空则用试卷'; COMMENT ON COLUMN tms_task.quiz_ratio IS '提问比例0-100,自动算应提问人数'; COMMENT ON COLUMN tms_task.sign_rate IS '签到率%,取整舍小数'; COMMENT ON COLUMN tms_task.pass_rate IS '合格率%,取整舍小数'; COMMENT ON COLUMN tms_task.unfinished_rate IS '未完成率%'; COMMENT ON COLUMN tms_task.overdue_remind IS '是否逾期提醒部门领导'; COMMENT ON COLUMN tms_task.invite_flag IS '是否发送培训邀请'; COMMENT ON COLUMN tms_task.dms_file_id IS '文件生效自动引入的附件'; COMMENT ON COLUMN tms_task.remark IS '备注'; COMMENT ON COLUMN tms_task.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_task.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_task.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_task.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_task.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_task.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_task.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_task.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_task.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_task.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_task_no ON tms_task (task_no) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_task_status ON tms_task (publish_status, start_time); CREATE INDEX IF NOT EXISTS idx_tms_task_place ON tms_task (place_id, start_time, end_time); CREATE INDEX IF NOT EXISTS idx_tms_task_source ON tms_task (source_type, source_id); CREATE INDEX IF NOT EXISTS idx_tms_task_teacher ON tms_task (teacher_id); -- 培训任务教材/附件清单,发布后同步到培训记录 CREATE TABLE IF NOT EXISTS tms_task_file ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, file_no varchar(50), file_name varchar(300), material_id varchar(50), file_json text, can_download varchar(10) NOT NULL DEFAULT '0', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_task_file PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_task_file IS '培训任务教材/附件清单,发布后同步到培训记录'; COMMENT ON COLUMN tms_task_file.f_id IS '主键'; COMMENT ON COLUMN tms_task_file.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_task_file.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_task_file.file_no IS '编号'; COMMENT ON COLUMN tms_task_file.file_name IS '文件名称'; COMMENT ON COLUMN tms_task_file.material_id IS '来源教材'; COMMENT ON COLUMN tms_task_file.file_json IS '附件'; COMMENT ON COLUMN tms_task_file.can_download IS '引用教材默认不可下载打印'; COMMENT ON COLUMN tms_task_file.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_task_file.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_task_file.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_task_file.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_task_file.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_tfile_fid ON tms_task_file (f_foreign_id); -- 培训任务提问预设问题和答案,签到后弹出 CREATE TABLE IF NOT EXISTS tms_task_quiz ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, sort_no int, question text, answer text, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_task_quiz PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_task_quiz IS '培训任务提问预设问题和答案,签到后弹出'; COMMENT ON COLUMN tms_task_quiz.f_id IS '主键'; COMMENT ON COLUMN tms_task_quiz.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_task_quiz.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_task_quiz.sort_no IS '序号'; COMMENT ON COLUMN tms_task_quiz.question IS '问题'; COMMENT ON COLUMN tms_task_quiz.answer IS '参考答案'; COMMENT ON COLUMN tms_task_quiz.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_task_quiz.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_task_quiz.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_task_quiz.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_task_quiz.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_tquiz_fid ON tms_task_quiz (f_foreign_id); -- 个人培训任务。发布时按人拆行;学员端自学/签到/考试入口。 CREATE TABLE IF NOT EXISTS tms_person_task ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), task_id varchar(50) NOT NULL, task_no varchar(50), user_id varchar(50) NOT NULL, dept_id varchar(50), hours numeric(8,1), biz_status varchar(20) NOT NULL DEFAULT 'todo', sign_time timestamp, sign_mode varchar(20), learn_seconds int, exam_score numeric(8,1), pass_flag varchar(20), guest_flag varchar(10) NOT NULL DEFAULT '0', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_person_task PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_task IS '个人培训任务。发布时按人拆行;学员端自学/签到/考试入口。'; COMMENT ON COLUMN tms_person_task.f_id IS '主键'; COMMENT ON COLUMN tms_person_task.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_task.task_id IS '培训任务ID'; COMMENT ON COLUMN tms_person_task.task_no IS '任务编号冗余'; COMMENT ON COLUMN tms_person_task.user_id IS '培训对象'; COMMENT ON COLUMN tms_person_task.dept_id IS '当时部门快照'; COMMENT ON COLUMN tms_person_task.hours IS '学时'; COMMENT ON COLUMN tms_person_task.biz_status IS 'todo未完成 / signed已签到 / done已完成 / expired已过期 / cancelled已取消'; COMMENT ON COLUMN tms_person_task.sign_time IS '签到时间'; COMMENT ON COLUMN tms_person_task.sign_mode IS '签到方式'; COMMENT ON COLUMN tms_person_task.learn_seconds IS '在线学习时长秒'; COMMENT ON COLUMN tms_person_task.exam_score IS '考试成绩'; COMMENT ON COLUMN tms_person_task.pass_flag IS 'pass合格 / fail不合格 / na无需考核'; COMMENT ON COLUMN tms_person_task.guest_flag IS '是否名单外签到'; COMMENT ON COLUMN tms_person_task.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_task.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_task.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_task.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_task.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_person_task.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_person_task.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_ptask_user ON tms_person_task (user_id, biz_status); CREATE INDEX IF NOT EXISTS idx_tms_ptask_task ON tms_person_task (task_id); CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_ptask_task_user ON tms_person_task (task_id, user_id) WHERE f_delete_mark = 0; -- 培训记录。任务发布后生成;关闭时间到达进待归档。 CREATE TABLE IF NOT EXISTS tms_record ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), record_no varchar(50), task_id varchar(50) NOT NULL, task_no varchar(50), category varchar(50), subject text, teacher_id text, train_type varchar(50), train_mode varchar(50), eval_mode varchar(50), start_time timestamp, end_time timestamp, close_time timestamp, archive_status varchar(20) NOT NULL DEFAULT 'pending', archive_time timestamp, archiver_id varchar(50), sign_rate int, pass_rate int, lecture_file text, paper_sign_file text, print_tpl_id varchar(50), remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_record PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_record IS '培训记录。任务发布后生成;关闭时间到达进待归档。'; COMMENT ON COLUMN tms_record.f_id IS '主键'; COMMENT ON COLUMN tms_record.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_record.record_no IS '记录编号,默认同任务编号'; COMMENT ON COLUMN tms_record.task_id IS '培训任务ID'; COMMENT ON COLUMN tms_record.task_no IS '任务编号'; COMMENT ON COLUMN tms_record.category IS '培训分类'; COMMENT ON COLUMN tms_record.subject IS '培训主题'; COMMENT ON COLUMN tms_record.teacher_id IS '培训师'; COMMENT ON COLUMN tms_record.train_type IS '培训类型'; COMMENT ON COLUMN tms_record.train_mode IS '培训方式'; COMMENT ON COLUMN tms_record.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_record.start_time IS '培训开始时间,套打模板按此索引版本'; COMMENT ON COLUMN tms_record.end_time IS '培训结束时间'; COMMENT ON COLUMN tms_record.close_time IS '关闭时间'; COMMENT ON COLUMN tms_record.archive_status IS 'pending待归档 / ready可归档 / archived已归档 / invalid无效'; COMMENT ON COLUMN tms_record.archive_time IS '归档时间'; COMMENT ON COLUMN tms_record.archiver_id IS '归档人'; COMMENT ON COLUMN tms_record.sign_rate IS '参与/签到率% 取整舍小数'; COMMENT ON COLUMN tms_record.pass_rate IS '合格率%'; COMMENT ON COLUMN tms_record.lecture_file IS '培训讲义附件'; COMMENT ON COLUMN tms_record.paper_sign_file IS '纸质签到表附件'; COMMENT ON COLUMN tms_record.print_tpl_id IS '打印模板版本'; COMMENT ON COLUMN tms_record.remark IS '备注'; COMMENT ON COLUMN tms_record.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_record.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_record.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_record.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_record.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_record.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_record.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_record_task ON tms_record (task_id) WHERE f_delete_mark = 0; CREATE INDEX IF NOT EXISTS idx_tms_record_arch ON tms_record (archive_status, start_time); -- 培训记录签到/结果明细(一人一行) CREATE TABLE IF NOT EXISTS tms_record_sign ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, user_id varchar(50) NOT NULL, user_name varchar(100), dept_id varchar(50), sign_time timestamp, sign_mode varchar(20), guest_flag varchar(10) NOT NULL DEFAULT '0', result_flag varchar(20), exam_score numeric(8,1), practice_score numeric(8,1), quiz_score numeric(8,1), exam_id varchar(50), judge_user_id varchar(50), judge_time timestamp, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_record_sign PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_record_sign IS '培训记录签到/结果明细(一人一行)'; COMMENT ON COLUMN tms_record_sign.f_id IS '主键'; COMMENT ON COLUMN tms_record_sign.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_record_sign.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_record_sign.user_id IS '培训对象'; COMMENT ON COLUMN tms_record_sign.user_name IS '姓名快照'; COMMENT ON COLUMN tms_record_sign.dept_id IS '部门快照'; COMMENT ON COLUMN tms_record_sign.sign_time IS '签到时间'; COMMENT ON COLUMN tms_record_sign.sign_mode IS '签到方式'; COMMENT ON COLUMN tms_record_sign.guest_flag IS '名单外签到'; COMMENT ON COLUMN tms_record_sign.result_flag IS 'pass合格 / fail不合格 / absent未参加 / na无需考核'; COMMENT ON COLUMN tms_record_sign.exam_score IS '考试成绩'; COMMENT ON COLUMN tms_record_sign.practice_score IS '实操成绩'; COMMENT ON COLUMN tms_record_sign.quiz_score IS '提问成绩'; COMMENT ON COLUMN tms_record_sign.exam_id IS '答卷ID'; COMMENT ON COLUMN tms_record_sign.judge_user_id IS '结果判定人(培训师)'; COMMENT ON COLUMN tms_record_sign.judge_time IS '判定时间'; COMMENT ON COLUMN tms_record_sign.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_record_sign.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_record_sign.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_record_sign.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_record_sign.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_rsign_fid ON tms_record_sign (f_foreign_id); CREATE INDEX IF NOT EXISTS idx_tms_rsign_user ON tms_record_sign (user_id); -- 培训记录变更:改结束时间、增加培训人员。培训师发起→部门领导(领导即培训师则跳过)。 CREATE TABLE IF NOT EXISTS tms_record_change ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), record_id varchar(50) NOT NULL, task_id varchar(50), change_type varchar(20), old_end_time timestamp, new_end_time timestamp, add_users text, reason text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_record_change PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_record_change IS '培训记录变更:改结束时间、增加培训人员。培训师发起→部门领导(领导即培训师则跳过)。'; COMMENT ON COLUMN tms_record_change.f_id IS '主键'; COMMENT ON COLUMN tms_record_change.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_record_change.record_id IS '培训记录ID'; COMMENT ON COLUMN tms_record_change.task_id IS '任务ID'; COMMENT ON COLUMN tms_record_change.change_type IS 'end_time改结束时间 / add_user增加人员'; COMMENT ON COLUMN tms_record_change.old_end_time IS '原结束时间'; COMMENT ON COLUMN tms_record_change.new_end_time IS '新结束时间'; COMMENT ON COLUMN tms_record_change.add_users IS '新增人员'; COMMENT ON COLUMN tms_record_change.reason IS '变更原因'; COMMENT ON COLUMN tms_record_change.biz_status IS '审批状态'; COMMENT ON COLUMN tms_record_change.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_record_change.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_record_change.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_record_change.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_record_change.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_record_change.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_record_change.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_record_change.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_record_change.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_record_change.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_rchg_rec ON tms_record_change (record_id); -- 培训资料归档(电子/纸质/实操记录双结合) CREATE TABLE IF NOT EXISTS tms_archive_file ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), record_id varchar(50) NOT NULL, task_id varchar(50), archive_type varchar(20), file_json text, archive_time timestamp, archiver_id varchar(50), remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_archive_file PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_archive_file IS '培训资料归档(电子/纸质/实操记录双结合)'; COMMENT ON COLUMN tms_archive_file.f_id IS '主键'; COMMENT ON COLUMN tms_archive_file.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_archive_file.record_id IS '培训记录ID'; COMMENT ON COLUMN tms_archive_file.task_id IS '任务ID'; COMMENT ON COLUMN tms_archive_file.archive_type IS 'electronic电子 / paper纸质 / practice实操档案'; COMMENT ON COLUMN tms_archive_file.file_json IS '归档资料'; COMMENT ON COLUMN tms_archive_file.archive_time IS '归档时间'; COMMENT ON COLUMN tms_archive_file.archiver_id IS '归档人'; COMMENT ON COLUMN tms_archive_file.remark IS '备注'; COMMENT ON COLUMN tms_archive_file.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_archive_file.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_archive_file.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_archive_file.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_archive_file.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_archive_file.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_archive_file.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_afile_rec ON tms_archive_file (record_id); -- --------------------------------------------------------------------------- -- 5. 考试与考核 -- --------------------------------------------------------------------------- -- 在线考试答卷。中途退出可续考;提交后客观题自动评分,有主观题进阅卷。 CREATE TABLE IF NOT EXISTS tms_exam ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), task_id varchar(50) NOT NULL, person_task_id varchar(50), record_id varchar(50), paper_id varchar(50), paper_name varchar(300), user_id varchar(50) NOT NULL, attempt_no int NOT NULL DEFAULT 1, start_time timestamp, submit_time timestamp, duration_min int, objective_score numeric(8,1), subjective_score numeric(8,1), total_score numeric(8,1), pass_score numeric(8,1), pass_flag varchar(20), grade_status varchar(20) NOT NULL DEFAULT 'auto', grader_id varchar(50), grade_time timestamp, exam_status varchar(20) NOT NULL DEFAULT 'doing', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_exam PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_exam IS '在线考试答卷。中途退出可续考;提交后客观题自动评分,有主观题进阅卷。'; COMMENT ON COLUMN tms_exam.f_id IS '主键'; COMMENT ON COLUMN tms_exam.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_exam.task_id IS '培训任务'; COMMENT ON COLUMN tms_exam.person_task_id IS '个人任务'; COMMENT ON COLUMN tms_exam.record_id IS '培训记录'; COMMENT ON COLUMN tms_exam.paper_id IS '当时试卷ID'; COMMENT ON COLUMN tms_exam.paper_name IS '试卷名称快照'; COMMENT ON COLUMN tms_exam.user_id IS '考生'; COMMENT ON COLUMN tms_exam.attempt_no IS '第几次考试'; COMMENT ON COLUMN tms_exam.start_time IS '开始作答'; COMMENT ON COLUMN tms_exam.submit_time IS '交卷时间'; COMMENT ON COLUMN tms_exam.duration_min IS '当时时长快照'; COMMENT ON COLUMN tms_exam.objective_score IS '客观题得分'; COMMENT ON COLUMN tms_exam.subjective_score IS '主观题得分'; COMMENT ON COLUMN tms_exam.total_score IS '总分'; COMMENT ON COLUMN tms_exam.pass_score IS '当时合格分快照'; COMMENT ON COLUMN tms_exam.pass_flag IS 'pass/fail'; COMMENT ON COLUMN tms_exam.grade_status IS 'auto无需阅卷 / pending待批改 / graded已批改'; COMMENT ON COLUMN tms_exam.grader_id IS '阅卷老师'; COMMENT ON COLUMN tms_exam.grade_time IS '阅卷时间'; COMMENT ON COLUMN tms_exam.exam_status IS 'doing考试中 / submitted已交卷 / cancelled已取消'; COMMENT ON COLUMN tms_exam.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_exam.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_exam.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_exam.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_exam.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_exam.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_exam.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_exam_task_user ON tms_exam (task_id, user_id, attempt_no); CREATE INDEX IF NOT EXISTS idx_tms_exam_grade ON tms_exam (grade_status); CREATE INDEX IF NOT EXISTS idx_tms_exam_user ON tms_exam (user_id); -- 答卷试题快照:题目/选项/答案/分数保留考试当时状态,后续改题改卷不影响。 CREATE TABLE IF NOT EXISTS tms_exam_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, question_id varchar(50), question_type varchar(20), stem text, options_json text, correct_answer text, user_answer text, score numeric(8,1), got_score numeric(8,1), is_subjective varchar(10) NOT NULL DEFAULT '0', analysis text, sort_no int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_exam_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_exam_item IS '答卷试题快照:题目/选项/答案/分数保留考试当时状态,后续改题改卷不影响。'; COMMENT ON COLUMN tms_exam_item.f_id IS '主键'; COMMENT ON COLUMN tms_exam_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_exam_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_exam_item.question_id IS '原试题ID'; COMMENT ON COLUMN tms_exam_item.question_type IS '题型快照'; COMMENT ON COLUMN tms_exam_item.stem IS '题干快照'; COMMENT ON COLUMN tms_exam_item.options_json IS '选项快照 JSON'; COMMENT ON COLUMN tms_exam_item.correct_answer IS '当时正确答案'; COMMENT ON COLUMN tms_exam_item.user_answer IS '考生作答'; COMMENT ON COLUMN tms_exam_item.score IS '本题满分'; COMMENT ON COLUMN tms_exam_item.got_score IS '得分'; COMMENT ON COLUMN tms_exam_item.is_subjective IS '是否主观题'; COMMENT ON COLUMN tms_exam_item.analysis IS '解析快照'; COMMENT ON COLUMN tms_exam_item.sort_no IS '试卷内顺序'; COMMENT ON COLUMN tms_exam_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_exam_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_exam_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_exam_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_exam_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_eitem_fid ON tms_exam_item (f_foreign_id); -- 实操考核主表,保存后回写培训记录 CREATE TABLE IF NOT EXISTS tms_practice ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), task_id varchar(50) NOT NULL, record_id varchar(50), teacher_id varchar(50), practice_time timestamp, remark varchar(500), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_practice PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_practice IS '实操考核主表,保存后回写培训记录'; COMMENT ON COLUMN tms_practice.f_id IS '主键'; COMMENT ON COLUMN tms_practice.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_practice.task_id IS '培训任务'; COMMENT ON COLUMN tms_practice.record_id IS '培训记录'; COMMENT ON COLUMN tms_practice.teacher_id IS '考核人'; COMMENT ON COLUMN tms_practice.practice_time IS '考核时间'; COMMENT ON COLUMN tms_practice.remark IS '备注'; COMMENT ON COLUMN tms_practice.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_practice.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_practice.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_practice.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_practice.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_practice.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_practice.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_prac_task ON tms_practice (task_id); -- 实操考核明细 CREATE TABLE IF NOT EXISTS tms_practice_item ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, user_id varchar(50) NOT NULL, content text, score numeric(8,1), result_flag varchar(20), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_practice_item PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_practice_item IS '实操考核明细'; COMMENT ON COLUMN tms_practice_item.f_id IS '主键'; COMMENT ON COLUMN tms_practice_item.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_practice_item.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_practice_item.user_id IS '培训对象'; COMMENT ON COLUMN tms_practice_item.content IS '考核内容'; COMMENT ON COLUMN tms_practice_item.score IS '分数'; COMMENT ON COLUMN tms_practice_item.result_flag IS '合格/不合格'; COMMENT ON COLUMN tms_practice_item.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_practice_item.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_practice_item.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_practice_item.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_practice_item.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_praci_fid ON tms_practice_item (f_foreign_id); -- 现场提问考核打分,保存后回写培训记录 CREATE TABLE IF NOT EXISTS tms_quiz_score ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), task_id varchar(50) NOT NULL, record_id varchar(50), user_id varchar(50) NOT NULL, question text, answer text, score numeric(8,1), teacher_id varchar(50), quiz_time timestamp, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_quiz_score PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_quiz_score IS '现场提问考核打分,保存后回写培训记录'; COMMENT ON COLUMN tms_quiz_score.f_id IS '主键'; COMMENT ON COLUMN tms_quiz_score.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_quiz_score.task_id IS '培训任务'; COMMENT ON COLUMN tms_quiz_score.record_id IS '培训记录'; COMMENT ON COLUMN tms_quiz_score.user_id IS '培训对象'; COMMENT ON COLUMN tms_quiz_score.question IS '提问内容'; COMMENT ON COLUMN tms_quiz_score.answer IS '回答'; COMMENT ON COLUMN tms_quiz_score.score IS '分数'; COMMENT ON COLUMN tms_quiz_score.teacher_id IS '提问人'; COMMENT ON COLUMN tms_quiz_score.quiz_time IS '时间'; COMMENT ON COLUMN tms_quiz_score.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_quiz_score.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_quiz_score.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_quiz_score.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_quiz_score.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_quiz_score.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_quiz_score.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_qscore_task ON tms_quiz_score (task_id); CREATE INDEX IF NOT EXISTS idx_tms_qscore_user ON tms_quiz_score (user_id); -- --------------------------------------------------------------------------- -- 6. 个人档案 -- --------------------------------------------------------------------------- -- 个人培训档案。入职自动建档;一人一档。 CREATE TABLE IF NOT EXISTS tms_person_file ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), archive_no varchar(50) NOT NULL, archive_date date, user_id varchar(50) NOT NULL, user_name varchar(100), dept_id varchar(50), hire_date date, leave_date date, main_post_id varchar(50), part_post_id varchar(50), biz_status varchar(20) NOT NULL DEFAULT 'valid', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_person_file PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_file IS '个人培训档案。入职自动建档;一人一档。'; COMMENT ON COLUMN tms_person_file.f_id IS '主键'; COMMENT ON COLUMN tms_person_file.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_file.archive_no IS '档案编号 AR+YYYY+4'; COMMENT ON COLUMN tms_person_file.archive_date IS '建档时间'; COMMENT ON COLUMN tms_person_file.user_id IS '员工'; COMMENT ON COLUMN tms_person_file.user_name IS '姓名冗余'; COMMENT ON COLUMN tms_person_file.dept_id IS '所属部门'; COMMENT ON COLUMN tms_person_file.hire_date IS '入职时间'; COMMENT ON COLUMN tms_person_file.leave_date IS '离职时间'; COMMENT ON COLUMN tms_person_file.main_post_id IS '主要岗位'; COMMENT ON COLUMN tms_person_file.part_post_id IS '兼职岗位'; COMMENT ON COLUMN tms_person_file.biz_status IS 'valid在职 / left离职'; COMMENT ON COLUMN tms_person_file.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_file.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_file.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_file.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_file.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_person_file.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_person_file.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_pfile_user ON tms_person_file (user_id) WHERE f_delete_mark = 0; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_pfile_no ON tms_person_file (archive_no) WHERE f_delete_mark = 0; -- 个人培训档案-工作履历 CREATE TABLE IF NOT EXISTS tms_person_work ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, company_name varchar(200), post_name varchar(100), hire_date date, leave_date date, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, CONSTRAINT pk_tms_person_work PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_work IS '个人培训档案-工作履历'; COMMENT ON COLUMN tms_person_work.f_id IS '主键'; COMMENT ON COLUMN tms_person_work.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_work.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_person_work.company_name IS '公司名称'; COMMENT ON COLUMN tms_person_work.post_name IS '任职岗位'; COMMENT ON COLUMN tms_person_work.hire_date IS '入职时间'; COMMENT ON COLUMN tms_person_work.leave_date IS '离职时间'; COMMENT ON COLUMN tms_person_work.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_work.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_work.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_work.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_work.f_delete_mark IS '删除标记 0正常 1删除'; CREATE INDEX IF NOT EXISTS idx_tms_pwork_fid ON tms_person_work (f_foreign_id); -- 资质文件/获得证书。资质文件管理与档案子表共用此表。 CREATE TABLE IF NOT EXISTS tms_person_cert ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), f_foreign_id varchar(50) NOT NULL, archive_id varchar(50), user_id varchar(50), cert_no varchar(100), cert_name varchar(200), gain_date date, expire_date date, cert_file text, cert_status varchar(20), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_person_cert PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_cert IS '资质文件/获得证书。资质文件管理与档案子表共用此表。'; COMMENT ON COLUMN tms_person_cert.f_id IS '主键'; COMMENT ON COLUMN tms_person_cert.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_cert.f_foreign_id IS '主表f_id'; COMMENT ON COLUMN tms_person_cert.archive_id IS '个人档案ID,无外键字段时由主从写入f_foreign_id'; COMMENT ON COLUMN tms_person_cert.user_id IS '员工,列表模块用'; COMMENT ON COLUMN tms_person_cert.cert_no IS '证书编号'; COMMENT ON COLUMN tms_person_cert.cert_name IS '证书名称'; COMMENT ON COLUMN tms_person_cert.gain_date IS '获得时间'; COMMENT ON COLUMN tms_person_cert.expire_date IS '有效期至'; COMMENT ON COLUMN tms_person_cert.cert_file IS '证书附件'; COMMENT ON COLUMN tms_person_cert.cert_status IS 'valid有效 / near近效期 / invalid无效'; COMMENT ON COLUMN tms_person_cert.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_cert.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_cert.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_cert.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_cert.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_person_cert.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_person_cert.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_pcert_fid ON tms_person_cert (f_foreign_id); CREATE INDEX IF NOT EXISTS idx_tms_pcert_user ON tms_person_cert (user_id); -- 个人培训目录(归档快照)。记录归档后写入,满足审计。 CREATE TABLE IF NOT EXISTS tms_person_train ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), archive_id varchar(50) NOT NULL, user_id varchar(50) NOT NULL, record_id varchar(50), record_no varchar(50), category varchar(50), subject text, train_mode varchar(50), teacher_id text, eval_mode varchar(50), pass_flag varchar(20), start_time timestamp, end_time timestamp, hours numeric(8,1), f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_person_train PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_person_train IS '个人培训目录(归档快照)。记录归档后写入,满足审计。'; COMMENT ON COLUMN tms_person_train.f_id IS '主键'; COMMENT ON COLUMN tms_person_train.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_person_train.archive_id IS '个人档案ID'; COMMENT ON COLUMN tms_person_train.user_id IS '员工'; COMMENT ON COLUMN tms_person_train.record_id IS '培训记录ID'; COMMENT ON COLUMN tms_person_train.record_no IS '培训记录编号'; COMMENT ON COLUMN tms_person_train.category IS '培训类型/分类'; COMMENT ON COLUMN tms_person_train.subject IS '培训内容'; COMMENT ON COLUMN tms_person_train.train_mode IS '培训方式'; COMMENT ON COLUMN tms_person_train.teacher_id IS '培训师'; COMMENT ON COLUMN tms_person_train.eval_mode IS '考核方式'; COMMENT ON COLUMN tms_person_train.pass_flag IS '是否合格'; COMMENT ON COLUMN tms_person_train.start_time IS '培训开始时间'; COMMENT ON COLUMN tms_person_train.end_time IS '培训结束时间'; COMMENT ON COLUMN tms_person_train.hours IS '学时'; COMMENT ON COLUMN tms_person_train.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_person_train.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_person_train.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_person_train.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_person_train.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_person_train.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_person_train.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_ptrain_user ON tms_person_train (user_id); CREATE INDEX IF NOT EXISTS idx_tms_ptrain_arch ON tms_person_train (archive_id); CREATE INDEX IF NOT EXISTS idx_tms_ptrain_rec ON tms_person_train (record_id); -- --------------------------------------------------------------------------- -- 7. 其他流程与配置 -- --------------------------------------------------------------------------- -- 外出培训 CREATE TABLE IF NOT EXISTS tms_out_train ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), apply_no varchar(50), applicant_id varchar(50), apply_dept_id varchar(50), org_name varchar(200), subject varchar(500), start_time timestamp, end_time timestamp, hours numeric(8,1), file_json text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_out_train PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_out_train IS '外出培训'; COMMENT ON COLUMN tms_out_train.f_id IS '主键'; COMMENT ON COLUMN tms_out_train.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_out_train.apply_no IS '申请单号'; COMMENT ON COLUMN tms_out_train.applicant_id IS '申请人'; COMMENT ON COLUMN tms_out_train.apply_dept_id IS '申请部门'; COMMENT ON COLUMN tms_out_train.org_name IS '外部机构'; COMMENT ON COLUMN tms_out_train.subject IS '培训主题'; COMMENT ON COLUMN tms_out_train.start_time IS '开始'; COMMENT ON COLUMN tms_out_train.end_time IS '结束'; COMMENT ON COLUMN tms_out_train.hours IS '学时'; COMMENT ON COLUMN tms_out_train.file_json IS '资料附件'; COMMENT ON COLUMN tms_out_train.biz_status IS '审批状态'; COMMENT ON COLUMN tms_out_train.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_out_train.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_out_train.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_out_train.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_out_train.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_out_train.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_out_train.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_out_train.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_out_train.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_out_train.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_out_no ON tms_out_train (apply_no) WHERE f_delete_mark = 0; -- 转岗人员考核鉴定 CREATE TABLE IF NOT EXISTS tms_transfer_eval ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), user_id varchar(50) NOT NULL, from_post_id varchar(50), to_post_id varchar(50), eval_result varchar(50), remark text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_transfer_eval PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_transfer_eval IS '转岗人员考核鉴定'; COMMENT ON COLUMN tms_transfer_eval.f_id IS '主键'; COMMENT ON COLUMN tms_transfer_eval.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_transfer_eval.user_id IS '转岗人员'; COMMENT ON COLUMN tms_transfer_eval.from_post_id IS '原岗位'; COMMENT ON COLUMN tms_transfer_eval.to_post_id IS '新岗位'; COMMENT ON COLUMN tms_transfer_eval.eval_result IS '鉴定结论'; COMMENT ON COLUMN tms_transfer_eval.remark IS '说明'; COMMENT ON COLUMN tms_transfer_eval.biz_status IS '审批状态'; COMMENT ON COLUMN tms_transfer_eval.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_transfer_eval.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_transfer_eval.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_transfer_eval.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_transfer_eval.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_transfer_eval.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_transfer_eval.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_transfer_eval.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_transfer_eval.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_transfer_eval.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_teval_user ON tms_transfer_eval (user_id); -- 新员工培训效果考评 CREATE TABLE IF NOT EXISTS tms_newcomer_eval ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), user_id varchar(50) NOT NULL, eval_result varchar(50), remark text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_newcomer_eval PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_newcomer_eval IS '新员工培训效果考评'; COMMENT ON COLUMN tms_newcomer_eval.f_id IS '主键'; COMMENT ON COLUMN tms_newcomer_eval.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_newcomer_eval.user_id IS '新员工'; COMMENT ON COLUMN tms_newcomer_eval.eval_result IS '考评结论'; COMMENT ON COLUMN tms_newcomer_eval.remark IS '说明'; COMMENT ON COLUMN tms_newcomer_eval.biz_status IS '审批状态'; COMMENT ON COLUMN tms_newcomer_eval.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_newcomer_eval.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_newcomer_eval.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_newcomer_eval.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_newcomer_eval.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_newcomer_eval.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_newcomer_eval.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_newcomer_eval.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_newcomer_eval.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_newcomer_eval.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_neval_user ON tms_newcomer_eval (user_id); -- 复岗员工培训效果考评 CREATE TABLE IF NOT EXISTS tms_return_eval ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), user_id varchar(50) NOT NULL, eval_result varchar(50), remark text, biz_status varchar(20), f_flow_id varchar(50), f_flow_task_id varchar(50), f_flow_state int, f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_return_eval PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_return_eval IS '复岗员工培训效果考评'; COMMENT ON COLUMN tms_return_eval.f_id IS '主键'; COMMENT ON COLUMN tms_return_eval.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_return_eval.user_id IS '复岗员工'; COMMENT ON COLUMN tms_return_eval.eval_result IS '考评结论'; COMMENT ON COLUMN tms_return_eval.remark IS '说明'; COMMENT ON COLUMN tms_return_eval.biz_status IS '审批状态'; COMMENT ON COLUMN tms_return_eval.f_flow_id IS '流程模板ID'; COMMENT ON COLUMN tms_return_eval.f_flow_task_id IS '流程任务ID'; COMMENT ON COLUMN tms_return_eval.f_flow_state IS '流程状态'; COMMENT ON COLUMN tms_return_eval.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_return_eval.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_return_eval.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_return_eval.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_return_eval.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_return_eval.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_return_eval.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_reval_user ON tms_return_eval (user_id); -- 培训记录套打模板版本。按培训开始时间匹配生效版本。 CREATE TABLE IF NOT EXISTS tms_print_template ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), tpl_code varchar(50) NOT NULL, version_no int NOT NULL, effective_from date NOT NULL, effective_to date, file_json text, enabled varchar(10) NOT NULL DEFAULT '1', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_print_template PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_print_template IS '培训记录套打模板版本。按培训开始时间匹配生效版本。'; COMMENT ON COLUMN tms_print_template.f_id IS '主键'; COMMENT ON COLUMN tms_print_template.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_print_template.tpl_code IS '模板编码,如 TRAIN_RECORD'; COMMENT ON COLUMN tms_print_template.version_no IS '版本号'; COMMENT ON COLUMN tms_print_template.effective_from IS '生效起始(按培训开始时间索引)'; COMMENT ON COLUMN tms_print_template.effective_to IS '生效截止,空=当前'; COMMENT ON COLUMN tms_print_template.file_json IS '模板文件'; COMMENT ON COLUMN tms_print_template.enabled IS '启用'; COMMENT ON COLUMN tms_print_template.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_print_template.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_print_template.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_print_template.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_print_template.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_print_template.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_print_template.f_delete_time IS '删除时间'; CREATE INDEX IF NOT EXISTS idx_tms_ptpl_code ON tms_print_template (tpl_code, effective_from); -- 提醒规则:计划到期前一个月、授权到期、个人岗位培训时限等 CREATE TABLE IF NOT EXISTS tms_remind_rule ( f_id varchar(50) NOT NULL, f_tenant_id varchar(50), rule_code varchar(50) NOT NULL, rule_name varchar(100), biz_type varchar(50), days_before int NOT NULL DEFAULT 30, notify_roles varchar(200), enabled varchar(10) NOT NULL DEFAULT '1', f_creator_user_id varchar(50), f_creator_time timestamp, f_last_modify_user_id varchar(50), f_last_modify_time timestamp, f_delete_mark int NOT NULL DEFAULT 0, f_delete_user_id varchar(50), f_delete_time timestamp, CONSTRAINT pk_tms_remind_rule PRIMARY KEY (f_id) ); COMMENT ON TABLE tms_remind_rule IS '提醒规则:计划到期前一个月、授权到期、个人岗位培训时限等'; COMMENT ON COLUMN tms_remind_rule.f_id IS '主键'; COMMENT ON COLUMN tms_remind_rule.f_tenant_id IS '租户'; COMMENT ON COLUMN tms_remind_rule.rule_code IS '规则编码'; COMMENT ON COLUMN tms_remind_rule.rule_name IS '名称'; COMMENT ON COLUMN tms_remind_rule.biz_type IS 'annual_plan/admin_auth/person_post/task_overdue'; COMMENT ON COLUMN tms_remind_rule.days_before IS '提前天数'; COMMENT ON COLUMN tms_remind_rule.notify_roles IS '通知角色:部门培训管理员,培训师,部门领导'; COMMENT ON COLUMN tms_remind_rule.enabled IS '启用'; COMMENT ON COLUMN tms_remind_rule.f_creator_user_id IS '创建人'; COMMENT ON COLUMN tms_remind_rule.f_creator_time IS '创建时间'; COMMENT ON COLUMN tms_remind_rule.f_last_modify_user_id IS '修改人'; COMMENT ON COLUMN tms_remind_rule.f_last_modify_time IS '修改时间'; COMMENT ON COLUMN tms_remind_rule.f_delete_mark IS '删除标记 0正常 1删除'; COMMENT ON COLUMN tms_remind_rule.f_delete_user_id IS '删除人'; COMMENT ON COLUMN tms_remind_rule.f_delete_time IS '删除时间'; CREATE UNIQUE INDEX IF NOT EXISTS uk_tms_remind_code ON tms_remind_rule (rule_code) WHERE f_delete_mark = 0; -- ============================================================================= -- 预置数据(培训方式 / 签到方式 / 评估方式 / 提醒规则) -- ============================================================================= INSERT INTO tms_train_mode (f_id, mode_code, mode_name, sign_rule, allow_guest_sign, same_day_required, place_required, sort_no, enabled, f_delete_mark) VALUES ('tms_mode_onsite', 'onsite', '集中授课', 'scan', '1', '1', '1', 1, '1', 0), ('tms_mode_practice', 'practice', '操作授课', 'scan', '0', '1', '1', 2, '1', 0), ('tms_mode_online', 'online', '在线学习', 'both', '0', '0', '0', 3, '1', 0) ON CONFLICT (f_id) DO NOTHING; INSERT INTO tms_sign_mode (f_id, mode_code, mode_name, tip_seconds, match_roster, enabled, f_delete_mark) VALUES ('tms_sign_app', 'app_scan', 'APP扫码', 30, '1', '1', 0), ('tms_sign_wx', 'wx_scan', '微信扫码', 30, '1', '1', 0), ('tms_sign_online', 'online', '在线签到', 30, '1', '1', 0) ON CONFLICT (f_id) DO NOTHING; INSERT INTO tms_eval_mode (f_id, mode_code, mode_name, need_paper, need_quiz, need_practice, enabled, f_delete_mark) VALUES ('tms_eval_quiz', 'quiz', '提问', '0', '1', '0', '1', 0), ('tms_eval_practice', 'practice', '现场操作', '0', '0', '1', '1', 0), ('tms_eval_exam', 'exam', '在线考试', '1', '0', '0', '1', 0), ('tms_eval_none', 'none', '无需考核', '0', '0', '0', '1', 0) ON CONFLICT (f_id) DO NOTHING; INSERT INTO tms_remind_rule (f_id, rule_code, rule_name, biz_type, days_before, notify_roles, enabled, f_delete_mark) VALUES ('tms_rm_annual', 'annual_due', '年度计划到期前一个月', 'annual_plan', 30, '部门培训管理员,培训师', '1', 0), ('tms_rm_auth', 'auth_due', '管理员授权到期前一个月', 'admin_auth', 30, '培训管理员,培训师', '1', 0), ('tms_rm_overdue','task_overdue','培训逾期提醒部门领导', 'task_overdue', 0, '部门领导', '1', 0) ON CONFLICT (f_id) DO NOTHING; COMMIT;