433 lines
10 KiB
Markdown
433 lines
10 KiB
Markdown
|
|
# 服务设计文档 (Crawlful Hub)
|
|||
|
|
|
|||
|
|
> **定位**:Crawlful Hub 后端服务设计文档 - 定义服务层架构、服务职责和实现规范。
|
|||
|
|
> **更新日期**: 2026-03-18
|
|||
|
|
> **最高优先级参考**: [Business_ClosedLoops.md](../00_Business/Business_ClosedLoops.md)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 服务层架构
|
|||
|
|
|
|||
|
|
### 1.1 核心原则
|
|||
|
|
|
|||
|
|
- **每个业务操作对应一个 Service**:前端的每个用户操作都必须有对应的后端 Service 处理
|
|||
|
|
- **服务编排**:通过 Service 层串联多个模块,实现业务流程的完整执行
|
|||
|
|
- **单一职责**:每个 Service 只负责一个核心业务领域
|
|||
|
|
- **依赖注入**:通过依赖注入实现服务间的解耦
|
|||
|
|
- **事务管理**:重要操作必须在事务中执行,确保数据一致性
|
|||
|
|
|
|||
|
|
### 1.2 服务层级结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Controller → Service (核心编排) → Repository / External API → 数据库/外部系统
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 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*
|