Files
bidding_watcher/开发需求.md

158 lines
4.8 KiB
Markdown
Raw Normal View History

2026-01-09 23:18:52 +08:00
# 投标信息智能监控系统 - 需求说明书
## 项目概述
开发一个基于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源代码
## 备注
- 数据库连接使用连接池
请基于此需求说明书实现该系统,确保代码质量符合企业级应用标准。