158 lines
4.8 KiB
Markdown
158 lines
4.8 KiB
Markdown
|
||
|
||
# 投标信息智能监控系统 - 需求说明书
|
||
|
||
## 项目概述
|
||
开发一个基于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. 数据处理与存储
|
||
- 投标信息数据模型:
|
||
```typescript
|
||
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` - 系统设置
|
||
|
||
## 非功能性需求
|
||
|
||
1. **性能要求**:
|
||
- 首屏加载时间 ≤ 2秒
|
||
- 爬虫任务执行时间 ≤ 5分钟/站点
|
||
- 支持至少1000条投标记录的快速检索
|
||
|
||
2. **安全要求**:
|
||
- 防XSS攻击(对爬取内容进行消毒)
|
||
- API访问权限控制
|
||
- 环境变量管理敏感信息
|
||
|
||
3. **可维护性**:
|
||
- 100% TypeScript类型覆盖
|
||
- 模块化设计,低耦合
|
||
- 完整的Jest单元测试(覆盖率≥80%)
|
||
|
||
4. **部署要求**:
|
||
- 环境配置分离(开发/测试/生产)
|
||
- 日志集中管理
|
||
|
||
## 配置项
|
||
- 爬取目标网站列表(可配置)
|
||
- 定时任务执行频率(默认30分钟)
|
||
- 数据保留策略(默认30天)
|
||
- 关键词匹配规则(默认包含匹配)
|
||
|
||
## 交付物
|
||
1. 完整的TypeScript源代码
|
||
|
||
|
||
## 备注
|
||
- 数据库连接使用连接池
|
||
|
||
请基于此需求说明书实现该系统,确保代码质量符合企业级应用标准。 |