From ba780fb8c047c665f8d85c013b02e47f8269451d Mon Sep 17 00:00:00 2001
From: inleft <inleft@qq.com>
Date: Fri, 29 Jul 2022 19:06:58 +0800
Subject: [PATCH] 添加小红点,添加自我认证,优化活跃时间算法

---
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java               |   18 ++++++++-
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/entity/BlogArticleVo.java                                  |   11 +++++
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/consts/MyConstant.java                                         |   12 +++++
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/param/BlogArticleCommentAddDto.java                 |    3 +
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml                       |    5 +-
 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java |   14 +++++-
 snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java                           |   39 +++++++++++++++++++
 snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/constant/ConstantContextHolder.java                    |   11 +++++
 8 files changed, 103 insertions(+), 10 deletions(-)

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 7d50a43..515d80b 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
@@ -1,17 +1,27 @@
 package vip.xiaonuo.core.consts;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public interface MyConstant {
     Integer No = 0;
     Integer Yes = 1;
+    String limit = " limit 1 ";
 
 
     String privateComment = "(悄悄话已隐藏)******";
     String checkComment = "(未审核消息)******";
-    String inleft= "inleft";
+    String inleft = "inleft";
     String email = "inleft@qq.com";
     String url_1 = "http://blog.inleft.com/comment#%d";
     String url_2 = "http://blog.inleft.com/mdDetail?id=%d#%d";
 
+    List<String> myIds = new ArrayList(3) {{
+        add(MyConstant.inleft);
+        add("阿墨");
+        add("笔墨");
+    }};
+
     interface AuthStatus {
         int publicCode = 1;
         int privateCode = 2;
diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/constant/ConstantContextHolder.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/constant/ConstantContextHolder.java
index cb67bb3..0319221 100644
--- a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/constant/ConstantContextHolder.java
+++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/constant/ConstantContextHolder.java
@@ -139,7 +139,7 @@
      * @date 2020/6/19 18:08
      */
     public static AliyunSmsConfigs getAliyunSmsConfigs() {
-            String snowySmsAccesskeyId = getSysConfig("SNOWY_ALIYUN_SMS_ACCESSKEY_ID", String.class, true);
+        String snowySmsAccesskeyId = getSysConfig("SNOWY_ALIYUN_SMS_ACCESSKEY_ID", String.class, true);
         String snowySmsAccesskeySecret = getSysConfig("SNOWY_ALIYUN_SMS_ACCESSKEY_SECRET", String.class, true);
         String snowySmsSignName = getSysConfig("SNOWY_ALIYUN_SMS_SIGN_NAME", String.class, true);
         String snowySmsLoginTemplateCode = getSysConfig("SNOWY_ALIYUN_SMS_LOGIN_TEMPLATE_CODE", String.class, true);
@@ -324,6 +324,7 @@
 
     /**
      * 获取blog资源地址访问前缀
+     *
      * @return
      */
     public static String getBlogSourcePrefix() {
@@ -418,4 +419,12 @@
         return cryptogramConfigs;
     }
 
+    /**
+     * 获取自我认证密码
+     *
+     * @author inleft
+     */
+    public static String getAuthCode() {
+        return getSysConfigWithDefault("inleft_AuthCode", String.class, null);
+    }
 }
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java
index f41a849..6a3107d 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java
@@ -32,6 +32,7 @@
 import vip.xiaonuo.core.annotion.BusinessLog;
 import vip.xiaonuo.core.consts.MyConstant;
 import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
+import vip.xiaonuo.core.exception.BlogException;
 import vip.xiaonuo.core.pojo.response.ResponseData;
 import vip.xiaonuo.core.pojo.response.SuccessResponseData;
 import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo;
@@ -39,6 +40,8 @@
 import vip.xiaonuo.modular.blogStatistics.vo.BlogStatisticsVo;
 import vip.xiaonuo.modular.blogarticle.entity.BlogArticle;
 import vip.xiaonuo.modular.blogarticle.service.BlogArticleService;
+import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment;
+import vip.xiaonuo.modular.blogarticlecomment.service.BlogArticleCommentService;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -58,6 +61,9 @@
     @Resource
     private BlogArticleService blogArticleService;
 
+    @Resource
+    private BlogArticleCommentService commentService;
+
     /**
      * @author inleft
      * @date 2022-02-09 18:20:22
@@ -67,9 +73,23 @@
     public ResponseData statistics() {
 
         String updateDate = "--";
-        BlogArticle lastUpdateBlog = blogArticleService.lambdaQuery().orderByDesc(BlogArticle::getUpdateDate).last(" limit 1 ").one();
+        BlogArticle lastUpdateBlog = blogArticleService.lambdaQuery().orderByDesc(BlogArticle::getUpdateDate).last(MyConstant.limit).one();
         if (lastUpdateBlog != null && lastUpdateBlog.getUpdateDate() != null) {
             updateDate = DateUtil.formatDate(lastUpdateBlog.getUpdateDate());
+        }
+
+        //新增最近的评论时间
+        BlogArticleComment comment = commentService.lambdaQuery()
+                .eq(BlogArticleComment::getVisitorNickName, MyConstant.inleft)
+                .orderByDesc(BlogArticleComment::getCreateDate)
+                .last(MyConstant.limit)
+                .select(BlogArticleComment::getId,BlogArticleComment::getCreateDate)
+                .one();
+
+        if (comment != null && comment.getUpdateDate() != null
+                && lastUpdateBlog != null
+                && lastUpdateBlog.getCreateDate().before(comment.getCreateDate())) {
+            updateDate = DateUtil.formatDate(comment.getCreateDate());
         }
 
         String startFrom = "从这开始: 2020-05-27 ";
@@ -183,4 +203,21 @@
         return new SuccessResponseData(res);
     }
 
+
+    @GetMapping("/blog/option")
+    @BusinessLog(title = "外部blog系统_blog统计数据_添加", opType = LogAnnotionOpTypeEnum.EDIT)
+    public ResponseData option(Long articleId, Integer option) {
+        BlogArticle find = blogArticleService.lambdaQuery()
+                .eq(BlogArticle::getIsEnable, MyConstant.Yes)
+                .eq(BlogArticle::getEditorStatus, MyConstant.Yes)
+                .eq(BlogArticle::getId, articleId)
+                .one();
+        if (find == null) {
+            throw new BlogException("查询不到相关日志");
+        }
+        /**
+         * 同一个ip,24小时之内只统计一次 访问次数,访问人数(ip)
+         */
+        return null;
+    }
 }
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 76073b9..72ae337 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
@@ -25,6 +25,7 @@
 package vip.xiaonuo.modular.blogarticle.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.PageUtil;
 import cn.hutool.core.util.StrUtil;
