- 新增招聘者账号数据库表结构及SQL建表脚本 - 实现招聘者实体类及账号状态枚举 - 添加SQLAlchemy数据库模型及管理器支持招聘者数据存储 - 实现招聘者数据访问层(Mapper)进行增删改查操作 - 开发招聘者服务层,支持账号添加、启用、停用、删除、列表及爬虫注册 - 新增命令行工具add_recruiter.py,便于管理招聘者账号 - 修改主应用初始化流程,集成招聘者服务并通过数据库加载活跃账号爬虫 - 主程序示例中新增招聘者账号展示与调用爬取任务示范 - 更新项目依赖,增加SQLAlchemy、PyMySQL及Cryptography库支持 - 修改.gitignore,新增.qoder目录例外规则
187 lines
8.8 KiB
SQL
187 lines
8.8 KiB
SQL
-- 简历智能体系统 - 数据库初始化脚本
|
|
-- 支持: MySQL 8.0+ / SQLite 3 / PostgreSQL
|
|
|
|
-- ============================================
|
|
-- 1. 招聘者账号表 (存储各平台账号信息)
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS recruiters (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(128) NOT NULL, -- 招聘者名称/标识
|
|
source VARCHAR(32) NOT NULL, -- 平台: BOSS, LIEPIN, etc.
|
|
wt_token VARCHAR(512) NOT NULL, -- WT Token (加密存储)
|
|
status VARCHAR(32) DEFAULT 'ACTIVE', -- ACTIVE, INACTIVE, EXPIRED
|
|
last_used_at TIMESTAMP, -- 最后使用时间
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_source_token (source, wt_token(255)),
|
|
INDEX idx_status (status)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 2. 候选人主表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS candidates (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
source VARCHAR(32) NOT NULL, -- BOSS, LIEPIN, ZHILIAN, OTHER
|
|
source_id VARCHAR(128) NOT NULL, -- 来源平台ID
|
|
name VARCHAR(64) NOT NULL,
|
|
phone VARCHAR(32),
|
|
email VARCHAR(128),
|
|
wechat VARCHAR(64),
|
|
gender TINYINT DEFAULT 0, -- 0:未知, 1:男, 2:女
|
|
age INT,
|
|
location VARCHAR(128),
|
|
current_company VARCHAR(256),
|
|
current_position VARCHAR(128),
|
|
work_years DECIMAL(4,1),
|
|
education VARCHAR(64),
|
|
school VARCHAR(256),
|
|
salary_min INT, -- 期望薪资下限(K)
|
|
salary_max INT, -- 期望薪资上限(K)
|
|
status VARCHAR(32) DEFAULT 'NEW', -- NEW, ANALYZED, PUSHED, CONTACTED, INTERVIEWED, HIRED, REJECTED
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_source_source_id (source, source_id),
|
|
INDEX idx_phone (phone),
|
|
INDEX idx_email (email),
|
|
INDEX idx_name (name),
|
|
INDEX idx_status (status),
|
|
INDEX idx_created_at (created_at)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 3. 简历内容表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS resumes (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
candidate_id VARCHAR(64) NOT NULL,
|
|
raw_content TEXT, -- 原始简历文本
|
|
parsed_content JSON, -- 结构化解析内容
|
|
attachment_url VARCHAR(512), -- 附件URL
|
|
attachment_type VARCHAR(32), -- pdf, doc, docx
|
|
version INT DEFAULT 1, -- 版本号
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (candidate_id) REFERENCES candidates(id) ON DELETE CASCADE,
|
|
INDEX idx_candidate_id (candidate_id)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 4. 职位信息表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS jobs (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
source VARCHAR(32) NOT NULL, -- BOSS, LIEPIN, etc.
|
|
source_id VARCHAR(128) NOT NULL,
|
|
title VARCHAR(256) NOT NULL,
|
|
department VARCHAR(128),
|
|
location VARCHAR(128),
|
|
salary_min INT,
|
|
salary_max INT,
|
|
requirements TEXT, -- 职位要求JSON
|
|
description TEXT, -- 职位描述
|
|
status VARCHAR(32) DEFAULT 'ACTIVE', -- ACTIVE, PAUSED, CLOSED, ARCHIVED
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_source_source_id (source, source_id),
|
|
INDEX idx_status (status)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 5. 评价方案表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS evaluation_schemas (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(128) NOT NULL,
|
|
description TEXT,
|
|
dimensions JSON NOT NULL, -- 评价维度配置
|
|
weights JSON NOT NULL, -- 维度权重
|
|
prompt_template TEXT, -- AI提示词模板
|
|
is_default BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_is_default (is_default)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 6. 评价记录表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS evaluations (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
candidate_id VARCHAR(64) NOT NULL,
|
|
schema_id VARCHAR(64) NOT NULL,
|
|
job_id VARCHAR(64),
|
|
overall_score DECIMAL(4,1), -- 综合评分 0-100
|
|
dimension_scores JSON, -- 各维度评分详情
|
|
tags JSON, -- AI标签
|
|
summary TEXT, -- 评价摘要
|
|
strengths JSON, -- 优势列表
|
|
weaknesses JSON, -- 不足列表
|
|
recommendation VARCHAR(32), -- strong_recommend, recommend, consider, not_recommend
|
|
raw_response TEXT, -- LLM原始响应
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (candidate_id) REFERENCES candidates(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (schema_id) REFERENCES evaluation_schemas(id),
|
|
FOREIGN KEY (job_id) REFERENCES jobs(id) ON DELETE SET NULL,
|
|
INDEX idx_candidate_id (candidate_id),
|
|
INDEX idx_schema_id (schema_id),
|
|
INDEX idx_overall_score (overall_score),
|
|
INDEX idx_created_at (created_at)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 7. 通知记录表
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS notifications (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
candidate_id VARCHAR(64) NOT NULL,
|
|
evaluation_id VARCHAR(64),
|
|
channel VARCHAR(32) NOT NULL, -- WECHAT_WORK, DINGTALK, EMAIL, WEBHOOK
|
|
content TEXT,
|
|
status VARCHAR(32) DEFAULT 'PENDING', -- PENDING, SENT, FAILED
|
|
error_message TEXT,
|
|
sent_at TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (candidate_id) REFERENCES candidates(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (evaluation_id) REFERENCES evaluations(id) ON DELETE SET NULL,
|
|
INDEX idx_candidate_id (candidate_id),
|
|
INDEX idx_status (status),
|
|
INDEX idx_created_at (created_at)
|
|
);
|
|
|
|
-- ============================================
|
|
-- 8. 插入默认评价方案
|
|
-- ============================================
|
|
INSERT INTO evaluation_schemas (id, name, description, dimensions, weights, is_default) VALUES
|
|
('general', '通用评价方案', '适用于各类岗位的通用评价方案',
|
|
'[
|
|
{"id": "professional", "name": "专业能力", "description": "岗位相关专业技能水平"},
|
|
{"id": "experience", "name": "工作经验", "description": "相关工作经验丰富度"},
|
|
{"id": "education", "name": "教育背景", "description": "学历和专业匹配度"},
|
|
{"id": "potential", "name": "发展潜力", "description": "未来成长空间"},
|
|
{"id": "culture_fit", "name": "文化匹配", "description": "与企业文化的匹配度"}
|
|
]',
|
|
'{"professional": 0.30, "experience": 0.25, "education": 0.15, "potential": 0.15, "culture_fit": 0.15}',
|
|
TRUE)
|
|
ON DUPLICATE KEY UPDATE
|
|
name = VALUES(name),
|
|
description = VALUES(description),
|
|
dimensions = VALUES(dimensions),
|
|
weights = VALUES(weights);
|
|
|
|
INSERT INTO evaluation_schemas (id, name, description, dimensions, weights) VALUES
|
|
('java_backend', 'Java后端工程师评价方案', '针对Java后端开发岗位的综合评价方案',
|
|
'[
|
|
{"id": "tech_capability", "name": "技术能力", "description": "Java技术栈掌握程度", "criteria": ["Java基础扎实程度", "Spring生态熟悉度", "数据库设计与优化", "分布式系统经验"]},
|
|
{"id": "project_exp", "name": "项目经验", "description": "项目经历的丰富度和质量", "criteria": ["项目复杂度", "承担角色重要性", "技术挑战解决能力"]},
|
|
{"id": "learning_ability", "name": "学习能力", "description": "学习新技术和适应新环境的能力", "criteria": ["技术广度", "新技术掌握速度", "自我驱动学习"]},
|
|
{"id": "communication", "name": "沟通协作", "description": "团队协作和沟通能力", "criteria": ["跨团队协作经验", "技术文档能力", "问题表达能力"]},
|
|
{"id": "stability", "name": "稳定性", "description": "职业稳定性和忠诚度", "criteria": ["平均在职时长", "跳槽频率", "职业发展规划清晰度"]}
|
|
]',
|
|
'{"tech_capability": 0.35, "project_exp": 0.25, "learning_ability": 0.15, "communication": 0.15, "stability": 0.10}')
|
|
ON DUPLICATE KEY UPDATE
|
|
name = VALUES(name),
|
|
description = VALUES(description),
|
|
dimensions = VALUES(dimensions),
|
|
weights = VALUES(weights);
|