This commit is contained in:
王鹏
2025-08-14 14:59:52 +08:00
commit e528aa4876
1229 changed files with 230350 additions and 0 deletions

View File

@@ -0,0 +1,290 @@
package com.ruoyi.cms.blog.controller;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.cms.fileInfo.service.ISysFileInfoService;
import com.ruoyi.cms.tag.domain.CmsTag;
import com.ruoyi.cms.tag.service.ICmsTagService;
import com.ruoyi.cms.type.domain.CmsType;
import com.ruoyi.cms.type.service.ICmsTypeService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.SysPermissionService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.cms.blog.domain.CmsBlog;
import com.ruoyi.cms.blog.service.ICmsBlogService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 文章管理Controller
*
* @author ning
* @date 2022-01-01
*/
@RestController
@RequestMapping("/cms/blog")
public class CmsBlogController extends BaseController
{
@Autowired
private ICmsBlogService cmsBlogService;
@Autowired
private ICmsTypeService cmsTypeService;
@Autowired
private ICmsTagService cmsTagService;
@Autowired
private SysPermissionService permissionService;
@Autowired
private ISysFileInfoService sysFileInfoService;
/**
* 首页查询文章列表
*/
@GetMapping("/cms/cmsList")
public TableDataInfo cmsList(CmsBlog cmsBlog)
{
startPage();
//状态为发布
cmsBlog.setStatus("1");
List<CmsBlog> list = cmsBlogService.selectCmsBlogList(cmsBlog);
return getDataTable(list);
}
/**
* 首页获取文章详细信息
*/
@GetMapping(value = { "/cms/detail/", "/cms/detail/{id}" })
public AjaxResult getInfoDetail(@PathVariable(value = "id", required = false) Long id)
{
AjaxResult ajax = AjaxResult.success();
CmsType cmsType = new CmsType();
CmsTag cmsTag = new CmsTag();
ajax.put("types", cmsTypeService.selectCmsTypeList(cmsType));
ajax.put("tags", cmsTagService.selectCmsTagList(cmsTag));
if (StringUtils.isNotNull(id))
{
ajax.put(AjaxResult.DATA_TAG, cmsBlogService.selectCmsBlogById(id));
}
return ajax;
}
/**
* 首页按分类查询文章列表
*/
@GetMapping("/cms/cmsListByType/{id}")
public TableDataInfo cmsListByTypeId(@PathVariable(value = "id", required = false) Long id)
{
startPage();
List<CmsBlog> list = cmsBlogService.selectCmsBlogListByTypeId(id);
return getDataTable(list);
}
/**
* 首页按标签查询文章列表
*/
@GetMapping("/cms/cmsListByTag/{id}")
public TableDataInfo cmsListByTagId(@PathVariable(value = "id", required = false) Long id)
{
startPage();
List<CmsBlog> list = cmsBlogService.selectCmsBlogListByTagId(id);
return getDataTable(list);
}
/**
* 首页查询推荐文章列表
*/
@GetMapping("/cms/cmsListRecommend")
public TableDataInfo cmsListRecommend(CmsBlog cmsBlog)
{
startPage();
//状态为发布
cmsBlog.setStatus("1");
List<CmsBlog> list = cmsBlogService.selectCmsBlogListRecommend(cmsBlog);
return getDataTable(list);
}
/**
* 首页增加阅读量
*/
@GetMapping("/cms/addBlogViews/{id}")
public AjaxResult addBlogViews(@PathVariable(value = "id", required = false) Long id)
{
CmsBlog cmsBlog = cmsBlogService.selectCmsBlogById(id);
Long views = cmsBlog.getViews();
views+=Long.parseLong("1");
cmsBlog.setViews(views);
cmsBlogService.updateCmsBlog(cmsBlog);
return AjaxResult.success(id);
}
/**
* 随笔页查询文章列表
*/
@GetMapping("/cms/cmsEssayList")
public TableDataInfo cmsEssayList(CmsBlog cmsBlog)
{
startPage();
//状态为发布
cmsBlog.setStatus("1");
List<CmsBlog> list = cmsBlogService.selectCmsBlogList(cmsBlog);
return getDataTable(list);
}
/**
* 查询文章管理列表
*/
@PreAuthorize("@ss.hasPermi('cms:blog:list')")
@GetMapping("/list")
public TableDataInfo list(CmsBlog cmsBlog)
{
startPage();
// 角色集合
Set<String> roles = permissionService.getRolePermission(getLoginUser().getUser());
if (!SecurityUtils.isAdmin(getUserId())&&!roles.contains("admin")&&!roles.contains("cms")){
cmsBlog.setCreateBy(getUsername());
}
List<CmsBlog> list = cmsBlogService.selectCmsBlogList(cmsBlog);
return getDataTable(list);
}
/**
* 导出文章管理列表
*/
@PreAuthorize("@ss.hasPermi('cms:blog:export')")
@Log(title = "文章管理", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, CmsBlog cmsBlog)
{
List<CmsBlog> list = cmsBlogService.selectCmsBlogList(cmsBlog);
ExcelUtil<CmsBlog> util = new ExcelUtil<CmsBlog>(CmsBlog.class);
util.exportExcel(response, list, "文章管理数据");
}
/**
* 获取文章管理详细信息
*/
@PreAuthorize("@ss.hasPermi('cms:blog:query')")
@GetMapping(value = { "/", "/{id}" })
public AjaxResult getInfo(@PathVariable(value = "id", required = false) Long id)
{
AjaxResult ajax = AjaxResult.success();
CmsType cmsType = new CmsType();
CmsTag cmsTag = new CmsTag();
ajax.put("types", cmsTypeService.selectCmsTypeList(cmsType));
ajax.put("tags", cmsTagService.selectCmsTagList(cmsTag));
if (StringUtils.isNotNull(id))
{
ajax.put(AjaxResult.DATA_TAG, cmsBlogService.selectCmsBlogById(id));
}
return ajax;
}
/**
* 新增文章管理
*/
@PreAuthorize("@ss.hasPermi('cms:blog:add')")
@Log(title = "文章管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody CmsBlog cmsBlog)
{
cmsBlog.setCreateBy(getUsername());
Long blogId = cmsBlogService.insertCmsBlog(cmsBlog);
if (blogId==null){
return AjaxResult.error();
}
return AjaxResult.success(blogId);
}
/**
* 修改文章管理
*/
@PreAuthorize("@ss.hasPermi('cms:blog:edit')")
@Log(title = "文章管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody CmsBlog cmsBlog)
{
cmsBlog.setUpdateBy(getUsername());
//删除原首图
CmsBlog oldBlog = cmsBlogService.selectCmsBlogById(cmsBlog.getId());
if (cmsBlog.getBlogPic().isEmpty()||!cmsBlog.getBlogPic().equals(oldBlog.getBlogPic())){
if(!oldBlog.getBlogPic().isEmpty()){
String blogPic = oldBlog.getBlogPic();
if (blogPic!=null&&!"".equals(blogPic)){
int newFileNameSeparatorIndex = blogPic.lastIndexOf("/");
String FileName = blogPic.substring(newFileNameSeparatorIndex + 1).toLowerCase();
sysFileInfoService.deleteSysFileInfoByFileObjectName(FileName);
}
}
}
return toAjax(cmsBlogService.updateCmsBlog(cmsBlog));
}
/**
* 删除文章管理
*/
@PreAuthorize("@ss.hasPermi('cms:blog:remove')")
@Log(title = "文章管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
//删除原首图
for (Long id : ids) {
CmsBlog oldBlog = cmsBlogService.selectCmsBlogById(id);
if(!oldBlog.getBlogPic().isEmpty()){
String blogPic = oldBlog.getBlogPic();
if (blogPic!=null&&!"".equals(blogPic)){
int newFileNameSeparatorIndex = blogPic.lastIndexOf("/");
String FileName = blogPic.substring(newFileNameSeparatorIndex + 1).toLowerCase();
sysFileInfoService.deleteSysFileInfoByFileObjectName(FileName);
}
}
}
return toAjax(cmsBlogService.deleteCmsBlogByIds(ids));
}
/**
* 取消按钮-删除首图
*/
@PreAuthorize("@ss.hasPermi('cms:blog:edit')")
@PostMapping("/cancel")
public AjaxResult cancel(@RequestBody CmsBlog cmsBlog)
{
String blogPic = cmsBlog.getBlogPic();
if (blogPic!=null&&!"".equals(blogPic)){
Long blogId = cmsBlog.getId();
if (blogId==null){
int newFileNameSeparatorIndex = blogPic.lastIndexOf("/");
String FileName = blogPic.substring(newFileNameSeparatorIndex + 1).toLowerCase();
sysFileInfoService.deleteSysFileInfoByFileObjectName(FileName);
}else {
String Pic = cmsBlogService.selectCmsBlogById(blogId).getBlogPic();
if (!blogPic.equals(Pic)){
int newFileNameSeparatorIndex = blogPic.lastIndexOf("/");
String FileName = blogPic.substring(newFileNameSeparatorIndex + 1).toLowerCase();
sysFileInfoService.deleteSysFileInfoByFileObjectName(FileName);
}
}
}
return toAjax(1);
}
}

View File

@@ -0,0 +1,282 @@
package com.ruoyi.cms.blog.domain;
import com.ruoyi.cms.tag.domain.CmsTag;
import com.ruoyi.cms.type.domain.CmsType;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/**
* 文章管理对象 cms_blog
*
* @author ning
* @date 2022-01-01
*/
public class CmsBlog extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 标题
*/
@Excel(name = "标题")
private String title;
/**
* 类型 1文章 2随笔
*/
@Excel(name = "类型")
private String type;
/**
* 内容
*/
@Excel(name = "内容")
private String content;
/**
* 文本编辑器类型 1 Quill富文本编辑器 2 CherryMarkdown
*/
@Excel(name = "文本编辑器类型")
private String contentType;
/**
* Markdown格式内容
*/
@Excel(name = "Markdown格式内容")
private String contentMarkdown;
/**
* 置顶0否 1是
*/
@Excel(name = "置顶", readConverterExp = "0=否,1=是")
private String top;
/**
* 阅读
*/
@Excel(name = "阅读")
private Long views;
/**
* 状态0暂存 1发布
*/
@Excel(name = "状态", readConverterExp = "0=暂存,1=发布")
private String status;
/**
* 首页图片类型0地址 1上传
*/
@Excel(name = "首页图片类型", readConverterExp = "0=地址,1=上传")
private String blogPicType;
/** 首页图片( 1上传 */
@Excel(name = "首页图片( 1上传")
private String blogPic;
/** 首页图片( 0地址 */
@Excel(name = "首页图片( 0地址")
private String blogPicLink;
/** 简介 */
@Excel(name = "简介")
private String blogDesc;
/** 附件列表 */
private String blogFiles;
/**
* 分类
*/
private Long[] typeIds;
/**
* 分类
*/
private Long[] tagIds;
/** 角色对象 */
private List<CmsTag> tags;
/** 角色对象 */
private List<CmsType> types;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setTop(String top) {
this.top = top;
}
public String getTop() {
return top;
}
public void setViews(Long views) {
this.views = views;
}
public Long getViews() {
return views;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public Long[] getTypeIds() {
return typeIds;
}
public void setTypeIds(Long[] typeIds) {
this.typeIds = typeIds;
}
public Long[] getTagIds() {
return tagIds;
}
public void setTagIds(Long[] tagIds) {
this.tagIds = tagIds;
}
public List<CmsTag> getTags() {
return tags;
}
public void setTags(List<CmsTag> tags) {
this.tags = tags;
}
public List<CmsType> getTypes() {
return types;
}
public void setTypes(List<CmsType> types) {
this.types = types;
}
public String getBlogPic() {
return blogPic;
}
public void setBlogPic(String blogPic) {
this.blogPic = blogPic;
}
public String getBlogDesc() {
return blogDesc;
}
public void setBlogDesc(String blogDesc) {
this.blogDesc = blogDesc;
}
public String getBlogFiles() {
return blogFiles;
}
public void setBlogFiles(String blogFiles) {
this.blogFiles = blogFiles;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getContentMarkdown() {
return contentMarkdown;
}
public void setContentMarkdown(String contentMarkdown) {
this.contentMarkdown = contentMarkdown;
}
public String getBlogPicType() {
return blogPicType;
}
public void setBlogPicType(String blogPicType) {
this.blogPicType = blogPicType;
}
public String getBlogPicLink() {
return blogPicLink;
}
public void setBlogPicLink(String blogPicLink) {
this.blogPicLink = blogPicLink;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("title", getTitle())
.append("type", getType())
.append("content", getContent())
.append("contentType", getContentType())
.append("contentMarkdown", getContentMarkdown())
.append("top", getTop())
.append("views", getViews())
.append("status", getStatus())
.append("typeIds", getTypeIds())
.append("tagIds", getTagIds())
.append("tags", getTags())
.append("types", getTypes())
.append("blogPicType", getBlogPicType())
.append("blogPic", getBlogPic())
.append("blogPicLink", getBlogPicLink())
.append("blogDesc", getBlogDesc())
.append("blogFiles", getBlogFiles())
.toString();
}
}

View File

@@ -0,0 +1,53 @@
package com.ruoyi.cms.blog.domain;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈blog标签关联表 cms_blog_tag〉
* @Date: 2022/1/2 22:54
*/
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* @Author: WangNing
* @Description:〈blog标签关联表 cms_blog_tag〉
* @Date: 2022/1/2 22:54
**/
public class CmsBlogTag {
private Long tagId;
private Long blogId;
private Long[] tagIds;
public Long getTagId() {
return tagId;
}
public void setTagId(Long tagId) {
this.tagId = tagId;
}
public Long getBlogId() {
return blogId;
}
public void setBlogId(Long blogId) {
this.blogId = blogId;
}
public Long[] getTagIds() {
return tagIds;
}
public void setTagIds(Long[] tagIds) {
this.tagIds = tagIds;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("tagId", getTagId())
.append("blogId", getBlogId())
.toString();
}
}

View File

@@ -0,0 +1,53 @@
package com.ruoyi.cms.blog.domain;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈blog类型关联表 cms_blog_type〉
* @Date: 2022/1/2 23:34
*/
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* @Author: WangNing
* @Description:〈blog分类关联表 cms_blog_type〉
* @Date: 2022/1/2 23:34
**/
public class CmsBlogType {
private Long typeId;
private Long blogId;
private Long[] typeIds;
public Long getTypeId() {
return typeId;
}
public void setTypeId(Long typeId) {
this.typeId = typeId;
}
public Long getBlogId() {
return blogId;
}
public void setBlogId(Long blogId) {
this.blogId = blogId;
}
public Long[] getTypeIds() {
return typeIds;
}
public void setTypeIds(Long[] typeIds) {
this.typeIds = typeIds;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("typeId", getTypeId())
.append("blogId", getBlogId())
.toString();
}
}

View File

@@ -0,0 +1,95 @@
package com.ruoyi.cms.blog.mapper;
import java.util.List;
import com.ruoyi.cms.blog.domain.CmsBlog;
import org.apache.ibatis.annotations.Param;
/**
* 文章管理Mapper接口
*
* @author ning
* @date 2022-01-01
*/
public interface CmsBlogMapper
{
/**
* 查询文章管理
*
* @param id 文章管理主键
* @return 文章管理
*/
public CmsBlog selectCmsBlogById(Long id);
/**
* 查询文章管理列表
*
* @param cmsBlog 文章管理
* @return 文章管理集合
*/
public List<CmsBlog> selectCmsBlogList(CmsBlog cmsBlog);
public List<CmsBlog> selectCmsBlogListBetweenCreateTime(@Param("title") String title,@Param("type") String type,@Param("top") String top,@Param("status") String status,@Param("createTimeBegin") String createTimeBegin,@Param("createTimeEnd") String createTimeEnd,@Param("createBy") String createBy);
/**
* 查询推荐文章列表
*/
public List<CmsBlog> selectCmsBlogListRecommend(CmsBlog cmsBlog);
/**
* 按分类查询文章管理列表
*/
public List<CmsBlog> selectCmsBlogListByTypeId(Long id);
/**
* 按标签查询文章管理列表
*/
public List<CmsBlog> selectCmsBlogListByTagId(Long id);
/**
* 新增文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
public int insertCmsBlog(CmsBlog cmsBlog);
/**
* 修改文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
public int updateCmsBlog(CmsBlog cmsBlog);
/**
* 删除文章管理
*
* @param id 文章管理主键
* @return 结果
*/
public int deleteCmsBlogById(Long id);
/**
* 批量删除文章管理
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteCmsBlogByIds(Long[] ids);
/**
* 统计博客数量
*
* @param cmsBlog 查询条件
* @return 博客数量
*/
public int countCmsBlog(CmsBlog cmsBlog);
/**
* 统计总阅读量
*
* @param cmsBlog 查询条件
* @return 总阅读量
*/
public Long sumViews(CmsBlog cmsBlog);
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cms.blog.mapper;
import com.ruoyi.cms.blog.domain.CmsBlogTag;
import java.util.List;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈blog标签关联 数据层〉
* @Date: 2022/1/2 23:12
*/
public interface CmsBlogTagMapper {
/**
* 批量新增
*/
public int batchBlogTag(List<CmsBlogTag> blogTagList);
/**
* 通过blogID删除blog文件关联
*/
public int deleteBlogTagByBlogId(Long blogId);
/**
* 批量删除blog文件关联
*/
public int deleteBlogTag(Long[] ids);
/**
* 查询文件列表
*/
public List<CmsBlogTag> selectBlogTagList(Long blogId);
/**
* 通过tagId删除blog文件关联
*/
public int deleteBlogTagByTagId(Long tagId);
/**
* 通过tagId统计blog数量
*/
public int countBlogByTagId(Long tagId);
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cms.blog.mapper;
import com.ruoyi.cms.blog.domain.CmsBlogType;
import java.util.List;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈blog分类关联 数据层〉
* @Date: 2022/1/2 23:37
*/
public interface CmsBlogTypeMapper {
/**
* 批量新增
*/
public int batchBlogType(List<CmsBlogType> blogTypeList);
/**
* 通过blogID删除blog文件关联
*/
public int deleteBlogTypeByBlogId(Long blogId);
/**
* 批量删除blog文件关联
*/
public int deleteBlogType(Long[] ids);
/**
* 查询博客列表
*/
public List<CmsBlogType> selectBlogTypeList(Long blogId);
/**
* 通过typeId删除blog文件关联
*/
public int deleteBlogTypeByTypeId(Long typeId);
/**
* 通过typeId统计blog数量
*/
public int countBlogByTypeId(Long typeId);
}

View File

@@ -0,0 +1,76 @@
package com.ruoyi.cms.blog.service;
import java.util.List;
import com.ruoyi.cms.blog.domain.CmsBlog;
/**
* 文章管理Service接口
*
* @author ning
* @date 2022-01-01
*/
public interface ICmsBlogService
{
/**
* 查询文章管理
*
* @param id 文章管理主键
* @return 文章管理
*/
public CmsBlog selectCmsBlogById(Long id);
/**
* 查询文章管理列表
*
* @param cmsBlog 文章管理
* @return 文章管理集合
*/
public List<CmsBlog> selectCmsBlogList(CmsBlog cmsBlog);
/**
* 查询推荐文章列表
*/
public List<CmsBlog> selectCmsBlogListRecommend(CmsBlog cmsBlog);
/**
* 按分类查询文章列表
*/
public List<CmsBlog> selectCmsBlogListByTypeId(Long id);
/**
* 按标签查询文章列表
*/
public List<CmsBlog> selectCmsBlogListByTagId(Long id);
/**
* 新增文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
public Long insertCmsBlog(CmsBlog cmsBlog);
/**
* 修改文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
public int updateCmsBlog(CmsBlog cmsBlog);
/**
* 批量删除文章管理
*
* @param ids 需要删除的文章管理主键集合
* @return 结果
*/
public int deleteCmsBlogByIds(Long[] ids);
/**
* 删除文章管理信息
*
* @param id 文章管理主键
* @return 结果
*/
public int deleteCmsBlogById(Long id);
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.cms.blog.service;
import com.ruoyi.cms.blog.domain.CmsBlogTag;
import java.util.List;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈${DESCRIPTION}〉
* @Date: 2022/1/2 23:22
*/
public interface ICmsBlogTagService {
/**
* 批量新增
*/
public int batchBlogTag(List<CmsBlogTag> blogTagList);
/**
* 通过blogID删除blog标签关联
*/
public int deleteBlogTagByBlogId(Long blogId);
/**
* 批量删除blog标签关联
*/
public int deleteBlogTag(Long[] ids);
/**
* 查询标签列表
*/
public List<CmsBlogTag> selectBlogTagList(Long blogId);
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.cms.blog.service;
import com.ruoyi.cms.blog.domain.CmsBlogType;
import java.util.List;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈${DESCRIPTION}〉
* @Date: 2022/1/2 23:42
*/
public interface ICmsBlogTypeService {
/**
* 批量新增
*/
public int batchBlogType(List<CmsBlogType> blogTypeList);
/**
* 通过blogID删除blog分类关联
*/
public int deleteBlogTypeByBlogId(Long blogId);
/**
* 批量删除blog分类关联
*/
public int deleteBlogType(Long[] ids);
/**
* 查询分类列表
*/
public List<CmsBlogType> selectBlogTypeList(Long blogId);
}

View File

@@ -0,0 +1,337 @@
package com.ruoyi.cms.blog.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.ruoyi.cms.blog.domain.CmsBlogTag;
import com.ruoyi.cms.blog.domain.CmsBlogType;
import com.ruoyi.cms.blog.mapper.CmsBlogTagMapper;
import com.ruoyi.cms.blog.mapper.CmsBlogTypeMapper;
import com.ruoyi.cms.tag.domain.CmsTag;
import com.ruoyi.cms.tag.mapper.CmsTagMapper;
import com.ruoyi.cms.type.domain.CmsType;
import com.ruoyi.cms.type.mapper.CmsTypeMapper;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cms.blog.mapper.CmsBlogMapper;
import com.ruoyi.cms.blog.domain.CmsBlog;
import com.ruoyi.cms.blog.service.ICmsBlogService;
/**
* 文章管理Service业务层处理
*
* @author ning
* @date 2022-01-01
*/
@Service
public class CmsBlogServiceImpl implements ICmsBlogService
{
@Autowired
private CmsBlogMapper cmsBlogMapper;
@Autowired
private CmsBlogTagMapper cmsBlogTagMapper;
@Autowired
private CmsTagMapper cmsTagMapper;
@Autowired
private CmsBlogTypeMapper cmsBlogTypeMapper;
@Autowired
private CmsTypeMapper cmsTypeMapper;
/**
* 查询文章管理
*
* @param id 文章管理主键
* @return 文章管理
*/
@Override
public CmsBlog selectCmsBlogById(Long id)
{
CmsBlog blog = cmsBlogMapper.selectCmsBlogById(id);
//查询标签列表
List<CmsBlogTag> blogTagList = cmsBlogTagMapper.selectBlogTagList(id);
Long[] tagIds = new Long[blogTagList.size()];
List<CmsTag> tags = new ArrayList<>();
List<CmsType> types = new ArrayList<>();
for (int i = 0; i<blogTagList.size();i++){
CmsBlogTag cmsBlogTag = blogTagList.get(i);
Long tagId = cmsBlogTag.getTagId();
tagIds[i] = tagId;
CmsTag cmsTag = cmsTagMapper.selectCmsTagByTagId(tagId);
tags.add(cmsTag);
}
blog.setTagIds(tagIds);
blog.setTags(tags);
//查询分类列表
List<CmsBlogType> blogTypeList = cmsBlogTypeMapper.selectBlogTypeList(id);
Long[] typeIds = new Long[blogTypeList.size()];
for (int i = 0; i<blogTypeList.size();i++){
CmsBlogType cmsBlogType = blogTypeList.get(i);
Long typeId = cmsBlogType.getTypeId();
typeIds[i] = typeId;
CmsType cmsType = cmsTypeMapper.selectCmsTypeByTypeId(typeId);
types.add(cmsType);
}
blog.setTypeIds(typeIds);
blog.setTypes(types);
return blog;
}
/**
* 查询文章管理列表
*
* @param cmsBlog 文章管理
* @return 文章管理
*/
@Override
public List<CmsBlog> selectCmsBlogList(CmsBlog cmsBlog)
{
List<CmsBlog> cmsBlogList = cmsBlogMapper.selectCmsBlogList(cmsBlog);
// 为每个博客设置首页图片如果为空则从content中提取
for (CmsBlog blog : cmsBlogList) {
setDefaultBlogPicFromContent(blog);
}
List<CmsBlog> blogList = BlogListAddTypeAndTag(cmsBlogList);
return blogList;
}
/**
* 查询推荐文章列表
*/
@Override
public List<CmsBlog> selectCmsBlogListRecommend(CmsBlog cmsBlog) {
List<CmsBlog> cmsBlogList = cmsBlogMapper.selectCmsBlogListRecommend(cmsBlog);
// 为每个博客设置首页图片如果为空则从content中提取
for (CmsBlog blog : cmsBlogList) {
setDefaultBlogPicFromContent(blog);
}
List<CmsBlog> blogList = BlogListAddTypeAndTag(cmsBlogList);
return blogList;
}
/**
* 按分类查询文章列表
*/
@Override
public List<CmsBlog> selectCmsBlogListByTypeId(Long id) {
List<CmsBlog> cmsBlogList = cmsBlogMapper.selectCmsBlogListByTypeId(id);
// 为每个博客设置首页图片如果为空则从content中提取
for (CmsBlog blog : cmsBlogList) {
setDefaultBlogPicFromContent(blog);
}
List<CmsBlog> blogList = BlogListAddTypeAndTag(cmsBlogList);
return blogList;
}
/**
* 按标签查询文章列表
*/
@Override
public List<CmsBlog> selectCmsBlogListByTagId(Long id) {
List<CmsBlog> cmsBlogList = cmsBlogMapper.selectCmsBlogListByTagId(id);
// 为每个博客设置首页图片如果为空则从content中提取
for (CmsBlog blog : cmsBlogList) {
setDefaultBlogPicFromContent(blog);
}
List<CmsBlog> blogList = BlogListAddTypeAndTag(cmsBlogList);
return blogList;
}
/**
* 新增文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
@Override
public Long insertCmsBlog(CmsBlog cmsBlog)
{
cmsBlog.setCreateTime(DateUtils.getNowDate());
cmsBlogMapper.insertCmsBlog(cmsBlog);
Long blogId = cmsBlog.getId();
//新增文章标签
Long[] tagIds = cmsBlog.getTagIds();
if (tagIds!=null&&tagIds.length>0){
List<CmsBlogTag> blogTagList = new ArrayList<>();
for (Long tagId : tagIds) {
CmsBlogTag cmsBlogTag = new CmsBlogTag();
cmsBlogTag.setBlogId(blogId);
cmsBlogTag.setTagId(tagId);
blogTagList.add(cmsBlogTag);
}
cmsBlogTagMapper.batchBlogTag(blogTagList);
}
//新增文章分类
Long[] typeIds = cmsBlog.getTypeIds();
if (typeIds!=null&&typeIds.length>0){
List<CmsBlogType> blogTypeList = new ArrayList<>();
for (Long typeId : typeIds) {
CmsBlogType cmsBlogType = new CmsBlogType();
cmsBlogType.setBlogId(blogId);
cmsBlogType.setTypeId(typeId);
blogTypeList.add(cmsBlogType);
}
cmsBlogTypeMapper.batchBlogType(blogTypeList);
}
return blogId;
}
/**
* 修改文章管理
*
* @param cmsBlog 文章管理
* @return 结果
*/
@Override
public int updateCmsBlog(CmsBlog cmsBlog)
{
cmsBlog.setUpdateTime(DateUtils.getNowDate());
Long blogId = cmsBlog.getId();
//清空文章分类关联
cmsBlogTypeMapper.deleteBlogTypeByBlogId(blogId);
//清空文章标签关联
cmsBlogTagMapper.deleteBlogTagByBlogId(blogId);
//新增文章标签
Long[] tagIds = cmsBlog.getTagIds();
if (tagIds!=null&&tagIds.length>0){
List<CmsBlogTag> blogTagList = new ArrayList<>();
for (Long tagId : tagIds) {
CmsBlogTag cmsBlogTag = new CmsBlogTag();
cmsBlogTag.setBlogId(blogId);
cmsBlogTag.setTagId(tagId);
blogTagList.add(cmsBlogTag);
}
cmsBlogTagMapper.batchBlogTag(blogTagList);
}
//新增文章分类
Long[] typeIds = cmsBlog.getTypeIds();
if (typeIds!=null&&typeIds.length>0){
List<CmsBlogType> blogTypeList = new ArrayList<>();
for (Long typeId : typeIds) {
CmsBlogType cmsBlogType = new CmsBlogType();
cmsBlogType.setBlogId(blogId);
cmsBlogType.setTypeId(typeId);
blogTypeList.add(cmsBlogType);
}
cmsBlogTypeMapper.batchBlogType(blogTypeList);
}
return cmsBlogMapper.updateCmsBlog(cmsBlog);
}
/**
* 批量删除文章管理
*
* @param ids 需要删除的文章管理主键
* @return 结果
*/
@Override
public int deleteCmsBlogByIds(Long[] ids)
{
for (Long id : ids) {
//清空文章分类关联
cmsBlogTypeMapper.deleteBlogTypeByBlogId(id);
//清空文章标签关联
cmsBlogTagMapper.deleteBlogTagByBlogId(id);
}
return cmsBlogMapper.deleteCmsBlogByIds(ids);
}
/**
* 删除文章管理信息
*
* @param id 文章管理主键
* @return 结果
*/
@Override
public int deleteCmsBlogById(Long id)
{
//清空文章分类关联
cmsBlogTypeMapper.deleteBlogTypeByBlogId(id);
//清空文章标签关联
cmsBlogTagMapper.deleteBlogTagByBlogId(id);
return cmsBlogMapper.deleteCmsBlogById(id);
}
/**
* 如果首页图片为空从content中提取第一个图片作为首页图片
*
* @param blog 博客对象
*/
private void setDefaultBlogPicFromContent(CmsBlog blog) {
// 检查首页图片是否为空
boolean hasBlogPic = (blog.getBlogPic() != null && !blog.getBlogPic().trim().isEmpty()) ||
(blog.getBlogPicLink() != null && !blog.getBlogPicLink().trim().isEmpty());
if (!hasBlogPic && blog.getContent() != null && !blog.getContent().trim().isEmpty()) {
String firstImageUrl = extractFirstImageFromContent(blog.getContent());
if (firstImageUrl != null && !firstImageUrl.trim().isEmpty()) {
// 设置为地址类型的首页图片
blog.setBlogPicType("0");
blog.setBlogPicLink(firstImageUrl);
}
}
}
/**
* 从内容中提取第一个图片的URL
* 支持Markdown格式![alt](url) 和 HTML格式<img src="url">
*
* @param content 内容支持Markdown和HTML
* @return 第一个图片的URL如果没有找到则返回null
*/
private String extractFirstImageFromContent(String content) {
// 首先尝试匹配Markdown格式的图片![alt](url)
Pattern markdownPattern = Pattern.compile("!\\[.*?\\]\\(([^)]+)\\)");
Matcher markdownMatcher = markdownPattern.matcher(content);
if (markdownMatcher.find()) {
return markdownMatcher.group(1);
}
// 如果没有找到Markdown格式再尝试匹配HTML格式的img标签
Pattern htmlPattern = Pattern.compile("<img[^>]+src\\s*=\\s*[\"']([^\"']+)[\"'][^>]*>", Pattern.CASE_INSENSITIVE);
Matcher htmlMatcher = htmlPattern.matcher(content);
if (htmlMatcher.find()) {
return htmlMatcher.group(1);
}
return null;
}
private List<CmsBlog> BlogListAddTypeAndTag(List<CmsBlog> cmsBlogList){
if (cmsBlogList==null||cmsBlogList.size()<0){
return cmsBlogList;
}
for (CmsBlog blog : cmsBlogList) {
Long blogId = blog.getId();
//查询标签列表
List<CmsBlogTag> blogTagList = cmsBlogTagMapper.selectBlogTagList(blogId);
List<CmsTag> cmsTagList = new ArrayList<>();
blogTagList.forEach((CmsBlogTag cmsBlogTag)->{
Long tagId = cmsBlogTag.getTagId();
CmsTag cmsTag = cmsTagMapper.selectCmsTagByTagId(tagId);
cmsTagList.add(cmsTag);
});
blog.setTags(cmsTagList);
//查询分类列表
List<CmsBlogType> blogTypeList = cmsBlogTypeMapper.selectBlogTypeList(blogId);
List<CmsType> cmsTypeList = new ArrayList<>();
blogTypeList.forEach((CmsBlogType cmsBlogType)->{
Long typeId = cmsBlogType.getTypeId();
CmsType cmsType = cmsTypeMapper.selectCmsTypeByTypeId(typeId);
cmsTypeList.add(cmsType);
});
blog.setTypes(cmsTypeList);
}
return cmsBlogList;
}
}

View File

@@ -0,0 +1,47 @@
package com.ruoyi.cms.blog.service.impl;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈〉
* @Date: 2022/1/2 23:24
*/
import com.ruoyi.cms.blog.domain.CmsBlogTag;
import com.ruoyi.cms.blog.mapper.CmsBlogTagMapper;
import com.ruoyi.cms.blog.service.ICmsBlogTagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: WangNing
* @Description:〈〉
* @Date: 2022/1/2 23:24
**/
@Service
public class CmsBlogTagServiceImpl implements ICmsBlogTagService {
@Autowired
CmsBlogTagMapper cmsBlogTagMapper;
@Override
public int batchBlogTag(List<CmsBlogTag> blogTagList) {
return cmsBlogTagMapper.batchBlogTag(blogTagList);
}
@Override
public int deleteBlogTagByBlogId(Long blogId) {
return cmsBlogTagMapper.deleteBlogTagByBlogId(blogId);
}
@Override
public int deleteBlogTag(Long[] ids) {
return cmsBlogTagMapper.deleteBlogTag(ids);
}
@Override
public List<CmsBlogTag> selectBlogTagList(Long blogId) {
return cmsBlogTagMapper.selectBlogTagList(blogId);
}
}

View File

@@ -0,0 +1,47 @@
package com.ruoyi.cms.blog.service.impl;
/**
* @program: RuoYi-Vue
* @Author: WangNing
* @Description: 〈〉
* @Date: 2022/1/2 23:44
*/
import com.ruoyi.cms.blog.domain.CmsBlogType;
import com.ruoyi.cms.blog.mapper.CmsBlogTypeMapper;
import com.ruoyi.cms.blog.service.ICmsBlogTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: WangNing
* @Description:〈〉
* @Date: 2022/1/2 23:44
**/
@Service
public class CmsBlogTypeServiceImpl implements ICmsBlogTypeService {
@Autowired
CmsBlogTypeMapper cmsBlogTypeMapper;
@Override
public int batchBlogType(List<CmsBlogType> blogTypeList) {
return cmsBlogTypeMapper.batchBlogType(blogTypeList);
}
@Override
public int deleteBlogTypeByBlogId(Long blogId) {
return cmsBlogTypeMapper.deleteBlogTypeByBlogId(blogId);
}
@Override
public int deleteBlogType(Long[] ids) {
return cmsBlogTypeMapper.deleteBlogType(ids);
}
@Override
public List<CmsBlogType> selectBlogTypeList(Long blogId) {
return cmsBlogTypeMapper.selectBlogTypeList(blogId);
}
}