From b62bf53ca6ef801a7039aeaedd2eee856bf05f7b Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Wed, 28 May 2025 16:53:01 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BA=94=E8=82=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LaborEducationServiceImpl.java | 9 +++ .../impl/MoralEducationServiceImpl.java | 10 ++++ .../service/impl/TeacherServiceImpl.java | 55 +++++++++++++++---- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java index d47d3a6..18a7389 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java @@ -202,6 +202,15 @@ public class LaborEducationServiceImpl implements LaborEducationService { resMap.put("rightCount", rightCount);//表扬评价数 resMap.put("wrongCount", wrongCount);//待改进评价数 resMap.put("uniqueTargetIdCount", uniqueTargetIdCount);//评价学生数 + //处理单个学生评价内容列表信息 + List studentAppraise = new ArrayList<>(); + if (laborDto.getStudentId() != null) { + studentAppraise = res.stream() + .filter(record -> record.getTargetId().equals(laborDto.getStudentId())) + .collect(Collectors.toList()); + resMap.put("studentAppraise", studentAppraise);//学生评价内容 + //res= appraiseRecordRepository.getRecords(String.format(PK.PK_APPRAISE_RECORD, laborDto.getCode()),laborDto.getAcademicYearId(), laborDto.getClassId(), laborDto.getStudentId(),"德育"); + } Appraise appraise = appraiseRepository.findAppraiseBySchoolIdAndPeriodIdAndCode(schoolId, periodId, PK.PK_APPRAISE); if (appraise != null) { appraise = evaluationService.buildTree(appraise); diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java index c3f831b..57c0d77 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java @@ -201,6 +201,16 @@ public class MoralEducationServiceImpl implements MoralEducationService { resMap.put("rightCount", rightCount);//表扬评价数 resMap.put("wrongCount", wrongCount);//待改进评价数 resMap.put("uniqueTargetIdCount", uniqueTargetIdCount);//评价学生数 + + //处理单个学生评价内容列表信息 + List studentAppraise = new ArrayList<>(); + if (moralDto.getStudentId() != null) { + studentAppraise = res.stream() + .filter(record -> record.getTargetId().equals(moralDto.getStudentId())) + .collect(Collectors.toList()); + resMap.put("studentAppraise", studentAppraise);//学生评价内容 + //res= appraiseRecordRepository.getRecords(String.format(PK.PK_APPRAISE_RECORD, laborDto.getCode()),laborDto.getAcademicYearId(), laborDto.getClassId(), laborDto.getStudentId(),"德育"); + } Appraise appraise = appraiseRepository.findAppraiseBySchoolIdAndPeriodIdAndCode(schoolId, periodId, PK.PK_APPRAISE); if (appraise != null) { appraise = evaluationService.buildTree(appraise); diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java index 79c267f..b899dae 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java @@ -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> teacherCache; + private Cache>> ptTeacherCache; + private Cache> lessonRecordCache; + @PostConstruct public void init() { - teacherCache = CacheBuilder.newBuilder() - .expireAfterWrite(1, TimeUnit.HOURS) // 缓存1小时 - .maximumSize(1000) // 最大缓存数量 - .build(); + // 创建公共配置的CacheBuilder + CacheBuilder 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 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 cachedResult = lessonRecordCache.getIfPresent(cacheKey); + if (cachedResult != null) { + return cachedResult; + } List 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> ptTeachers = new ArrayList<>(); + String cacheKey = String.format("ptTeachers:%s:%s:%s:%s", + teacherDto.getCode(), + teacherDto.getPeriodId(), + teacherDto.getStartTime(), + teacherDto.getEndTime()); // 基于学校代码的缓存键 try { + List> cachedResult = ptTeacherCache.getIfPresent(cacheKey); + if (cachedResult != null) { + return cachedResult; + } + // 检查缓存 List ptTeacherInfos = ptTeacherRepository.findAllTeacher(teacherDto.getCode(), code,teacherDto.getPeriodId()); //获取ptTeacherInfos中所有的老师ID List 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> REQUEST_CACHE = CacheBuilder.newBuilder() - .maximumSize(500) - .expireAfterWrite(8, TimeUnit.HOURS) - .build(); +// private static final Cache> REQUEST_CACHE = CacheBuilder.newBuilder() +// .maximumSize(500) +// .expireAfterWrite(8, TimeUnit.HOURS) +// .build(); @NotNull private List 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); });