This repository has been archived on 2026-03-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
YLHP_HR_2.0/add_recruiter.py
JiaoTianBo 04596d298b feat(recruiter): 添加招聘者账号管理模块及相关支持
- 新增招聘者账号数据库表结构及SQL建表脚本
- 实现招聘者实体类及账号状态枚举
- 添加SQLAlchemy数据库模型及管理器支持招聘者数据存储
- 实现招聘者数据访问层(Mapper)进行增删改查操作
- 开发招聘者服务层,支持账号添加、启用、停用、删除、列表及爬虫注册
- 新增命令行工具add_recruiter.py,便于管理招聘者账号
- 修改主应用初始化流程,集成招聘者服务并通过数据库加载活跃账号爬虫
- 主程序示例中新增招聘者账号展示与调用爬取任务示范
- 更新项目依赖,增加SQLAlchemy、PyMySQL及Cryptography库支持
- 修改.gitignore,新增.qoder目录例外规则
2026-03-24 14:36:01 +08:00

107 lines
3.7 KiB
Python

"""添加招聘者账号工具
Usage:
uv run python add_recruiter.py --name "张三" --token "your_wt_token"
uv run python add_recruiter.py --name "李四" --token "your_wt_token" --source boss
uv run python add_recruiter.py --list
"""
import sys
import argparse
from pathlib import Path
# 添加源码路径
src_path = Path(__file__).parent / "src" / "main" / "python"
if str(src_path) not in sys.path:
sys.path.insert(0, str(src_path))
from cn.yinlihupo.ylhp_hr_2_0.domain.candidate import CandidateSource
from cn.yinlihupo.ylhp_hr_2_0.domain.recruiter import Recruiter, RecruiterStatus
from cn.yinlihupo.ylhp_hr_2_0.mapper.recruiter_mapper import RecruiterMapper
from cn.yinlihupo.ylhp_hr_2_0.service.recruiter_service import RecruiterService
from cn.yinlihupo.ylhp_hr_2_0.config.settings import get_settings
def main():
parser = argparse.ArgumentParser(description="招聘者账号管理工具")
parser.add_argument("--name", "-n", help="招聘者名称/标识")
parser.add_argument("--token", "-t", help="WT Token")
parser.add_argument("--source", "-s", default="boss", help="平台来源 (默认: boss)")
parser.add_argument("--list", "-l", action="store_true", help="列出所有账号")
parser.add_argument("--deactivate", "-d", help="停用指定ID的账号")
parser.add_argument("--activate", "-a", help="启用指定ID的账号")
parser.add_argument("--delete", help="删除指定ID的账号")
args = parser.parse_args()
# 初始化服务
settings = get_settings()
print(f"使用数据库: {settings.db_url}")
mapper = RecruiterMapper(db_url=settings.db_url)
service = RecruiterService(mapper=mapper)
# 列出所有账号
if args.list:
recruiters = service.list_recruiters()
print("\n招聘者账号列表:")
print("-" * 80)
print(f"{'ID':<36} {'名称':<15} {'平台':<10} {'状态':<10} {'最后使用':<20}")
print("-" * 80)
for r in recruiters:
last_used = r.last_used_at.strftime("%Y-%m-%d %H:%M") if r.last_used_at else "从未"
print(f"{r.id:<36} {r.name:<15} {r.source.value:<10} {r.status.value:<10} {last_used:<20}")
print("-" * 80)
print(f"{len(recruiters)} 个账号")
return
# 停用账号
if args.deactivate:
if service.deactivate_recruiter(args.deactivate):
print(f"账号 {args.deactivate} 已停用")
else:
print(f"停用失败,账号不存在")
return
# 启用账号
if args.activate:
if service.activate_recruiter(args.activate):
print(f"账号 {args.activate} 已启用")
else:
print(f"启用失败,账号不存在")
return
# 删除账号
if args.delete:
if service.delete_recruiter(args.delete):
print(f"账号 {args.delete} 已删除")
else:
print(f"删除失败,账号不存在")
return
# 添加新账号
if args.name and args.token:
try:
source = CandidateSource(args.source.lower())
except ValueError:
print(f"错误: 不支持的平台 '{args.source}',支持的平台: boss")
return
recruiter = service.add_recruiter(
name=args.name,
source=source,
wt_token=args.token
)
print(f"\n招聘者账号添加成功!")
print(f" ID: {recruiter.id}")
print(f" 名称: {recruiter.name}")
print(f" 平台: {recruiter.source.value}")
print(f" 状态: {recruiter.status.value}")
return
# 如果没有参数,显示帮助
parser.print_help()
if __name__ == "__main__":
main()