From a9c4c99791e4d43971afd863946a2b0c4db44708 Mon Sep 17 00:00:00 2001 From: inleft <inleft@qq.com> Date: Mon, 21 Feb 2022 02:02:04 +0800 Subject: [PATCH] 统计模块接口 --- snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/controller/BlogArticleOutsideController.java | 6 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/BlogArticleMapper.java | 7 + snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/BlogArticleService.java | 9 + snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleQueryDto.java | 2 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/impl/BlogArticleServiceImpl.java | 15 ++ snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveDetailVo.java | 41 ++++++++ snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveVo.java | 22 ++++ snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/mapping/BlogArticleMapper.xml | 27 ++++ snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/BlogStatisticsController.java | 44 +++++++- snowy-main/pom.xml | 2 snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleAddDto.java | 91 ++++++++++++++++++ 11 files changed, 246 insertions(+), 20 deletions(-) diff --git a/snowy-main/pom.xml b/snowy-main/pom.xml index 1557809..f4e67df 100644 --- a/snowy-main/pom.xml +++ b/snowy-main/pom.xml @@ -49,7 +49,7 @@ </dependencies> <build> - <finalName>snowy</finalName> + <finalName>blog</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> 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 d5d77d3..48e1960 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 @@ -30,17 +30,17 @@ 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.pojo.response.ResponseData; import vip.xiaonuo.core.pojo.response.SuccessResponseData; +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 javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * blog文章控制器 (提供给外部blog系统查询) @@ -79,8 +79,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 +89,39 @@ } + /** + * 查询blog归档 + * + * @author inleft + * @date 2022-02-09 18:20:22 + */ + @GetMapping("/blog/archive") + @BusinessLog(title = "外部blog系统_blog归档_查询", opType = LogAnnotionOpTypeEnum.QUERY) + public ResponseData archive(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) + .orderByDesc(BlogArticle::getSeparateYear) + .groupBy(BlogArticle::getSeparateYear) + .select(BlogArticle::getSeparateYear) + .list(); + + List<BlogArchiveVo> res = new ArrayList<>(articleList.size()); + BlogArchiveVo blogArchiveVo; + for (BlogArticle blogArticle : articleList) { + + blogArchiveVo = new BlogArchiveVo(); + blogArchiveVo.setYear(blogArticle.getSeparateYear().toString()); + blogArchiveVo.setList(blogArticleService.searchMonthCount(blogArticle.getSeparateYear())); + res.add(blogArchiveVo); + } + + return new SuccessResponseData(res); + } + } diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveDetailVo.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveDetailVo.java new file mode 100644 index 0000000..fc60773 --- /dev/null +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveDetailVo.java @@ -0,0 +1,41 @@ +/* +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.modular.blogStatistics.vo; + +import lombok.Data; + +/** + * blog 统计信息 + * + * @author inleft + * @date 2022-01-22 16:53:06 + */ +@Data +public class BlogArchiveDetailVo { + private String month; + private String count; + private String name; + private String remark; +} diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveVo.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveVo.java new file mode 100644 index 0000000..ef04a31 --- /dev/null +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogStatistics/vo/BlogArchiveVo.java @@ -0,0 +1,22 @@ + +package vip.xiaonuo.modular.blogStatistics.vo; + +import lombok.Data; + +import java.util.List; + +/** + * blog 统计信息 + * + * @author inleft + * @date 2022-01-22 16:53:06 + */ +@Data +public class BlogArchiveVo { + + private String year; + + private List<BlogArchiveDetailVo> list; + + +} 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 fb3b319..8051173 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 @@ -78,16 +78,17 @@ Map<String, Object> param = new HashMap<>(16); param.put("pageNo", PageUtil.getStart(queryDto.getPageNo() - 1, queryDto.getPageSize())); param.put("pageSize", queryDto.getPageSize()); + param.put("typeId", queryDto.getTypeId()); String fileUploadPathForLinux = ConstantContextHolder.getDefaultFileUploadPathForLinux(); - List<BlogArticleVo> resList = blogArticleService.searchMediaList(param).stream().map(e -> { + List<BlogArticleVo> resList = blogArticleService.searchList(param).stream().map(e -> { if (StrUtil.isNotEmpty(e.getArticleFileURL())) { e.setArticleFileURL(fileUploadPathForLinux + e.getArticleFileURL()); } return e; }).collect(Collectors.toList()); - long count = blogArticleService.searchMediaListCount(param); + long count = blogArticleService.searchListCount(param); Page<BlogArticleVo> queryPage = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); queryPage.setRecords(resList); @@ -132,7 +133,6 @@ } 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/BlogArticleMapper.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/BlogArticleMapper.java index ebb56aa..7b7e1ac 100644 --- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/BlogArticleMapper.java +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/mapper/BlogArticleMapper.java @@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo; import vip.xiaonuo.modular.blogarticle.entity.BlogArticle; import java.util.List; @@ -39,7 +40,9 @@ */ public interface BlogArticleMapper extends BaseMapper<BlogArticle> { - List searchMediaList(@Param("param") Map<String, Object> param); + List searchList(@Param("param") Map<String, Object> param); - long searchMediaListCount(@Param("param") Map<String, Object> param); + long searchListCount(@Param("param") Map<String, Object> param); + + List<BlogArchiveDetailVo> searchMonthCount(@Param("separateYear") Integer separateYear); } 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 54571b0..1615954 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 @@ -30,10 +30,13 @@ <trim prefix="WHERE" prefixOverrides="AND | OR"> a.is_enable=1 and a.editor_status=1 + <if test="param.typeId != null"> + AND a.article_type_id = #{param.typeId} + </if> </trim> </sql> - <select id="searchMediaList" resultType="vip.xiaonuo.modular.blogarticle.param.BlogArticleVo"> + <select id="searchList" resultType="vip.xiaonuo.modular.blogarticle.param.BlogArticleVo"> select <include refid="Base_Column_List"/> ,CONCAT("/",f1.file_bucket,"/",f1.file_object_name) as articleFileURL @@ -41,7 +44,7 @@ ,t.type_name as articleTypeName from blog_article a - inner join blog_article_type t + inner join blog_article_type t on t.id =a.article_type_id left join sys_file_info f1 @@ -58,7 +61,7 @@ limit #{param.pageNo},#{param.pageSize} </select> - <select id="searchMediaListCount" resultType="java.lang.Long"> + <select id="searchListCount" resultType="java.lang.Long"> select count(0) from @@ -67,4 +70,22 @@ </select> + <select id="searchMonthCount" resultType="vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo"> + SELECT + separate_month AS `month`, + count(1) AS count + FROM + blog_article + WHERE + ( + is_enable = 1 + AND editor_status = 1 + AND separate_year = #{separateYear} + ) + GROUP BY + separate_month + ORDER BY separate_month desc + + </select> + </mapper> diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleAddDto.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleAddDto.java new file mode 100644 index 0000000..23d0ca4 --- /dev/null +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleAddDto.java @@ -0,0 +1,91 @@ + +package vip.xiaonuo.modular.blogarticle.param; + +import lombok.Data; +import vip.xiaonuo.core.pojo.base.param.BaseParam; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** +* blog文章参数类 + * + * @author inleft + * @date 2022-02-09 18:21:14 +*/ +@Data +public class BlogArticleAddDto extends BaseParam { + + + + /** + * 文章标题 + */ + @NotBlank(message = "文章标题不能为空,请检查title参数", groups = {add.class, edit.class}) + private String title; + + /** + * 文章文件id + */ + @NotNull(message = "文章文件id不能为空,请检查articleFileId参数", groups = {add.class, edit.class}) + private Long articleFileId; + + /** + * 文件类型 + */ + private Integer articleFileType; + + /** + * 文章分类 + */ + @NotNull(message = "文章分类不能为空,请检查articleTypeId参数", groups = {add.class, edit.class}) + private Long articleTypeId; + + /** + * 文章引言 + */ + private String introduce; + + /** + * 封面文件 + */ + private Long coverFileId; + + /** + * 上次编辑时间 + */ + private String lastEditorDate; + + /** + * 发布时间 + */ + private String publishDate; + + /** + * 是否置顶 + */ + @NotNull(message = "是否置顶不能为空,请检查isTop参数", groups = {add.class, edit.class}) + private Integer isTop; + + /** + * 置顶值 + */ + private Integer topValue; + + /** + * 公开状态 + */ + private Integer authStatus; + + /** + * 授权密码 + */ + private String authPassword; + + /** + * 编辑状态 + */ + private Integer editorStatus; + + +} 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 93d89c1..7fe392f 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 @@ -20,5 +20,7 @@ private Long id; + private Long typeId; + } diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/BlogArticleService.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/BlogArticleService.java index 30e872c..9679237 100644 --- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/BlogArticleService.java +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/BlogArticleService.java @@ -26,6 +26,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import vip.xiaonuo.core.pojo.page.PageResult; +import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo; +import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveVo; import vip.xiaonuo.modular.blogarticle.entity.BlogArticle; import vip.xiaonuo.modular.blogarticle.param.BlogArticleParam; import vip.xiaonuo.modular.blogarticle.param.BlogArticleVo; @@ -97,7 +99,10 @@ */ void export(BlogArticleParam blogArticleParam); - List<BlogArticleVo> searchMediaList(Map<String,Object> param); + List<BlogArticleVo> searchList(Map<String,Object> param); - long searchMediaListCount(Map<String, Object> param); + long searchListCount(Map<String, Object> param); + + List<BlogArchiveDetailVo> searchMonthCount(Integer separateYear); + } diff --git a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/impl/BlogArticleServiceImpl.java b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/impl/BlogArticleServiceImpl.java index 7ed76a8..41b8f64 100644 --- a/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/impl/BlogArticleServiceImpl.java +++ b/snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/service/impl/BlogArticleServiceImpl.java @@ -34,6 +34,7 @@ import vip.xiaonuo.core.factory.PageFactory; import vip.xiaonuo.core.pojo.page.PageResult; import vip.xiaonuo.core.util.PoiUtil; +import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo; import vip.xiaonuo.modular.blogarticle.entity.BlogArticle; import vip.xiaonuo.modular.blogarticle.enums.BlogArticleExceptionEnum; import vip.xiaonuo.modular.blogarticle.mapper.BlogArticleMapper; @@ -152,12 +153,18 @@ @Override - public List searchMediaList(Map<String, Object> param) { - return this.baseMapper.searchMediaList(param); + public List searchList(Map<String, Object> param) { + return this.baseMapper.searchList(param); } @Override - public long searchMediaListCount(Map<String, Object> param) { - return this.baseMapper.searchMediaListCount(param); + public long searchListCount(Map<String, Object> param) { + return this.baseMapper.searchListCount(param); + } + + @Override + public List<BlogArchiveDetailVo> searchMonthCount(Integer separateYear) { + return this.baseMapper.searchMonthCount(separateYear); + } } -- Gitblit v1.9.1