From bd3bc193d18718e0e8cb880cbadf0b9426732ef9 Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Sun, 20 Feb 2022 01:26:52 +0800
Subject: [PATCH] 自定义异常,获取文章详情

---
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java |   47 +++++++++++++++
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java               |    4 +
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java                           |    6 ++
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/BlogException.java                     |   42 ++++++++++++++
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/ExpEnumConstant.java                      |    2 
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/enums/BlogExceptionEnum.java           |   71 +++++++++++++++++++++++
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml         |    1 
 7 files changed, 172 insertions(+), 1 deletions(-)

diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/ExpEnumConstant.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/ExpEnumConstant.java
index 5c1d837..4d3038d 100644
--- a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/ExpEnumConstant.java
+++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/ExpEnumConstant.java
@@ -86,4 +86,6 @@
      */
     int WRAPPER_EXCEPTION_ENUM = 1800;
 
+    int BLOG_EXCEPTION_ENUM = 1900;
+
 }
diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java
index 6fbc65d..4a7f851 100644
--- a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java
+++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java
@@ -3,4 +3,10 @@
 public interface MyConstant {
     Integer Yes = 1;
     Integer No = 1;
+
+    interface AuthStatus {
+        int publicCode = 1;
+        int privateCode = 2;
+        int authCode = 3;
+    }
 }
diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/BlogException.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/BlogException.java
new file mode 100644
index 0000000..bc1c43d
--- /dev/null
+++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/BlogException.java
@@ -0,0 +1,42 @@
+/*
+Copyright [2020] [https://www.xiaonuo.vip]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+
+1.请不要删除和修改根目录下的LICENSE文件。
+2.请不要删除和修改Snowy源码头部的版权声明。
+3.请保留源码和相关描述文件的项目出处,作者声明等。
+4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy
+5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy
+6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.core.exception;
+
+import lombok.Getter;
+import vip.xiaonuo.core.exception.enums.BlogExceptionEnum;
+
+@Getter
+public class BlogException extends ServiceException {
+
+    private static final int BLOG_EXP_CODE = 15000;
+
+    public BlogException(String msg) {
+        super(BLOG_EXP_CODE,msg);
+    }
+
+    public BlogException(BlogExceptionEnum blogExceptionEnum) {
+        super(blogExceptionEnum);
+    }
+}
diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/enums/BlogExceptionEnum.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/enums/BlogExceptionEnum.java
new file mode 100644
index 0000000..90f6254
--- /dev/null
+++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/exception/enums/BlogExceptionEnum.java
@@ -0,0 +1,71 @@
+/*
+Copyright [2020] [https://www.xiaonuo.vip]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+
+1.请不要删除和修改根目录下的LICENSE文件。
+2.请不要删除和修改Snowy源码头部的版权声明。
+3.请保留源码和相关描述文件的项目出处,作者声明等。
+4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy
+5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy
+6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.core.exception.enums;
+
+import vip.xiaonuo.core.annotion.ExpEnumType;
+import vip.xiaonuo.core.consts.ExpEnumConstant;
+import vip.xiaonuo.core.exception.enums.abs.AbstractBaseExceptionEnum;
+import vip.xiaonuo.core.factory.ExpEnumCodeFactory;
+
+/**
+ * 认证相关的异常的枚举
+ * <p>
+ * 认证和鉴权的区别:
+ * <p>
+ * 认证可以证明你能登录系统,认证的过程是校验token的过程
+ * 鉴权可以证明你有系统的哪些权限,鉴权的过程是校验角色是否包含某些接口的权限
+ *
+ * @author yubaoshan
+ * @date 2019/7/18 22:22
+ */
+@ExpEnumType(module = ExpEnumConstant.SNOWY_CORE_MODULE_EXP_CODE, kind = ExpEnumConstant.BLOG_EXCEPTION_ENUM)
+public enum BlogExceptionEnum implements AbstractBaseExceptionEnum {
+
+    article_auth_error(1, "日志需要授权"),
+    article_auth_pass_error(2, "日志授权码错误"),
+    article_auth_private_error(3, "那属于他的自留地,以后再来探索吧.."),
+    article_not_found(4, "这是黑洞..什么也没有"),
+ ;
+
+    private final Integer code;
+
+    private final String message;
+
+    BlogExceptionEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    @Override
+    public Integer getCode() {
+        return ExpEnumCodeFactory.getExpEnumCode(this.getClass(), code);
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+}
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java
index d6ec646..fb3b319 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java
@@ -24,17 +24,23 @@
  */
 package vip.xiaonuo.modular.blogarticle.controller;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.PageUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import vip.xiaonuo.core.annotion.BusinessLog;
+import vip.xiaonuo.core.consts.MyConstant;
 import vip.xiaonuo.core.context.constant.ConstantContextHolder;
 import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
+import vip.xiaonuo.core.exception.BlogException;
+import vip.xiaonuo.core.exception.enums.BlogExceptionEnum;
 import vip.xiaonuo.core.pojo.response.ResponseData;
 import vip.xiaonuo.core.pojo.response.SuccessResponseData;
+import vip.xiaonuo.modular.blogarticle.entity.BlogArticle;
 import vip.xiaonuo.modular.blogarticle.param.BlogArticleQueryDto;
 import vip.xiaonuo.modular.blogarticle.param.BlogArticleVo;
 import vip.xiaonuo.modular.blogarticle.service.BlogArticleService;
@@ -90,5 +96,46 @@
         return new SuccessResponseData(queryPage);
     }
 
