@ -365,7 +365,7 @@ public class TeacherServiceImpl implements TeacherService {
@Override
@Override
public Map < Long , Integer > getTeacherByRecord ( TeacherDto teacherDto ) {
public Map < Long , Integer > getTeacherByRecord ( TeacherDto teacherDto ) {
final int SLICE_SIZE = 100 ;
final int SLICE_SIZE = 100 00 ;
// 获取学期起止时间
// 获取学期起止时间
List < School . Semester > semesters = schoolRepository . findSemestersById ( teacherDto . getCode ( ) , teacherDto . getPeriodId ( ) ) ;
List < School . Semester > semesters = schoolRepository . findSemestersById ( teacherDto . getCode ( ) , teacherDto . getPeriodId ( ) ) ;
SchoolDateUtil . semesterModel semesterModel = SchoolDateUtil . getSemesterByNow ( semesters , LocalDate . now ( ) ) ;
SchoolDateUtil . semesterModel semesterModel = SchoolDateUtil . getSemesterByNow ( semesters , LocalDate . now ( ) ) ;
@ -385,14 +385,14 @@ public class TeacherServiceImpl implements TeacherService {
CosmosPageRequest pageRequest = new CosmosPageRequest ( 0 , SLICE_SIZE , null ) ;
CosmosPageRequest pageRequest = new CosmosPageRequest ( 0 , SLICE_SIZE , null ) ;
Slice < LessonRecord > slice ;
Slice < LessonRecord > slice ;
Map < Long , Integer > countByWeek = SchoolDateUtil . createEmptyWeekMap ( totalWeek ) ;
Map < Long , Integer > countByWeek = SchoolDateUtil . createEmptyWeekMap ( totalWeek ) ;
String lessonRecordKey = String . format ( PK . PK_LESSON_RECORD , teacherDto . getCode ( ) ) ;
do {
do {
if ( StringUtils . isNotEmpty ( teacherDto . getGrade ( ) ) ) {
if ( StringUtils . isNotEmpty ( teacherDto . getGrade ( ) ) ) {
slice = lessonRecordRepository . findAllByGrade ( String. format ( PK . PK_LESSON_RECORD , teacherDto . getCode ( ) ) , teacherDto . getGrade ( ) , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
slice = lessonRecordRepository . findAllByGrade ( lessonRecordKey , teacherDto . getGrade ( ) , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
} else if ( StringUtils . isNotEmpty ( teacherDto . getTmdId ( ) ) ) {
} else if ( StringUtils . isNotEmpty ( teacherDto . getTmdId ( ) ) ) {
slice = lessonRecordRepository . findAllByAcademicYearId ( String. format ( PK . PK_LESSON_RECORD , teacherDto . getCode ( ) ) , teacherDto . getTmdId ( ) , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
slice = lessonRecordRepository . findAllByAcademicYearId ( lessonRecordKey , teacherDto . getTmdId ( ) , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
} else {
} else {
slice = lessonRecordRepository . findAll ( String. format ( PK . PK_LESSON_RECORD , teacherDto . getCode ( ) ) , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
slice = lessonRecordRepository . findAll ( lessonRecordKey , teacherDto . getSubjectId ( ) , teacherDto . getPeriodId ( ) , pageRequest ) ;
}
}
List < LessonRecord > content = slice . getContent ( ) ;
List < LessonRecord > content = slice . getContent ( ) ;
if ( ObjectUtils . isEmpty ( content ) ) {
if ( ObjectUtils . isEmpty ( content ) ) {
@ -401,15 +401,14 @@ public class TeacherServiceImpl implements TeacherService {
// 分批次计算
// 分批次计算
for ( LessonRecord item : content ) {
for ( LessonRecord item : content ) {
// 处理每周的课程数
long weekNum = calculateWeekNum ( startDatetime , endDatetime , item . getStartTime ( ) ) ;
long weekNum = calculateWeekNum ( startDatetime , endDatetime , item . getStartTime ( ) ) ;
countByWeek . put( weekNum , countByWeek . getOrDefault ( weekNum , 0 ) + 1 ) ;
countByWeek . merge( weekNum , 1 , Integer : : sum ) ; // 使用 merge 方法简化代码
}
}
if ( slice . hasNext ( ) ) {
if ( slice . hasNext ( ) ) {
pageRequest = ( CosmosPageRequest ) slice . nextPageable ( ) ;
pageRequest = ( CosmosPageRequest ) slice . nextPageable ( ) ;
}
}
} while ( slice . hasNext ( ) ) ;
} while ( slice . hasNext ( ) & & ! Thread . currentThread ( ) . isInterrupted ( ) ) ;
countByWeek . entrySet ( ) . removeIf ( entry - > entry . getKey ( ) = = - 1 ) ;
countByWeek . entrySet ( ) . removeIf ( entry - > entry . getKey ( ) = = - 1 ) ;
return countByWeek ;
return countByWeek ;
}
}