inleft
2024-01-10 f0beb464c1fd4cf1c6481f86610a6a130b93ead4
snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java
@@ -24,23 +24,31 @@
 */
package vip.xiaonuo.modular.blogStatistics;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
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.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;
import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveVo;
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.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * blog文章控制器 (提供给外部blog系统查询)
@@ -55,6 +63,9 @@
    @Resource
    private BlogArticleService blogArticleService;
    @Resource
    private BlogArticleCommentService commentService;
    /**
     * @author inleft
     * @date 2022-02-09 18:20:22
@@ -64,14 +75,28 @@
    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.getCreateDate() != null
                && lastUpdateBlog != null
                && lastUpdateBlog.getCreateDate().before(comment.getCreateDate())) {
            updateDate = DateUtil.formatDate(comment.getCreateDate());
        }
        String startFrom = "从这开始: 2020-05-27 ";
        String aliveDayCount = "已稳定运行:" + DateUtil.between(DateUtil.parseDate("2022-02-14"), new Date(), DateUnit.DAY) + "天";
        String lastUpdateDate = "上次更新:" + updateDate;
        String aliveDayCount = "已起航:" + DateUtil.between(DateUtil.parseDate("2022-02-14"), new Date(), DateUnit.DAY) + "天";
        String lastUpdateDate = "上次活跃于:" + updateDate;
        String visitCount = "累计访问:1010次"; //24小时ip 访问次数
        String visitorCount = "累计访客:1001名";//所有时间ip个数
@@ -79,8 +104,8 @@
        res.add(new BlogStatisticsVo.simpleVo().setName(startFrom));
        res.add(new BlogStatisticsVo.simpleVo().setName(aliveDayCount));
        res.add(new BlogStatisticsVo.simpleVo().setName(lastUpdateDate));
        res.add(new BlogStatisticsVo.simpleVo().setName(visitCount));
        res.add(new BlogStatisticsVo.simpleVo().setName(visitorCount));
//        res.add(new BlogStatisticsVo.simpleVo().setName(visitCount));
//        res.add(new BlogStatisticsVo.simpleVo().setName(visitorCount));
        BlogStatisticsVo statisticsVo = new BlogStatisticsVo();
        statisticsVo.setList(res);
@@ -89,5 +114,116 @@
    }
    /**
     * 查询blog归档
     *
     * @author inleft
     * @date 2022-02-09 18:20:22
     */
    @GetMapping("/blog/archive")
    @BusinessLog(title = "外部blog系统_blog归档_查询", opType = LogAnnotionOpTypeEnum.QUERY)
    public ResponseData archive() {
        //不考虑数据太多的情况,这里应该可以把数据全部捞出来
        Integer thisYear = DateUtil.thisYear();
        Integer startYear = blogArticleService.lambdaQuery().orderByAsc(BlogArticle::getSeparateYear).last(MyConstant.limit).one().getSeparateYear();
        List<Integer> yearList = Stream.iterate(thisYear, n -> n - 1).limit(thisYear - startYear + 1).collect(Collectors.toList());
        List<BlogArchiveVo> res = new ArrayList<>(yearList.size());
        BlogArchiveVo blogArchiveVo;
        List<BlogArchiveDetailVo> tempVoList;
        for (Integer year : yearList) {
            tempVoList = blogArticleService.searchMonthCount(year);
            if (CollUtil.isEmpty(tempVoList)) {
                continue;
            }
            blogArchiveVo = new BlogArchiveVo();
            blogArchiveVo.setYear(year.toString());
            blogArchiveVo.setList(tempVoList);
            res.add(blogArchiveVo);
        }
        return new SuccessResponseData(res);
    }
    @GetMapping("/blog/archiveGroup")
    @BusinessLog(title = "外部blog系统_blog归档组列表_查询", opType = LogAnnotionOpTypeEnum.QUERY)
    public ResponseData archiveGroup(Integer year, Integer month) {
        List<BlogArticle> articleList = blogArticleService.lambdaQuery()
                .eq(BlogArticle::getIsEnable, MyConstant.Yes)
                .eq(BlogArticle::getEditorStatus, MyConstant.Yes)
                .eq(year != null, BlogArticle::getSeparateYear, year)
                .eq(month != null, BlogArticle::getSeparateMonth, month)
                .le(BlogArticle::getPublishDate, DateUtil.date())
                .orderByDesc(BlogArticle::getSeparateYear)
                .orderByDesc(BlogArticle::getSeparateMonth)
                .select(BlogArticle::getId, BlogArticle::getTitle,
                        BlogArticle::getAuthStatus,
                        BlogArticle::getSeparateYear,
                        BlogArticle::getSeparateMonth,
                        BlogArticle::getSeparateDay)
                .list();
        Map<Integer, List<BlogArticle>> groupMap = articleList.stream()
                .collect(Collectors.groupingBy(e -> e.getSeparateYear(), LinkedHashMap::new,
                        Collectors.mapping(Function.identity(), Collectors.toList())));
        List<BlogArchiveVo> res = new ArrayList<>(groupMap.size());
        BlogArchiveVo archiveVo;
        Map<String, List<BlogArchiveDetailVo.simpleVo>> detailGroup;
        List<BlogArchiveDetailVo> tempDetailList;
        for (Integer key : groupMap.keySet()) {
            archiveVo = new BlogArchiveVo();
            archiveVo.setYear(key.toString());
            detailGroup = groupMap.get(key).stream().sorted(
                    Comparator.comparing(BlogArticle::getSeparateMonth)
                            .thenComparing(BlogArticle::getSeparateDay).reversed())
                    .collect(Collectors.groupingBy(e -> e.getSeparateMonth().toString() + "月" + e.getSeparateDay() + "日", LinkedHashMap::new,
                            Collectors.mapping(e -> {
                                BlogArchiveDetailVo.simpleVo simpleVo = new BlogArchiveDetailVo.simpleVo();
                                simpleVo.setName(e.getTitle());
                                simpleVo.setId(e.getId());
                                simpleVo.setAuthStatus(e.getAuthStatus());
                                return simpleVo;
                            }, Collectors.toList())));
            tempDetailList = new ArrayList<>(detailGroup.size());
            archiveVo.setList(tempDetailList);
            for (String monthAndDay : detailGroup.keySet()) {
                BlogArchiveDetailVo detailVo = new BlogArchiveDetailVo();
                detailVo.setMonth(monthAndDay);
                detailVo.setList(detailGroup.get(monthAndDay));
                tempDetailList.add(detailVo);
            }
            res.add(archiveVo);
        }
        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;
    }
}