+    @GetMapping("/blogArticle/queryBlogArticleDetail")
+    @BusinessLog(title = "外部blog系统_blog文章详情_查询", opType = LogAnnotionOpTypeEnum.QUERY)
+    public ResponseData queryBlogArticleDetail(BlogArticleQueryDto queryDto) {
+        BlogArticle find = blogArticleService.lambdaQuery()
+                .eq(BlogArticle::getIsEnable, MyConstant.Yes)
+                .eq(BlogArticle::getEditorStatus, MyConstant.Yes)
+                .eq(BlogArticle::getId, queryDto.getId())
+                .one();
+
+        if (find == null) {
+            throw new BlogException(BlogExceptionEnum.article_not_found);
+        }
+
+        //加密文章
+        if (find.getAuthStatus().equals(MyConstant.AuthStatus.authCode)) {
+            //授权码缺失
+            if (StrUtil.isEmpty(queryDto.getAuthWord())) {
+                throw new BlogException(BlogExceptionEnum.article_auth_error);
+            }
+            //授权码比对
+            if (!SecureUtil.md5(find.getAuthPassword()).equals(queryDto.getAuthWord())) {
+                throw new BlogException(BlogExceptionEnum.article_auth_pass_error);
+            }
+        }else if(find.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)){
+            throw new BlogException(BlogExceptionEnum.article_auth_private_error);
+        }
+
+        BlogArticleVo vo = new BlogArticleVo();
+
+        BeanUtil.copyProperties(find, vo);
+
+        if (queryDto.getId() % 2 == 0) {
+            vo.setArticleFileURL("http://t.inleft.com/share/book/blog/es_index.md");
+        } else {
+            vo.setArticleFileURL("http://t.inleft.com/share/book/blog/es-search.md");
+        }
+
+
+        return new SuccessResponseData(vo);
+    }
+
 
 }
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml
index 12f48e0..54571b0 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml
@@ -29,7 +29,6 @@
     <sql id="queryListCondition">
         <trim prefix="WHERE" prefixOverrides="AND | OR">
             a.is_enable=1
-            and a.auth_status=1
             and a.editor_status=1
         </trim>
     </sql>
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java
index bdcc717..93d89c1 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java
@@ -16,5 +16,9 @@
     @ApiModelProperty(value = "pageNo", required = true, example = "1")
     private Integer pageNo = 1;
 
+    private String authWord;
+
+    private Long id;
+
 
 }

--
Gitblit v1.9.1