删除旧的docs11目录及其所有内容,包括: - 业务蓝图文档(business-blueprint.md) - 数据API规范(data-api-specs.md) - 系统架构文档(system-architecture.md) - 模块蓝图文档(module-blueprints.md) - 治理标准文档(governance-standards.md) - 质量标准文档(quality-optimization.md) - 任务总览文档(Crawlful_Hub_Task_Overview_Full_v1.md) - README.md等文件 同时更新了docs目录下的现有文档: - 更新SERVICE_MAP.md强化服务层职责和调用规范 - 更新Service_Design.md明确服务层设计规范和边界 - 更新项目规则文档加入逻辑集中化原则 - 统一调整了文档表格格式和结构
463 lines
12 KiB
Markdown
463 lines
12 KiB
Markdown
# 服务设计文档 (Crawlful Hub)
|
||
|
||
> **定位**:Crawlful Hub 后端服务设计文档 - 定义服务层架构、服务职责和实现规范。
|
||
> **更新日期**: 2026-03-18
|
||
> **最高优先级参考**: [Business_ClosedLoops.md](../00_Business/Business_ClosedLoops.md)
|
||
|
||
---
|
||
|
||
## 1. 服务层架构
|
||
|
||
### 1.1 核心原则(逻辑集中化)
|
||
|
||
> **逻辑集中化 → 服务驱动**:所有业务逻辑必须集中在 Service 层,禁止分散在 Controller、前端或数据库操作中。
|
||
|
||
#### 强制约束
|
||
- ✅ **每个业务操作对应一个 Service**:前端的每个用户操作都必须有对应的后端 Service 处理
|
||
- ✅ **服务编排**:通过 Service 层串联多个模块,实现业务流程的完整执行
|
||
- ✅ **单一职责**:每个 Service 只负责一个核心业务领域
|
||
- ✅ **依赖注入**:通过依赖注入实现服务间的解耦
|
||
- ✅ **事务管理**:重要操作必须在事务中执行,确保数据一致性
|
||
- ✅ **状态管理统一**:所有状态更新必须通过 Service 层,禁止在 Controller 或前端直接修改
|
||
|
||
#### 禁止行为
|
||
- ❌ **Controller 中写业务逻辑**:Controller 只负责请求/响应和权限校验,业务决策、状态变化、数据校验必须在 Service 层
|
||
- ❌ **前端直接写业务规则**:复杂计算、权限判断、状态流转禁止在 React 组件中实现
|
||
- ❌ **数据库操作分散**:不同模块禁止直接调用数据库,必须通过 Service 层
|
||
- ❌ **脚本或工具处理逻辑**:AI 任务或异步脚本必须通过 Service 层统一调用
|
||
|
||
### 1.2 服务层级结构
|
||
|
||
```
|
||
Controller → Service (核心编排) → Repository / External API → 数据库/外部系统
|
||
```
|
||
|
||
#### Controller 层职责(强制执行)
|
||
- 接收 HTTP 请求和参数验证
|
||
- 调用 Service 层处理业务逻辑
|
||
- 返回响应给前端
|
||
- 权限校验(通过 `authorize()` 中间件)
|
||
- **禁止**:业务决策、状态变化、数据校验
|
||
|
||
#### Service 层职责(核心)
|
||
- 业务逻辑编排和状态流转
|
||
- 多模块协同和数据一致性保证
|
||
- 事务管理和异常处理
|
||
- 调用 Repository 层或外部 API
|
||
- **必须**:所有业务逻辑必须在此层实现
|
||
|
||
#### Repository 层职责
|
||
- 数据库 CRUD 操作
|
||
- 数据模型映射
|
||
- 查询优化
|
||
- **禁止**:业务逻辑处理
|
||
|
||
---
|
||
|
||
## 2. 核心服务列表
|
||
|
||
### 2.1 商品服务 (ProductService)
|
||
|
||
**职责**:管理商品全生命周期,包括创建、更新、查询、删除等操作
|
||
|
||
**核心方法**:
|
||
- `createProduct()`: 创建商品
|
||
- `updateProduct()`: 更新商品信息
|
||
- `updatePrice()`: 更新商品价格,同时计算 ROI
|
||
- `getProductById()`: 根据 ID 获取商品详情
|
||
- `getProducts()`: 获取商品列表
|
||
- `deleteProduct()`: 删除商品
|
||
- `publishProduct()`: 发布商品到平台
|
||
- `unpublishProduct()`: 从平台下架商品
|
||
|
||
**依赖**:
|
||
- `PricingService`: 计算价格和 ROI
|
||
- `InventoryService`: 管理商品库存
|
||
- `MediaService`: 管理商品媒体资源
|
||
|
||
### 2.2 订单服务 (OrderService)
|
||
|
||
**职责**:管理订单全生命周期,包括创建、更新、查询、处理等操作
|
||
|
||
**核心方法**:
|
||
- `createOrder()`: 创建订单
|
||
- `updateOrderStatus()`: 更新订单状态
|
||
- `getOrderById()`: 根据 ID 获取订单详情
|
||
- `getOrders()`: 获取订单列表
|
||
- `processOrder()`: 处理订单(包括库存扣减、物流安排等)
|
||
- `splitOrder()`: 拆分订单
|
||
- `mergeOrders()`: 合并订单
|
||
- `handleExceptionOrder()`: 处理异常订单
|
||
|
||
**依赖**:
|
||
- `InventoryService`: 管理库存
|
||
- `LogisticsService`: 安排物流
|
||
- `SettlementService`: 处理结算
|
||
|
||
### 2.3 定价服务 (PricingService)
|
||
|
||
**职责**:负责商品定价和利润计算
|
||
|
||
**核心方法**:
|
||
- `calculatePrice()`: 计算商品价格
|
||
- `calculateROI()`: 计算投资回报率
|
||
- `calculateProfit()`: 计算利润
|
||
- `getPricingStrategy()`: 获取定价策略
|
||
- `updatePricingStrategy()`: 更新定价策略
|
||
|
||
**依赖**:
|
||
- `CostService`: 计算成本
|
||
- `MarketService`: 分析市场价格
|
||
|
||
### 2.4 库存服务 (InventoryService)
|
||
|
||
**职责**:管理库存,包括库存查询、扣减、预警等
|
||
|
||
**核心方法**:
|
||
- `getInventory()`: 获取库存信息
|
||
- `updateInventory()`: 更新库存
|
||
- `deductInventory()`: 扣减库存
|
||
- `reserveInventory()`: 预留库存
|
||
- `releaseInventory()`: 释放预留库存
|
||
- `getInventoryAlert()`: 获取库存预警
|
||
|
||
**依赖**:
|
||
- `WarehouseService`: 管理仓库
|
||
|
||
### 2.5 物流服务 (LogisticsService)
|
||
|
||
**职责**:管理物流,包括物流选择、追踪、费用计算等
|
||
|
||
**核心方法**:
|
||
- `selectLogisticsChannel()`: 选择物流渠道
|
||
- `calculateFreight()`: 计算运费
|
||
- `trackLogistics()`: 追踪物流状态
|
||
- `createShippingLabel()`: 创建 shipping label
|
||
|
||
**依赖**:
|
||
- `ThirdPartyLogisticsAPI`: 对接第三方物流 API
|
||
|
||
### 2.6 结算服务 (SettlementService)
|
||
|
||
**职责**:管理结算,包括收入计算、佣金扣除、打款等
|
||
|
||
**核心方法**:
|
||
- `calculateSettlement()`: 计算结算金额
|
||
- `processSettlement()`: 处理结算
|
||
- `createSettlementBill()`: 创建结算账单
|
||
- `processPayment()`: 处理付款
|
||
|
||
**依赖**:
|
||
- `FinanceService`: 财务管理
|
||
- `PaymentService`: 支付处理
|
||
|
||
### 2.7 商户服务 (MerchantService)
|
||
|
||
**职责**:管理商户,包括商户注册、认证、管理等
|
||
|
||
**核心方法**:
|
||
- `registerMerchant()`: 注册商户
|
||
- `verifyMerchant()`: 验证商户资质
|
||
- `getMerchantById()`: 获取商户详情
|
||
- `updateMerchant()`: 更新商户信息
|
||
- `suspendMerchant()`: 暂停商户
|
||
- `activateMerchant()`: 激活商户
|
||
|
||
**依赖**:
|
||
- `VerificationService`: 资质验证
|
||
- `RBACService`: 权限管理
|
||
|
||
### 2.8 权限服务 (RBACService)
|
||
|
||
**职责**:管理权限,包括角色定义、权限分配等
|
||
|
||
**核心方法**:
|
||
- `createRole()`: 创建角色
|
||
- `assignPermission()`: 分配权限
|
||
- `checkPermission()`: 检查权限
|
||
- `getUserRoles()`: 获取用户角色
|
||
|
||
**依赖**:
|
||
- `UserService`: 用户管理
|
||
|
||
### 2.9 数据服务 (DataPipelineService)
|
||
|
||
**职责**:管理数据采集、清洗、处理等
|
||
|
||
**核心方法**:
|
||
- `collectData()`: 采集数据
|
||
- `cleanData()`: 清洗数据
|
||
- `processData()`: 处理数据
|
||
- `analyzeData()`: 分析数据
|
||
|
||
**依赖**:
|
||
- `PlatformApiService`: 对接平台 API
|
||
- `CrawlerService`: 网页爬虫
|
||
|
||
### 2.10 AI 服务 (AIService)
|
||
|
||
**职责**:提供 AI 相关功能,如智能定价、智能分析等
|
||
|
||
**核心方法**:
|
||
- `predictPrice()`: 预测价格
|
||
- `analyzeMarket()`: 分析市场
|
||
- `optimizeStrategy()`: 优化策略
|
||
- `detectAnomaly()`: 检测异常
|
||
|
||
**依赖**:
|
||
- `MachineLearningModel`: 机器学习模型
|
||
|
||
---
|
||
|
||
## 3. 服务间调用规范
|
||
|
||
### 3.1 同步调用
|
||
|
||
**适用场景**:需要立即获取结果的操作
|
||
|
||
**示例**:
|
||
```typescript
|
||
// ProductService 调用 PricingService
|
||
async updatePrice(productId: string, price: number): Promise<Product> {
|
||
const product = await this.productRepository.findById(productId);
|
||
const roi = await this.pricingService.calculateROI(product, price);
|
||
product.price = price;
|
||
product.roi = roi;
|
||
return await this.productRepository.save(product);
|
||
}
|
||
```
|
||
|
||
### 3.2 异步调用
|
||
|
||
**适用场景**:不需要立即获取结果的操作,如发送通知、数据处理等
|
||
|
||
**示例**:
|
||
```typescript
|
||
// OrderService 调用 NotificationService
|
||
async processOrder(orderId: string): Promise<void> {
|
||
const order = await this.orderRepository.findById(orderId);
|
||
// 处理订单
|
||
await this.orderRepository.save(order);
|
||
// 异步发送通知
|
||
this.notificationService.sendOrderConfirmation(order).catch(err => {
|
||
this.logger.error('Failed to send order confirmation', err);
|
||
});
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 事务管理
|
||
|
||
### 4.1 事务边界
|
||
|
||
**定义**:一组操作要么全部成功,要么全部失败
|
||
|
||
**示例**:
|
||
```typescript
|
||
@Transactional()
|
||
async createOrder(orderData: OrderCreateDto): Promise<Order> {
|
||
// 1. 创建订单
|
||
const order = await this.orderRepository.create(orderData);
|
||
|
||
// 2. 扣减库存
|
||
await this.inventoryService.deductInventory(
|
||
orderData.productId,
|
||
orderData.quantity
|
||
);
|
||
|
||
// 3. 记录交易
|
||
await this.transactionRepository.create({
|
||
orderId: order.id,
|
||
amount: order.totalAmount,
|
||
type: 'ORDER_CREATED'
|
||
});
|
||
|
||
return order;
|
||
}
|
||
```
|
||
|
||
### 4.2 幂等性
|
||
|
||
**定义**:同一个请求执行多次,结果应该相同
|
||
|
||
**实现**:
|
||
- 使用唯一的 `requestId`
|
||
- 记录已处理的请求
|
||
- 检查重复请求
|
||
|
||
**示例**:
|
||
```typescript
|
||
async processPayment(paymentData: PaymentDto): Promise<Payment> {
|
||
// 检查是否已处理
|
||
const existingPayment = await this.paymentRepository.findByRequestId(paymentData.requestId);
|
||
if (existingPayment) {
|
||
return existingPayment;
|
||
}
|
||
|
||
// 处理支付
|
||
const payment = await this.paymentRepository.create(paymentData);
|
||
return payment;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 错误处理
|
||
|
||
### 5.1 业务错误
|
||
|
||
**定义**:业务逻辑错误,如库存不足、权限不足等
|
||
|
||
**处理**:
|
||
- 抛出业务异常
|
||
- 上层捕获并返回适当的错误信息
|
||
|
||
**示例**:
|
||
```typescript
|
||
async deductInventory(productId: string, quantity: number): Promise<void> {
|
||
const inventory = await this.inventoryRepository.findByProductId(productId);
|
||
if (inventory.quantity < quantity) {
|
||
throw new BusinessException('Insufficient inventory');
|
||
}
|
||
|
||
inventory.quantity -= quantity;
|
||
await this.inventoryRepository.save(inventory);
|
||
}
|
||
```
|
||
|
||
### 5.2 系统错误
|
||
|
||
**定义**:系统级错误,如数据库连接失败、API 调用失败等
|
||
|
||
**处理**:
|
||
- 捕获系统异常
|
||
- 记录错误日志
|
||
- 尝试重试或降级策略
|
||
- 向上层返回适当的错误信息
|
||
|
||
**示例**:
|
||
```typescript
|
||
async callExternalApi(endpoint: string, data: any): Promise<any> {
|
||
try {
|
||
const response = await this.httpClient.post(endpoint, data);
|
||
return response.data;
|
||
} catch (error) {
|
||
this.logger.error(`Failed to call external API: ${endpoint}`, error);
|
||
throw new SystemException('External API error');
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 日志和监控
|
||
|
||
### 6.1 业务日志
|
||
|
||
**定义**:记录业务操作的日志
|
||
|
||
**内容**:
|
||
- 操作人
|
||
- 操作时间
|
||
- 操作类型
|
||
- 操作对象
|
||
- 操作结果
|
||
|
||
**示例**:
|
||
```typescript
|
||
async updatePrice(productId: string, price: number): Promise<Product> {
|
||
this.logger.info(`Updating price for product ${productId} to ${price}`);
|
||
|
||
try {
|
||
const product = await this.productRepository.findById(productId);
|
||
const roi = await this.pricingService.calculateROI(product, price);
|
||
product.price = price;
|
||
product.roi = roi;
|
||
const updatedProduct = await this.productRepository.save(product);
|
||
|
||
this.logger.info(`Successfully updated price for product ${productId}`, {
|
||
oldPrice: product.oldPrice,
|
||
newPrice: price,
|
||
roi: roi
|
||
});
|
||
|
||
return updatedProduct;
|
||
} catch (error) {
|
||
this.logger.error(`Failed to update price for product ${productId}`, error);
|
||
throw error;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.2 性能监控
|
||
|
||
**定义**:监控服务性能
|
||
|
||
**指标**:
|
||
- 响应时间
|
||
- 调用次数
|
||
- 错误率
|
||
- 资源使用情况
|
||
|
||
**实现**:
|
||
- 使用 Prometheus 等监控工具
|
||
- 定期分析性能数据
|
||
- 优化性能瓶颈
|
||
|
||
---
|
||
|
||
## 7. 服务版本管理
|
||
|
||
### 7.1 版本控制
|
||
|
||
**定义**:管理服务的版本
|
||
|
||
**策略**:
|
||
- 使用语义化版本号
|
||
- 向后兼容
|
||
- 版本迁移计划
|
||
|
||
### 7.2 API 版本控制
|
||
|
||
**定义**:管理 API 的版本
|
||
|
||
**实现**:
|
||
- 在 URL 中包含版本号
|
||
- 支持多个版本并存
|
||
- 逐步废弃旧版本
|
||
|
||
---
|
||
|
||
## 8. 部署和扩展性
|
||
|
||
### 8.1 部署策略
|
||
|
||
**定义**:服务的部署方式
|
||
|
||
**选项**:
|
||
- 单体应用
|
||
- 微服务
|
||
- 容器化部署
|
||
|
||
### 8.2 扩展性
|
||
|
||
**定义**:服务的扩展能力
|
||
|
||
**实现**:
|
||
- 水平扩展
|
||
- 负载均衡
|
||
- 缓存策略
|
||
- 异步处理
|
||
|
||
---
|
||
|
||
## 9. 相关文档
|
||
|
||
- [API_Specs](./API_Specs/)
|
||
- [Database_Design](./Database_Design.md)
|
||
- [Architecture_Overview](./Architecture_Overview.md)
|
||
|
||
---
|
||
|
||
*本文档基于业务闭环设计,最后更新: 2026-03-18* |