From 129106a2aeaf5ed950f58363a8caeb7e6b64beb0 Mon Sep 17 00:00:00 2001 From: ruibaby Date: Thu, 28 Jun 2018 00:32:14 +0800 Subject: [PATCH 1/6] =?UTF-8?q?:apple:=20=E6=96=B0=E5=A2=9Eapi=E5=8F=AF?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/ryanc/halo/config/MvcConfig.java | 6 + .../java/cc/ryanc/halo/utils/HaloUtils.java | 4 +- .../halo/web/interceptor/ApiInterceptor.java | 36 ++++++ src/main/resources/application.yaml | 2 +- .../templates/admin/admin_option.ftl | 107 ++++++++++++++++-- 5 files changed, 143 insertions(+), 12 deletions(-) create mode 100644 src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java diff --git a/src/main/java/cc/ryanc/halo/config/MvcConfig.java b/src/main/java/cc/ryanc/halo/config/MvcConfig.java index 2e8b7db31..c23d2aacb 100644 --- a/src/main/java/cc/ryanc/halo/config/MvcConfig.java +++ b/src/main/java/cc/ryanc/halo/config/MvcConfig.java @@ -1,5 +1,6 @@ package cc.ryanc.halo.config; +import cc.ryanc.halo.web.interceptor.ApiInterceptor; import cc.ryanc.halo.web.interceptor.InstallInterceptor; import cc.ryanc.halo.web.interceptor.LoginInterceptor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +31,9 @@ public class MvcConfig implements WebMvcConfigurer { @Autowired private InstallInterceptor installInterceptor; + @Autowired + private ApiInterceptor apiInterceptor; + /** * 注册拦截器 * @@ -48,6 +52,8 @@ public class MvcConfig implements WebMvcConfigurer { .excludePathPatterns("/install") .excludePathPatterns("/install/do") .excludePathPatterns("/static/**"); + registry.addInterceptor(apiInterceptor) + .addPathPatterns("/api/**"); } /** diff --git a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java index 8af4ed409..b0e5cba69 100755 --- a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java @@ -325,7 +325,7 @@ public class HaloUtils { * * @param hostIp ip * @param userName 用户名 - * @param password 密码 + * @param password password * @param savePath 保存路径 * @param fileName 文件名 * @param databaseName 数据库名 @@ -470,7 +470,7 @@ public class HaloUtils { * * @param smtpHost smtpHost * @param userName 邮件地址 - * @param password 密码 + * @param password password */ public static void configMail(String smtpHost, String userName, String password) { Properties properties = OhMyEmail.defaultConfig(false); diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java new file mode 100644 index 000000000..ac65e3ba0 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java @@ -0,0 +1,36 @@ +package cc.ryanc.halo.web.interceptor; + +import cc.ryanc.halo.model.dto.HaloConst; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author : RYAN0UP + * @date : 2018/6/28 + */ +@Component +public class ApiInterceptor implements HandlerInterceptor { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (StringUtils.equals("true", HaloConst.OPTIONS.get("api_status"))) { + return true; + } + response.sendRedirect("/404"); + return false; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 22f1a6a78..2705cef84 100755 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -2,7 +2,7 @@ server: port: 8090 use-forward-headers: true undertow: - io-threads : 2 + io-threads: 2 worker-threads: 36 buffer-size: 1024 directBuffers: true diff --git a/src/main/resources/templates/admin/admin_option.ftl b/src/main/resources/templates/admin/admin_option.ftl index b952690f1..01c6bf378 100755 --- a/src/main/resources/templates/admin/admin_option.ftl +++ b/src/main/resources/templates/admin/admin_option.ftl @@ -17,7 +17,7 @@

- 设置 + 博客设置

@@ -395,12 +395,66 @@
-
-

- 开发中...
- 可选图片存储在本地或者七牛云等云... -

-
+ <#--
--> + <#--
--> + <#----> + <#--
--> + <#----> + <#----> + <#----> + <#--
--> + <#--
--> + + <#-- + <#----> + + <#-- + <#----> + + <#-- + <#----> + <#--
--> @@ -529,6 +583,17 @@
+
+ +
+ + +
+
<@footer> - \ No newline at end of file + From 6e7f7172d4ee3d230694138727a022aa98278d8b Mon Sep 17 00:00:00 2001 From: ruibaby Date: Thu, 28 Jun 2018 14:10:22 +0800 Subject: [PATCH 2/6] =?UTF-8?q?:alien:=20=E6=B5=8B=E8=AF=95Ehcache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +++ src/main/java/cc/ryanc/halo/Application.java | 2 ++ .../java/cc/ryanc/halo/model/dto/Theme.java | 2 ++ .../halo/service/impl/LinkServiceImpl.java | 9 +++++ .../halo/service/impl/MenuServiceImpl.java | 9 +++++ .../java/cc/ryanc/halo/utils/HaloUtils.java | 33 ------------------- .../admin/AttachmentController.java | 3 -- src/main/resources/ehcache.xml | 33 +++++++++++++++++++ 8 files changed, 60 insertions(+), 36 deletions(-) create mode 100644 src/main/resources/ehcache.xml diff --git a/pom.xml b/pom.xml index 1c17ab8de..5c880b3a3 100755 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,11 @@ ${druid.version} + + org.springframework.boot + spring-boot-starter-cache + + org.springframework.boot diff --git a/src/main/java/cc/ryanc/halo/Application.java b/src/main/java/cc/ryanc/halo/Application.java index 2fdab41f1..2845a9982 100755 --- a/src/main/java/cc/ryanc/halo/Application.java +++ b/src/main/java/cc/ryanc/halo/Application.java @@ -3,6 +3,7 @@ package cc.ryanc.halo; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; /** * @author RYAN0UP @@ -10,6 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; */ @Slf4j @SpringBootApplication +@EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/src/main/java/cc/ryanc/halo/model/dto/Theme.java b/src/main/java/cc/ryanc/halo/model/dto/Theme.java index 0e0fb6470..da90dcf33 100644 --- a/src/main/java/cc/ryanc/halo/model/dto/Theme.java +++ b/src/main/java/cc/ryanc/halo/model/dto/Theme.java @@ -15,6 +15,8 @@ import java.io.Serializable; @Data public class Theme implements Serializable { + private static final long serialVersionUID = 1L; + /** * 主题名称 */ diff --git a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java index 00a7971cb..b6e1fee3b 100755 --- a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java @@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Link; import cc.ryanc.halo.repository.LinkRepository; import cc.ryanc.halo.service.LinkService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.List; @@ -19,6 +21,10 @@ public class LinkServiceImpl implements LinkService { @Autowired private LinkRepository linkRepository; + private static final String LINKS_CACHE_KEY = "'link'"; + + private static final String LINKS_CACHE_NAME = "links"; + /** * 新增/修改友情链接 * @@ -26,6 +32,7 @@ public class LinkServiceImpl implements LinkService { * @return Link */ @Override + @CacheEvict(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY) public Link saveByLink(Link link) { return linkRepository.save(link); } @@ -37,6 +44,7 @@ public class LinkServiceImpl implements LinkService { * @return Link */ @Override + @CacheEvict(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY) public Link removeByLinkId(Long linkId) { Optional link = this.findByLinkId(linkId); linkRepository.delete(link.get()); @@ -49,6 +57,7 @@ public class LinkServiceImpl implements LinkService { * @return List */ @Override + @Cacheable(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY) public List findAllLinks() { return linkRepository.findAll(); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java index fa6f4e5af..8a9bb592e 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java @@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Menu; import cc.ryanc.halo.repository.MenuRepository; import cc.ryanc.halo.service.MenuService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.List; @@ -19,12 +21,17 @@ public class MenuServiceImpl implements MenuService { @Autowired private MenuRepository menuRepository; + private static final String MENUS_CACHE_KEY = "'menu'"; + + private static final String MENUS_CACHE_NAME = "menus"; + /** * 查询所有菜单 * * @return List */ @Override + @Cacheable(value = MENUS_CACHE_NAME, key = MENUS_CACHE_KEY) public List findAllMenus() { return menuRepository.findAll(); } @@ -36,6 +43,7 @@ public class MenuServiceImpl implements MenuService { * @return Menu */ @Override + @CacheEvict(value = MENUS_CACHE_NAME, key = MENUS_CACHE_KEY) public Menu saveByMenu(Menu menu) { return menuRepository.save(menu); } @@ -47,6 +55,7 @@ public class MenuServiceImpl implements MenuService { * @return Menu */ @Override + @CacheEvict(value = MENUS_CACHE_NAME,key = MENUS_CACHE_KEY) public Menu removeByMenuId(Long menuId) { Optional menu = this.findByMenuId(menuId); menuRepository.delete(menu.get()); diff --git a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java index b0e5cba69..12460cdb1 100755 --- a/src/main/java/cc/ryanc/halo/utils/HaloUtils.java +++ b/src/main/java/cc/ryanc/halo/utils/HaloUtils.java @@ -16,10 +16,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.util.ResourceUtils; import javax.imageio.ImageIO; -import javax.imageio.ImageReadParam; -import javax.imageio.ImageReader; -import javax.imageio.stream.ImageInputStream; -import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.URI; @@ -36,7 +32,6 @@ import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.List; /** *
@@ -57,34 +52,6 @@ public class HaloUtils {
 
     private static ArrayList FILE_LIST = new ArrayList<>();
 
-    /**
-     * 截取图片
-     *
-     * @param src    输入路径
-     * @param dest   输出路径
-     * @param w      宽度
-     * @param h      长度
-     * @param suffix 后缀
-     * @throws IOException
-     */
-    public static void cutCenterImage(String src, String dest, int w, int h, String suffix) {
-        try {
-            Iterator iterator = ImageIO.getImageReadersByFormatName(suffix);
-            ImageReader reader = (ImageReader) iterator.next();
-            InputStream in = new FileInputStream(src);
-            ImageInputStream iis = ImageIO.createImageInputStream(in);
-            reader.setInput(iis, true);
-            ImageReadParam param = reader.getDefaultReadParam();
-            int imageIndex = 0;
-            Rectangle rect = new Rectangle((reader.getWidth(imageIndex) - w) / 2, (reader.getHeight(imageIndex) - h) / 2, w, h);
-            param.setSourceRegion(rect);
-            BufferedImage bi = reader.read(0, param);
-            ImageIO.write(bi, suffix, new File(dest));
-        } catch (Exception e) {
-            log.error("剪裁失败,图片本身尺寸小于需要修剪的尺寸:{0}", e.getMessage());
-        }
-    }
-
     /**
      * 获取所有附件
      *
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
index fdd3c5185..87415a89d 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java
@@ -24,12 +24,9 @@ import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
 import javax.websocket.server.PathParam;
-import java.awt.image.BufferedImage;
 import java.io.File;
-import java.io.FileInputStream;
 import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
new file mode 100644
index 000000000..36798cd35
--- /dev/null
+++ b/src/main/resources/ehcache.xml
@@ -0,0 +1,33 @@
+
+
+    
+
+    
+
+    
+
\ No newline at end of file

From b167e27984d72fd412bf22421b58067461fe11df Mon Sep 17 00:00:00 2001
From: ruibaby 
Date: Fri, 29 Jun 2018 07:51:07 +0800
Subject: [PATCH 3/6] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E6=96=87?=
 =?UTF-8?q?=E7=AB=A0=E7=8A=B6=E6=80=81=E4=B8=8D=E4=B8=BA=E5=8F=91=E5=B8=83?=
 =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E4=B9=9F=E5=8F=AF=E4=BB=A5=E9=80=9A?=
 =?UTF-8?q?=E8=BF=87=E9=93=BE=E6=8E=A5=E8=AE=BF=E9=97=AE=E7=9A=84=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ryanc/halo/web/controller/front/FrontArchiveController.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
index 51de90904..f57983b0b 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
@@ -99,7 +99,7 @@ public class FrontArchiveController extends BaseController {
     @GetMapping(value = "{postUrl}")
     public String getPost(@PathVariable String postUrl, Model model) {
         Post post = postService.findByPostUrl(postUrl, HaloConst.POST_TYPE_POST);
-        if(null==post){
+        if(null==post || post.getPostStatus()!=0){
             return this.renderNotFound();
         }
         //获得当前文章的发布日期

From 9ae9b6d2206f3ab24ca565ad1584284dfcdaaa16 Mon Sep 17 00:00:00 2001
From: ruibaby 
Date: Fri, 29 Jun 2018 15:54:51 +0800
Subject: [PATCH 4/6] =?UTF-8?q?:alien:=20=E4=BF=AE=E6=94=B9README=E6=B5=8B?=
 =?UTF-8?q?=E8=AF=95=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3c65698d6..fd9120f8d 100755
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ Let's start: http://localhost:8090
 
 ## Demo 演示
 
-[测试地址](http://39.105.26.52),[测试后台(admin,123456)](http://39.105.26.52/admin)
+[测试地址](http://149.28.63.223),[测试后台(admin,123456)](http://149.28.63.223/admin)
 
 [Ryan0up'S Blog](https://ryanc.cc)
 

From 1b1ec582ed6d9adfb21f68ac3fd047403ccbc13f Mon Sep 17 00:00:00 2001
From: ruibaby 
Date: Sat, 30 Jun 2018 12:46:54 +0800
Subject: [PATCH 5/6] =?UTF-8?q?:apple:=20=E9=85=8D=E7=BD=AEehcache?=
 =?UTF-8?q?=E7=BC=93=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../cc/ryanc/halo/service/PostService.java    |  9 ++-
 .../service/impl/AttachmentServiceImpl.java   |  7 +++
 .../service/impl/CategoryServiceImpl.java     |  7 +++
 .../halo/service/impl/CommentServiceImpl.java | 11 ++++
 .../halo/service/impl/GalleryServiceImpl.java |  8 +++
 .../halo/service/impl/LinkServiceImpl.java    |  4 +-
 .../halo/service/impl/MenuServiceImpl.java    |  4 +-
 .../halo/service/impl/PostServiceImpl.java    | 32 +++++++++-
 .../halo/service/impl/TagServiceImpl.java     |  7 +++
 .../web/controller/admin/ThemeController.java |  3 +
 .../front/FrontIndexController.java           |  4 +-
 src/main/resources/ehcache.xml                | 62 ++++++++++++++++++-
 12 files changed, 149 insertions(+), 9 deletions(-)

diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java
index 44ad171bb..4b44a3ea0 100755
--- a/src/main/java/cc/ryanc/halo/service/PostService.java
+++ b/src/main/java/cc/ryanc/halo/service/PostService.java
@@ -76,7 +76,7 @@ public interface PostService {
     List searchPosts(String keyWord, Pageable pageable);
 
     /**
-     * 根据文章状态查询 分页
+     * 根据文章状态查询 分页,用于后台管理
      *
      * @param status   0,1,2
      * @param postType post or page
@@ -85,6 +85,13 @@ public interface PostService {
      */
     Page findPostByStatus(Integer status, String postType, Pageable pageable);
 
+    /**
+     * 根据文章状态查询 分页,首页分页
+     * @param pageable pageable
+     * @return Page
+     */
+    Page findPostByStatus(Pageable pageable);
+
     /**
      * 根据文章状态查询
      *
diff --git a/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
index a9fbdb28a..47429b1f1 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/AttachmentServiceImpl.java
@@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Attachment;
 import cc.ryanc.halo.repository.AttachmentRepository;
 import cc.ryanc.halo.service.AttachmentService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
@@ -21,6 +23,8 @@ public class AttachmentServiceImpl implements AttachmentService {
     @Autowired
     private AttachmentRepository attachmentRepository;
 
+    private static final String ATTACHMENTS_CACHE_NAME = "attachments";
+
     /**
      * 新增附件信息
      *
@@ -28,6 +32,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      * @return Attachment
      */
     @Override
+    @CacheEvict(value = ATTACHMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Attachment saveByAttachment(Attachment attachment) {
         return attachmentRepository.save(attachment);
     }
@@ -38,6 +43,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      * @return List
      */
     @Override
+    @Cacheable(value = ATTACHMENTS_CACHE_NAME, key = "'attachment'")
     public List findAllAttachments() {
         return attachmentRepository.findAll();
     }
@@ -71,6 +77,7 @@ public class AttachmentServiceImpl implements AttachmentService {
      * @return Attachment
      */
     @Override
+    @CacheEvict(value = ATTACHMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Attachment removeByAttachId(Long attachId) {
         Optional attachment = this.findByAttachId(attachId);
         attachmentRepository.delete(attachment.get());
diff --git a/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
index 8fdff4515..8d25263d5 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/CategoryServiceImpl.java
@@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.repository.CategoryRepository;
 import cc.ryanc.halo.service.CategoryService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -20,6 +22,8 @@ public class CategoryServiceImpl implements CategoryService {
     @Autowired
     private CategoryRepository categoryRepository;
 
+    private static final String CATEGORIES_CACHE_NAME = "categories";
+
     /**
      * 保存/修改分类目录
      *
@@ -27,6 +31,7 @@ public class CategoryServiceImpl implements CategoryService {
      * @return Category
      */
     @Override
+    @CacheEvict(value = CATEGORIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Category saveByCategory(Category category) {
         return categoryRepository.save(category);
     }
@@ -38,6 +43,7 @@ public class CategoryServiceImpl implements CategoryService {
      * @return Category
      */
     @Override
+    @CacheEvict(value = CATEGORIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Category removeByCateId(Long cateId) {
         Optional category = this.findByCateId(cateId);
         categoryRepository.delete(category.get());
@@ -50,6 +56,7 @@ public class CategoryServiceImpl implements CategoryService {
      * @return List
      */
     @Override
+    @Cacheable(value = CATEGORIES_CACHE_NAME, key = "'category'")
     public List findAllCategories() {
         return categoryRepository.findAll();
     }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
index 7ba3a4e69..098519f0e 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java
@@ -5,6 +5,9 @@ import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.repository.CommentRepository;
 import cc.ryanc.halo.service.CommentService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
@@ -22,12 +25,15 @@ public class CommentServiceImpl implements CommentService {
     @Autowired
     private CommentRepository commentRepository;
 
+    private static final String COMMENTS_CACHE_NAME = "comments";
+
     /**
      * 新增评论
      *
      * @param comment comment
      */
     @Override
+    @CacheEvict(value = COMMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public void saveByComment(Comment comment) {
         commentRepository.save(comment);
     }
@@ -39,6 +45,7 @@ public class CommentServiceImpl implements CommentService {
      * @return Optional
      */
     @Override
+    @CacheEvict(value = COMMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Optional removeByCommentId(Long commentId) {
         Optional comment = this.findCommentById(commentId);
         commentRepository.delete(comment.get());
@@ -63,6 +70,7 @@ public class CommentServiceImpl implements CommentService {
      * @return List
      */
     @Override
+    @CachePut(value = COMMENTS_CACHE_NAME, key = "'comments_status_'+#status")
     public List findAllComments(Integer status) {
         return commentRepository.findCommentsByCommentStatus(status);
     }
@@ -73,6 +81,7 @@ public class CommentServiceImpl implements CommentService {
      * @return List
      */
     @Override
+    @Cacheable(value = COMMENTS_CACHE_NAME, key = "'comment'")
     public List findAllComments() {
         return commentRepository.findAll();
     }
@@ -85,6 +94,7 @@ public class CommentServiceImpl implements CommentService {
      * @return Comment
      */
     @Override
+    @CacheEvict(value = COMMENTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Comment updateCommentStatus(Long commentId, Integer status) {
         Optional comment = findCommentById(commentId);
         comment.get().setCommentStatus(status);
@@ -133,6 +143,7 @@ public class CommentServiceImpl implements CommentService {
      * @return List
      */
     @Override
+    @Cacheable(value = COMMENTS_CACHE_NAME, key = "'comments_latest'")
     public List findCommentsLatest() {
         return commentRepository.findTopFive();
     }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
index cb271cd56..ec8d6c74c 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/GalleryServiceImpl.java
@@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Gallery;
 import cc.ryanc.halo.repository.GalleryRepository;
 import cc.ryanc.halo.service.GalleryService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
@@ -21,6 +23,8 @@ public class GalleryServiceImpl implements GalleryService {
     @Autowired
     private GalleryRepository galleryRepository;
 
+    private static final String GALLERIES_CACHE_NAME = "galleries";
+
     /**
      * 保存图片
      *
@@ -28,6 +32,7 @@ public class GalleryServiceImpl implements GalleryService {
      * @return Gallery
      */
     @Override
+    @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Gallery saveByGallery(Gallery gallery) {
         return galleryRepository.save(gallery);
     }
@@ -39,6 +44,7 @@ public class GalleryServiceImpl implements GalleryService {
      * @return Gallery
      */
     @Override
+    @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Gallery removeByGalleryId(Long galleryId) {
         Optional gallery = this.findByGalleryId(galleryId);
         galleryRepository.delete(gallery.get());
@@ -52,6 +58,7 @@ public class GalleryServiceImpl implements GalleryService {
      * @return Gallery
      */
     @Override
+    @CacheEvict(value = GALLERIES_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Gallery updateByGallery(Gallery gallery) {
         return galleryRepository.save(gallery);
     }
@@ -73,6 +80,7 @@ public class GalleryServiceImpl implements GalleryService {
      * @return List
      */
     @Override
+    @Cacheable(value = GALLERIES_CACHE_NAME, key = "'gallery'")
     public List findAllGalleries() {
         return galleryRepository.findAll();
     }
diff --git a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
index b6e1fee3b..d9a1f68b7 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/LinkServiceImpl.java
@@ -32,7 +32,7 @@ public class LinkServiceImpl implements LinkService {
      * @return Link
      */
     @Override
-    @CacheEvict(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY)
+    @CacheEvict(value = LINKS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Link saveByLink(Link link) {
         return linkRepository.save(link);
     }
@@ -44,7 +44,7 @@ public class LinkServiceImpl implements LinkService {
      * @return Link
      */
     @Override
-    @CacheEvict(value = LINKS_CACHE_NAME, key = LINKS_CACHE_KEY)
+    @CacheEvict(value = LINKS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Link removeByLinkId(Long linkId) {
         Optional link = this.findByLinkId(linkId);
         linkRepository.delete(link.get());
diff --git a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
index 8a9bb592e..abaf7528b 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/MenuServiceImpl.java
@@ -43,7 +43,7 @@ public class MenuServiceImpl implements MenuService {
      * @return Menu
      */
     @Override
-    @CacheEvict(value = MENUS_CACHE_NAME, key = MENUS_CACHE_KEY)
+    @CacheEvict(value = MENUS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Menu saveByMenu(Menu menu) {
         return menuRepository.save(menu);
     }
@@ -55,7 +55,7 @@ public class MenuServiceImpl implements MenuService {
      * @return Menu
      */
     @Override
-    @CacheEvict(value = MENUS_CACHE_NAME,key = MENUS_CACHE_KEY)
+    @CacheEvict(value = MENUS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Menu removeByMenuId(Long menuId) {
         Optional menu = this.findByMenuId(menuId);
         menuRepository.delete(menu.get());
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 58092fcb1..2821cf1c8 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
@@ -10,6 +10,9 @@ import cc.ryanc.halo.service.PostService;
 import cc.ryanc.halo.utils.HaloUtils;
 import cn.hutool.http.HtmlUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
@@ -29,6 +32,8 @@ public class PostServiceImpl implements PostService {
     @Autowired
     private PostRepository postRepository;
 
+    private static final String POSTS_CACHE_NAME = "posts";
+
     /**
      * 保存文章
      *
@@ -36,6 +41,7 @@ public class PostServiceImpl implements PostService {
      * @return Post
      */
     @Override
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Post saveByPost(Post post) {
         return postRepository.save(post);
     }
@@ -47,6 +53,7 @@ public class PostServiceImpl implements PostService {
      * @return Post
      */
     @Override
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Post removeByPostId(Long postId) {
         Optional post = this.findByPostId(postId);
         postRepository.delete(post.get());
@@ -61,6 +68,7 @@ public class PostServiceImpl implements PostService {
      * @return Post
      */
     @Override
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Post updatePostStatus(Long postId, Integer status) {
         Optional post = this.findByPostId(postId);
         post.get().setPostStatus(status);
@@ -73,6 +81,7 @@ public class PostServiceImpl implements PostService {
      * @param postSummary postSummary
      */
     @Override
+    @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public void updateAllSummary(Integer postSummary) {
         List posts = this.findAllPosts(HaloConst.POST_TYPE_POST);
         for (Post post : posts) {
@@ -105,6 +114,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_type_'+#postType")
     public List findAllPosts(String postType) {
         return postRepository.findPostsByPostType(postType);
     }
@@ -122,7 +132,7 @@ public class PostServiceImpl implements PostService {
     }
 
     /**
-     * 根据文章状态查询 分页
+     * 根据文章状态查询 分页,用于后台管理
      *
      * @param status   0,1,2
      * @param postType post or page
@@ -134,6 +144,18 @@ public class PostServiceImpl implements PostService {
         return postRepository.findPostsByPostStatusAndPostType(status, postType, pageable);
     }
 
+    /**
+     * 根据文章状态查询 分页,首页分页
+     *
+     * @param pageable pageable
+     * @return Page
+     */
+    @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_page_'+#pageable.pageNumber")
+    public Page findPostByStatus(Pageable pageable) {
+        return postRepository.findPostsByPostStatusAndPostType(0,HaloConst.POST_TYPE_POST,pageable);
+    }
+
     /**
      * 根据文章状态查询
      *
@@ -175,6 +197,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_latest'")
     public List findPostLatest() {
         return postRepository.findTopFive();
     }
@@ -208,6 +231,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'archives_year_month'")
     public List findPostGroupByYearAndMonth() {
         List objects = postRepository.findPostGroupByYearAndMonth();
         List archives = new ArrayList<>();
@@ -229,6 +253,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'archives_year'")
     public List findPostGroupByYear() {
         List objects = postRepository.findPostGroupByYear();
         List archives = new ArrayList<>();
@@ -251,6 +276,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_year_month_'+#year+'_'+#month")
     public List findPostByYearAndMonth(String year, String month) {
         return postRepository.findPostByYearAndMonth(year, month);
     }
@@ -262,6 +288,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_year_'+#year")
     public List findPostByYear(String year) {
         return postRepository.findPostByYear(year);
     }
@@ -299,6 +326,7 @@ public class PostServiceImpl implements PostService {
      * @return Page
      */
     @Override
+    @CachePut(value = POSTS_CACHE_NAME, key = "'posts_tag_'+#tag.tagId+'_'+#pageable.pageNumber")
     public Page findPostsByTags(Tag tag, Pageable pageable) {
         return postRepository.findPostsByTags(tag, pageable);
     }
@@ -321,6 +349,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_hot'")
     public List hotPosts() {
         return postRepository.findPostsByPostTypeOrderByPostViewsDesc(HaloConst.POST_TYPE_POST);
     }
@@ -332,6 +361,7 @@ public class PostServiceImpl implements PostService {
      * @return List
      */
     @Override
+    @CachePut(value = POSTS_CACHE_NAME, key = "'posts_related_'+#post.getPostId()")
     public List relatedPosts(Post post) {
         //获取当前文章的所有标签
         List tags = post.getTags();
diff --git a/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
index dea016d15..af9917ee3 100644
--- a/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/TagServiceImpl.java
@@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.repository.TagRepository;
 import cc.ryanc.halo.service.TagService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -20,6 +22,8 @@ public class TagServiceImpl implements TagService {
     @Autowired
     private TagRepository tagRepository;
 
+    private static final String TAGS_CACHE_NAME = "tags";
+
     /**
      * 新增/修改标签
      *
@@ -27,6 +31,7 @@ public class TagServiceImpl implements TagService {
      * @return Tag
      */
     @Override
+    @CacheEvict(value = TAGS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Tag saveByTag(Tag tag) {
         return tagRepository.save(tag);
     }
@@ -38,6 +43,7 @@ public class TagServiceImpl implements TagService {
      * @return Tag
      */
     @Override
+    @CacheEvict(value = TAGS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public Tag removeByTagId(Long tagId) {
         Optional tag = findByTagId(tagId);
         tagRepository.delete(tag.get());
@@ -50,6 +56,7 @@ public class TagServiceImpl implements TagService {
      * @return List
      */
     @Override
+    @Cacheable(value = TAGS_CACHE_NAME, key = "'tag'")
     public List findAllTags() {
         return tagRepository.findAll();
     }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
index 3d403cf1e..82265710f 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
@@ -14,7 +14,9 @@ import cn.hutool.core.util.ZipUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.ehcache.CacheManager;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.util.ResourceUtils;
@@ -67,6 +69,7 @@ public class ThemeController extends BaseController {
      */
     @GetMapping(value = "/set")
     @ResponseBody
+    @CacheEvict(value = "posts", allEntries = true, beforeInvocation = true)
     public JsonResult activeTheme(@PathParam("siteTheme") String siteTheme,
                                   HttpServletRequest request) {
         try {
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java
index aaa542202..32aefb105 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontIndexController.java
@@ -66,7 +66,7 @@ public class FrontIndexController extends BaseController {
         }
         //所有文章数据,分页
         Pageable pageable = PageRequest.of(page - 1, size, sort);
-        Page posts = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable);
+        Page posts = postService.findPostByStatus(pageable);
         if (null == posts) {
             return this.renderNotFound();
         }
@@ -93,7 +93,7 @@ public class FrontIndexController extends BaseController {
 
         //文章数据,只获取文章,没有分页
         Pageable pageable = PageRequest.of(page - 1, size, sort);
-        List posts = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable).getContent();
+        List posts = postService.findPostByStatus(pageable).getContent();
         return posts;
     }
 
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
index 36798cd35..84bde2663 100644
--- a/src/main/resources/ehcache.xml
+++ b/src/main/resources/ehcache.xml
@@ -30,4 +30,64 @@
             timeToIdleSeconds="0"
             timeToLiveSeconds="300"
             memoryStoreEvictionPolicy="LRU"/>
-
\ No newline at end of file
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+

From 2dd9b2918bfe51872d0e40553b0339795f730442 Mon Sep 17 00:00:00 2001
From: ruibaby 
Date: Sun, 1 Jul 2018 11:35:50 +0800
Subject: [PATCH 6/6] =?UTF-8?q?:alien:=20=E4=BB=A3=E7=A0=81=E4=BC=98?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/cc/ryanc/halo/model/dto/Archive.java |  5 ++-
 .../cc/ryanc/halo/model/dto/HaloConst.java    | 10 -----
 .../cc/ryanc/halo/model/enums/PostStatus.java | 39 ++++++++++++++++
 .../cc/ryanc/halo/model/enums/PostType.java   | 28 ++++++++++++
 .../halo/model/enums/ResponseStatus.java      | 44 +++++++++++++++++++
 .../halo/model/tag/ArticleTagDirective.java   |  6 +--
 .../cc/ryanc/halo/service/PostService.java    |  7 +++
 .../halo/service/impl/PostServiceImpl.java    | 25 ++++++++---
 .../web/controller/admin/AdminController.java |  3 +-
 .../controller/admin/BackupController.java    |  5 ++-
 .../controller/admin/CommentController.java   |  5 ++-
 .../web/controller/admin/PageController.java  | 11 ++---
 .../web/controller/admin/PostController.java  | 28 ++++++------
 .../web/controller/admin/ThemeController.java |  1 -
 .../controller/api/ApiArchivesController.java |  9 ++--
 .../controller/api/ApiCategoryController.java |  9 ++--
 .../controller/api/ApiGalleryController.java  |  9 ++--
 .../web/controller/api/ApiLinkController.java |  5 ++-
 .../web/controller/api/ApiMenuController.java |  5 ++-
 .../web/controller/api/ApiPageController.java |  9 ++--
 .../web/controller/api/ApiPostController.java | 19 ++++----
 .../web/controller/api/ApiTagController.java  |  9 ++--
 .../web/controller/api/ApiUserController.java |  3 +-
 .../front/FrontArchiveController.java         |  9 ++--
 .../front/FrontCommentController.java         |  5 ++-
 .../front/FrontOthersController.java          |  5 ++-
 .../controller/front/FrontPageController.java |  7 ++-
 .../themes/material/_partial/head.ftl         | 21 ++++++++-
 .../themes/material/_partial/import_js.ftl    | 17 +++----
 29 files changed, 254 insertions(+), 104 deletions(-)
 create mode 100644 src/main/java/cc/ryanc/halo/model/enums/PostStatus.java
 create mode 100644 src/main/java/cc/ryanc/halo/model/enums/PostType.java
 create mode 100644 src/main/java/cc/ryanc/halo/model/enums/ResponseStatus.java

diff --git a/src/main/java/cc/ryanc/halo/model/dto/Archive.java b/src/main/java/cc/ryanc/halo/model/dto/Archive.java
index 40780c3c0..037365c6d 100644
--- a/src/main/java/cc/ryanc/halo/model/dto/Archive.java
+++ b/src/main/java/cc/ryanc/halo/model/dto/Archive.java
@@ -3,6 +3,7 @@ package cc.ryanc.halo.model.dto;
 import cc.ryanc.halo.model.domain.Post;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -14,7 +15,9 @@ import java.util.List;
  * @date : 2018/1/20
  */
 @Data
-public class Archive {
+public class Archive implements Serializable {
+
+    private static final long serialVersionUID = 1L;
 
     /**
      * 年份
diff --git a/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java b/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java
index 3338c797d..d08c03b40 100644
--- a/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java
+++ b/src/main/java/cc/ryanc/halo/model/dto/HaloConst.java
@@ -36,14 +36,4 @@ public class HaloConst {
      * user_session
      */
     public static String USER_SESSION_KEY = "user_session";
-
-    /**
-     * Post类型:文章
-     */
-    public static String POST_TYPE_POST = "post";
-
-    /**
-     * Post类型:页面
-     */
-    public static String POST_TYPE_PAGE = "page";
 }
diff --git a/src/main/java/cc/ryanc/halo/model/enums/PostStatus.java b/src/main/java/cc/ryanc/halo/model/enums/PostStatus.java
new file mode 100644
index 000000000..5f4032844
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/model/enums/PostStatus.java
@@ -0,0 +1,39 @@
+package cc.ryanc.halo.model.enums;
+
+/**
+ * @author : RYAN0UP
+ * @date : 2018/7/1
+ */
+public enum PostStatus {
+
+    /**
+     * 已发布
+     */
+    PUBLISHED(0,"已发布"),
+
+    /**
+     * 草稿
+     */
+    DRAFT(1,"草稿"),
+
+    /**
+     * 回收站
+     */
+    RECYCLE(2,"回收站");
+
+    private Integer code;
+    private String desc;
+
+    PostStatus(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}
diff --git a/src/main/java/cc/ryanc/halo/model/enums/PostType.java b/src/main/java/cc/ryanc/halo/model/enums/PostType.java
new file mode 100644
index 000000000..092a1e19c
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/model/enums/PostType.java
@@ -0,0 +1,28 @@
+package cc.ryanc.halo.model.enums;
+
+/**
+ * @author : RYAN0UP
+ * @date : 2018/7/1
+ */
+public enum PostType {
+
+    /**
+     * 文章
+     */
+    POST_TYPE_POST("post"),
+
+    /**
+     * 页面
+     */
+    POST_TYPE_PAGE("page");
+
+    private String desc;
+
+    PostType(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}
diff --git a/src/main/java/cc/ryanc/halo/model/enums/ResponseStatus.java b/src/main/java/cc/ryanc/halo/model/enums/ResponseStatus.java
new file mode 100644
index 000000000..f9c38e54e
--- /dev/null
+++ b/src/main/java/cc/ryanc/halo/model/enums/ResponseStatus.java
@@ -0,0 +1,44 @@
+package cc.ryanc.halo.model.enums;
+
+/**
+ * @author : RYAN0UP
+ * @date : 2018/7/1
+ */
+public enum ResponseStatus {
+
+    /**
+     * 请求成功
+     */
+    SUCCESS(200,"OK"),
+
+    /**
+     * 资源为空
+     */
+    EMPTY(204,"No Content"),
+
+    /**
+     * 服务器内部错误
+     */
+    ERROR(500,"Internal Server Error"),
+
+    /**
+     * 未找到资源
+     */
+    NOTFOUND(404,"Not Found");
+
+    private Integer code;
+    private String msg;
+
+    ResponseStatus(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}
diff --git a/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java b/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java
index 17b8f0fac..7c6608408 100644
--- a/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java
+++ b/src/main/java/cc/ryanc/halo/model/tag/ArticleTagDirective.java
@@ -1,6 +1,6 @@
 package cc.ryanc.halo.model.tag;
 
-import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.PostService;
 import freemarker.core.Environment;
 import freemarker.template.*;
@@ -33,7 +33,7 @@ public class ArticleTagDirective implements TemplateDirectiveModel {
             String method = map.get(METHOD_KEY).toString();
             switch (method) {
                 case "postsCount":
-                    environment.setVariable("postsCount", builder.build().wrap(postService.findAllPosts(HaloConst.POST_TYPE_POST).size()));
+                    environment.setVariable("postsCount", builder.build().wrap(postService.findAllPosts(PostType.POST_TYPE_POST.getDesc()).size()));
                     break;
                 case "archives":
                     environment.setVariable("archives", builder.build().wrap(postService.findPostGroupByYearAndMonth()));
@@ -50,4 +50,4 @@ public class ArticleTagDirective implements TemplateDirectiveModel {
         }
         templateDirectiveBody.render(environment.getOut());
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java
index 4b44a3ea0..78cdabad2 100755
--- a/src/main/java/cc/ryanc/halo/service/PostService.java
+++ b/src/main/java/cc/ryanc/halo/service/PostService.java
@@ -42,6 +42,13 @@ public interface PostService {
      */
     Post updatePostStatus(Long postId, Integer status);
 
+    /**
+     * 修改文章阅读量
+     *
+     * @param post post
+     */
+    void updatePostView(Post post);
+
     /**
      * 批量修改摘要
      *
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 2821cf1c8..30181273a 100755
--- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
+++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java
@@ -4,7 +4,8 @@ import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.dto.Archive;
-import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostStatus;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.repository.PostRepository;
 import cc.ryanc.halo.service.PostService;
 import cc.ryanc.halo.utils.HaloUtils;
@@ -75,6 +76,17 @@ public class PostServiceImpl implements PostService {
         return postRepository.save(post.get());
     }
 
+    /**
+     * 修改文章阅读量
+     *
+     * @param post post
+     */
+    @Override
+    public void updatePostView(Post post) {
+        post.setPostViews(post.getPostViews()+1);
+        postRepository.save(post);
+    }
+
     /**
      * 批量更新文章摘要
      *
@@ -83,7 +95,7 @@ public class PostServiceImpl implements PostService {
     @Override
     @CacheEvict(value = POSTS_CACHE_NAME, allEntries = true, beforeInvocation = true)
     public void updateAllSummary(Integer postSummary) {
-        List posts = this.findAllPosts(HaloConst.POST_TYPE_POST);
+        List posts = this.findAllPosts(PostType.POST_TYPE_POST.getDesc());
         for (Post post : posts) {
             String text = HtmlUtil.cleanHtmlTag(post.getPostContent());
             if (text.length() > postSummary) {
@@ -153,7 +165,7 @@ public class PostServiceImpl implements PostService {
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_page_'+#pageable.pageNumber")
     public Page findPostByStatus(Pageable pageable) {
-        return postRepository.findPostsByPostStatusAndPostType(0,HaloConst.POST_TYPE_POST,pageable);
+        return postRepository.findPostsByPostStatusAndPostType(PostStatus.PUBLISHED.getCode(),PostType.POST_TYPE_POST.getDesc(),pageable);
     }
 
     /**
@@ -187,6 +199,7 @@ public class PostServiceImpl implements PostService {
      * @return Post
      */
     @Override
+    @Cacheable(value = POSTS_CACHE_NAME,key = "'posts_posturl_'+#postUrl+'_'+#postType")
     public Post findByPostUrl(String postUrl, String postType) {
         return postRepository.findPostByPostUrlAndPostType(postUrl, postType);
     }
@@ -210,7 +223,7 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     public List findByPostDateAfter(Date postDate) {
-        return postRepository.findByPostDateAfterAndPostStatusAndPostTypeOrderByPostDateDesc(postDate, 0, HaloConst.POST_TYPE_POST);
+        return postRepository.findByPostDateAfterAndPostStatusAndPostTypeOrderByPostDateDesc(postDate, PostStatus.PUBLISHED.getCode(), PostType.POST_TYPE_POST.getDesc());
     }
 
     /**
@@ -221,7 +234,7 @@ public class PostServiceImpl implements PostService {
      */
     @Override
     public List findByPostDateBefore(Date postDate) {
-        return postRepository.findByPostDateBeforeAndPostStatusAndPostTypeOrderByPostDateAsc(postDate, 0, HaloConst.POST_TYPE_POST);
+        return postRepository.findByPostDateBeforeAndPostStatusAndPostTypeOrderByPostDateAsc(postDate, PostStatus.PUBLISHED.getCode(), PostType.POST_TYPE_POST.getDesc());
     }
 
 
@@ -351,7 +364,7 @@ public class PostServiceImpl implements PostService {
     @Override
     @Cacheable(value = POSTS_CACHE_NAME, key = "'posts_hot'")
     public List hotPosts() {
-        return postRepository.findPostsByPostTypeOrderByPostViewsDesc(HaloConst.POST_TYPE_POST);
+        return postRepository.findPostsByPostTypeOrderByPostViewsDesc(PostType.POST_TYPE_POST.getDesc());
     }
 
     /**
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java
index dc52cb6c4..ce76b9beb 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AdminController.java
@@ -7,6 +7,7 @@ import cc.ryanc.halo.model.domain.User;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
 import cc.ryanc.halo.model.dto.LogsRecord;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.LogsService;
 import cc.ryanc.halo.service.PostService;
@@ -69,7 +70,7 @@ public class AdminController extends BaseController {
     @GetMapping(value = {"", "/index"})
     public String index(Model model, HttpSession session) {
         //查询文章条数
-        Integer postCount = postService.findAllPosts(HaloConst.POST_TYPE_POST).size();
+        Integer postCount = postService.findAllPosts(PostType.POST_TYPE_POST.getDesc()).size();
         model.addAttribute("postCount", postCount);
 
         //查询评论的条数
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
index 863b2db04..38dfea71c 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java
@@ -5,6 +5,7 @@ import cc.ryanc.halo.model.domain.User;
 import cc.ryanc.halo.model.dto.BackupDto;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.MailService;
 import cc.ryanc.halo.service.PostService;
 import cc.ryanc.halo.utils.HaloUtils;
@@ -139,8 +140,8 @@ public class BackupController {
      * @return JsonResult
      */
     public JsonResult backupPosts() {
-        List posts = postService.findAllPosts(HaloConst.POST_TYPE_POST);
-        posts.addAll(postService.findAllPosts(HaloConst.POST_TYPE_PAGE));
+        List posts = postService.findAllPosts(PostType.POST_TYPE_POST.getDesc());
+        posts.addAll(postService.findAllPosts(PostType.POST_TYPE_PAGE.getDesc()));
         try {
             if(HaloUtils.getBackUps("posts").size()>10){
                 FileUtil.del(System.getProperties().getProperty("user.home") + "/halo/backup/posts/");
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
index 4fcc768b0..7395e2795 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Comment;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.domain.User;
 import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.MailService;
 import cc.ryanc.halo.service.PostService;
@@ -118,7 +119,7 @@ public class CommentController extends BaseController {
             try {
                 if (status == 1 && Validator.isEmail(comment.getCommentAuthorEmail())) {
                     Map map = new HashMap<>();
-                    if (StringUtils.equals(post.getPostType(), HaloConst.POST_TYPE_POST)) {
+                    if (StringUtils.equals(post.getPostType(), PostType.POST_TYPE_POST.getDesc())) {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
                     } else {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
@@ -210,7 +211,7 @@ public class CommentController extends BaseController {
                     map.put("blogTitle", HaloConst.OPTIONS.get("blog_title"));
                     map.put("commentAuthor", lastComment.getCommentAuthor());
                     map.put("pageName", lastComment.getPost().getPostTitle());
-                    if (StringUtils.equals(post.getPostType(), HaloConst.POST_TYPE_POST)) {
+                    if (StringUtils.equals(post.getPostType(), PostType.POST_TYPE_POST.getDesc())) {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
                     } else {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
index cd976b490..46fd83078 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.*;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
 import cc.ryanc.halo.model.dto.LogsRecord;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.GalleryService;
 import cc.ryanc.halo.service.LinkService;
 import cc.ryanc.halo.service.LogsService;
@@ -59,7 +60,7 @@ public class PageController {
      */
     @GetMapping
     public String pages(Model model) {
-        List posts = postService.findAllPosts(HaloConst.POST_TYPE_PAGE);
+        List posts = postService.findAllPosts(PostType.POST_TYPE_PAGE.getDesc());
         model.addAttribute("pages", posts);
         return "admin/admin_page";
     }
@@ -100,7 +101,7 @@ public class PageController {
             Link backLink = linkService.saveByLink(link);
             log.info("保存成功,数据为:" + backLink);
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
         return "redirect:/admin/page/links";
     }
@@ -117,7 +118,7 @@ public class PageController {
             Link link = linkService.removeByLinkId(linkId);
             log.info("删除的友情链接:" + link);
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
         return "redirect:/admin/page/links";
     }
@@ -218,7 +219,7 @@ public class PageController {
             //发表用户
             User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY);
             post.setUser(user);
-            post.setPostType(HaloConst.POST_TYPE_PAGE);
+            post.setPostType(PostType.POST_TYPE_PAGE.getDesc());
             if(null!=post.getPostId()){
                 post.setPostViews(postService.findByPostId(post.getPostId()).get().getPostViews());
                 post.setPostDate(postService.findByPostId(post.getPostId()).get().getPostDate());
@@ -260,7 +261,7 @@ public class PageController {
     @GetMapping(value = "/checkUrl")
     @ResponseBody
     public boolean checkUrlExists(@PathParam("postUrl") String postUrl) {
-        Post post = postService.findByPostUrl(postUrl, HaloConst.POST_TYPE_PAGE);
+        Post post = postService.findByPostUrl(postUrl, PostType.POST_TYPE_PAGE.getDesc());
         // TODO 还没写完
         if (null != post || StringUtils.equals("archives", postUrl) || StringUtils.equals("galleries", postUrl)) {
             return true;
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java
index 3ded45e45..5a668189e 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java
@@ -4,6 +4,8 @@ import cc.ryanc.halo.model.domain.*;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
 import cc.ryanc.halo.model.dto.LogsRecord;
+import cc.ryanc.halo.model.enums.PostStatus;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CategoryService;
 import cc.ryanc.halo.service.LogsService;
 import cc.ryanc.halo.service.PostService;
@@ -86,11 +88,11 @@ public class PostController extends BaseController {
                         @RequestParam(value = "size", defaultValue = "10") Integer size) {
         Sort sort = new Sort(Sort.Direction.DESC, "postDate");
         Pageable pageable = PageRequest.of(page, size, sort);
-        Page posts = postService.findPostByStatus(status, HaloConst.POST_TYPE_POST, pageable);
+        Page posts = postService.findPostByStatus(status, PostType.POST_TYPE_POST.getDesc(), pageable);
         model.addAttribute("posts", posts);
-        model.addAttribute("publishCount", postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable).getTotalElements());
-        model.addAttribute("draftCount", postService.findPostByStatus(1, HaloConst.POST_TYPE_POST, pageable).getTotalElements());
-        model.addAttribute("trashCount", postService.findPostByStatus(2, HaloConst.POST_TYPE_POST, pageable).getTotalElements());
+        model.addAttribute("publishCount", postService.findPostByStatus(PostStatus.PUBLISHED.getCode(), PostType.POST_TYPE_POST.getDesc(), pageable).getTotalElements());
+        model.addAttribute("draftCount", postService.findPostByStatus(PostStatus.DRAFT.getCode(), PostType.POST_TYPE_POST.getDesc(), pageable).getTotalElements());
+        model.addAttribute("trashCount", postService.findPostByStatus(PostStatus.RECYCLE.getCode(), PostType.POST_TYPE_POST.getDesc(), pageable).getTotalElements());
         model.addAttribute("status", status);
         return "admin/admin_post";
     }
@@ -115,7 +117,7 @@ public class PostController extends BaseController {
             Pageable pageable = PageRequest.of(page, size, sort);
             model.addAttribute("posts", postService.searchPosts(keyword, pageable));
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
         return "admin/admin_post";
     }
@@ -259,10 +261,10 @@ public class PostController extends BaseController {
     @GetMapping("/throw")
     public String moveToTrash(@RequestParam("postId") Long postId, @RequestParam("status") Integer status) {
         try {
-            postService.updatePostStatus(postId, 2);
+            postService.updatePostStatus(postId, PostStatus.RECYCLE.getCode());
             log.info("编号为" + postId + "的文章已被移到回收站");
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
         return "redirect:/admin/posts?status=" + status;
     }
@@ -277,10 +279,10 @@ public class PostController extends BaseController {
     public String moveToPublish(@RequestParam("postId") Long postId,
                                 @RequestParam("status") Integer status) {
         try {
-            postService.updatePostStatus(postId, 0);
+            postService.updatePostStatus(postId, PostStatus.PUBLISHED.getCode());
             log.info("编号为" + postId + "的文章已改变为发布状态");
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
         return "redirect:/admin/posts?status=" + status;
     }
@@ -298,9 +300,9 @@ public class PostController extends BaseController {
             postService.removeByPostId(postId);
             logsService.saveByLogs(new Logs(LogsRecord.REMOVE_POST, post.get().getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date()));
         } catch (Exception e) {
-            log.error("未知错误:{0}", e.getMessage());
+            log.error("未知错误:", e.getMessage());
         }
-        if (StringUtils.equals(HaloConst.POST_TYPE_POST, postType)) {
+        if (StringUtils.equals(PostType.POST_TYPE_POST.getDesc(), postType)) {
             return "redirect:/admin/posts?status=2";
         }
         return "redirect:/admin/page";
@@ -348,7 +350,7 @@ public class PostController extends BaseController {
     @ResponseBody
     public boolean checkUrlExists(@PathParam("postUrl") String postUrl) {
         postUrl = urlFilter(postUrl);
-        Post post = postService.findByPostUrl(postUrl, HaloConst.POST_TYPE_POST);
+        Post post = postService.findByPostUrl(postUrl, PostType.POST_TYPE_POST.getDesc());
         return null != post;
     }
 
@@ -365,7 +367,7 @@ public class PostController extends BaseController {
             return false;
         }
         String blogUrl = HaloConst.OPTIONS.get("blog_url");
-        List posts = postService.findAllPosts(HaloConst.POST_TYPE_POST);
+        List posts = postService.findAllPosts(PostType.POST_TYPE_POST.getDesc());
         StringBuilder urls = new StringBuilder();
         for (Post post : posts) {
             urls.append(blogUrl);
diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
index 82265710f..0561f3280 100755
--- a/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/admin/ThemeController.java
@@ -14,7 +14,6 @@ import cn.hutool.core.util.ZipUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.ehcache.CacheManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Controller;
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java
index 524ce466a..1b9cfd7e1 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiArchivesController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.dto.Archive;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.PostService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -30,9 +31,9 @@ public class ApiArchivesController {
     public JsonResult archivesYear(){
         List archives = postService.findPostGroupByYear();
         if(null!=archives || archives.size()>0){
-            return new JsonResult(200,"success",archives);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),archives);
         }else {
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 
@@ -45,9 +46,9 @@ public class ApiArchivesController {
     public JsonResult archivesYearAndMonth(){
         List archives = postService.findPostGroupByYearAndMonth();
         if(null!=archives || archives.size()>0){
-            return new JsonResult(200,"success",archives);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),archives);
         }else {
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java
index e9e37d36c..2d9be76b4 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiCategoryController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Category;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.CategoryService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -31,9 +32,9 @@ public class ApiCategoryController {
     public JsonResult categories(){
         List categories = categoryService.findAllCategories();
         if(null!=categories && categories.size()>0){
-            return new JsonResult(200,"success",categories);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),categories);
         }else{
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 
@@ -47,9 +48,9 @@ public class ApiCategoryController {
     public JsonResult categories(@PathVariable("cateUrl") String cateUrl){
         Category category = categoryService.findByCateUrl(cateUrl);
         if(null!=category){
-            return new JsonResult(200,"success",category);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),category);
         }else{
-            return new JsonResult(404,"not found");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java
index 8a5459333..91b9d9cc8 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiGalleryController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Gallery;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.GalleryService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,9 +33,9 @@ public class ApiGalleryController {
     public JsonResult galleries(){
         List galleries = galleryService.findAllGalleries();
         if(null!=galleries && galleries.size()>0){
-            return new JsonResult(200,"success",galleries);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),galleries);
         }else {
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 
@@ -48,9 +49,9 @@ public class ApiGalleryController {
     public JsonResult galleries(@PathVariable("id") Long id){
         Optional gallery = galleryService.findByGalleryId(id);
         if(gallery.isPresent()){
-            return new JsonResult(200,"success",gallery.get());
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),gallery.get());
         }else{
-            return new JsonResult(404,"not found");
+            return new JsonResult(ResponseStatus.NOTFOUND.getCode(),ResponseStatus.NOTFOUND.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java
index f96d8bc03..a15361124 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiLinkController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Link;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.LinkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -30,9 +31,9 @@ public class ApiLinkController {
     public JsonResult links(){
         List links = linkService.findAllLinks();
         if(null!=links && links.size()>0){
-            return new JsonResult(200,"success",links);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),links);
         }else{
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java
index af743fc7d..c4486323d 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiMenuController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Menu;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.MenuService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -30,9 +31,9 @@ public class ApiMenuController {
     public JsonResult menus(){
         List menus = menuService.findAllMenus();
         if(null!=menus && menus.size()>0){
-            return new JsonResult(200,"success",menus);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),menus);
         }else{
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java
index 124de4fd4..ab73cc8c1 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPageController.java
@@ -1,8 +1,9 @@
 package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Post;
-import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.PostType;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.PostService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -28,11 +29,11 @@ public class ApiPageController {
      */
     @GetMapping(value = "/{postUrl}")
     public JsonResult pages(@PathVariable(value = "postUrl") String postUrl){
-        Post post = postService.findByPostUrl(postUrl,HaloConst.POST_TYPE_PAGE);
+        Post post = postService.findByPostUrl(postUrl,PostType.POST_TYPE_PAGE.getDesc());
         if(null!=post){
-            return new JsonResult(200,"success",post);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),post);
         }else{
-            return new JsonResult(404,"not found");
+            return new JsonResult(ResponseStatus.NOTFOUND.getCode(),ResponseStatus.NOTFOUND.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
index 3df92484d..c3e3822c9 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiPostController.java
@@ -3,6 +3,9 @@ package cc.ryanc.halo.web.controller.api;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.PostStatus;
+import cc.ryanc.halo.model.enums.PostType;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.PostService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,20 +45,20 @@ public class ApiPostController {
             size = Integer.parseInt(HaloConst.OPTIONS.get("index_posts"));
         }
         Pageable pageable = PageRequest.of(page - 1, size, sort);
-        Page posts = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable);
+        Page posts = postService.findPostByStatus(PostStatus.PUBLISHED.getCode(), PostType.POST_TYPE_POST.getDesc(), pageable);
         if (null == posts) {
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
-        return new JsonResult(200,"success",posts);
+        return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),posts);
     }
 
     @GetMapping(value = "/hot")
     public JsonResult hotPosts() {
         List posts = postService.hotPosts();
         if (null != posts && posts.size() > 0) {
-            return new JsonResult(200, "success", posts);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(), posts);
         } else {
-            return new JsonResult(200, "empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 
@@ -67,11 +70,11 @@ public class ApiPostController {
      */
     @GetMapping(value = "/{postUrl}")
     public JsonResult posts(@PathVariable(value = "postUrl") String postUrl){
-        Post post = postService.findByPostUrl(postUrl,HaloConst.POST_TYPE_POST);
+        Post post = postService.findByPostUrl(postUrl,PostType.POST_TYPE_POST.getDesc());
         if(null!=post){
-            return new JsonResult(200,"success",post);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),post);
         }else {
-            return new JsonResult(404,"not found");
+            return new JsonResult(ResponseStatus.NOTFOUND.getCode(),ResponseStatus.NOTFOUND.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java
index a505dc5bc..b2cb05cd0 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiTagController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.Tag;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.TagService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -31,9 +32,9 @@ public class ApiTagController {
     public JsonResult tags(){
         List tags = tagService.findAllTags();
         if(null!=tags && tags.size()>0){
-            return new JsonResult(200,"success",tags);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),tags);
         }else{
-            return new JsonResult(200,"empty");
+            return new JsonResult(ResponseStatus.EMPTY.getCode(),ResponseStatus.EMPTY.getMsg());
         }
     }
 
@@ -47,9 +48,9 @@ public class ApiTagController {
     public JsonResult tags(@PathVariable("tagUrl") String tagUrl){
         Tag tag = tagService.findByTagUrl(tagUrl);
         if(null!=tag){
-            return new JsonResult(200,"success",tag);
+            return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),tag);
         }else{
-            return new JsonResult(404,"not found");
+            return new JsonResult(ResponseStatus.NOTFOUND.getCode(),ResponseStatus.NOTFOUND.getMsg());
         }
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java b/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java
index 3df1b7db7..8c5312b89 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/api/ApiUserController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.api;
 
 import cc.ryanc.halo.model.domain.User;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.ResponseStatus;
 import cc.ryanc.halo.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -27,6 +28,6 @@ public class ApiUserController {
     @GetMapping
     public JsonResult user(){
         User user = userService.findUser();
-        return new JsonResult(200,"success",user);
+        return new JsonResult(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMsg(),user);
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
index f57983b0b..cf5cf5e18 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java
@@ -2,7 +2,7 @@ package cc.ryanc.halo.web.controller.front;
 
 import cc.ryanc.halo.model.domain.Comment;
 import cc.ryanc.halo.model.domain.Post;
-import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.PostService;
 import cc.ryanc.halo.web.controller.core.BaseController;
@@ -61,7 +61,7 @@ public class FrontArchiveController extends BaseController {
         //所有文章数据,分页,material主题适用
         Sort sort = new Sort(Sort.Direction.DESC, "postDate");
         Pageable pageable = PageRequest.of(page - 1, 5, sort);
-        Page posts = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable);
+        Page posts = postService.findPostByStatus(0, PostType.POST_TYPE_POST.getDesc(), pageable);
         if(null==posts){
             return this.renderNotFound();
         }
@@ -98,7 +98,7 @@ public class FrontArchiveController extends BaseController {
      */
     @GetMapping(value = "{postUrl}")
     public String getPost(@PathVariable String postUrl, Model model) {
-        Post post = postService.findByPostUrl(postUrl, HaloConst.POST_TYPE_POST);
+        Post post = postService.findByPostUrl(postUrl, PostType.POST_TYPE_POST.getDesc());
         if(null==post || post.getPostStatus()!=0){
             return this.renderNotFound();
         }
@@ -120,8 +120,7 @@ public class FrontArchiveController extends BaseController {
         Page comments = commentService.findCommentsByPostAndCommentStatus(post,pageable,0);
         model.addAttribute("post", post);
         model.addAttribute("comments",comments);
-        post.setPostViews(post.getPostViews()+1);
-        postService.saveByPost(post);
+        postService.updatePostView(post);
         return this.render("post");
     }
 }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java
index ddc95f7ea..ffcbe60e9 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java
@@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Comment;
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.dto.HaloConst;
 import cc.ryanc.halo.model.dto.JsonResult;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.MailService;
 import cc.ryanc.halo.service.PostService;
@@ -149,7 +150,7 @@ public class FrontCommentController {
                     Map map = new HashMap<>();
                     map.put("author", userService.findUser().getUserDisplayName());
                     map.put("pageName", post.getPostTitle());
-                    if (StringUtils.equals(post.getPostType(), HaloConst.POST_TYPE_POST)) {
+                    if (StringUtils.equals(post.getPostType(), PostType.POST_TYPE_POST.getDesc())) {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
                     } else {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
@@ -189,7 +190,7 @@ public class FrontCommentController {
                     map.put("blogTitle",HaloConst.OPTIONS.get("blog_title"));
                     map.put("commentAuthor",lastComment.getCommentAuthor());
                     map.put("pageName",lastComment.getPost().getPostTitle());
-                    if (StringUtils.equals(post.getPostType(), HaloConst.POST_TYPE_POST)) {
+                    if (StringUtils.equals(post.getPostType(), PostType.POST_TYPE_POST.getDesc())) {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
                     } else {
                         map.put("pageUrl", HaloConst.OPTIONS.get("blog_url") + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId());
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
index d9542aaf2..de857f4e8 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontOthersController.java
@@ -2,6 +2,7 @@ package cc.ryanc.halo.web.controller.front;
 
 import cc.ryanc.halo.model.domain.Post;
 import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.PostService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +41,7 @@ public class FrontOthersController {
         //获取文章列表并根据时间排序
         Sort sort = new Sort(Sort.Direction.DESC, "postDate");
         Pageable pageable = PageRequest.of(0, Integer.parseInt(rssPosts), sort);
-        Page postsPage = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable);
+        Page postsPage = postService.findPostByStatus(0, PostType.POST_TYPE_POST.getDesc(), pageable);
         List posts = postsPage.getContent();
         return postService.buildRss(posts);
     }
@@ -56,7 +57,7 @@ public class FrontOthersController {
         //获取文章列表并根据时间排序
         Sort sort = new Sort(Sort.Direction.DESC, "postDate");
         Pageable pageable = PageRequest.of(0, 999, sort);
-        Page postsPage = postService.findPostByStatus(0, HaloConst.POST_TYPE_POST, pageable);
+        Page postsPage = postService.findPostByStatus(0, PostType.POST_TYPE_POST.getDesc(), pageable);
         List posts = postsPage.getContent();
         return postService.buildSiteMap(posts);
     }
diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
index 659f20fc4..6fd86a22a 100644
--- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
+++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java
@@ -3,7 +3,7 @@ package cc.ryanc.halo.web.controller.front;
 import cc.ryanc.halo.model.domain.Comment;
 import cc.ryanc.halo.model.domain.Gallery;
 import cc.ryanc.halo.model.domain.Post;
-import cc.ryanc.halo.model.dto.HaloConst;
+import cc.ryanc.halo.model.enums.PostType;
 import cc.ryanc.halo.service.CommentService;
 import cc.ryanc.halo.service.GalleryService;
 import cc.ryanc.halo.service.PostService;
@@ -67,7 +67,7 @@ public class FrontPageController extends BaseController {
      */
     @GetMapping(value = "/p/{postUrl}")
     public String getPage(@PathVariable(value = "postUrl") String postUrl, Model model) {
-        Post post = postService.findByPostUrl(postUrl, HaloConst.POST_TYPE_PAGE);
+        Post post = postService.findByPostUrl(postUrl, PostType.POST_TYPE_PAGE.getDesc());
 
         Sort sort = new Sort(Sort.Direction.DESC,"commentDate");
         Pageable pageable = PageRequest.of(0,999,sort);
@@ -77,8 +77,7 @@ public class FrontPageController extends BaseController {
         }
         model.addAttribute("comments",comments);
         model.addAttribute("post", post);
-        post.setPostViews(post.getPostViews()+1);
-        postService.saveByPost(post);
+        postService.updatePostView(post);
         return this.render("page");
     }
 }
diff --git a/src/main/resources/templates/themes/material/_partial/head.ftl b/src/main/resources/templates/themes/material/_partial/head.ftl
index f161ecb85..3aadbcb46 100644
--- a/src/main/resources/templates/themes/material/_partial/head.ftl
+++ b/src/main/resources/templates/themes/material/_partial/head.ftl
@@ -55,7 +55,24 @@
     
     
     
-
+    
+    
+    
+    
     <#if options.theme_material_scheme?default('Paradox') == "Isolation">
         
     
@@ -129,4 +146,4 @@
     <% } %>
     -->
 
-
\ No newline at end of file
+
diff --git a/src/main/resources/templates/themes/material/_partial/import_js.ftl b/src/main/resources/templates/themes/material/_partial/import_js.ftl
index 45851e3b2..83aada0dc 100644
--- a/src/main/resources/templates/themes/material/_partial/import_js.ftl
+++ b/src/main/resources/templates/themes/material/_partial/import_js.ftl
@@ -17,18 +17,11 @@
 
 
 
+
+