From 3f7cdb4c5096214765f935e9e8616730bcac1344 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 04 七月 2024 11:04:44 +0800
Subject: [PATCH] 学习记录,引入caffeine

---
 src/main/java/com/ycl/jxkg/job/StudyRecordJob.java |   67 +++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java
new file mode 100644
index 0000000..0167d8d
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/job/StudyRecordJob.java
@@ -0,0 +1,67 @@
+package com.ycl.jxkg.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.benmanes.caffeine.cache.Cache;
+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锛歺p
+ * @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) // 20鍒嗛挓鎵ц涓�娆�
+    private void updateStudyRecord() {
+        log.info("寮�濮嬪瓨瀛︿範鏃堕暱");
+        List<StudyRecord> cacheList = new ArrayList<>();
+        // 鍙栧嚭鎵�鏈夌紦瀛橀」
+        ConcurrentMap<String, Object> map = caffeineCache.asMap();
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            String key = entry.getKey();
+            if (key.startsWith("STUDENT_")) {
+                StudyRecord studyRecord = (StudyRecord) entry.getValue();
+                cacheList.add(studyRecord);
+            }
+        }
+        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());
+                    }
+                }
+            }
+            studyRecordService.saveOrUpdateBatch(cacheList);
+        }
+        caffeineCache.invalidateAll(map.keySet());
+        log.info("缁撴潫瀛樺涔犳椂闀�");
+    }
+}

--
Gitblit v1.8.0