package com.ycl.jxkg.job; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.benmanes.caffeine.cache.Cache; import com.ycl.jxkg.constants.CaffeineConstant; import com.ycl.jxkg.domain.entity.StudyRecord; import com.ycl.jxkg.mapper.StudyRecordMapper; import com.ycl.jxkg.service.StudyRecordService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentMap; import java.util.stream.Collectors; /** * @author:xp * @date:2024/7/1 11:06 */ @Component @RequiredArgsConstructor @Slf4j public class StudyRecordJob { @Autowired private Cache caffeineCache; private final StudyRecordMapper studyRecordMapper; private final StudyRecordService studyRecordService; @Scheduled(fixedRate = 1200000) // 2分钟执行一次 private void updateStudyRecord() { log.info("开始存学习时长"); List cacheList = new ArrayList<>(); // 取出所有学习记录缓存项 Map studyMap = (Map) caffeineCache.getIfPresent(CaffeineConstant.STUDY_RECORD); if (!CollectionUtils.isEmpty(studyMap)) { for (Map.Entry entry : studyMap.entrySet()) { cacheList.add(entry.getValue()); } List studentIds = cacheList.stream().map(StudyRecord::getStudentId).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(studentIds)) { //数据库中已经存在的学生数据 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.in("student_id", studentIds); List studyRecords = studyRecordMapper.selectList(wrapper); for (StudyRecord record : studyRecords) { for (StudyRecord cacheRecord : cacheList) { if (record.getStudentId().equals(cacheRecord.getStudentId())) { cacheRecord.setId(record.getId()); cacheRecord.setStudyTime(record.getStudyTime() + cacheRecord.getStudyTime()); cacheRecord.setMeetCount(record.getMeetCount()); } } } studyRecordService.saveOrUpdateBatch(cacheList); } caffeineCache.invalidate(CaffeineConstant.STUDY_RECORD); } log.info("结束存学习时长"); } }