diff --git a/.claude/skills/课评生成/skill.md b/.claude/skills/课评生成/skill.md index b093eb2..9671618 100644 --- a/.claude/skills/课评生成/skill.md +++ b/.claude/skills/课评生成/skill.md @@ -49,17 +49,97 @@ type: skill ### 工作流程 ``` -读取笔记 → 匹配课程计划 → 读取学生画像 → 润色生成 → 确认 → 保存 +获取API出勤数据 → 读取笔记 → 匹配课程计划 → 读取学生画像 → 润色生成 → 确认 → 保存 ``` +### 0. 获取API出勤数据(必须第一步执行) + +**⚠️ 这是强制步骤,必须在读取笔记之前执行!** + +在开始处理任何课评之前,**必须先调用公司API获取橙子老师近期的出勤数据**,用于: +1. 确认橙子老师实际带了哪些班级 +2. 获取每个班级的**真实授课日期**(`teaching_date`),用于课评文件名 + +**执行命令**(Python): +```python +import urllib.request +import json +from datetime import datetime, timedelta + +API_BASE_URL = "https://api.qonnwolf.com/api/v1" +AUTHORIZATION = "Bearer <从.env文件读取>" + +# 计算最近7天的日期范围 +end_date = datetime.now() +start_date = end_date - timedelta(days=7) + +# 查询橙子老师的出勤数据 +dates_to_query = [] +current = start_date +while current <= end_date: + dates_to_query.append(current.strftime('%Y-%m-%d')) + current += timedelta(days=1) + +results = [] +for date in dates_to_query: + url = f"{API_BASE_URL}/reports/teaching-schedule?teaching_date={date}" + req = urllib.request.Request(url) + req.add_header('Authorization', AUTHORIZATION) + try: + with urllib.request.urlopen(req) as response: + data = json.loads(response.read().decode('utf-8')) + for item in data['data']['items']: + teacher = item.get('teacher_name', '') + if '橙子' in teacher or '程城' in teacher: + results.append({ + 'teaching_date': item['teaching_date'], # API返回的真实授课日期 + 'class_name': item['class_name'], + 'time': item['teaching_time_period'], + 'lesson': item['lesson_name'], + 'student_count': item['student_count'], + 'attendance': item['attendance'], + 'students': item.get('student_names', []) + }) + except Exception as e: + print(f"查询 {date} 失败: {e}") + +# 输出结果 +for r in results: + print(f"日期:{r['teaching_date']} 班级:{r['class_name']} 时间:{r['time']} 课程:{r['lesson']}") +``` + +**返回数据说明**: +| 字段 | 说明 | 用途 | +|------|------|------| +| `teaching_date` | API返回的真实授课日期 | **必须用此日期作为课评文件名中的YYYYMMDD** | +| `class_name` | 班级名称 | 用于确认班级目录名 | +| `time` | 上课时间段 | 用于确认班级(如19:00-20:30对应晚上班) | +| `lesson_name` | 课程名称 | 用于匹配课程计划 | +| `student_count` | 学生数 | 用于确认班级人数 | +| `attendance` | 出勤统计 | 到课/请假/缺课人数 | +| `students` | 学生名单 | 用于确认学生 | + +**日期规则(重要)**: +- ✅ **必须使用API返回的 `teaching_date`** 作为课评文件名中的日期 +- ✅ 如果笔记中的日期与API返回的 `teaching_date` 不一致,**以API为准** +- ✅ 文件名格式:`{API返回的teaching_date}_课程编号-课次.md` + +**班级匹配规则**: +根据API返回的 `class_name` 和 `time` 匹配笔记中的班级: +| API返回的class_name | 对应班级目录 | 识别依据 | +|---------------------|-------------|----------| +| AICODE03... | AICODE03橙子周六1900 / AICODE03橙子周日0845 / AICODE03橙子周日1400 | class_name含"AICODE03" + time判断 | +| CSP03... | CSP03橙子周六0830 / CSP03橙子周六1400 / CSP03橙子周日1030 | class_name含"CSP03" + time判断 | +| KITTEN04... | K4橙子周五1900 / K4橙子周日1900 | class_name含"KITTEN04" + time判断 | + ### 1. 读取笔记文件 解析 `E:\cc\3笔记\第N课.md`: - 从文件名提取**课次**(如"第11课") -- 从文件头提取**日期**(如"2026年05月14日") +- 从**API获取的teaching_date**确定日期(不使用笔记文件头的日期) - 按班级区块解析,提取每个学生: - 姓名、出勤状况、课评描述(用户写的简短描述) -> **日期规则**:笔记批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以笔记文件头中的日期为准**,不另行查询课程计划中的上课时间。 +> **日期规则**:笔记批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以API返回的teaching_date为准**,不使用笔记文件头中的日期。 ### 2. 匹配课程计划 根据班级标题中的关键词匹配对应课程计划: