Files
akmon/doc_zhipao/ANALYTICS_RPC_DEPLOYMENT_GUIDE.md
2026-01-20 08:04:15 +08:00

214 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Analytics RPC 函数部署指南
## 概述
为 Analytics 页面创建了4个主要的 RPC 函数,提供教师数据分析功能。
## 创建的 RPC 函数
### 1. `get_teacher_analytics` - 教师统计数据
**功能**: 获取教师的核心统计指标
**参数**:
- `p_teacher_id` (uuid, 可选) - 教师ID默认当前用户
- `p_start_date` (date, 可选) - 开始日期默认30天前
- `p_end_date` (date, 可选) - 结束日期,默认今天
**返回字段**:
- `total_students` - 学生总数
- `total_assignments` - 作业总数
- `completion_rate` - 完成率(%)
- `average_score` - 平均分
- `active_classes` - 活跃班级数
- `total_submissions` - 总提交数
- `pending_reviews` - 待评分数
- `graded_submissions` - 已评分数
### 2. `get_top_performers` - 优秀学员排行
**功能**: 获取表现优秀的学员排行榜
**参数**:
- `p_teacher_id` (uuid, 可选) - 教师ID
- `p_start_date` (date, 可选) - 开始日期
- `p_end_date` (date, 可选) - 结束日期
- `p_limit` (integer, 可选) - 返回数量默认10
**返回字段**:
- `student_id` - 学生ID
- `name` - 学生姓名
- `username` - 用户名
- `avatar_url` - 头像地址
- `score` - 平均分
- `submission_count` - 提交数量
- `completion_rate` - 完成率
- `class_name` - 班级名称
- `rank_position` - 排名位置
### 3. `get_chart_data` - 图表数据
**功能**: 获取各种图表数据
**参数**:
- `p_teacher_id` (uuid, 可选) - 教师ID
- `p_start_date` (date, 可选) - 开始日期
- `p_end_date` (date, 可选) - 结束日期
- `p_type` (text, 可选) - 图表类型,默认'completion_rate'
**支持的图表类型**:
- `completion_rate` - 完成率趋势
- `score_distribution` - 成绩分布
- `submission_trend` - 提交趋势
**返回字段**:
- `date_key` - 日期键
- `value` - 数值
- `label` - 标签
- `count` - 计数
### 4. `get_recent_activities` - 近期活动
**功能**: 获取近期活动记录
**参数**:
- `p_teacher_id` (uuid, 可选) - 教师ID
- `p_limit` (integer, 可选) - 返回数量默认20
**返回字段**:
- `activity_id` - 活动ID
- `activity_type` - 活动类型
- `title` - 标题
- `description` - 描述
- `student_name` - 学生姓名
- `assignment_title` - 作业标题
- `activity_time` - 活动时间
- `time_ago` - 相对时间
## 部署步骤
### 1. 执行 SQL 文件
```bash
# 在 Supabase SQL Editor 中执行
# 或通过 psql 命令行执行
psql -h [your-host] -U [your-user] -d [your-database] -f analytics_rpc_functions.sql
```
### 2. 验证函数创建
```sql
-- 检查函数是否创建成功
SELECT routine_name, routine_type
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'get_%analytics%'
OR routine_name LIKE 'get_top_performers'
OR routine_name LIKE 'get_chart_data'
OR routine_name LIKE 'get_recent_activities';
```
### 3. 测试函数调用
```sql
-- 测试教师统计数据
SELECT * FROM public.get_teacher_analytics();
-- 测试优秀学员排行
SELECT * FROM public.get_top_performers(limit => 5);
-- 测试图表数据
SELECT * FROM public.get_chart_data(p_type => 'completion_rate');
-- 测试近期活动
SELECT * FROM public.get_recent_activities(p_limit => 10);
```
## 前端使用示例
### Analytics 页面调用
```vue
<!-- 统计数据 -->
<supadb
rpc="get_teacher_analytics"
:params="analyticsParams"
@process-data="processStatisticsData"
/>
<!-- 优秀学员 -->
<supadb
rpc="get_top_performers"
:params="performersParams"
@process-data="processPerformersData"
/>
<!-- 图表数据 -->
<supadb
rpc="get_chart_data"
:params="chartParams"
@process-data="processChartData"
/>
```
### 参数示例
```typescript
// Analytics 参数
const analyticsParams = ref({
teacher_id: 'current_teacher_id', // 可选,默认当前用户
start_date: '2024-01-01',
end_date: '2024-12-31'
})
// 优秀学员参数
const performersParams = ref({
teacher_id: 'current_teacher_id',
limit: 10,
start_date: '2024-01-01',
end_date: '2024-12-31'
})
// 图表数据参数
const chartParams = ref({
teacher_id: 'current_teacher_id',
type: 'completion_rate', // 或 'score_distribution', 'submission_trend'
start_date: '2024-01-01',
end_date: '2024-12-31'
})
```
## 性能优化
### 创建的索引
- `idx_assignments_teacher_date` - 优化按教师和日期查询
- `idx_assignments_class_due` - 优化按班级和截止日期查询
- `idx_submissions_assignment_date` - 优化按作业和提交时间查询
- `idx_submissions_student_score` - 优化按学生和分数查询
- `idx_user_classes_role` - 优化用户班级角色查询
## 安全特性
### 权限控制
- 所有函数都验证调用者是否为教师
- 只能查看自己教授班级的数据
- 使用 `SECURITY DEFINER` 确保权限一致性
### RLS 策略
- 为作业表添加了行级安全策略
- 确保教师只能访问自己的数据
## 注意事项
1. **数据完整性**: 确保 `ak_user_classes` 表正确维护了师生关系
2. **时区处理**: 函数使用 `TIMESTAMP WITH TIME ZONE` 处理时间
3. **空值处理**: 所有计算都考虑了空值情况
4. **性能监控**: 建议监控函数执行时间,必要时进一步优化
## 故障排除
### 常见错误
1. **"用户不是教师或不存在"** - 检查用户角色和ID
2. **数据为空** - 检查师生关系配置和时间范围
3. **权限错误** - 确保函数权限正确授予
### 调试技巧
```sql
-- 检查用户角色
SELECT id, username, role FROM public.ak_users WHERE id = auth.uid();
-- 检查师生关系
SELECT * FROM public.ak_user_classes WHERE user_id = auth.uid();
-- 检查作业数据
SELECT COUNT(*) FROM public.ak_assignments WHERE teacher_id = auth.uid();
```
部署完成后Analytics 页面应该能够正常加载和显示数据分析功能。