feat: 课评生成技能新增API出勤数据获取步骤

在写课评之前先调用公司API获取橙子老师的出勤数据,
使用API返回的teaching_date作为课评文件名日期,确保日期准确性。
This commit is contained in:
chengzi
2026-05-27 09:57:58 +08:00
parent 3b75170862
commit 52de1c0317

View File

@@ -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. 读取笔记文件 ### 1. 读取笔记文件
解析 `E:\cc\3笔记\第N课.md` 解析 `E:\cc\3笔记\第N课.md`
- 从文件名提取**课次**(如"第11课" - 从文件名提取**课次**(如"第11课"
-文件头提取**日期**(如"2026年05月14日" -**API获取的teaching_date**确定日期(不使用笔记文件头的日期
- 按班级区块解析,提取每个学生: - 按班级区块解析,提取每个学生:
- 姓名、出勤状况、课评描述(用户写的简短描述) - 姓名、出勤状况、课评描述(用户写的简短描述)
> **日期规则**:笔记批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以笔记文件头中的日期为准**,不另行查询课程计划中的上课时间 > **日期规则**:笔记批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以API返回的teaching_date为准**,不使用笔记文件头中的日期。
### 2. 匹配课程计划 ### 2. 匹配课程计划
根据班级标题中的关键词匹配对应课程计划: 根据班级标题中的关键词匹配对应课程计划: