|
|
|
@ -87,19 +87,30 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
private static final double PAPER_COEFFICIENT = 10.0;
|
|
|
|
|
private static final double BASE_SCORE = 60.0;
|
|
|
|
|
|
|
|
|
|
private static final int CACHE_EXPIRATION_HOURS = 8;
|
|
|
|
|
private static final int CACHE_MAXIMUM_SIZE = 1000;
|
|
|
|
|
private static final TimeUnit CACHE_EXPIRATION_UNIT = TimeUnit.HOURS;
|
|
|
|
|
|
|
|
|
|
// 添加日志对象
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(TeacherServiceImpl.class);
|
|
|
|
|
|
|
|
|
|
// 引入缓存,需根据实际情况配置大小和过期时间 每次服务重启时 缓存会清空
|
|
|
|
|
// 初始化Guava Cache
|
|
|
|
|
private Cache<String, Map<String, Object>> teacherCache;
|
|
|
|
|
private Cache<String, List<Map<String, Object>>> ptTeacherCache;
|
|
|
|
|
private Cache<String, Map<Long, Integer>> lessonRecordCache;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PostConstruct
|
|
|
|
|
public void init() {
|
|
|
|
|
teacherCache = CacheBuilder.newBuilder()
|
|
|
|
|
.expireAfterWrite(1, TimeUnit.HOURS) // 缓存1小时
|
|
|
|
|
.maximumSize(1000) // 最大缓存数量
|
|
|
|
|
.build();
|
|
|
|
|
// 创建公共配置的CacheBuilder
|
|
|
|
|
CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder()
|
|
|
|
|
.expireAfterWrite(CACHE_EXPIRATION_HOURS, CACHE_EXPIRATION_UNIT)
|
|
|
|
|
.maximumSize(CACHE_MAXIMUM_SIZE);
|
|
|
|
|
|
|
|
|
|
// 构建各缓存实例
|
|
|
|
|
teacherCache = cacheBuilder.build();
|
|
|
|
|
ptTeacherCache = cacheBuilder.build();
|
|
|
|
|
lessonRecordCache = cacheBuilder.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Cacheable(value = "schoolGroupCache", key = "#code")
|
|
|
|
@ -569,6 +580,16 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
public Map<Long, Integer> getTeacherByRecord(TeacherDto teacherDto) {
|
|
|
|
|
final int SLICE_SIZE = 10000;
|
|
|
|
|
// 获取学期起止时间
|
|
|
|
|
String cacheKey = String.format("ptTeachers:%s:%s:%s:%s",
|
|
|
|
|
teacherDto.getCode(),
|
|
|
|
|
teacherDto.getPeriodId(),
|
|
|
|
|
teacherDto.getStartTime(),
|
|
|
|
|
teacherDto.getEndTime()); // 基于学校代码的缓存键
|
|
|
|
|
|
|
|
|
|
Map<Long, Integer> cachedResult = lessonRecordCache.getIfPresent(cacheKey);
|
|
|
|
|
if (cachedResult != null) {
|
|
|
|
|
return cachedResult;
|
|
|
|
|
}
|
|
|
|
|
List<School.Semester> semesters = schoolRepository.findSemestersById(teacherDto.getCode(), teacherDto.getPeriodId());
|
|
|
|
|
SchoolDateUtil.semesterModel semesterModel = SchoolDateUtil.getSemesterByNow(semesters, LocalDate.now());
|
|
|
|
|
LocalDateTime startDatetime;
|
|
|
|
@ -612,6 +633,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
}
|
|
|
|
|
} while (slice.hasNext() && !Thread.currentThread().isInterrupted());
|
|
|
|
|
countByWeek.entrySet().removeIf(entry -> entry.getKey() == -1);
|
|
|
|
|
lessonRecordCache.put(cacheKey, countByWeek);
|
|
|
|
|
return countByWeek;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1052,7 +1074,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
lessonRecordKey, startTime, endTime, subjectId, tmdId, grade, periodId
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
System.out.println("查询到的记录数量: " + records.size());
|
|
|
|
|
//System.out.println("查询到的记录数量: " + records.size());
|
|
|
|
|
} catch (InterruptedException | ExecutionException e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据查询异常");
|
|
|
|
|
} finally {
|
|
|
|
@ -2062,7 +2084,17 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
String code = String.format(PK.PTTEACHER, teacherDto.getCode());
|
|
|
|
|
String LessonCode = String.format(PK.PK_LESSON_RECORD, teacherDto.getCode());
|
|
|
|
|
List<Map<String, Object>> ptTeachers = new ArrayList<>();
|
|
|
|
|
String cacheKey = String.format("ptTeachers:%s:%s:%s:%s",
|
|
|
|
|
teacherDto.getCode(),
|
|
|
|
|
teacherDto.getPeriodId(),
|
|
|
|
|
teacherDto.getStartTime(),
|
|
|
|
|
teacherDto.getEndTime()); // 基于学校代码的缓存键
|
|
|
|
|
try {
|
|
|
|
|
List<Map<String, Object>> cachedResult = ptTeacherCache.getIfPresent(cacheKey);
|
|
|
|
|
if (cachedResult != null) {
|
|
|
|
|
return cachedResult;
|
|
|
|
|
}
|
|
|
|
|
// 检查缓存
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = ptTeacherRepository.findAllTeacher(teacherDto.getCode(), code,teacherDto.getPeriodId());
|
|
|
|
|
//获取ptTeacherInfos中所有的老师ID
|
|
|
|
|
List<String> teacherIds = ptTeacherInfos.stream().map(PtTeacherInfo::getId).collect(Collectors.toList());
|
|
|
|
@ -2178,6 +2210,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
ptTeachers.add(ptTeacher);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ptTeacherCache.put(cacheKey, ptTeachers);
|
|
|
|
|
return ptTeachers;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "获取数据异常");
|
|
|
|
@ -2471,10 +2504,10 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
|
|
|
|
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
// 引入缓存,需根据实际情况配置大小和过期时间 每次服务重启时 缓存会清空
|
|
|
|
|
private static final Cache<String, Map<String, Object>> REQUEST_CACHE = CacheBuilder.newBuilder()
|
|
|
|
|
.maximumSize(500)
|
|
|
|
|
.expireAfterWrite(8, TimeUnit.HOURS)
|
|
|
|
|
.build();
|
|
|
|
|
// private static final Cache<String, Map<String, Object>> REQUEST_CACHE = CacheBuilder.newBuilder()
|
|
|
|
|
// .maximumSize(500)
|
|
|
|
|
// .expireAfterWrite(8, TimeUnit.HOURS)
|
|
|
|
|
// .build();
|
|
|
|
|
|
|
|
|
|
@NotNull
|
|
|
|
|
private List<SugVo> getSugVos(TeacherDto teacherDto, HttpServletRequest request) {
|
|
|
|
@ -2493,7 +2526,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
|
|
|
|
|
// 生成缓存键,根据实际参数组合
|
|
|
|
|
String cacheKey = generateCacheKey(teacherDto);
|
|
|
|
|
overView = REQUEST_CACHE.get(cacheKey, () -> {
|
|
|
|
|
overView = teacherCache.get(cacheKey, () -> {
|
|
|
|
|
// 缓存未命中时调用第三方接口
|
|
|
|
|
return GroupUtil.getGroupId(teacherDto, new GroupUtil(env), request, url);
|
|
|
|
|
});
|
|
|
|
|