diff --git a/pom.xml b/pom.xml
index dbffe41..041f0a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,12 @@
spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
diff --git a/src/main/java/com/quinn/common/QuinnConstant.java b/src/main/java/com/quinn/common/QuinnConstant.java
index 8793500..4631093 100644
--- a/src/main/java/com/quinn/common/QuinnConstant.java
+++ b/src/main/java/com/quinn/common/QuinnConstant.java
@@ -6,4 +6,6 @@ public interface QuinnConstant {
String GUN = "The emperor's new clothes";
+ String SOURCE_KEY = "SOURCE_KEY_";
+
}
diff --git a/src/main/java/com/quinn/controller/BlogController.java b/src/main/java/com/quinn/controller/BlogController.java
index 3321af1..03111af 100644
--- a/src/main/java/com/quinn/controller/BlogController.java
+++ b/src/main/java/com/quinn/controller/BlogController.java
@@ -117,11 +117,9 @@ public class BlogController {
@GetMapping("/blog/read/{bid}")
public String read(@PathVariable("bid") String bid,Model model){
Blog blog = blogService.getOne(new QueryWrapper().eq("bid", bid));
- // todo: redis缓存. 防止阅读重复
blog.setViews(blog.getViews()+1);
blogService.updateById(blog);
model.addAttribute("blog",blog);
- // todo: 查询评论
List commentList = commentService.list(new QueryWrapper().eq("topic_id", bid).orderByDesc("gmt_create"));
model.addAttribute("commentList",commentList);
return "blog/read";
diff --git a/src/main/java/com/quinn/controller/QuestionController.java b/src/main/java/com/quinn/controller/QuestionController.java
index 8266815..ab9577c 100644
--- a/src/main/java/com/quinn/controller/QuestionController.java
+++ b/src/main/java/com/quinn/controller/QuestionController.java
@@ -127,11 +127,9 @@ public class QuestionController {
@GetMapping("/question/read/{qid}")
public String read(@PathVariable("qid") String qid,Model model){
Question question = questionService.getOne(new QueryWrapper().eq("qid", qid));
- // todo: redis缓存. 防止阅读重复
question.setViews(question.getViews()+1);
questionService.updateById(question);
model.addAttribute("question",question);
- // todo: 查询评论.
List commentList = commentService.list(new QueryWrapper().eq("topic_id", qid).orderByDesc("gmt_create"));
model.addAttribute("commentList",commentList);
return "question/read";
diff --git a/src/main/java/com/quinn/controller/SourceController.java b/src/main/java/com/quinn/controller/SourceController.java
index 5679e46..71efe97 100644
--- a/src/main/java/com/quinn/controller/SourceController.java
+++ b/src/main/java/com/quinn/controller/SourceController.java
@@ -10,6 +10,7 @@ import com.quinn.service.SourceCategoryService;
import com.quinn.service.SourceCommentService;
import com.quinn.service.SourceService;
import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -129,7 +130,7 @@ public class SourceController {
* @throws IOException
*/
@GetMapping("/source/download/{sid}")
- public void read(HttpServletResponse response, @PathVariable("sid") String sid) throws IOException {
+ public void download(HttpServletResponse response, @PathVariable("sid") String sid) throws IOException {
Source source = sourceService.getOne(new QueryWrapper().eq("id", sid));
//通知浏览器以附件形式下载
response.setHeader("Content-Disposition",
diff --git a/src/main/java/com/quinn/service/impl/SourceServiceImpl.java b/src/main/java/com/quinn/service/impl/SourceServiceImpl.java
index 171d452..224d708 100644
--- a/src/main/java/com/quinn/service/impl/SourceServiceImpl.java
+++ b/src/main/java/com/quinn/service/impl/SourceServiceImpl.java
@@ -5,6 +5,7 @@ import com.quinn.mapper.SourceMapper;
import com.quinn.service.SourceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.quinn.utils.OSSClientUtil;
+import com.quinn.utils.RedisUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -26,10 +27,13 @@ public class SourceServiceImpl extends ServiceImpl impleme
@Resource
OSSClientUtil ossClientUtil;
+ @Resource
+ RedisUtils redisUtils;
@Override
public void downloadSource(ServletOutputStream outputStream, Source source) throws IOException {
String sourceLink = source.getSourceLink();
+ addDownLoadRecord(source);
// 读取文件内容。
BufferedInputStream in = new BufferedInputStream(ossClientUtil.downloadFile(sourceLink));
BufferedOutputStream out = new BufferedOutputStream(outputStream);
@@ -46,4 +50,21 @@ public class SourceServiceImpl extends ServiceImpl impleme
in.close();
}
}
+
+ /**
+ * 更新页码
+ * @param source
+ */
+ private void addDownLoadRecord(Source source) {
+// Integer downLoadTime = (Integer) redisUtils.get(QuinnConstant.SOURCE_KEY + source.getId());
+// int downTimes = 0;
+// if (StringUtils.isEmpty(downLoadTime)){
+// downTimes = source.getDownRecord() + 1;
+// }else {
+// downTimes = downLoadTime + 1;
+// }
+// redisUtils.set(QuinnConstant.SOURCE_KEY + source.getId(),downTimes);
+ source.setDownRecord(source.getDownRecord() + 1);
+ updateById(source);
+ }
}
diff --git a/src/main/java/com/quinn/task/UpdateViewTask.java b/src/main/java/com/quinn/task/UpdateViewTask.java
new file mode 100644
index 0000000..ccdcdca
--- /dev/null
+++ b/src/main/java/com/quinn/task/UpdateViewTask.java
@@ -0,0 +1,45 @@
+package com.quinn.task;
+
+import com.quinn.common.QuinnConstant;
+import com.quinn.pojo.Source;
+import com.quinn.service.SourceService;
+import com.quinn.utils.RedisUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ *
+ * @author limqsh
+ */
+//@Component
+public class UpdateViewTask {
+
+ @Resource
+ SourceService sourceService;
+
+ @Resource
+ RedisUtils redisUtils;
+
+ /**
+ * 每小时执行一次
+ */
+// @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute(){
+ List list = sourceService.list(null);
+ if (!CollectionUtils.isEmpty(list)){
+ list.forEach(x->{
+ String downTimes = (String) redisUtils.get(QuinnConstant.SOURCE_KEY + x.getId());
+ if (!StringUtils.isEmpty(downTimes)){
+ x.setDownRecord(Integer.parseInt(downTimes));
+ sourceService.updateById(x);
+ }
+ });
+ }
+ }
+
+}
diff --git a/src/main/java/com/quinn/utils/RedisUtils.java b/src/main/java/com/quinn/utils/RedisUtils.java
new file mode 100644
index 0000000..93fb165
--- /dev/null
+++ b/src/main/java/com/quinn/utils/RedisUtils.java
@@ -0,0 +1,705 @@
+/*
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.quinn.utils;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.*;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author /
+ */
+@Component
+public class RedisUtils {
+ private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
+ private RedisTemplate