- 新增招聘者账号数据库表结构及SQL建表脚本 - 实现招聘者实体类及账号状态枚举 - 添加SQLAlchemy数据库模型及管理器支持招聘者数据存储 - 实现招聘者数据访问层(Mapper)进行增删改查操作 - 开发招聘者服务层,支持账号添加、启用、停用、删除、列表及爬虫注册 - 新增命令行工具add_recruiter.py,便于管理招聘者账号 - 修改主应用初始化流程,集成招聘者服务并通过数据库加载活跃账号爬虫 - 主程序示例中新增招聘者账号展示与调用爬取任务示范 - 更新项目依赖,增加SQLAlchemy、PyMySQL及Cryptography库支持 - 修改.gitignore,新增.qoder目录例外规则
107 lines
3.7 KiB
Python
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()
|