diff --git a/apps/server/src/attendance/attendance.service.ts b/apps/server/src/attendance/attendance.service.ts index 8a4a15f..7ed6624 100644 --- a/apps/server/src/attendance/attendance.service.ts +++ b/apps/server/src/attendance/attendance.service.ts @@ -21,6 +21,8 @@ export class AttendanceService { private attendanceRepo: Repository, @InjectRepository(DingAttendanceRaw) private dingRawRepo: Repository, + @InjectRepository(Class) + private classRepo: Repository, ) {} // ── Batch create attendance records ── @@ -182,15 +184,19 @@ export class AttendanceService { // ── Get distinct classes with attendance records ── async getClasses() { - const qb = this.attendanceRepo + const rows = await this.attendanceRepo .createQueryBuilder('ar') - .leftJoin('ar.class', 'class') .select('DISTINCT ar.classId', 'classId') - .addSelect('class.name', 'className') .where('ar.classId IS NOT NULL') - .orderBy('ar.classId', 'ASC'); + .orderBy('ar.classId', 'ASC') + .getRawMany(); - return qb.getRawMany(); + const classIds = rows.map((r) => r.classId).filter(Boolean) as number[]; + if (classIds.length === 0) return []; + + const classes = await this.classRepo.find({ where: { id: In(classIds) } }); + const nameMap = new Map(classes.map((c) => [c.id, c.name])); + return classIds.map((id) => ({ classId: id, className: nameMap.get(id) || `班级${id}` })); } // ── DingAttendance raw records ──