- 新增文档模板和导航结构 - 实现服务器基础API路由和控制器 - 添加扩展插件配置和前端框架 - 引入多租户和权限管理模块 - 集成日志和数据库配置 - 添加核心业务模型和类型定义
14 KiB
14 KiB
技术需求分析与架构设计
文档目的:对 Crawlful Hub 项目进行技术需求分析和架构设计,为开发团队提供清晰的技术指导。 更新日期:2026-03-17
1. 技术需求分析
1.1 功能需求
核心业务模块
| 模块 | 功能点 | 优先级 | 技术实现要点 |
|---|---|---|---|
| 商品管理 (PIM) | SPU/SKU管理 | P0 | 支持商品档案管理、多平台商品刊登、商品采集、产品裂变等 |
| 多平台商品刊登 | P0 | 支持 TikTok Shop、Amazon、eBay、Shopee、Temu 等平台 | |
| 商品采集 | P1 | 支持 1688、速卖通、竞品采集等 | |
| 产品裂变 | P0 | 支持标题、图片、价格、SKU、描述等裂变 | |
| 订单管理 (OMS) | 多平台订单处理 | P0 | 支持自动拉取、订单详情获取、订单确认、发货回传等 |
| 订单利润分析 | P0 | 计算每笔订单利润,包含采购成本、平台费、物流、税费等 | |
| 库存管理 (WMS) | 库存同步 | P0 | 各平台库存同步,防超卖 |
| 库存预警 | P0 | 安全库存提醒 | |
| 库存分配 | P1 | 指定仓库库存 | |
| 财务管理 (FIN) | 财务对账 | P0 | 结算流水、费用流水、退款流水对账 |
| 多币种对账 | P0 | 支持不同币种的对账 | |
| 平台费用监控 | P0 | 监控各平台费用 | |
| 供应商管理 (SCM) | 供应商产能监控 | P1 | 监控供应商产能情况 |
| 客户关系 (CRM) | CRM客户管理 | P1 | 管理客户信息和订单 |
平台接入需求
| 类型 | 平台 | 技术实现 |
|---|---|---|
| 有 API 平台 | TikTok Shop | 通过官方 API 对接 |
| Amazon | 通过 SP-API 对接 | |
| eBay | 通过官方 API 对接 | |
| Shopee | 通过官方 API 对接 | |
| 无 API 平台 | Temu | 通过 No-API Bridge 对接 |
| Taobao | 通过 No-API Bridge 对接 |
1.2 非功能需求
| 需求类型 | 具体要求 | 技术实现 |
|---|---|---|
| 性能 | 核心接口响应 <200ms | 使用缓存、优化数据库查询 |
| 内存占用符合 4096MB 限制 | 合理管理内存使用 | |
| 数据库慢查询 <100ms | 优化 SQL 查询,添加索引 | |
| 可用性 | 99.9% 可用性 | 高可用架构设计 |
| 健康检查接口 | 实现 /api/health 接口 | |
| 安全性 | 环境变量管理 | 使用 .env 文件,忽略提交 |
| 敏感密钥管理 | 使用 Vault 或类似服务 | |
| 跨租户数据隔离 | 基于 tenantId 进行数据隔离 | |
| SQL 注入防护 | 使用参数化查询 | |
| 可扩展性 | 多租户模型 | 支持 Tenant -> Organization -> Shop -> User 四层级隔离 |
| 插件系统 | 支持 Extension 扩展 | |
| 可维护性 | 代码规范 | 遵循 ESLint、Prettier 规范 |
| 文档完整 | 完善的技术文档 |
1.3 数据需求
核心数据模型
| 数据模型 | 关键字段 | 说明 |
|---|---|---|
| 商品 (SPU/SKU) | tenantId, productId/spuId, skuId, skuCode, attributes, costPrice, status | 作为刊登/库存/订单的统一主数据 |
| 平台映射 | tenantId, shopId, platform, erpSkuId, platformProductId, platformSkuId, mappingVersion | 避免“同一SKU多次重复刊登/重复拉单” |
| 订单 | tenantId, shopId, platformOrderId, orderId, status, buyer, amount, currency, createTime | 订单主表,状态机承载者 |
| 订单项 | orderId, skuId, platformSkuId, quantity, price, cost | 承接利润与库存扣减 |
| 库存流水 | tenantId, warehouseId, skuId, changeType, deltaQty, balanceQty, refType, refId, occurTime | 占库/扣库/回补/盘点统一落流水 |
| 运单/履约 | tenantId, orderId, shipmentId, carrier, trackingNo, labelUrl, status | 发货回传与轨迹同步承载者 |
| 售后/退货/质检 | tenantId, orderId, returnId, reason, status, inspectionResult, photos | 逆向闭环承载者 |
| 退款 | tenantId, orderId, refundId, amount, status, decisionStatus | 必须走门禁状态机 |
| 结算/费用 | tenantId, shopId, statementId, feeLines[], settledAmount, currency, status | 对账闭环承载者 |
1.4 安全需求
| 安全类型 | 具体要求 | 技术实现 |
|---|---|---|
| 认证授权 | JWT 认证 | 实现基于 JWT 的认证机制 |
| RBAC 权限模型 | 基于角色的访问控制 | |
| 预设角色 | ADMIN, MANAGER, OPERATOR, FINANCE, SOURCING, LOGISTICS, ANALYST | |
| 数据安全 | 数据加密 | 敏感数据加密存储 |
| 数据脱敏 | 敏感日志脱敏处理 | |
| 审计日志 | 全量操作流水线日志 | |
| API 安全 | 请求限流 | 基于 Redis 实现 API 速率限制 |
| 防 CSRF | 实现 CSRF 防护 | |
| 防 XSS | 实现 XSS 防护 |
2. 架构设计
2.1 系统架构
三层架构
flowchart TD
subgraph Console[前端中控台]
UI[用户界面]
Components[业务组件]
State[状态管理]
Services[API服务层]
end
subgraph Hub[后端服务层]
API[API路由]
Core[核心业务逻辑]
Domains[业务领域模型]
Workers[异步任务]
DB[数据库]
Cache[缓存]
end
subgraph Extension[边缘执行层]
WinNode[Win Node Agent]
BrowserWorker[Browser Worker]
Collect[数据采集]
end
UI --> Components
Components --> State
State --> Services
Services --> API
API --> Core
Core --> Domains
Core --> Workers
Domains --> DB
Core --> Cache
Core --> WinNode
WinNode --> BrowserWorker
BrowserWorker --> Collect
Collect --> Core
核心模块关系
| 模块 | 职责 | 依赖关系 |
|---|---|---|
| API 路由层 | 处理 HTTP 请求,参数验证 | 依赖 Core 层 |
| 核心业务逻辑 | 业务规则处理,状态管理 | 依赖 Domains 层 |
| 业务领域模型 | 数据模型,业务实体 | 依赖 DB |
| 异步任务 | 处理耗时操作,如采集、同步 | 依赖 Core 层 |
| 边缘执行层 | 处理无 API 平台的操作 | 依赖 Core 层 |
2.2 目录结构
前端目录结构
src/
├── components/ # 公共组件
│ ├── Business/ # 业务组件
│ └── Basic/ # 基础组件
├── pages/ # 页面组件
├── stores/ # Zustand 状态管理
├── services/ # API 服务层 (TanStack Query)
├── utils/ # 工具函数
├── hooks/ # 自定义 Hooks
├── types/ # TypeScript 类型定义
└── assets/ # 静态资源
后端目录结构
server/src/
├── core/ # 核心功能、算力调度、隐私审计
├── domains/ # 业务领域模型
│ ├── product/ # 商品相关
│ ├── order/ # 订单相关
│ ├── inventory/ # 库存相关
│ ├── finance/ # 财务相关
│ ├── supplier/ # 供应商相关
│ └── customer/ # 客户相关
├── api/ # 外部与内部 API 路由
│ ├── controllers/ # 控制器
│ ├── routes/ # 路由定义
│ └── middleware/ # 中间件
├── workers/ # 异步任务与爬虫任务
├── utils/ # 工具函数
└── config/ # 配置文件
2.3 技术实现
前端技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| UmiJS | 4.x | 前端框架 |
| Ant Design | 5.x | UI 组件库 |
| Zustand | 4.x | 全局状态管理 |
| TanStack Query | 5.x | 服务端状态管理 |
| React Hook Form | 最新 | 表单管理 |
| Zod | 最新 | 表单验证 |
| AntV G2/G6 | 5.x | 数据可视化 |
| Axios | 最新 | HTTP 客户端 |
后端技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| Node.js | v20+ | 运行环境 |
| TypeScript | 最新 | 开发语言 |
| MySQL | 8.0 | 数据库 |
| Redis | 6.0 | 缓存、队列 |
| Knex.js | 最新 | ORM |
| Express | 最新 | Web 框架 |
| JWT | 最新 | 认证 |
| BullMQ | 最新 | 任务队列 |
2.4 数据库设计
核心表结构
| 表名 | 说明 | 关键字段 |
|---|---|---|
| cf_user | 用户表 | id, username, password, role, tenant_id |
| cf_tenant | 租户表 | id, name, status |
| cf_shop | 店铺表 | id, tenant_id, platform, shop_name, api_credentials |
| cf_product | 商品表 | id, tenant_id, spu_id, sku_id, sku_code, attributes, cost_price, status |
| cf_platform_mapping | 平台映射表 | id, tenant_id, shop_id, platform, erp_sku_id, platform_product_id, platform_sku_id |
| cf_order | 订单表 | id, tenant_id, shop_id, platform_order_id, status, buyer, amount, currency |
| cf_order_item | 订单项表 | id, order_id, sku_id, platform_sku_id, quantity, price, cost |
| cf_inventory_log | 库存流水表 | id, tenant_id, warehouse_id, sku_id, change_type, delta_qty, balance_qty, ref_type, ref_id |
| cf_shipment | 运单表 | id, tenant_id, order_id, carrier, tracking_no, label_url, status |
| cf_after_sales | 售后表 | id, tenant_id, order_id, reason, status, inspection_result |
| cf_refund | 退款表 | id, tenant_id, order_id, amount, status, decision_status |
| cf_statement | 结算表 | id, tenant_id, shop_id, statement_id, settled_amount, currency, status |
2.5 API 设计
RESTful API 标准
| 方法 | 用途 | 示例 |
|---|---|---|
| GET | 查询 | GET /api/v1/orders |
| POST | 创建 | POST /api/v1/orders |
| PUT | 完整更新 | PUT /api/v1/orders/:id |
| PATCH | 部分更新 | PATCH /api/v1/orders/:id |
| DELETE | 删除 | DELETE /api/v1/orders/:id |
响应结构
// 成功响应
{
"success": true,
"data": { ... },
"pagination": { "page": 1, "pageSize": 20, "total": 100 }
}
// 错误响应
{
"success": false,
"error": { "code": "ORDER_NOT_FOUND", "message": "订单不存在", "details": {} }
}
2.6 部署方案
开发环境
| 组件 | 配置 |
|---|---|
| Node.js | v20+ |
| MySQL | 8.0 (本地或 Docker) |
| Redis | 6.0 (本地) |
| 前端 | UmiJS 开发服务器 |
| 后端 | Express 开发服务器 |
生产环境
| 组件 | 配置 |
|---|---|
| 前端 | 阿里云 OSS + CDN |
| 后端 | 阿里云 ECS |
| 数据库 | 阿里云 RDS (MySQL 8.0) |
| 缓存 | 阿里云 Redis |
| 监控 | 阿里云 SLS + Prometheus |
部署流程
- 代码构建:前端和后端代码构建
- 资源部署:前端静态资源部署到 OSS,后端代码部署到 ECS
- 数据库迁移:执行数据库迁移脚本
- 服务启动:启动后端服务
- 健康检查:验证服务是否正常运行
3. 技术风险评估
| 风险类型 | 具体风险 | 影响程度 | 应对措施 |
|---|---|---|---|
| 平台 API 变更 | 第三方平台 API 变更导致集成失败 | 高 | 建立 API 监控机制,定期检查 API 状态 |
| 无 API 平台反爬 | 无 API 平台的反爬机制导致采集失败 | 高 | 实现智能反爬策略,如代理 IP 池、UA 轮换、指纹隔离 |
| 数据一致性 | 多平台数据同步不一致 | 高 | 实现分布式事务,确保数据一致性 |
| 性能瓶颈 | 大量订单或商品数据导致系统性能下降 | 中 | 优化数据库查询,使用缓存,实现异步处理 |
| 安全漏洞 | 系统存在安全漏洞 | 高 | 定期进行安全审计,使用安全扫描工具 |
4. 技术选型理由
| 技术 | 选型理由 |
|---|---|
| Node.js | 高性能、事件驱动,适合处理大量并发请求 |
| TypeScript | 类型安全,提高代码质量和可维护性 |
| MySQL | 成熟稳定,适合关系型数据存储 |
| Redis | 高性能缓存,适合存储会话和热点数据 |
| UmiJS | 开箱即用,集成了路由、构建等功能 |
| Ant Design | 组件丰富,设计美观,适合企业级应用 |
| Zustand | 轻量级状态管理,易于使用 |
| TanStack Query | 强大的服务端状态管理,支持缓存和同步 |
5. 开发计划
5.1 里程碑
| 阶段 | 目标 | 时间预估 |
|---|---|---|
| 需求分析与架构设计 | 完成技术需求分析和架构设计 | 1 周 |
| 核心功能开发 | 实现商品管理、订单管理、库存管理等核心功能 | 8 周 |
| 平台接入 | 完成各平台 API 接入 | 4 周 |
| 测试与优化 | 进行功能测试、性能测试和安全测试 | 2 周 |
| 部署上线 | 部署到生产环境并进行监控 | 1 周 |
5.2 关键技术点
- 多平台商品刊登:实现统一的商品发布接口,支持多平台适配
- 订单履约闭环:实现从订单拉取到发货回传的完整流程
- 库存同步机制:确保各平台库存数据一致,防止超卖
- 财务对账系统:实现多币种对账,支持差异处理
- No-API 平台接入:实现智能爬虫和数据解析
- 多租户隔离:确保不同租户数据安全隔离
- 性能优化:优化系统性能,确保高并发场景下的稳定性
6. 结论
Crawlful Hub 项目是一个功能丰富、技术复杂度较高的企业级贸易 ERP 系统。通过合理的技术选型和架构设计,我们可以构建一个稳定、高效、安全的系统,满足企业级用户的需求。
本技术需求分析和架构设计文档为开发团队提供了清晰的技术指导,包括功能需求、非功能需求、数据需求、安全需求以及系统架构、目录结构、技术实现、数据库设计、API 设计和部署方案等。
在开发过程中,我们需要关注技术风险,采取相应的应对措施,确保系统的稳定性和可靠性。同时,我们需要按照开发计划有序推进,确保项目按时完成。