v6ole a51161b5f3 feat: 企微菜单新增 AI 分析开关 + 白名单控制
- 新增 ai_whitelist 配置项,仅白名单用户可操作 AI 开关
- 新增 app/services/ai_state.py 运行时开关模块
- 系统管理菜单新增「AI 分析」按钮 (toggle_ai)
- 监控配置、系统状态显示 AI 状态和 AI 标记统计
- pipeline 改用运行时开关 is_ai_enabled()
2026-05-26 16:02:26 +08:00
2026-05-12 18:16:56 +08:00

GX-GP-Notify

广西政府采购公告监控系统,自动爬取广西政府采购网和大化县政府网的公告,通过企业微信推送关键词匹配的公告。

功能

  • 定时爬取:按 cron 规则自动爬取,工作日 8:00-21:00 每小时执行
  • 关键词过滤:广西政采网公告按关键词过滤(默认:大化),大化县政府网全量爬取
  • 企微推送:新公告实时推送到企业微信应用
  • 去重:基于内容 hash 去重,避免重复入库和推送
  • 节假日感知:非工作日自动跳过爬取

数据来源

来源 说明 过滤
广西政府采购网 采购公告、结果公告、合同公告等 13 个分类 关键词过滤
大化县政府网 大化县门户网站采购公告 全量爬取

企微菜单功能

菜单 说明
最新公告 触发一次爬取,推送两个来源合并后最新 6 条(时间升序)
手动爬取 立即触发全量爬取并推送新公告
今日统计 查看今日新增和累计公告数
系统状态 查看待推送数量、定时任务状态
监控配置 查看关键词、爬取页数、定时规则
工作日状态 查看今天是否为工作日
同步节假日 同步当年节假日数据
暂停/恢复任务 控制定时爬取任务

快速部署

1. 配置环境变量

复制 .env.example.env 并填写:

# 数据库
DATABASE_URL=postgresql+asyncpg://user:password@host:5432/gx-gp-notify

# 企业微信
WECHAT_CORP_ID=your_corp_id
WECHAT_AGENT_ID=your_agent_id
WECHAT_SECRET=your_secret
WECHAT_TOKEN=your_token
WECHAT_ENCODING_AES_KEY=your_aes_key

# 爬虫
CRAWLER_KEYWORDS=["大化"]
CRAWLER_MAX_PAGES=10
SCHEDULER_CRON=0 8-21 * * 1-5

2. 启动服务

docker compose -f docker/docker-compose.yml up -d

3. 数据库迁移

docker compose -f docker/docker-compose.yml exec app alembic upgrade head

4. 配置企微回调

在企业微信后台将回调 URL 设置为:

http://your-server:18001/wechat/callback

开发

# 安装依赖
pip install -e ".[dev]"

# 运行测试
pytest

# 代码检查
ruff check .

技术栈

  • 框架FastAPI + uvicorn
  • 数据库PostgreSQL + SQLAlchemy (async) + Alembic
  • 爬虫httpx + BeautifulSoup4
  • 定时任务APScheduler
  • 推送:企业微信应用消息 API
  • 部署Docker

项目结构

app/
├── api/          # HTTP 接口(公告查询、手动触发爬取等)
├── crawler/      # 爬虫(广西政采网、大化县政府网)
├── models/       # 数据库模型
├── scheduler/    # 定时任务
├── services/     # 业务逻辑(pipeline、过滤、通知)
└── wechat/       # 企业微信(消息处理、推送客户端)
S
Description
No description provided
Readme 1.6 MiB
Languages
Python 99.2%
Mako 0.5%
Dockerfile 0.3%