From 0f8759048e85ad1002ec5ecd622e2c3ad75adf9c Mon Sep 17 00:00:00 2001 From: ruibaby Date: Mon, 31 Dec 2018 12:43:46 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E9=80=82=E9=85=8D=E4=B8=BB=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/FreeMarkerAutoConfiguration.java | 10 ++++++ .../ryanc/halo/model/method/RandomMethod.java | 33 +++++++++++++++++ .../halo/model/method/RecentPostsMethod.java | 35 +++++++++++++++++++ .../ryanc/halo/repository/PostRepository.java | 9 +++++ .../cc/ryanc/halo/service/PostService.java | 8 +++++ .../halo/service/impl/PostServiceImpl.java | 11 ++++++ 6 files changed, 106 insertions(+) create mode 100644 src/main/java/cc/ryanc/halo/model/method/RandomMethod.java create mode 100644 src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java diff --git a/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java index 0ae24fdfe..e854e7b85 100644 --- a/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java +++ b/src/main/java/cc/ryanc/halo/config/FreeMarkerAutoConfiguration.java @@ -1,5 +1,7 @@ package cc.ryanc.halo.config; +import cc.ryanc.halo.model.method.RandomMethod; +import cc.ryanc.halo.model.method.RecentPostsMethod; import cc.ryanc.halo.model.tag.ArticleTagDirective; import cc.ryanc.halo.model.tag.CommonTagDirective; import cc.ryanc.halo.service.OptionsService; @@ -38,6 +40,12 @@ public class FreeMarkerAutoConfiguration { @Autowired private ArticleTagDirective articleTagDirective; + @Autowired + private RandomMethod randomMethod; + + @Autowired + private RecentPostsMethod recentPostsMethod; + @PostConstruct public void setSharedVariable() { try { @@ -46,6 +54,8 @@ public class FreeMarkerAutoConfiguration { configuration.setSharedVariable("articleTag", articleTagDirective); configuration.setSharedVariable("options", optionsService.findAllOptions()); configuration.setSharedVariable("user", userService.findUser()); + configuration.setSharedVariable("randomMethod", randomMethod); + configuration.setSharedVariable("recentPostsMethod", recentPostsMethod); } catch (TemplateModelException e) { log.error("Custom tags failed to load:{}", e.getMessage()); } diff --git a/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java b/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java new file mode 100644 index 000000000..6ed1be3ac --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/method/RandomMethod.java @@ -0,0 +1,33 @@ +package cc.ryanc.halo.model.method; + +import cn.hutool.core.util.RandomUtil; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/21 + */ +@Component +public class RandomMethod implements TemplateMethodModelEx { + + /** + * 生成随机数 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + SimpleNumber argTwo = (SimpleNumber) arguments.get(1); + int start = argOne.getAsNumber().intValue(); + int end = argTwo.getAsNumber().intValue(); + return RandomUtil.randomInt(start, end); + } +} diff --git a/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java b/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java new file mode 100644 index 000000000..8575837cb --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/method/RecentPostsMethod.java @@ -0,0 +1,35 @@ +package cc.ryanc.halo.model.method; + +import cc.ryanc.halo.service.PostService; +import freemarker.template.SimpleNumber; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author : RYAN0UP + * @date : 2018/12/31 + */ +@Component +public class RecentPostsMethod implements TemplateMethodModelEx { + + @Autowired + private PostService postService; + + /** + * 获取最近的文章 + * + * @param arguments 参数 + * @return Object + * @throws TemplateModelException TemplateModelException + */ + @Override + public Object exec(List arguments) throws TemplateModelException { + SimpleNumber argOne = (SimpleNumber) arguments.get(0); + int limit = argOne.getAsNumber().intValue(); + return postService.getRecentPosts(limit); + } +} diff --git a/src/main/java/cc/ryanc/halo/repository/PostRepository.java b/src/main/java/cc/ryanc/halo/repository/PostRepository.java index dd79f5df2..eb13a587e 100644 --- a/src/main/java/cc/ryanc/halo/repository/PostRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/PostRepository.java @@ -222,4 +222,13 @@ public interface PostRepository extends JpaRepository { * @return 文章数量 */ Integer countAllByPostStatusAndPostType(Integer status, String postType); + + /** + * 获取指定条数的文章 + * + * @param limit 条数 + * @return List + */ + @Query(value = "SELECT * FROM HALO_POST WHERE POST_STATUS = 0 AND POST_TYPE = 'post' ORDER BY POST_DATE DESC LIMIT :limit",nativeQuery = true) + List getPostsByLimit(@Param(value = "limit") int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java index 87e8a4c37..833c581dd 100755 --- a/src/main/java/cc/ryanc/halo/service/PostService.java +++ b/src/main/java/cc/ryanc/halo/service/PostService.java @@ -277,4 +277,12 @@ public interface PostService { * @return Post Post */ Post buildCategoriesAndTags(Post post, List cateList, @RequestParam("tagList") String tagList); + + /** + * 获取最近的文章 + * + * @param limit 条数 + * @return List + */ + List getRecentPosts(int limit); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java index e4083b4fa..37c83704d 100755 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -483,4 +483,15 @@ public class PostServiceImpl implements PostService { } return post; } + + /** + * 获取最近的文章 + * + * @param limit 条数 + * @return List + */ + @Override + public List getRecentPosts(int limit) { + return postRepository.getPostsByLimit(limit); + } }