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<String, Object> caffeineCache;
|
private final StudyRecordMapper studyRecordMapper;
|
private final StudyRecordService studyRecordService;
|
|
@Scheduled(fixedRate = 1200000) // 2分钟执行一次
|
private void updateStudyRecord() {
|
log.info("开始存学习时长");
|
List<StudyRecord> cacheList = new ArrayList<>();
|
// 取出所有学习记录缓存项
|
ConcurrentMap<String, Object> map = caffeineCache.asMap();
|
Map<String,StudyRecord> studyMap = (Map<String, StudyRecord>) map.get(CaffeineConstant.STUDY_RECORD);
|
for (Map.Entry<String, StudyRecord> entry : studyMap.entrySet()) {
|
cacheList.add(entry.getValue());
|
}
|
|
List<Integer> studentIds = cacheList.stream().map(StudyRecord::getStudentId).collect(Collectors.toList());
|
if (!CollectionUtils.isEmpty(studentIds)) {
|
//数据库中已经存在的学生数据
|
QueryWrapper<StudyRecord> wrapper = new QueryWrapper<>();
|
wrapper.in("student_id", studentIds);
|
List<StudyRecord> 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("结束存学习时长");
|
}
|
}
|