@@ -41,9 +42,9 @@
 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.entity.BlogArticleVo;
 import vip.xiaonuo.modular.blogarticle.param.BlogArticleAddDto;
 import vip.xiaonuo.modular.blogarticle.param.BlogArticleQueryDto;
-import vip.xiaonuo.modular.blogarticle.entity.BlogArticleVo;
 import vip.xiaonuo.modular.blogarticle.service.BlogArticleService;
 import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleType;
 import vip.xiaonuo.modular.blogarticletype.service.BlogArticleTypeService;
@@ -124,7 +125,7 @@
         BlogArticle article = new BlogArticle();
         BeanUtil.copyProperties(addDto, article);
         article.setSeparateYear(DateUtil.year(article.getPublishDate()));
-        article.setSeparateMonth(DateUtil.month(article.getPublishDate())+1);
+        article.setSeparateMonth(DateUtil.month(article.getPublishDate()) + 1);
         article.setSeparateDay(DateUtil.dayOfMonth(article.getPublishDate()));
 
         article.setIsEnable(MyConstant.Yes);
@@ -149,6 +150,10 @@
         param.put("typeId", queryDto.getTypeId());
 
         String blogSourcePrefix = ConstantContextHolder.getBlogSourcePrefix();
+
+        Date now = DateUtil.date();
+        //空类型查询条件,排除笔记系列,按更新时间倒序
+        //含有类型查询,按发布时间倒序
         List<BlogArticleVo> resList = blogArticleService.searchList(param).stream().map(e -> {
             if (StrUtil.isNotEmpty(e.getCoverFileURL())) {
                 if (!e.getCoverFileURL().startsWith("http")) {
@@ -156,6 +161,15 @@
                     e.setCoverFileURL(blogSourcePrefix + e.getCoverFileURL());
                 }
             }
+
+            //前端根据条件标注小红点(发布时间和更新时间在7天内)
+            if (e.getPublishDate().before(e.getUpdateDate())
+                    && DateUtil.between(e.getUpdateDate(), now, DateUnit.DAY) <= 7) {
+                e.setIsAnyUpdate(MyConstant.Yes);
+            } else {
+                e.setIsAnyUpdate(MyConstant.No);
+            }
+
             return e;
         }).collect(Collectors.toList());
 
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/entity/BlogArticleVo.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/entity/BlogArticleVo.java
index bcdaf31..3a3f4e7 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/entity/BlogArticleVo.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/entity/BlogArticleVo.java
@@ -93,6 +93,12 @@
     private Date publishDate;
 
     /**
+     * 更新时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date updateDate;
+
+    /**
      * 是否置顶 0:否 1:是
      */
     private Integer isTop;
