4.8 KiB
4.8 KiB
投标信息智能监控系统 - 需求说明书
项目概述
开发一个基于TypeScript的Web应用,用于自动爬取商务投标平台的最新信息,将符合条件的投标项目突出显示,为用户提供精准的投标信息监控服务。
技术栈要求
- 主语言: TypeScript (4.0+)
- 后端框架: NestJS (推荐理由:完整的TypeScript支持、模块化架构、内置依赖注入、与数据库ORM良好集成)
- 前端框架: React (集成在NestJS中,使用SSR或API模式)
- 数据库: MySQL/PostgreSQL (通过TypeORM或Prisma操作)
- 爬虫库: 使用axios
- 任务调度: @nestjs/schedule
- UI组件库: Ant Design (提供企业级UI组件,支持TypeScript)
核心功能需求
1. 智能爬虫模块
- 定时访问指定商务投标平台(初始配置为:至少3个主流招标网站)
- 每30分钟执行一次爬取任务
- 识别并提取以下信息:
- 投标项目标题
- 详细页面URL
- 发布时间
- 招标单位
- 截止日期
- 实现智能防封策略:
- 随机请求间隔(3-8秒)
- 轮换User-Agent
- 异常检测与自动重试机制
2. 数据处理与存储
- 投标信息数据模型:
interface BidItem {
id: string;
title: string;
url: string;
publishDate: Date;
source: string;
keywordsMatched: string[]; // 匹配的关键词
priority: number; // 优先级,基于关键词匹配
createdAt: Date;
updatedAt: Date;
}
- 增量存储逻辑:
- 通过URL哈希值判断是否为新数据
- 仅存储当天和最近7天的历史数据
- 每日自动清理30天前的数据
3. 关键词智能监控
- 预设关键词:["山东", "海", "建设", "工程", "采购"]
- 支持用户自定义关键词:
- 通过Web界面添加/删除关键词
- 可设置关键词权重(1-5级)
- 匹配逻辑:
- 标题完全匹配和部分匹配
- 多关键词叠加权重
- 支持正则表达式高级匹配
4. Web展示界面
- 仪表盘设计:
- 顶部:高优先级投标信息(匹配自定义关键词)
- 中部:今日新增投标列表(按时间倒序)
- 底部:历史投标信息
- 交互功能:
- 关键词管理面板
- 按日期/来源/关键词筛选
- 信息标记已读/未读状态
- 邮件订阅提醒(基础框架)
- 响应式设计:适配桌面和移动设备
系统架构
src/
├── common/
│ ├── decorators/ # 自定义装饰器
│ ├── filters/ # 异常过滤器
│ └── utils/ # 工具函数
├── crawler/ # 爬虫模块
│ ├── services/
│ │ ├── bid-crawler.service.ts # 爬虫核心服务
│ │ └── anti-ban.strategy.ts # 防封策略
│ └── crawler.module.ts
├── database/ # 数据库模块
│ ├── entities/ # 实体定义
│ ├── migrations/ # 数据库迁移
│ └── database.module.ts
├── bids/ # 投标业务模块
│ ├── entities/
│ ├── dto/ # 数据传输对象
│ ├── controllers/
│ ├── services/
│ │ ├── bid.service.ts
│ │ └── keyword-analyzer.service.ts # 关键词分析
│ └── bids.module.ts
├── keywords/ # 关键词管理模块
├── schedule/ # 定时任务
│ └── tasks/
│ └── bid-crawl.task.ts # 定时爬取任务
├── app.controller.ts
├── app.module.ts
└── main.ts # 应用入口
API接口设计
后端API
GET /api/bids- 获取投标列表(支持分页、筛选)GET /api/bids/high-priority- 获取高优先级投标GET /api/keywords- 获取所有关键词POST /api/keywords- 添加新关键词DELETE /api/keywords/:id- 删除关键词
前端路由
/- 仪表盘(默认页面)/bids- 全部投标信息/keywords- 关键词管理/settings- 系统设置
非功能性需求
-
性能要求:
- 首屏加载时间 ≤ 2秒
- 爬虫任务执行时间 ≤ 5分钟/站点
- 支持至少1000条投标记录的快速检索
-
安全要求:
- 防XSS攻击(对爬取内容进行消毒)
- API访问权限控制
- 环境变量管理敏感信息
-
可维护性:
- 100% TypeScript类型覆盖
- 模块化设计,低耦合
- 完整的Jest单元测试(覆盖率≥80%)
-
部署要求:
- 环境配置分离(开发/测试/生产)
- 日志集中管理
配置项
- 爬取目标网站列表(可配置)
- 定时任务执行频率(默认30分钟)
- 数据保留策略(默认30天)
- 关键词匹配规则(默认包含匹配)
交付物
- 完整的TypeScript源代码
备注
- 数据库连接使用连接池
请基于此需求说明书实现该系统,确保代码质量符合企业级应用标准。