From 14a5175f1d19140be35ac4240cd338db07b0cdbe Mon Sep 17 00:00:00 2001 From: yubinCloud Date: Fri, 30 Apr 2021 15:34:14 +0800 Subject: [PATCH] =?UTF-8?q?11-5=20=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=8C=E5=AE=9A=E6=97=B6=E4=BB=8Eebook?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E6=95=B0=E6=8D=AE=E7=94=9F=E6=88=90ebook=5Fs?= =?UTF-8?q?napshot=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fairywiki/job/EbookSnapshotJob.java | 38 ++++++++++++++++++ .../mapper/EbookSnapshotMapperCustom.java | 5 +++ .../service/EbookSnapshotService.java | 8 +++- .../mapper/EbookSnapshotMapperCustom.xml | 40 +++++++++++++++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/github/yubincloud/fairywiki/job/EbookSnapshotJob.java create mode 100644 src/main/java/io/github/yubincloud/fairywiki/mapper/EbookSnapshotMapperCustom.java create mode 100644 src/main/resources/mapper/EbookSnapshotMapperCustom.xml diff --git a/src/main/java/io/github/yubincloud/fairywiki/job/EbookSnapshotJob.java b/src/main/java/io/github/yubincloud/fairywiki/job/EbookSnapshotJob.java new file mode 100644 index 0000000..ad8334f --- /dev/null +++ b/src/main/java/io/github/yubincloud/fairywiki/job/EbookSnapshotJob.java @@ -0,0 +1,38 @@ +package io.github.yubincloud.fairywiki.job; + +import io.github.yubincloud.fairywiki.service.EbookSnapshotService; +import io.github.yubincloud.fairywiki.utils.SnowFlake; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class EbookSnapshotJob { + + private static final Logger LOG = LoggerFactory.getLogger(EbookSnapshotJob.class); + + @Resource + private EbookSnapshotService ebookSnapshotService; + + @Resource + private SnowFlake snowFlake; + + /** + * 自定义cron表达式跑批 + * 只有等上一次执行完成,下一次才会在下一个时间点执行,错过就错过 + */ + @Scheduled(cron = "0/5 * * * * ?") + public void doSnapshot() { + // 增加日志流水号 + MDC.put("LOG_ID", String.valueOf(snowFlake.nextId())); + LOG.info("生成今日电子书快照开始"); + long start = System.currentTimeMillis(); + ebookSnapshotService.genSnapshots(); + LOG.info("生成今日电子书快照结束,耗时:{}毫秒", System.currentTimeMillis() - start); + } + +} diff --git a/src/main/java/io/github/yubincloud/fairywiki/mapper/EbookSnapshotMapperCustom.java b/src/main/java/io/github/yubincloud/fairywiki/mapper/EbookSnapshotMapperCustom.java new file mode 100644 index 0000000..6a50b0a --- /dev/null +++ b/src/main/java/io/github/yubincloud/fairywiki/mapper/EbookSnapshotMapperCustom.java @@ -0,0 +1,5 @@ +package io.github.yubincloud.fairywiki.mapper; + +public interface EbookSnapshotMapperCustom { + void genSnapshot(); +} diff --git a/src/main/java/io/github/yubincloud/fairywiki/service/EbookSnapshotService.java b/src/main/java/io/github/yubincloud/fairywiki/service/EbookSnapshotService.java index d082894..65aa96c 100644 --- a/src/main/java/io/github/yubincloud/fairywiki/service/EbookSnapshotService.java +++ b/src/main/java/io/github/yubincloud/fairywiki/service/EbookSnapshotService.java @@ -1,6 +1,6 @@ package io.github.yubincloud.fairywiki.service; -import io.github.yubincloud.fairywiki.mapper.EbookSnapshotMapper; +import io.github.yubincloud.fairywiki.mapper.EbookSnapshotMapperCustom; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -9,5 +9,9 @@ import javax.annotation.Resource; public class EbookSnapshotService { @Resource - private EbookSnapshotMapper ebookSnapshotMapper; + private EbookSnapshotMapperCustom ebookSnapshotMapperCustom; + + public void genSnapshots() { + ebookSnapshotMapperCustom.genSnapshot(); + } } diff --git a/src/main/resources/mapper/EbookSnapshotMapperCustom.xml b/src/main/resources/mapper/EbookSnapshotMapperCustom.xml new file mode 100644 index 0000000..5856340 --- /dev/null +++ b/src/main/resources/mapper/EbookSnapshotMapperCustom.xml @@ -0,0 +1,40 @@ + + + + + + + INSERT INTO ebook_snapshot(ebook_id, `date`, view_count, vote_count, view_increase, vote_increase) + SELECT t1.id, curdate(), 0, 0, 0, 0 + FROM ebook t1 + WHERE NOT EXISTS(SELECT 1 + FROM ebook_snapshot t2 + WHERE t1.id = t2.ebook_id + AND t2.`date` = curdate()); + + UPDATE ebook_snapshot t1, ebook t2 + SET t1.view_count = t2.view_count, + t1.vote_count = t2.vote_count + WHERE t1.`date` = curdate() + AND t1.ebook_id = t2.id; + + UPDATE ebook_snapshot t1 LEFT JOIN (SELECT ebook_id, view_count, vote_count + FROM ebook_snapshot + WHERE `date` = date_sub(curdate(), INTERVAL 1 DAY)) t2 + ON t1.ebook_id = t2.ebook_id + SET t1.view_increase = (t1.view_count - ifnull(t2.view_count, 0)), + t1.vote_increase = (t1.vote_count - ifnull(t2.vote_count, 0)) + WHERE t1.`date` = curdate(); + + + \ No newline at end of file -- GitLab