# 京东Cookie管理模块重构设计文档

## 概述

本设计文档详细描述了京东Cookie管理模块的完全重构方案。该模块将替换现有的`card_redeem_cookie`逻辑，提供全新的京东Cookie账户管理、订单处理和状态维护功能。新模块采用GoFrame 2.x最新架构规范，实现高效的Cookie轮询机制、智能状态管理和完整的订单复用功能。

### 核心目标

- 完全删除现有`card_redeem_cookie_`开头的所有表和相关代码
- 重新设计京东Cookie管理系统，支持智能状态管理和故障恢复
- 实现高效的Cookie轮询分配机制
- 提供完整的订单复用和微信支付链接管理
- 建立完善的变更记录和审计追踪体系
- 遵循GoFrame 2.x最新架构规范和最佳实践

### 业务场景

系统主要支持以下业务场景：

- 京东Cookie账户的全生命周期管理
- 基于Cookie状态的智能下单路由
- 京东订单与订单的关联映射
- 微信支付链接的时效性管理
- 订单复用机制实现高效资源利用

## 技术架构

### 整体架构设计

系统采用分层架构设计，严格按照GoFrame 2.x架构规范实现：

``mermaid
graph TB
    subgraph "API接口层"
        A1[Cookie管理API]
        A2[订单处理API]
        A3[状态查询API]
    end

    subgraph "控制器层"
        C1[Cookie控制器]
        C2[订单控制器]
        C3[状态控制器]
    end
    
    subgraph "服务层"
        S1[Cookie服务]
        S2[订单服务]
        S3[状态管理服务]
    end
    
    subgraph "逻辑层"
        L1[Cookie轮询逻辑]
        L2[订单复用逻辑]
        L3[状态变更逻辑]
        L4[支付链接管理逻辑]
    end
    
    subgraph "数据访问层"
        D1[Cookie DAO]
        D2[订单 DAO]
        D3[历史记录 DAO]
    end
    
    subgraph "数据模型层(自动生成)"
        M1[Entity 实体]
        M2[DO 数据对象]
        M3[DAO 接口]
    end
    
    A1 --> C1
    A2 --> C2
    A3 --> C3
    
    C1 --> S1
    C2 --> S2
    C3 --> S3
    
    S1 --> L1
    S2 --> L2
    S3 --> L3
    S2 --> L4
    
    L1 --> D1
    L2 --> D2
    L3 --> D3
    L4 --> D2
    
    D1 --> M1
    D2 --> M2
    D3 --> M3

```

### 模块组织结构

新模块将按照以下目录结构组织，所有表名使用`jd_cookie_`统一前缀：

```

├── api/jd_cookie/
│   ├── jd_cookie.go              # API路由定义
│   └── v1/
│       ├── cookie.go             # Cookie管理接口
│       ├── order.go              # 订单处理接口
│       └── history.go            # 历史记录接口
├── internal/controller/jd_cookie/
│   ├── jd_cookie.go              # 控制器入口
│   ├── jd_cookie_v1_*.go         # 具体接口实现
├── internal/service/
│   └── jd_cookie.go              # 服务接口定义
├── internal/logic/jd_cookie/
│   ├── cookie.go                 # Cookie管理逻辑
│   ├── order.go                  # 订单处理逻辑
│   ├── rotation.go               # 轮询分配逻辑
│   └── history.go                # 历史记录逻辑

### 数据访问层生成策略

项目采用GoFrame框架标准的DAO生成模式，所有DAO、Entity、DO文件都通过`gf gen dao`命令从数据库表结构自动生成，确保代码与数据库结构的一致性。

**重要说明**：

- `internal/dao/` - DAO实现层，包含对外接口和内部实现
- `internal/model/entity/` - 数据库表实体结构体
- `internal/model/do/` - 数据操作对象，用于查询条件构建

这些文件都是自动生成的，不应手动修改。

```

## DAO层生成策略

项目使用GoFrame框架的CLI工具自动生成DAO层代码，确保代码的一致性和规范性。

### 生成命令

在创建数据库表后，使用以下命令生成DAO层代码：

```bash
### 生成命令与步骤

#### 1. 数据库表创建
首先需要在数据库中创建所有新表：
- `jd_cookie_account`
- `jd_cookie_jd_order`
- `jd_cookie_order`
- `jd_cookie_change_history`
- `jd_cookie_jd_order_change_history`
- `jd_cookie_order_change_history`

#### 2. 执行DAO生成命令

在创建数据库表后，使用GoFrame CLI工具生成所有相关文件：

```bash
# 生成所有表的DAO代码
gf gen dao

# 或者指定特定表生成(可选)
gf gen dao -t "jd_cookie_*"
```

#### 3. 生成文件验证

生成完成后，需要验证以下文件是否正确生成：

- 每个表都在`internal/dao/`下生成对应的DAO文件
- 每个表都在`internal/dao/internal/`下生成内部实现文件
- 每个表都在`internal/model/entity/`下生成实体文件
- 每个表都在`internal/model/do/`下生成DO文件

### 生成的文件结构

GoFrame CLI工具将自动生成以下文件结构：

1. **internal/dao/**: 数据访问层实现（自动生成）
2. **internal/model/dao/**: DAO接口定义（自动生成）
3. **internal/model/entity/**: 数据库表实体映射（自动生成）
4. **internal/model/do/**: 数据操作对象（自动生成）

### 生成的文件结构

基于您现有项目的实际结构，GoFrame CLI工具`gf gen dao`将从数据库中自动生成以下文件：

```
internal/
├── dao/                              # DAO实现(从数据库自动生成)
│   ├── internal/                     # DAO内部实现
│   │   ├── v_1_jd_cookie_account.go
│   │   ├── v_1_jd_cookie_jd_order.go
│   │   ├── v_1_jd_cookie_order.go
│   │   ├── v_1_jd_cookie_change_history.go
│   │   ├── v_1_jd_cookie_jd_order_change_history.go
│   │   └── v_1_jd_cookie_order_change_history.go
│   ├── v_1_jd_cookie_account.go      # DAO对外接口
│   ├── v_1_jd_cookie_jd_order.go
│   ├── v_1_jd_cookie_order.go
│   ├── v_1_jd_cookie_change_history.go
│   ├── v_1_jd_cookie_jd_order_change_history.go
│   └── v_1_jd_cookie_order_change_history.go
└── model/
    ├── do/                           # 数据操作对象(从数据库自动生成)
    │   ├── v_1_jd_cookie_account.go
    │   ├── v_1_jd_cookie_jd_order.go
    │   ├── v_1_jd_cookie_order.go
    │   ├── v_1_jd_cookie_change_history.go
    │   ├── v_1_jd_cookie_jd_order_change_history.go
    │   └── v_1_jd_cookie_order_change_history.go
    ├── entity/                       # 数据库实体映射(从数据库自动生成)
    │   ├── v_1_jd_cookie_account.go
    │   ├── v_1_jd_cookie_jd_order.go
    │   ├── v_1_jd_cookie_order.go
    │   ├── v_1_jd_cookie_change_history.go
    │   ├── v_1_jd_cookie_jd_order_change_history.go
    │   └── v_1_jd_cookie_order_change_history.go
    └── jd_cookie.go                  # 手动创建的业务模型文件(可选)
```

### 配置要求

确保项目根目录下存在`hack/config.yaml`配置文件，包含正确的数据库连接信息。根据现有项目结构，使用默认配置即可：

```yaml
# hack/config.yaml
database:
  default:
    link: "mysql:username:password@tcp(127.0.0.1:3306)/database_name"
    # 其他数据库配置...
```

**注意**：

- GoFrame会自动读取项目中的数据库配置
- 不需要单独配置`gfcli`相关参数
- 生成的文件命名遵循项目现有规范(`v_1_`前缀)

### 生成后的集成使用

生成DAO代码后，在logic层中可以直接使用生成的DAO对象：

```go
// 在logic层中使用生成的DAO
package jd_cookie

import (
    "context"
    "kami/internal/dao"
    "kami/internal/model/do"
    "kami/internal/model/entity"
    "github.com/gogf/gf/v2/frame/g"
)

// 示例1：查询Cookie账户
func GetCookieAccount(ctx context.Context, cookieId string) (*entity.V1JdCookieAccount, error) {
    return dao.V1JdCookieAccount.Ctx(ctx).Where(do.V1JdCookieAccount{
        CookieId: cookieId,
    }).One()
}

// 示例2：创建新的Cookie账户
func CreateCookieAccount(ctx context.Context, account *do.V1JdCookieAccount) (int64, error) {
    result, err := dao.V1JdCookieAccount.Ctx(ctx).Data(account).Insert()
    if err != nil {
        return 0, err
    }
    return result.LastInsertId()
}

// 示例3：更新Cookie状态
func UpdateCookieStatus(ctx context.Context, cookieId string, status int) error {
    _, err := dao.V1JdCookieAccount.Ctx(ctx).Where(do.V1JdCookieAccount{
        CookieId: cookieId,
    }).Data(do.V1JdCookieAccount{
        Status: status,
    }).Update()
    return err
}
```

**使用说明**：

- DAO对象命名遵循`V1[TableName]`格式
- Entity结构体用于接收查询结果
- DO结构体用于构建查询条件和更新数据
- 所有数据库操作都应该传入context

## 数据模型设计

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| cookie_id | varchar(64) | UNIQUE, NOT NULL | Cookie唯一标识 |
| cookie_value | text | NOT NULL | Cookie内容 |
| account_name | varchar(100) | | 账户名称 |
| status | tinyint | NOT NULL, DEFAULT 1 | 状态：1正常 2暂停 3失效 |
| failure_count | int | DEFAULT 0 | 连续失败次数 |
| last_used_at | datetime | | 最后使用时间 |
| suspend_until | datetime | | 暂停解除时间 |
| created_at | datetime | NOT NULL | 创建时间 |
| updated_at | datetime | NOT NULL | 更新时间 |
| remark | varchar(500) | | 备注信息 |

### 京东订单表 (jd_cookie_jd_order)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| jd_order_id | varchar(64) | UNIQUE, NOT NULL | 京东订单号 |
| pay_id | varchar(64) | NOT NULL | 支付ID |
| amount | decimal(10,2) | NOT NULL | 订单金额 |
| category | varchar(50) | NOT NULL | 商品品类 |
| cookie_id | varchar(64) | NOT NULL | 使用的Cookie ID |
| status | tinyint | NOT NULL, DEFAULT 1 | 状态：1待支付 2已支付 3已过期 4已取消 |
| wx_pay_url | text | | 微信支付链接 |
| wx_pay_expire_at | datetime | | 微信支付链接过期时间 |
| order_expire_at | datetime | NOT NULL | 订单过期时间(默认24小时) |
| current_order_id | bigint | | 当前关联的订单ID |
| created_at | datetime | NOT NULL | 创建时间 |
| updated_at | datetime | NOT NULL | 更新时间 |

### 订单表 (jd_cookie_order)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| order_id | varchar(64) | UNIQUE, NOT NULL | 订单号 |
| amount | decimal(10,2) | NOT NULL | 订单金额 |
| category | varchar(50) | NOT NULL | 商品品类 |
| jd_order_id | varchar(64) | | 关联的京东订单号 |
| status | tinyint | NOT NULL, DEFAULT 1 | 状态：1待支付 2已支付 3已过期 4已取消 |
| wx_pay_url | text | | 当前有效的微信支付链接 |
| last_request_at | datetime | NOT NULL | 最后请求时间 |
| created_at | datetime | NOT NULL | 创建时间 |
| updated_at | datetime | NOT NULL | 更新时间 |

### Cookie变更历史表 (jd_cookie_change_history)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| history_uuid | varchar(36) | UNIQUE, NOT NULL | 历史记录唯一标识 |
| cookie_id | varchar(64) | NOT NULL | Cookie ID |
| change_type | varchar(20) | NOT NULL | 变更类型：create,suspend,resume,fail,use |
| status_before | tinyint | | 变更前状态 |
| status_after | tinyint | | 变更后状态 |
| user_order_id | varchar(64) | | 关联的订单号 |
| failure_count | int | | 失败次数 |
| created_at | datetime | NOT NULL | 创建时间 |

### 京东订单变更历史表 (jd_cookie_jd_order_change_history)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| history_uuid | varchar(36) | UNIQUE, NOT NULL | 历史记录唯一标识 |
| jd_order_id | varchar(64) | NOT NULL | 京东订单号 |
| change_type | varchar(20) | NOT NULL | 变更类型：create,bind,unbind,pay,expire |
| order_id | varchar(64) | | 关联的订单号 |
| wx_pay_url | text | | 微信支付链接 |
| created_at | datetime | NOT NULL | 创建时间 |

### 订单变更历史表 (jd_cookie_order_change_history)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | bigint | PK, AUTO_INCREMENT | 主键ID |
| history_uuid | varchar(36) | UNIQUE, NOT NULL | 历史记录唯一标识 |
| order_id | varchar(64) | NOT NULL | 订单号 |
| change_type | varchar(20) | NOT NULL | 变更类型：create,bind,pay,expire |
| jd_order_id | varchar(64) | | 关联的京东订单号 |
| created_at | datetime | NOT NULL | 创建时间 |

### 数据库索引设计

```

-- Cookie账户表索引
CREATE INDEX idx_cookie_status ON jd_cookie_account(status);
CREATE INDEX idx_cookie_last_used ON jd_cookie_account(last_used_at);
CREATE INDEX idx_cookie_suspend_until ON jd_cookie_account(suspend_until);

-- 京东订单表索引
CREATE INDEX idx_jd_order_status ON jd_cookie_jd_order(status);
CREATE INDEX idx_jd_order_cookie ON jd_cookie_jd_order(cookie_id);
CREATE INDEX idx_jd_order_expire ON jd_cookie_jd_order(order_expire_at);
CREATE INDEX idx_jd_order_current_order ON jd_cookie_jd_order(current_order_id);

-- 订单表索引
CREATE INDEX idx_order_status ON jd_cookie_order(status);
CREATE INDEX idx_order_jd ON jd_cookie_order(jd_order_id);
CREATE INDEX idx_order_request ON jd_cookie_order(last_request_at);

-- 历史记录表索引
CREATE INDEX idx_cookie_history_cookie ON jd_cookie_change_history(cookie_id);
CREATE INDEX idx_cookie_history_type ON jd_cookie_change_history(change_type);
CREATE INDEX idx_jd_history_order ON jd_cookie_jd_order_change_history(jd_order_id);
CREATE INDEX idx_order_history_order ON jd_cookie_order_change_history(order_id);

```

## API接口设计

### Cookie管理接口

#### 1. 创建Cookie账户

**接口路径**: `POST /api/v1/jd-cookie/account/create`

**请求参数**:

```

{
  "cookie_value": "string, 必填, Cookie内容",
  "account_name": "string, 选填, 账户名称",
  "remark": "string, 选填, 备注信息"
}

```

**响应数据**:

```

{
  "code": 0,
  "message": "success",
  "data": {
    "cookie_id": "string, Cookie唯一标识",
    "status": "integer, 账户状态"
  }
}

```

#### 2. 批量创建Cookie账户

**接口路径**: `POST /api/v1/jd-cookie/account/batch-create`

**请求参数**:

```

{
  "cookies": [
    {
      "cookie_value": "string, 必填, Cookie内容",
      "account_name": "string, 选填, 账户名称",
      "remark": "string, 选填, 备注信息"
    }
  ]
}

```

#### 3. 查询Cookie账户列表

**接口路径**: `GET /api/v1/jd-cookie/account/list`

**请求参数**:

```

page: integer, 页码, 默认1
size: integer, 每页大小, 默认20
status: integer, 状态筛选, 可选
keyword: string, 关键字搜索, 可选

```

#### 4. 更新Cookie账户

**接口路径**: `PUT /api/v1/jd-cookie/account/update`

**请求参数**:

```

{
  "cookie_id": "string, 必填, Cookie ID",
  "cookie_value": "string, 选填, Cookie内容",
  "account_name": "string, 选填, 账户名称",
  "status": "integer, 选填, 状态",
  "remark": "string, 选填, 备注信息"
}

```

#### 5. 删除Cookie账户

**接口路径**: `DELETE /api/v1/jd-cookie/account/delete`

**请求参数**:

```

{
  "cookie_id": "string, 必填, Cookie ID"
}

```

#### 6. 批量检测Cookie状态

**接口路径**: `POST /api/v1/jd-cookie/account/batch-check`

**请求参数**:

```

{
  "cookie_ids": ["string", "Cookie ID列表"]
}

```

### 订单处理接口

#### 1. 创建订单

**接口路径**: `POST /api/v1/jd-cookie/order/create`

**请求参数**:

```

{
  "order_id": "string, 必填, 订单号",
  "amount": "number, 必填, 订单金额",
  "category": "string, 必填, 商品品类"
}

```

**响应数据**:

```

{
  "code": 0,
  "message": "success",
  "data": {
    "wx_pay_url": "string, 微信支付链接",
    "expire_time": "string, 链接过期时间",
    "jd_order_id": "string, 京东订单号"
  }
}

```

#### 2. 获取支付链接

**接口路径**: `POST /api/v1/jd-cookie/order/payment-url`

**请求参数**:

```

{
  "order_id": "string, 必填, 订单号"
}

```

#### 3. 查询订单状态

**接口路径**: `GET /api/v1/jd-cookie/order/status`

**请求参数**:

```

order_id: string, 订单号

```

#### 4. 订单列表查询

**接口路径**: `GET /api/v1/jd-cookie/order/list`

**请求参数**:

```

page: integer, 页码
size: integer, 每页大小
status: integer, 状态筛选
start_time: string, 开始时间
end_time: string, 结束时间

```

### 历史记录接口

#### 1. Cookie变更历史

**接口路径**: `GET /api/v1/jd-cookie/history/cookie`

**请求参数**:

```

cookie_id: string, Cookie ID
page: integer, 页码
size: integer, 每页大小
change_type: string, 变更类型筛选

```

#### 2. 订单变更历史

**接口路径**: `GET /api/v1/jd-cookie/history/order`

**请求参数**:

```

order_id: string, 订单号
order_type: string, 订单类型(user/jd)
page: integer, 页码
size: integer, 每页大小

```

## 业务逻辑设计

### Cookie轮询分配机制

系统实现智能的Cookie轮询分配策略，确保负载均衡和故障隔离：

```

flowchart TD
    A[接收下单请求] --> B{检查订单是否存在}
    B -->|存在| C{检查支付链接是否有效}
    C -->|有效| D[返回现有支付链接]
    C -->|无效| E[获取关联京东订单]
    B -->|不存在| F[获取可用Cookie]

    F --> G{Cookie获取成功?}
    G -->|失败| H[返回系统繁忙]
    G -->|成功| I[调用京东下单接口]
    
    I --> J{下单成功?}
    J -->|成功| K[创建京东订单记录]
    J -->|失败| L[处理Cookie失败]
    
    L --> M{连续失败次数 >= 3?}
    M -->|是| N[标记Cookie失效]
    M -->|否| O[暂停Cookie 10分钟]
    
    O --> P[记录暂停历史]
    N --> Q[记录失效历史]
    P --> F
    Q --> F
    
    K --> R[创建订单记录]
    R --> S[绑定订单关系]
    S --> T[返回支付链接]
    
    E --> U{京东订单是否可复用?}
    U -->|可复用| V[刷新微信支付链接]
    U -->|不可复用| F
    
    V --> W{刷新成功?}
    W -->|成功| X[更新支付链接]
    W -->|失败| F
    
    X --> T

```

### Cookie状态管理机制

Cookie状态管理包含以下核心逻辑：

1. **正常状态 (status=1)**：Cookie可正常使用
2. **暂停状态 (status=2)**：Cookie暂时不可用，有恢复时间
3. **失效状态 (status=3)**：Cookie永久不可用

状态转换规则：

- 下单失败1次：failure_count +1
- 下单失败且failure_count < 3：设置为暂停状态，suspend_until = 当前时间 + 10分钟
- 下单失败且failure_count >= 3：设置为失效状态
- 下单成功：重置failure_count为0，恢复正常状态

### 订单复用机制

京东订单复用遵循以下原则：

1. **时效性检查**：京东订单未过期（24小时内）
2. **状态检查**：订单状态为待支付
3. **独占性检查**：当前订单最后一次请求超过3分钟，或无关联订单
4. **链接有效性**：微信支付链接已过期，需要重新获取

### 支付链接管理与失效处理

微信支付链接管理策略，包含失效处理机制：

1. **首次获取**：创建京东订单时同时获取支付链接
2. **链接续期**：支付链接过期时，通过京东接口重新获取
3. **失效处理**：当Cookie失效导致支付链接获取失败时，自动切换新Cookie重新下单
4. **链接共享**：同一京东订单的支付链接可在不同订单间复用
5. **过期处理**：支付链接过期后自动清理，避免无效链接返回

#### Cookie失效处理流程

当在刷新微信支付链接时检测到Cookie失效，系统执行以下流程：

```mermaid
flowchart TD
    A[刷新支付链接失败] --> B{判断Cookie是否失效}
    B -->失效 C[标记原京东订单为失效状态]
    B -->非失效 D[返回其他错误]
    
    C --> E[记录京东订单变更历史]
    E --> F[处理原Cookie失败逻辑]
    F --> G[记录Cookie变更历史]
    G --> H[获取新的可用Cookie]
    
    H --> I{获取成功?}
    I -->成功 J[使用新Cookie重新下单]
    I -->失败 K[返回系统繁忙]
    
    J --> L{重新下单成功?}
    L -->成功 M[创建新京东订单]
    L -->失败 N[处理新Cookie失败]
    
    M --> O[更新订单关联关系]
    O --> P[记录订单变更历史]
    P --> Q[返回新的支付链接]
    
    N --> R[处理新Cookie失败逻辑]
    R --> H[继续尝试其他Cookie]
```

#### 关键操作说明

1. **京东订单失效标记**：
   - 将原京东订单状态设为“失效”
   - 清除与用户订单的关联关系
   - 记录“unbind”类型的变更历史

2. **Cookie失败处理**：
   - 按照原有逻辑处理Cookie失败（计数、暂停或失效）
   - 记录“fail”类型的Cookie变更历史

3. **重新下单流程**：
   - 使用新Cookie重新执行京东下单逻辑
   - 创建新的京东订单记录
   - 更新用户订单的关联关系

### 并发控制策略

系统采用以下并发控制机制：

1. **订单分配锁**：使用Redis分布式锁确保Cookie分配的原子性
2. **订单创建锁**：基于订单号的分布式锁，避免重复创建
3. **状态更新锁**：Cookie状态更新时使用数据库行锁
4. **轮询计数器**：使用Redis原子操作维护Cookie轮询索引

### 变更记录机制增强

针对Cookie失效导致的重新下单场景，系统需要记录更详细的变更信息：

#### Cookie变更记录扩展

在原有变更类型基础上，新增以下场景：

- **refresh_fail**：Cookie在刷新支付链接时失效
- **replaced**：Cookie因失效被新Cookie替代

#### 京东订单变更记录扩展

新增以下变更类型：

- **invalid**：订单因Cookie失效被标记为无效
- **replace**：订单被新订单替代

#### 订单变更记录扩展

新增以下变更类型：

- **rebind**：订单重新绑定到新的京东订单

#### 历史记录关联关系

为了保持变更记录的关联性，在Cookie失效处理过程中：

1. **Cookie失效记录**：

   ```
   change_type: "refresh_fail"
   user_order_id: 当前处理的订单号
   status_before: 1 (正常)
   status_after: 3 (失效)
   ```

2. **京东订单失效记录**：

   ```
   change_type: "invalid"
   order_id: 关联的订单号
   ```

3. **新京东订单创建记录**：

   ```
   change_type: "create"
   order_id: 相同的订单号
   ```

4. **订单重新绑定记录**：

   ```
   change_type: "rebind"
   jd_order_id: 新的京东订单号
   ```

## 变更记录机制设计原则

系统建立完善的变更记录机制，遵循以下设计原则：

1. **完整性**：记录所有关键状态变更
2. **可追溯性**：每条记录包含唯一标识和时间戳
3. **关联性**：记录变更的关联关系
4. **性能优化**：异步写入历史记录，不影响主流程

### Cookie变更记录

Cookie变更记录涵盖以下事件：

- **create**：Cookie账户创建
- **suspend**：Cookie暂停使用
- **resume**：Cookie恢复使用
- **fail**：Cookie下单失败
- **use**：Cookie使用记录

### 订单变更记录

订单变更记录分为京东订单和订单两类：

**京东订单变更**：

- **create**：京东订单创建
- **bind**：绑定订单
- **unbind**：解绑订单
- **pay**：订单支付完成
- **expire**：订单过期

**订单变更**：

- **create**：订单创建、
- **bind**：绑定京东订单
- **pay**：订单支付完成
- **expire**：订单过期

## 性能优化策略

### 缓存策略

1. **Cookie状态缓存**：将可用Cookie列表缓存到Redis，减少数据库查询
2. **轮询索引缓存**：使用Redis维护Cookie轮询的当前索引
3. **订单状态缓存**：缓存活跃订单状态，提高查询响应速度
4. **支付链接缓存**：缓存有效的支付链接，避免重复获取

### 数据库优化

1. **索引优化**：为关键查询字段建立合适索引
2. **分页查询**：大数据量查询采用游标分页
3. **读写分离**：历史记录查询使用只读实例
4. **连接池优化**：合理配置数据库连接池参数

### 异步处理

1. **历史记录异步写入**：使用消息队列异步记录变更历史
2. **状态检测任务**：定期异步检测Cookie有效性
3. **过期订单清理**：定期清理过期订单和支付链接
4. **统计数据更新**：异步更新统计和监控数据

## 监控与告警

### 关键指标监控

1. **Cookie可用率**：监控可用Cookie占比
2. **下单成功率**：统计京东下单成功率
3. **订单复用率**：监控订单复用效率
4. **响应时间**：监控接口响应时间
5. **错误率**：统计各类错误发生率

### 告警策略

1. **Cookie不足告警**：可用Cookie数量低于阈值时告警
2. **下单失败告警**：下单失败率超过阈值时告警
3. **系统异常告警**：关键服务异常时立即告警
4. **性能告警**：响应时间超过阈值时告警

### 日志记录

系统采用结构化日志记录，包含以下信息：

- 请求ID：用于链路追踪
- 用户标识：便于问题排查
- 操作类型：明确操作行为
- 执行结果：记录成功或失败
- 执行时长：性能分析依据

## 安全考虑

### 数据安全

1. **Cookie加密存储**：敏感Cookie信息加密存储
2. **支付链接保护**：支付链接访问控制和时效性验证
3. **操作日志审计**：完整记录敏感操作日志
4. **数据脱敏**：日志和监控中敏感数据脱敏处理

### 接口安全

1. **身份认证**：所有接口要求有效的身份认证
2. **权限控制**：基于角色的接口访问控制
3. **参数验证**：严格验证所有输入参数
4. **频率限制**：实施接口调用频率限制

### 系统安全

1. **SQL注入防护**：使用参数化查询防止SQL注入
2. **XSS防护**：输出数据进行适当编码
3. **CSRF防护**：实施CSRF保护机制
4. **错误信息保护**：避免泄露敏感系统信息

## 测试策略

### 单元测试

针对核心业务逻辑编写单元测试：

- Cookie轮询分配逻辑测试
- 状态管理机制测试
- 订单复用逻辑测试
- 支付链接管理测试

### 集成测试

验证各模块间的集成：

- API接口集成测试
- 数据库操作集成测试
- 外部服务集成测试
- 缓存操作集成测试

### 性能测试

评估系统性能表现：

- 并发下单压力测试
- Cookie分配性能测试
- 数据库查询性能测试
- 缓存命中率测试

### 故障测试

验证系统容错能力：

- Cookie失效场景测试
- 京东接口异常测试
- 数据库连接故障测试
- 缓存服务故障测试