@@ -108,5 +114,10 @@
      */
     private Integer isAllowedComment;
 
+    /**
+     * 是否有任意更新
+     */
+    private Integer isAnyUpdate;
+
 
 }
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 3b80921..789dba3 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
@@ -24,6 +24,7 @@
        a.is_top,
        a.editor_status,
        a.is_allowed_comment,
+       a.update_date,
        a.create_date
     </sql>
 
@@ -35,9 +36,11 @@
             <choose>
                 <when test="param.typeId != null">
                     AND a.article_type_id = #{param.typeId}
+                    order by a.is_top desc,a.top_value asc , a.create_date desc
                 </when>
                 <otherwise>
                     AND a.article_type_id != 4
+                    order by a.is_top desc,a.top_value asc , a.update_date desc
                 </otherwise>
             </choose>
         </trim>
@@ -62,8 +65,6 @@
         on f2.id=a.cover_file_id
 
         <include refid="queryListCondition"/>
-
-        order by a.is_top desc,a.top_value asc , a.create_date desc
 
         limit #{param.pageNo},#{param.pageSize}
     </select>
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
index 194209a..7e9156b 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/controller/BlogArticleCommentOutsideController.java
@@ -38,6 +38,7 @@
 import org.springframework.web.bind.annotation.*;
 import vip.xiaonuo.core.annotion.BusinessLog;
 import vip.xiaonuo.core.consts.MyConstant;
+import vip.xiaonuo.core.context.constant.ConstantContextHolder;
 import vip.xiaonuo.core.email.MailSender;
 import vip.xiaonuo.core.email.modular.model.SendMailParam;
 import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum;
@@ -81,6 +82,13 @@
     public ResponseData add(@RequestBody @Validated(BlogArticleCommentAddDto.add.class) BlogArticleCommentAddDto addDto) {
         BlogArticle checkArticle = null;
 
+        //自我认证
+        if (MyConstant.myIds.contains(addDto.getVisitorNickName())) {
+            if (StrUtil.isEmpty(addDto.getAuthCode()) || !addDto.getAuthCode().equals(ConstantContextHolder.getAuthCode())) {
+                throw new BlogException("不要成为我,你就是真的自己");
+            }
+        }
+
         if (MyConstant.Yes.equals(addDto.getIsReceiveMail()) && StrUtil.isEmpty(addDto.getVisitorEmail())) {
             throw new BlogException("如果是想接收通知的话,你可能需要填上一个邮箱..");
         }
@@ -117,11 +125,11 @@
             return new SuccessResponseData();
         }
 
-        //前一个留言接收邮件回复(发送给我的本体可以跳过.如果是给评论者自己的追加可以跳过)
+        //前一个留言接收邮件回复(如果是给评论者自己的追加可以跳过)
         if (MyConstant.Yes.equals(lastComment.getIsReceiveCallback())
                 && StrUtil.isNotEmpty(lastComment.getVisitorEmail())
-                && !lastComment.getVisitorNickName().equals(MyConstant.inleft)
-                && !lastComment.getVisitorEmail().equals(MyConstant.email)
+//                && !lastComment.getVisitorNickName().equals(MyConstant.inleft)
+//                && !lastComment.getVisitorEmail().equals(MyConstant.email)
                 && !lastComment.getVisitorNickName().equals(addDto.getVisitorNickName())
                 && !lastComment.getVisitorEmail().equals(addDto.getVisitorEmail())) {
 
diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/param/BlogArticleCommentAddDto.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/param/BlogArticleCommentAddDto.java
index a21a1b1..af1b3ee 100644
--- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/param/BlogArticleCommentAddDto.java
+++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/param/BlogArticleCommentAddDto.java
@@ -109,4 +109,7 @@
     @NotNull(message = "是否接收回信为空", groups = {add.class})
     private Integer isReceiveMail;
 
+
+    private String authCode;
+
 }

--
Gitblit v1.9.1