# 管理端支付用户统计API接口文档

## 概述

本功能为管理端提供了完整的真实支付用户统计分析功能，包括：
- 支付用户数量和信息统计
- 支付金额分布分析
- 时间维度的支付统计
- 复购用户和高消费用户分析
- 支持自定义时间段查询

## 技术实现

### 核心文件结构
```
src/main/java/com/dora/
├── dto/AdminPaymentUserDto.java                    # 数据传输对象
├── mapper/AdminPaymentUserMapper.java             # 数据访问接口
├── service/AdminPaymentUserService.java           # 服务接口
├── service/impl/AdminPaymentUserServiceImpl.java  # 服务实现
└── controller/AdminPaymentUserController.java     # 控制器

src/main/resources/mapper/
└── AdminPaymentUserMapper.xml                     # SQL映射文件
```

### 数据库依赖
- `order` 表：订单数据（status=1表示已支付）
- `user` 表：用户基本信息
- `membership_plan` 表：会员套餐信息

## API接口详情

### 1. 获取支付用户统计数据

**接口地址**：`GET /admin/payment-users/statistics`

**请求参数**：
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| startDate | String | 否 | 开始日期 | 2024-01-01 |
| endDate | String | 否 | 结束日期 | 2024-01-31 |

**响应数据**：
```json
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "overview": {
      "totalPaymentUsers": 150,
      "totalPaymentOrders": 200,
      "totalPaymentAmount": 25000.00,
      "avgOrderAmount": 125.00,
      "newVipUsers": 80,
      "newSvipUsers": 30,
      "repeatPurchaseUsers": 45,
      "firstTimeUsers": 105
    },
    "paymentUsers": [
      {
        "userId": 1001,
        "username": "用户001",
        "phone": "138****1234",
        "role": 2,
        "orderCount": 3,
        "totalAmount": 299.00,
        "lastPaidAt": "2024-01-15T14:30:00",
        "firstPaidAt": "2024-01-01T10:15:00",
        "paymentMethod": 2,
        "isRepeatUser": true
      }
    ],
    "amountDistribution": {
      "users0To50": 20,
      "users50To100": 35,
      "users100To200": 45,
      "users200To500": 35,
      "usersAbove500": 15
    },
    "dailyStats": [
      {
        "date": "2024-01-01",
        "paymentUsers": 12,
        "paymentOrders": 15,
        "paymentAmount": 1500.00,
        "newVipUsers": 8,
        "newSvipUsers": 2
      }
    ]
  }
}
```

### 2. 获取支付用户详情列表

**接口地址**：`GET /admin/payment-users/list`

**请求参数**：
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| startDate | String | 否 | 开始日期 | 2024-01-01 |
| endDate | String | 否 | 结束日期 | 2024-01-31 |
| role | Integer | 否 | 用户角色筛选 | 2 |
| onlyRepeatUsers | Boolean | 否 | 只显示复购用户 | true |
| minAmount | BigDecimal | 否 | 最小支付金额 | 100 |
| maxAmount | BigDecimal | 否 | 最大支付金额 | 500 |
| sortField | String | 否 | 排序字段 | totalAmount |
| sortOrder | String | 否 | 排序方向 | DESC |
| page | Integer | 否 | 页码 | 1 |
| size | Integer | 否 | 每页大小 | 10 |

**响应数据**：
```json
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "users": [...],
    "total": 150,
    "currentPage": 1,
    "pageSize": 10,
    "totalPages": 15
  }
}
```

### 3. 便捷统计接口

#### 3.1 今日支付用户统计
**接口地址**：`GET /admin/payment-users/statistics/today`

#### 3.2 本周支付用户统计
**接口地址**：`GET /admin/payment-users/statistics/week`

#### 3.3 本月支付用户统计
**接口地址**：`GET /admin/payment-users/statistics/month`

#### 3.4 复购用户列表
**接口地址**：`GET /admin/payment-users/list/repeat-users`

**请求参数**：
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| startDate | String | 否 | 开始日期 | 2024-01-01 |
| endDate | String | 否 | 结束日期 | 2024-01-31 |
| page | Integer | 否 | 页码 | 1 |
| size | Integer | 否 | 每页大小 | 10 |

#### 3.5 高消费用户列表
**接口地址**：`GET /admin/payment-users/list/top-spenders`

**请求参数**：同复购用户列表

## 数据字段说明

### 用户角色定义
- 1：普通用户
- 2：VIP用户
- 3：SVIP用户

### 支付方式定义
- 1：支付宝
- 2：微信支付

### 订单状态定义
- 0：待支付
- 1：已完成（已支付）
- 2：已取消
- 3：支付失败

## 性能优化

1. **SQL优化**：使用了合适的索引和查询优化
2. **分页查询**：支持大数据量分页显示
3. **缓存机制**：可根据需要添加Redis缓存
4. **异步处理**：适用于大数据量统计

## 权限控制

- 所有接口都需要管理员权限验证
- 使用 `AdminSecurityUtil.getCurrentAdminId()` 验证管理员身份

## 错误处理

```json
{
  "code": 500,
  "message": "查询支付用户统计数据失败: 具体错误信息",
  "data": null
}
```

## 使用示例

### 查询本月所有支付用户统计
```
GET /admin/payment-users/statistics/month
```

### 查询指定时间段的复购用户
```
GET /admin/payment-users/list/repeat-users?startDate=2024-01-01&endDate=2024-01-31&page=1&size=10
```

### 查询高消费VIP用户（支付金额>200元）
```
GET /admin/payment-users/list?role=2&minAmount=200&sortField=totalAmount&sortOrder=DESC&page=1&size=20
```

## 注意事项

1. **时间范围**：如果不指定时间范围，将统计所有历史数据
2. **数据一致性**：基于已支付订单（status=1）进行统计
3. **复购定义**：有多次支付记录的用户
4. **新增VIP/SVIP**：根据购买的会员套餐target_role字段判断
5. **金额分布**：按用户总支付金额进行区间统计

## 扩展功能建议

1. **导出功能**：支持Excel导出统计数据
2. **图表展示**：前端配合实现数据可视化
3. **定时报告**：定期生成支付用户分析报告
4. **对比分析**：不同时间段的数据对比
5. **预测分析**：基于历史数据的趋势预测





