feat: 添加第12课课评、班级总结及学生画像更新

- K4周日1900班第12课《花朵随心画》课评(梁境城、钟嘉逸、王睿意补课)
- AICODE03/CSP03各班级第12课课评及班级总结
- 更新多班级学生画像
- 课评生成技能优化
This commit is contained in:
chengzi
2026-05-24 20:48:34 +08:00
parent 682bc4e93a
commit 3b75170862
515 changed files with 66389 additions and 1424 deletions

151
data/query_0515_0517.js Normal file
View File

@@ -0,0 +1,151 @@
const axios = require('axios');
require('dotenv').config({ path: 'E:/cc/4work_project/ClassFeedback/.env' });
const API_BASE_URL = process.env.API_BASE_URL;
const AUTHORIZATION = process.env.AUTHORIZATION;
// 查询整体出勤率
async function getTeacherAttendanceRate(beginDate, endDate) {
try {
console.log(`🔍 正在查询橙子老师 ${beginDate}${endDate} 整体出勤率...`);
const response = await axios.get(`${API_BASE_URL}/reports/teacher-attendance-rates`, {
headers: { 'Authorization': AUTHORIZATION },
params: {
teacher_name: '橙子(程城)',
begin_date: beginDate,
end_date: endDate
}
});
console.log('✅ 整体出勤率数据获取成功');
return response.data;
} catch (error) {
console.error('❌ 整体出勤率查询失败:', error.response ? error.response.data : error.message);
return null;
}
}
// 查询每日详细课程和学生出勤明细
async function getDailyTeachingSchedule(dates) {
const allData = [];
for (const date of dates) {
try {
console.log(`\n🔍 正在查询 ${date} 的课程明细...`);
const response = await axios.get(`${API_BASE_URL}/reports/teaching-schedule`, {
headers: { 'Authorization': AUTHORIZATION },
params: {
teacher_name: '橙子(程城)',
teaching_date: date
}
});
if (response.data.code === 0 && response.data.data.items.length > 0) {
allData.push({
date: date,
courses: response.data.data.items
});
console.log(`${date} 找到 ${response.data.data.items.length} 节课`);
// 打印每节课的学生出勤情况
response.data.data.items.forEach((course, idx) => {
console.log(`\n 📚 课程 ${idx + 1}: ${course.class_name || '未命名班级'}`);
console.log(` 时间: ${course.teaching_begin_time} - ${course.teaching_end_time}`);
console.log(` 学生明细:`);
if (course.students && course.students.length > 0) {
course.students.forEach(student => {
const status = student.attendance_status || '❓ 未知';
const remark = student.attendance_remark ? ` (${student.attendance_remark})` : '';
console.log(` - ${student.student_name}: ${status}${remark}`);
});
} else {
console.log(` (无学生数据)`);
}
});
} else {
console.log(` ${date} 没有课程安排`);
}
} catch (error) {
console.error(`❌ 查询 ${date} 失败:`, error.response ? error.response.data : error.message);
}
}
return allData;
}
// 主函数
async function main() {
const dates = ['2026-05-15', '2026-05-16', '2026-05-17'];
const beginDate = '2026-05-15';
const endDate = '2026-05-17';
console.log('========================================');
console.log(' 橙子老师 5月15日-5月17日 出勤查询');
console.log('========================================\n');
// 1. 获取整体出勤率
const overallRate = await getTeacherAttendanceRate(beginDate, endDate);
if (overallRate && overallRate.data && overallRate.data.数据) {
const data = overallRate.data.数据[0];
if (data) {
console.log('\n📊 整体出勤率摘要:');
console.log(` 校区: ${data.校区名称}`);
console.log(` 综合出勤率: ${(data.综合.一次出勤率 * 100).toFixed(2)}%`);
console.log(` 固定班应消耗课时: ${data.综合.固定班应消耗课时}`);
console.log(` 固定班实际到课课时: ${data.综合.固定班实际到课课时}`);
console.log(` 固定班请假课时: ${data.综合.固定班请假课时}`);
console.log(` 固定班旷课课时: ${data.综合.固定班旷课课时}`);
}
}
// 2. 获取每日明细
console.log('\n----------------------------------------');
console.log(' 每日课程及学生出勤明细');
console.log('----------------------------------------');
const dailyDetails = await getDailyTeachingSchedule(dates);
// 3. 汇总统计
console.log('\n========================================');
console.log(' 汇总统计');
console.log('========================================');
let totalStudents = 0;
let attendedStudents = 0;
let leaveStudents = 0;
let absentStudents = 0;
let makeupStudents = 0;
dailyDetails.forEach(day => {
day.courses.forEach(course => {
if (course.students) {
course.students.forEach(student => {
totalStudents++;
const status = student.attendance_status || '';
if (status.includes('出勤')) attendedStudents++;
else if (status.includes('请假')) leaveStudents++;
else if (status.includes('缺勤') || status.includes('旷课')) absentStudents++;
else if (status.includes('补课')) makeupStudents++;
});
}
});
});
console.log(`- 总学生人次: ${totalStudents}`);
console.log(`- 正常出勤: ${attendedStudents} 人次 (${totalStudents > 0 ? ((attendedStudents / totalStudents) * 100).toFixed(2) : 0}%)`);
console.log(`- 请假: ${leaveStudents} 人次 (${totalStudents > 0 ? ((leaveStudents / totalStudents) * 100).toFixed(2) : 0}%)`);
console.log(`- 旷课/缺勤: ${absentStudents} 人次 (${totalStudents > 0 ? ((absentStudents / totalStudents) * 100).toFixed(2) : 0}%)`);
console.log(`- 补课: ${makeupStudents} 人次 (${totalStudents > 0 ? ((makeupStudents / totalStudents) * 100).toFixed(2) : 0}%)`);
// 保存到文件
const fs = require('fs');
const result = {
query_range: '2026-05-15 至 2026-05-17',
teacher_name: '橙子(程城)',
overall_attendance_rate: overallRate,
daily_course_details: dailyDetails
};
const outputPath = 'E:/cc/4work_project/ClassFeedback/data/orange_attendance_0515_0517.json';
fs.writeFileSync(outputPath, JSON.stringify(result, null, 2));
console.log(`\n🎉 数据已保存到: ${outputPath}`);
}
main();