refactor: 重构项目结构并优化类型定义

- 移除extension模块,将功能迁移至node-agent
- 修复类型导出问题,使用export type明确类型导出
- 统一数据库连接方式,从直接导入改为使用config/database
- 更新文档中的项目结构描述
- 添加多个服务的实用方法,如getForecast、getBalances等
- 修复类型错误和TS1205警告
- 优化RedisService调用方式
- 添加新的实体类型定义
- 更新审计日志格式,统一字段命名
This commit is contained in:
2026-03-21 15:04:06 +08:00
parent 888d3844f3
commit 15ee1758f5
286 changed files with 9110 additions and 21453 deletions

View File

@@ -179,3 +179,202 @@
| 跨店订单量 | 跨店铺订单数量 | TOC + TOB |
| 数据隔离有效性 | 数据隔离的成功率 | TOC + TOB |
| 报表生成效率 | 报表生成的平均时间 | TOC + TOB |
***
## 7⃣7⃣ Node Agent 任务执行闭环Node Agent Task Execution Loop
- **目标**:通过 Playwright 自动化代理执行无 API 平台的操作任务,实现采集、刊登、订单处理等自动化。
- **架构**
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Server │◄────►│ Hub │◄────►│ Node-Agent │
│ (主控端) │ │ (任务调度) │ │ (Playwright)│
└─────────────┘ └─────────────┘ └─────────────┘
┌──────▼──────┐
│ Chromium │
│ (无API平台) │
└─────────────┘
```
- **流程**
1. **节点注册**
- Node Agent 启动时向 Hub 注册
- 上报节点 ID、版本、操作系统、主机名
- 加载本地店铺配置
2. **心跳维持**
- 定时向 Hub 发送心跳(默认 30 秒)
- 维持节点在线状态
- 检测连接异常并自动重连
3. **任务轮询**
- 定时从 Hub 拉取任务(默认 10 秒)
- 获取待执行的任务队列
- 按优先级和店铺隔离规则执行
4. **任务执行**
- 启动 Playwright 浏览器实例
- 配置代理 IP 和浏览器指纹
- 执行具体任务(采集/刊登/订单处理)
- 收集执行结果和截图
5. **结果上报**
- 向 Hub 上报任务执行结果
- 包含状态、数据、错误信息
- 支持重试机制
- **任务类型**
| 任务类型 | 说明 | 适用平台 |
|---------|------|---------|
| `COLLECT_PRODUCT` | 商品数据采集 | TikTok Shop, Temu, 1688 |
| `COLLECT_ORDER` | 订单数据采集 | TikTok Shop, Temu |
| `PUBLISH_PRODUCT` | 商品刊登 | TikTok Shop, Temu |
| `PROCESS_ORDER` | 订单处理(发货、取消) | TikTok Shop, Temu |
| `SYNC_INVENTORY` | 库存同步 | TikTok Shop, Temu |
| `MANAGE_AD` | 广告管理 | TikTok Shop |
- **店铺隔离策略**
- **一店一上下文**:每个店铺独立的 profileDir、proxy、fingerprintPolicy
- **同店任务串行**:同一店铺的任务严格串行执行
- **跨店任务并行**:不同店铺的任务可并行执行
- **反检测策略**
| 策略 | 说明 |
|------|------|
| **指纹隔离** | 每个店铺独立浏览器指纹 |
| **代理 IP** | 每个店铺独立代理 |
| **行为模拟** | 随机延迟、鼠标轨迹 |
| **User-Agent** | 随机 UA 轮换 |
- **决策点**
- 任务优先级排序
- 浏览器实例数量控制
- 失败重试策略
- 异常处理机制
- **输入**:任务配置、店铺信息、代理配置、指纹策略
- **输出**:执行结果、采集数据、截图日志
- **状态机**
- 节点:`OFFLINE` → `REGISTERING` → `ONLINE` → `BUSY` → `OFFLINE`
- 任务:`PENDING` → `PULLED` → `EXECUTING` → `SUCCESS` / `FAILED`
***
## 7⃣8⃣ 前端-后端-Node Agent 调用链路闭环Frontend-Backend-NodeAgent Call Chain Loop
- **目标**:定义从前端操作到 Node Agent 执行的完整调用链路,确保数据流和状态同步。
- **架构层次**
```
┌─────────────────────────────────────────────────────────────┐
│ 用户操作层 │
│ Dashboard (React) → 用户点击"采集商品"按钮 │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP Request
┌─────────────────────────────────────────────────────────────┐
│ API 网关层 │
│ Server Controller → 权限校验 → 参数验证 → 调用 Service │
└──────────────────────────┬──────────────────────────────────┘
│ Service Call
┌─────────────────────────────────────────────────────────────┐
│ 业务逻辑层 │
│ Service → 创建任务 → 存入数据库 → 推送到 Hub 队列 │
└──────────────────────────┬──────────────────────────────────┘
│ Queue Push
┌─────────────────────────────────────────────────────────────┐
│ 任务调度层 │
│ Hub → 任务队列 → 分配给 Node Agent → 监控执行状态 │
└──────────────────────────┬──────────────────────────────────┘
│ Task Pull
┌─────────────────────────────────────────────────────────────┐
│ 执行代理层 │
│ Node Agent → Playwright 执行 → 采集数据 → 上报结果 │
└──────────────────────────┬──────────────────────────────────┘
│ Result Report
┌─────────────────────────────────────────────────────────────┐
│ 数据回写层 │
│ Hub → 更新任务状态 → 通知 Server → WebSocket 推送前端 │
└─────────────────────────────────────────────────────────────┘
```
- **调用链路示例**(商品采集):
1. **前端发起**
```typescript
// Dashboard: 用户点击采集按钮
const handleCollect = async () => {
const result = await collectProductDataSource.create({
platform: 'TikTok',
shopId: 'shop-123',
productUrl: 'https://...'
});
};
```
2. **后端处理**
```typescript
// Server: Controller → Service
@router.post('/api/v1/collect/product')
async collectProduct(req: Request, res: Response) {
const task = await CrawlerService.createCollectTask(req.body);
await HubQueueService.pushTask(task);
res.json({ taskId: task.id, status: 'PENDING' });
}
```
3. **Hub 调度**
```typescript
// Hub: 任务队列管理
async pushTask(task: Task) {
await TaskQueue.add(task);
await this.notifyNodeAgents();
}
```
4. **Node Agent 执行**
```typescript
// Node Agent: Playwright 执行
async executeTask(task: NodeTask) {
const browser = await chromium.launch({ proxy: task.proxy });
const page = await browser.newPage();
const data = await this.collectProduct(page, task.payload);
await this.reportReceipt({ taskId: task.id, data });
}
```
5. **结果回写**
```typescript
// Server: 接收结果
@router.post('/api/v1/publish/receipt')
async handleReceipt(req: Request, res: Response) {
await CrawlerService.saveCollectResult(req.body);
await WebSocketService.notifyFrontend(req.body.taskId, 'SUCCESS');
}
```
- **状态同步机制**
| 机制 | 说明 |
|------|------|
| **WebSocket 推送** | 实时推送任务状态到前端 |
| **轮询查询** | 前端定时查询任务状态 |
| **事件总线** | 内部服务间状态同步 |
- **决策点**
- 任务优先级设置
- 超时处理策略
- 失败重试机制
- 并发控制策略
- **输入**:用户操作、任务配置、执行参数
- **输出**:任务状态、执行结果、通知消息
- **状态机**`USER_ACTION` → `API_REQUEST` → `TASK_CREATED` → `TASK_QUEUED` → `TASK_EXECUTING` → `TASK_COMPLETED` → `RESULT_SAVED` → `FRONTEND_NOTIFIED`
***
## 相关KPI
### Node Agent 任务执行闭环
| KPI 指标 | 描述 | 适用业务类型 |
|---------|------|-------------|
| 任务成功率 | 成功执行的任务比例 | TOC + TOB |
| 平均执行时间 | 任务执行的平均耗时 | TOC + TOB |
| 节点在线率 | Node Agent 在线时间比例 | TOC + TOB |
| 采集数据准确率 | 采集数据的准确性 | TOC + TOB |
| 反检测成功率 | 未被平台检测的成功率 | TOC + TOB |
### 前端-后端-Node Agent 调用链路闭环
| KPI 指标 | 描述 | 适用业务类型 |
|---------|------|-------------|
| 端到端延迟 | 从用户操作到结果返回的时间 | TOC + TOB |
| 链路成功率 | 完整链路执行成功的比例 | TOC + TOB |
| 状态同步延迟 | 状态更新到前端显示的时间 | TOC + TOB |
| 错误恢复率 | 错误后自动恢复的比例 | TOC + TOB |