第一次提交
This commit is contained in:
158
开发需求.md
Normal file
158
开发需求.md
Normal file
@@ -0,0 +1,158 @@
|
||||
|
||||
|
||||
# 投标信息智能监控系统 - 需求说明书
|
||||
|
||||
## 项目概述
|
||||
开发一个基于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源代码
|
||||
|
||||
|
||||
## 备注
|
||||
- 数据库连接使用连接池
|
||||
|
||||
请基于此需求说明书实现该系统,确保代码质量符合企业级应用标准。
|
||||
Reference in New Issue
Block a user