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源代码
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 备注
|
|||
|
|
- 数据库连接使用连接池
|
|||
|
|
|
|||
|
|
请基于此需求说明书实现该系统,确保代码质量符合企业级应用标准。
|