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