| | |
| | | */ |
| | | 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系统查询) |
| | |
| | | @Resource |
| | | private BlogArticleService blogArticleService; |
| | | |
| | | @Resource |
| | | private BlogArticleCommentService commentService; |
| | | |
| | | /** |
| | | * @author inleft |
| | | * @date 2022-02-09 18:20:22 |
| | |
| | | @BusinessLog(title = "外部blog系统_统计_查询", opType = LogAnnotionOpTypeEnum.QUERY) |
| | | public ResponseData statistics() { |
| | | |
| | | //相差一个月,31天 |
| | | long betweenDay = DateUtil.between(DateUtil.parseDate("2020-05-27"), new Date(), DateUnit.DAY); |
| | | String updateDate; |
| | | BlogArticle lastUpdateBlog = blogArticleService.lambdaQuery().orderByDesc(BlogArticle::getUpdateDate) |
| | | .last(" limit 1 ").one(); |
| | | String updateDate = "--"; |
| | | BlogArticle lastUpdateBlog = blogArticleService.lambdaQuery().orderByDesc(BlogArticle::getUpdateDate).last(MyConstant.limit).one(); |
| | | if (lastUpdateBlog != null && lastUpdateBlog.getUpdateDate() != null) { |
| | | updateDate = DateUtil.formatDate(lastUpdateBlog.getUpdateDate()); |
| | | } else { |
| | | updateDate = "--"; |
| | | } |
| | | |
| | | //新增最近的评论时间 |
| | | 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 = "已稳定运行:" + betweenDay + "天"; |
| | | String lastUpdateDate = "上次更新:" + updateDate; |
| | | String visitCount = "累计访问:1010次"; |
| | | String visitorCount = "累计访客:1001名"; |
| | | 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个数 |
| | | |
| | | List<BlogStatisticsVo.simpleVo> res = new ArrayList<>(); |
| | | 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); |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 查询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; |
| | | } |
| | | } |