274 lines
9.6 KiB
JavaScript
274 lines
9.6 KiB
JavaScript
// 执行SQL语句的工具函数
|
|
const runAsync = (db, sql, params = []) => {
|
|
return new Promise((resolve, reject) => {
|
|
db.run(sql, params, function (err) {
|
|
if (err) reject(err);
|
|
else resolve(this);
|
|
});
|
|
});
|
|
};
|
|
|
|
// 系统数据库表结构
|
|
const systemSchema = {
|
|
config: `
|
|
CREATE TABLE IF NOT EXISTS config (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
key TEXT NOT NULL UNIQUE,
|
|
value TEXT NOT NULL,
|
|
protected INTEGER DEFAULT 0
|
|
);
|
|
`,
|
|
dictTypes: `
|
|
CREATE TABLE IF NOT EXISTS dict_types (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
type_code TEXT NOT NULL UNIQUE,
|
|
type_name TEXT NOT NULL,
|
|
description TEXT,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
dictItems: `
|
|
CREATE TABLE IF NOT EXISTS dict_items (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
type_code TEXT NOT NULL,
|
|
item_code TEXT NOT NULL,
|
|
item_name TEXT NOT NULL,
|
|
item_description TEXT DEFAULT '',
|
|
parent_code TEXT,
|
|
is_active BOOLEAN DEFAULT 1,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(type_code, item_code)
|
|
);
|
|
`,
|
|
questions: `
|
|
CREATE TABLE IF NOT EXISTS questions (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_type TEXT NOT NULL,
|
|
question_name TEXT NOT NULL DEFAULT '',
|
|
question_description TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionDatasets: `
|
|
CREATE TABLE IF NOT EXISTS question_datasets (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
dataset_name TEXT NOT NULL DEFAULT '',
|
|
dataset_data TEXT NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionImages: `
|
|
CREATE TABLE IF NOT EXISTS question_images (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
image_name TEXT NOT NULL DEFAULT '',
|
|
image_base64 TEXT NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionFillTable: `
|
|
CREATE TABLE IF NOT EXISTS question_fill_table (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
table_name TEXT NOT NULL DEFAULT '',
|
|
table_data TEXT NOT NULL,
|
|
table_description TEXT NOT NULL DEFAULT '',
|
|
score REAL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionFillTableBlanks: `
|
|
CREATE TABLE IF NOT EXISTS question_fill_table_blanks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
table_id INTEGER NOT NULL,
|
|
cell_position TEXT NOT NULL,
|
|
cell_type TEXT NOT NULL DEFAULT 'number',
|
|
correct_answer TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionChoices: `
|
|
CREATE TABLE IF NOT EXISTS question_choices (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
choice_description TEXT NOT NULL DEFAULT '',
|
|
choice_type TEXT NOT NULL DEFAULT 'single',
|
|
choice_options TEXT NOT NULL,
|
|
correct_answers TEXT NOT NULL,
|
|
score REAL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionFillBlanks: `
|
|
CREATE TABLE IF NOT EXISTS question_fill_blanks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
blank_description TEXT NOT NULL DEFAULT '',
|
|
blank_count INTEGER NOT NULL DEFAULT 0,
|
|
correct_answers TEXT NOT NULL DEFAULT '',
|
|
score REAL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionJudge: `
|
|
CREATE TABLE IF NOT EXISTS question_judge (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
judge_ask TEXT NOT NULL DEFAULT '',
|
|
judge_answer INTEGER NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
questionShort: `
|
|
CREATE TABLE IF NOT EXISTS question_short (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
short_ask TEXT NOT NULL DEFAULT '',
|
|
short_answer_ref TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
exam: `
|
|
CREATE TABLE IF NOT EXISTS exam (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
exam_name TEXT NOT NULL DEFAULT '',
|
|
exam_description TEXT NOT NULL DEFAULT '',
|
|
exam_examinee_type TEXT NOT NULL DEFAULT '',
|
|
exam_notice TEXT NOT NULL DEFAULT '',
|
|
exam_minutes INTEGER NOT NULL DEFAULT 0,
|
|
exam_minutes_min INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
examinee: `
|
|
CREATE TABLE IF NOT EXISTS examinee (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
examinee_name TEXT NOT NULL DEFAULT '',
|
|
examinee_gender TEXT NOT NULL DEFAULT '',
|
|
examinee_unit TEXT NOT NULL DEFAULT '',
|
|
written_exam_room TEXT NOT NULL DEFAULT '',
|
|
written_exam_seat TEXT NOT NULL DEFAULT '',
|
|
computer_exam_room TEXT NOT NULL DEFAULT '',
|
|
computer_exam_seat TEXT NOT NULL DEFAULT '',
|
|
examinee_id_card TEXT NOT NULL DEFAULT '',
|
|
examinee_admission_ticket TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`
|
|
};
|
|
|
|
// 用户数据库表结构
|
|
userSchema = {
|
|
examinee: `
|
|
CREATE TABLE IF NOT EXISTS examinee (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
examinee_name TEXT NOT NULL DEFAULT '',
|
|
examinee_gender TEXT,
|
|
examinee_unit TEXT,
|
|
written_exam_room TEXT,
|
|
written_exam_seat TEXT,
|
|
computer_exam_room TEXT,
|
|
computer_exam_seat TEXT,
|
|
examinee_id_card TEXT NOT NULL DEFAULT '',
|
|
examinee_admission_ticket TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
examinee_papers: `
|
|
CREATE TABLE IF NOT EXISTS examinee_papers (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
examinee_id INTEGER NOT NULL,
|
|
paper_minutes INTEGER NOT NULL DEFAULT 0,
|
|
paper_minutes_min INTEGER NOT NULL DEFAULT 0,
|
|
paper_start_time TEXT,
|
|
paper_last_time TEXT,
|
|
paper_submit_time TEXT,
|
|
paper_end_time TEXT,
|
|
paper_duration_seconds INTEGER DEFAULT 0,
|
|
paper_status INTEGER NOT NULL DEFAULT 0,
|
|
paper_score_real REAL DEFAULT 0,
|
|
paper_score REAL DEFAULT 0,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
paper_questions: `
|
|
CREATE TABLE IF NOT EXISTS paper_questions (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
examinee_id INTEGER NOT NULL,
|
|
paper_id INTEGER NOT NULL,
|
|
question_type TEXT NOT NULL,
|
|
question_name TEXT NOT NULL DEFAULT '',
|
|
question_description TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
question_datasets: `
|
|
CREATE TABLE IF NOT EXISTS question_datasets (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
dataset_name TEXT NOT NULL DEFAULT '',
|
|
dataset_data TEXT NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
question_images: `
|
|
CREATE TABLE IF NOT EXISTS question_images (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
image_name TEXT NOT NULL DEFAULT '',
|
|
image_base64 TEXT NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
question_choices: `
|
|
CREATE TABLE IF NOT EXISTS question_choices (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
choice_description TEXT NOT NULL DEFAULT '',
|
|
choice_type TEXT NOT NULL DEFAULT 'single',
|
|
choice_options TEXT NOT NULL,
|
|
correct_answers TEXT NOT NULL,
|
|
examinee_answers TEXT NOT NULL DEFAULT '',
|
|
score REAL,
|
|
score_real REAL DEFAULT 0,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`,
|
|
question_fill_blanks: `
|
|
CREATE TABLE IF NOT EXISTS question_fill_blanks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
question_id INTEGER NOT NULL,
|
|
blank_description TEXT NOT NULL DEFAULT '',
|
|
blank_count INTEGER NOT NULL DEFAULT 0,
|
|
correct_answers TEXT NOT NULL DEFAULT '',
|
|
examinee_answers TEXT NOT NULL DEFAULT '',
|
|
score REAL,
|
|
score_real REAL DEFAULT 0,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`
|
|
};
|
|
|
|
|
|
// 导出函数和常量供其他模块使用
|
|
module.exports = {
|
|
runAsync,
|
|
systemSchema,
|
|
userSchema
|
|
}; |