- 新增元数据变更中心页面 (metadatachange/index.vue) - 集成统计卡片显示变更数据 - 支持按变更类型、操作类型、同步状态分组统计 - 支持趋势统计图表展示 - 优化查询条件布局,移至页面顶部 - 新增实时同步统计页面 (statistics/realtime/index.vue) - 显示实时同步服务状态和控制按钮 - 统计启用实时同步的对象数量 - 自动刷新统计数据(30秒间隔) - 优化数据同步页面 (datasync/index.vue) - 修正字段映射以匹配API响应 - 更新统计卡片显示实际数据 - 优化同步日志统计页面 (statistics/synclog/index.vue) - 更新表格列以匹配API响应结构 - 更新查询参数和映射函数 - 更新导航栏菜单 (Navbar/index.vue) - 添加元数据变更中心菜单项 - 新增API接口 (realtimeservice.js) - 添加getStatistics函数获取实时同步统计数据 - 新增接口文档 - DataiIntegrationRealtimeSyncController 接口文档 - DataiIntegrationRealtimeSyncLogController 接口文档
389 lines
12 KiB
Markdown
389 lines
12 KiB
Markdown
# 接口文档模板
|
||
|
||
## 接口信息
|
||
|
||
- **接口名称**: 获取实时同步日志统计信息
|
||
- **接口路径**: /integration/realtimelog/statistics
|
||
- **请求方法**: GET
|
||
- **模块归属**: Salesforce 集成
|
||
- **版本号**: v1.0
|
||
- **创建日期**: 2026-01-13
|
||
- **最后更新**: 2026-01-13
|
||
|
||
## 功能描述
|
||
|
||
获取实时同步日志的详细统计信息,支持多种分组维度,包括综合统计、按对象统计、按操作类型统计、按状态统计和按时间趋势统计。该接口提供了对实时同步日志数据的全面分析能力,帮助用户了解同步服务的运行状况和性能指标。
|
||
|
||
## 请求参数
|
||
|
||
### 查询参数
|
||
|
||
| 参数名 | 类型 | 必填 | 描述 | 示例 | 默认值 |
|
||
|--------|------|------|------|------|--------|
|
||
| groupBy | String | 否 | 分组维度,可选值:overall(综合)、object(对象)、operationType(操作类型)、status(状态)、time(时间趋势) | overall | overall |
|
||
| timeUnit | String | 否 | 时间单位,当 groupBy=time 时有效,可选值:day(天)、week(周)、month(月)、quarter(季度) | day | day |
|
||
| objectName | String | 否 | 对象名称,用于过滤特定对象的统计信息 | Account | - |
|
||
| operationType | String | 否 | 操作类型,用于过滤特定操作类型的统计信息,可选值:CREATE、UPDATE、DELETE、UNDELETE | CREATE | - |
|
||
| syncStatus | String | 否 | 同步状态,用于过滤特定状态的统计信息,可选值:SUCCESS、FAILED、PENDING | SUCCESS | - |
|
||
| startTime | String | 否 | 开始时间,格式:yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss | 2026-01-01 | 30天前 |
|
||
| endTime | String | 否 | 结束时间,格式:yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss | 2026-01-13 | 当前时间 |
|
||
|
||
## 响应数据
|
||
|
||
### 成功响应
|
||
|
||
**HTTP 状态码**: 200 OK
|
||
|
||
**综合统计响应 (groupBy=overall)**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取综合统计信息成功",
|
||
"data": {
|
||
"totalCount": 1000,
|
||
"successCount": 950,
|
||
"failureCount": 40,
|
||
"pendingCount": 10,
|
||
"successRate": 95.0,
|
||
"avgProcessingTime": 2.5
|
||
}
|
||
}
|
||
```
|
||
|
||
**按对象统计响应 (groupBy=object)**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取对象统计信息成功",
|
||
"data": [
|
||
{
|
||
"objectName": "Account",
|
||
"totalCount": 500,
|
||
"successCount": 480,
|
||
"failureCount": 15,
|
||
"pendingCount": 5,
|
||
"successRate": 96.0,
|
||
"avgProcessingTime": 2.3
|
||
},
|
||
{
|
||
"objectName": "Contact",
|
||
"totalCount": 300,
|
||
"successCount": 285,
|
||
"failureCount": 12,
|
||
"pendingCount": 3,
|
||
"successRate": 95.0,
|
||
"avgProcessingTime": 2.7
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**按操作类型统计响应 (groupBy=operationType)**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取操作类型统计信息成功",
|
||
"data": [
|
||
{
|
||
"operationType": "CREATE",
|
||
"totalCount": 400,
|
||
"successCount": 390,
|
||
"failureCount": 8,
|
||
"pendingCount": 2,
|
||
"successRate": 97.5,
|
||
"avgProcessingTime": 2.1
|
||
},
|
||
{
|
||
"operationType": "UPDATE",
|
||
"totalCount": 500,
|
||
"successCount": 475,
|
||
"failureCount": 20,
|
||
"pendingCount": 5,
|
||
"successRate": 95.0,
|
||
"avgProcessingTime": 2.8
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**按状态统计响应 (groupBy=status)**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取状态统计信息成功",
|
||
"data": [
|
||
{
|
||
"syncStatus": "SUCCESS",
|
||
"totalCount": 950,
|
||
"successRate": 100.0,
|
||
"avgProcessingTime": 2.3
|
||
},
|
||
{
|
||
"syncStatus": "FAILED",
|
||
"totalCount": 40,
|
||
"successRate": 0.0,
|
||
"avgProcessingTime": 3.5
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**按时间趋势统计响应 (groupBy=time)**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取时间趋势统计信息成功",
|
||
"data": [
|
||
{
|
||
"timeKey": "2026-01-01",
|
||
"totalCount": 100,
|
||
"successCount": 95,
|
||
"failureCount": 4,
|
||
"pendingCount": 1,
|
||
"successRate": 95.0,
|
||
"totalRetryCount": 5,
|
||
"maxRetryCount": 2,
|
||
"avgProcessingTime": 2.4
|
||
},
|
||
{
|
||
"timeKey": "2026-01-02",
|
||
"totalCount": 120,
|
||
"successCount": 115,
|
||
"failureCount": 3,
|
||
"pendingCount": 2,
|
||
"successRate": 95.83,
|
||
"totalRetryCount": 8,
|
||
"maxRetryCount": 3,
|
||
"avgProcessingTime": 2.6
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 字段说明
|
||
|
||
| 字段名 | 类型 | 描述 | 示例 |
|
||
|--------|------|------|------|
|
||
| success | Boolean | 操作是否成功 | true |
|
||
| message | String | 操作结果消息 | "获取综合统计信息成功" |
|
||
| data | Object/Array | 统计数据,根据 groupBy 参数返回不同结构 | - |
|
||
| totalCount | Integer | 总记录数 | 1000 |
|
||
| successCount | Integer | 成功记录数 | 950 |
|
||
| failureCount | Integer | 失败记录数 | 40 |
|
||
| pendingCount | Integer | 待处理记录数 | 10 |
|
||
| successRate | Double | 成功率(百分比) | 95.0 |
|
||
| avgProcessingTime | Double | 平均处理时间(秒) | 2.5 |
|
||
| objectName | String | 对象名称 | "Account" |
|
||
| operationType | String | 操作类型 | "CREATE" |
|
||
| syncStatus | String | 同步状态 | "SUCCESS" |
|
||
| timeKey | String | 时间键,格式根据 timeUnit 参数变化 | "2026-01-01" |
|
||
| totalRetryCount | Integer | 总重试次数 | 5 |
|
||
| maxRetryCount | Integer | 最大重试次数 | 2 |
|
||
|
||
### 失败响应
|
||
|
||
**HTTP 状态码**: 500
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"message": "获取统计信息失败: [错误详情]",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
## 接口示例
|
||
|
||
### 请求示例
|
||
|
||
**获取综合统计**:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost/dev-api/integration/realtimelog/statistics?groupBy=overall" \
|
||
-H "Authorization: Bearer [token]"
|
||
```
|
||
|
||
**按对象统计**:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost/dev-api/integration/realtimelog/statistics?groupBy=object&startTime=2026-01-01&endTime=2026-01-13" \
|
||
-H "Authorization: Bearer [token]"
|
||
```
|
||
|
||
**按时间趋势统计(按天)**:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost/dev-api/integration/realtimelog/statistics?groupBy=time&timeUnit=day&startTime=2026-01-01&endTime=2026-01-13" \
|
||
-H "Authorization: Bearer [token]"
|
||
```
|
||
|
||
**按时间趋势统计(按月)**:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost/dev-api/integration/realtimelog/statistics?groupBy=time&timeUnit=month&startTime=2026-01-01&endTime=2026-01-13" \
|
||
-H "Authorization: Bearer [token]"
|
||
```
|
||
|
||
**按对象和时间趋势统计**:
|
||
|
||
```bash
|
||
curl -X GET "http://localhost/dev-api/integration/realtimelog/statistics?groupBy=time&timeUnit=day&objectName=Account&startTime=2026-01-01&endTime=2026-01-13" \
|
||
-H "Authorization: Bearer [token]"
|
||
```
|
||
|
||
### 响应示例
|
||
|
||
**成功 - 综合统计**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取综合统计信息成功",
|
||
"data": {
|
||
"totalCount": 1000,
|
||
"successCount": 950,
|
||
"failureCount": 40,
|
||
"pendingCount": 10,
|
||
"successRate": 95.0,
|
||
"avgProcessingTime": 2.5
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功 - 时间趋势统计**:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取时间趋势统计信息成功",
|
||
"data": [
|
||
{
|
||
"timeKey": "2026-01-01",
|
||
"totalCount": 100,
|
||
"successCount": 95,
|
||
"failureCount": 4,
|
||
"pendingCount": 1,
|
||
"successRate": 95.0,
|
||
"totalRetryCount": 5,
|
||
"maxRetryCount": 2,
|
||
"avgProcessingTime": 2.4
|
||
},
|
||
{
|
||
"timeKey": "2026-01-02",
|
||
"totalCount": 120,
|
||
"successCount": 115,
|
||
"failureCount": 3,
|
||
"pendingCount": 2,
|
||
"successRate": 95.83,
|
||
"totalRetryCount": 8,
|
||
"maxRetryCount": 3,
|
||
"avgProcessingTime": 2.6
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败**:
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"message": "获取统计信息失败: 时间格式解析失败",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
## 错误处理
|
||
|
||
接口在以下情况下会返回错误响应:
|
||
|
||
1. **时间格式错误**: 当 startTime 或 endTime 参数格式不正确时,返回错误信息
|
||
2. **数据库查询异常**: 当数据库查询失败时,返回错误信息
|
||
3. **参数验证失败**: 当 groupBy 参数值不在允许的范围内时,默认使用 overall
|
||
|
||
## 注意事项
|
||
|
||
1. **时间格式**: startTime 和 endTime 参数支持两种格式:
|
||
- 日期格式:yyyy-MM-dd(如 2026-01-13)
|
||
- 日期时间格式:yyyy-MM-dd HH:mm:ss(如 2026-01-13 14:30:00)
|
||
|
||
2. **默认时间范围**: 如果未提供 startTime 和 endTime 参数,默认查询最近 30 天的数据
|
||
|
||
3. **时间单位**: timeUnit 参数仅在 groupBy=time 时生效,支持以下值:
|
||
- day: 按天统计,时间键格式为 yyyy-MM-dd
|
||
- week: 按周统计,时间键格式为 yyyy-w(如 2026-02 表示 2026 年第 2 周)
|
||
- month: 按月统计,时间键格式为 yyyy-MM
|
||
- quarter: 按季度统计,时间键格式为 yyyy-Qn(如 2026-Q1 表示 2026 年第 1 季度)
|
||
|
||
4. **数据完整性**: 时间趋势统计会自动填充缺失的时间点,确保返回的时间序列数据完整
|
||
|
||
5. **权限要求**: 调用该接口需要拥有 `integration:realtimelog:statistics` 权限
|
||
|
||
6. **性能考虑**: 对于大数据量的统计查询,建议合理设置时间范围以避免查询超时
|
||
|
||
## 相关接口
|
||
|
||
- [实时同步状态](DataiIntegrationRealtimeSyncController/0001-realtime-sync-status.md) - 获取实时同步服务的运行状态
|
||
- [实时同步统计](DataiIntegrationRealtimeSyncController/0006-realtime-sync-statistics.md) - 获取实时同步服务的统计信息
|
||
- [同步日志统计](DataiIntegrationSyncLogController/0002-log-statistics.md) - 获取同步日志的统计信息
|
||
|
||
## 实现细节
|
||
|
||
### 技术架构
|
||
|
||
该接口采用分层架构实现:
|
||
|
||
1. **Controller 层**: `DataiIntegrationRealtimeSyncLogController` 处理 HTTP 请求,参数验证和响应封装
|
||
2. **Service 层**: `IDataiIntegrationRealtimeSyncLogService` 和 `DataiIntegrationRealtimeSyncLogServiceImpl` 实现业务逻辑和数据处理
|
||
3. **Mapper 层**: `DataiIntegrationRealtimeSyncLogMapper` 和对应的 XML 文件实现数据库查询
|
||
|
||
### 核心逻辑
|
||
|
||
1. **参数处理**: 接收并验证查询参数,设置默认值
|
||
2. **分组策略**: 根据 groupBy 参数选择不同的统计策略
|
||
3. **时间处理**: 自动处理时间范围,生成完整的时间键序列
|
||
4. **数据填充**: 填充缺失的时间点数据,确保统计结果完整
|
||
5. **指标计算**: 计算成功率、平均处理时间等关键指标
|
||
|
||
### 数据库查询
|
||
|
||
使用 MyBatis 实现 SQL 查询,支持动态条件过滤和分组聚合:
|
||
|
||
- 综合统计:使用 COUNT、SUM、AVG 聚合函数
|
||
- 分组统计:使用 GROUP BY 子句按指定维度分组
|
||
- 时间趋势:使用 DATE_FORMAT 函数按时间单位分组
|
||
|
||
### 性能优化
|
||
|
||
1. 使用数据库索引加速查询
|
||
2. 合理设置时间范围避免全表扫描
|
||
3. 使用聚合函数减少数据传输量
|
||
|
||
## 测试信息
|
||
|
||
### 测试环境
|
||
|
||
- **环境**: 开发环境
|
||
- **版本**: v1.0
|
||
- **数据库**: MySQL 8.0
|
||
|
||
### 测试用例
|
||
|
||
| 测试场景 | 输入参数 | 预期结果 | 实际结果 | 状态 |
|
||
|----------|----------|----------|----------|------|
|
||
| 获取综合统计 | groupBy=overall | 返回综合统计数据 | 综合统计数据 | 通过 |
|
||
| 按对象统计 | groupBy=object | 返回对象统计列表 | 对象统计列表 | 通过 |
|
||
| 按操作类型统计 | groupBy=operationType | 返回操作类型统计列表 | 操作类型统计列表 | 通过 |
|
||
| 按状态统计 | groupBy=status | 返回状态统计列表 | 状态统计列表 | 通过 |
|
||
| 按天趋势统计 | groupBy=time&timeUnit=day | 返回按天统计的趋势数据 | 按天趋势数据 | 通过 |
|
||
| 按月趋势统计 | groupBy=time&timeUnit=month | 返回按月统计的趋势数据 | 按月趋势数据 | 通过 |
|
||
| 按对象过滤 | groupBy=object&objectName=Account | 返回 Account 对象的统计数据 | Account 统计数据 | 通过 |
|
||
| 时间范围过滤 | startTime=2026-01-01&endTime=2026-01-13 | 返回指定时间范围的统计数据 | 时间范围统计数据 | 通过 |
|
||
| 默认时间范围 | 不提供时间参数 | 返回最近 30 天的统计数据 | 最近 30 天数据 | 通过 |
|
||
| 无效时间格式 | startTime=invalid | 返回错误信息 | 错误信息 | 通过 |
|