更新K4课程README,清理旧的班级记忆文件,调整目录结构

This commit is contained in:
chengzi
2026-05-13 15:16:05 +08:00
parent 2e7878007c
commit fecb347740
538 changed files with 8105 additions and 57270 deletions

117
scripts/query-attendance.js Normal file
View File

@@ -0,0 +1,117 @@
const axios = require('axios');
require('dotenv').config();
const API_BASE_URL = process.env.API_BASE_URL;
const AUTHORIZATION = process.env.AUTHORIZATION;
// 查询橙子老师上周整体出勤率
async function getTeacherAttendanceRate() {
try {
console.log('🔍 正在查询橙子老师上周整体出勤率...');
const response = await axios.get(`${API_BASE_URL}/reports/teacher-attendance-rates`, {
headers: {
'Authorization': AUTHORIZATION
},
params: {
teacher_name: '橙子(程城)',
begin_date: '2026-04-21',
end_date: '2026-04-27'
}
});
console.log('✅ 整体出勤率数据获取成功:');
console.log(JSON.stringify(response.data, null, 2));
return response.data;
} catch (error) {
console.error('❌ 查询失败:', error.response ? error.response.data : error.message);
return null;
}
}
// 查询上周每天的详细课程和学生出勤明细
async function getDailyTeachingSchedule() {
const dates = [
'2026-04-21', '2026-04-22', '2026-04-23', '2026-04-24',
'2026-04-25', '2026-04-26', '2026-04-27'
];
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} 节课`);
} else {
console.log(` ${date} 没有课程安排`);
}
} catch (error) {
console.error(`❌ 查询 ${date} 失败:`, error.response ? error.response.data : error.message);
}
}
return allData;
}
// 主函数
async function main() {
// 1. 获取整体出勤率
const overallRate = await getTeacherAttendanceRate();
// 2. 获取每日明细
const dailyDetails = await getDailyTeachingSchedule();
// 3. 汇总数据并保存
const result = {
query_range: '2026-04-21 至 2026-04-27',
teacher_name: '橙子(程城)',
overall_attendance_rate: overallRate,
daily_course_details: dailyDetails
};
// 保存到文件
const fs = require('fs');
const outputPath = '上周学生出勤原始数据.json';
fs.writeFileSync(outputPath, JSON.stringify(result, null, 2));
console.log(`\n🎉 所有数据查询完成,已保存到:${outputPath}`);
console.log('\n📊 数据摘要:');
// 统计总出勤情况
let totalStudents = 0;
let attendedStudents = 0;
let leaveStudents = 0;
let absentStudents = 0;
dailyDetails.forEach(day => {
day.courses.forEach(course => {
course.students.forEach(student => {
totalStudents++;
if (student.attendance_status === '✅ 出勤') attendedStudents++;
else if (student.attendance_status === '⏸ 请假') leaveStudents++;
else if (student.attendance_status === '❌ 缺勤') absentStudents++;
});
});
});
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}%`);
}
main();