diff --git a/pom.xml b/pom.xml
index cd00a12..6be13fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -403,6 +403,13 @@
${revision}
+
+
+ com.ruoyi
+ ruoyi-blog
+ ${revision}
+
+
@@ -411,6 +418,7 @@
ruoyi-common
ruoyi-extra
ruoyi-modules
+ ruoyi-modules/ruoyi-blog
pom
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 5832e95..9417b41 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -67,6 +67,12 @@
+
+
+ com.ruoyi
+ ruoyi-blog
+
+
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index d34d27e..e303e4c 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -143,7 +143,7 @@ springdoc:
version: '版本号: ${ruoyi.version}'
# 作者信息
contact:
- name: 数据小王子
+ name: huangge1199
email: 738981257@qq.com
url: https://gitee.com/dataprince/ruoyi-flex
components:
diff --git a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/core/domain/TreeEntity.java b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/core/domain/TreeEntity.java
index d06f97f..7a25607 100644
--- a/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/core/domain/TreeEntity.java
+++ b/ruoyi-common/ruoyi-common-orm/src/main/java/com/ruoyi/common/orm/core/domain/TreeEntity.java
@@ -23,9 +23,6 @@ public class TreeEntity extends BaseEntity
/** 父菜单ID */
private Long parentId;
- /** 显示顺序 */
- private Integer orderNum;
-
/** 祖级列表 */
@Column(ignore = true)
private String ancestors;
@@ -54,16 +51,6 @@ public class TreeEntity extends BaseEntity
this.parentId = parentId;
}
- public Integer getOrderNum()
- {
- return orderNum;
- }
-
- public void setOrderNum(Integer orderNum)
- {
- this.orderNum = orderNum;
- }
-
public String getAncestors()
{
return ancestors;
diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml
index bf8756b..e06529f 100644
--- a/ruoyi-modules/pom.xml
+++ b/ruoyi-modules/pom.xml
@@ -14,6 +14,7 @@
ruoyi-generator
ruoyi-job
ruoyi-system
+ ruoyi-blog
ruoyi-modules
diff --git a/ruoyi-modules/ruoyi-blog/pom.xml b/ruoyi-modules/ruoyi-blog/pom.xml
new file mode 100644
index 0000000..f11af30
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/pom.xml
@@ -0,0 +1,86 @@
+
+
+
+ com.ruoyi
+ ruoyi-modules
+ ${revision}
+
+ 4.0.0
+ jar
+
+ ruoyi-blog
+
+
+ 博客系统模块
+
+
+
+
+
+
+ com.github.oshi
+ oshi-core
+
+
+
+
+ com.ruoyi
+ ruoyi-common-core
+
+
+
+ com.ruoyi
+ ruoyi-common-excel
+
+
+
+ com.ruoyi
+ ruoyi-common-json
+
+
+
+ com.ruoyi
+ ruoyi-common-log
+
+
+
+ com.ruoyi
+ ruoyi-common-orm
+
+
+
+ com.ruoyi
+ ruoyi-common-oss
+
+
+
+ com.ruoyi
+ ruoyi-common-redis
+
+
+
+ com.ruoyi
+ ruoyi-common-security
+
+
+
+ com.ruoyi
+ ruoyi-common-springdoc
+
+
+
+ com.ruoyi
+ ruoyi-common-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/controller/BlogCategoriesController.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/controller/BlogCategoriesController.java
new file mode 100644
index 0000000..771c7eb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/controller/BlogCategoriesController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.blog.controller;
+
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.core.core.domain.R;
+import com.ruoyi.common.excel.utils.ExcelUtil;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.web.annotation.RepeatSubmit;
+import com.ruoyi.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.ruoyi.blog.domain.vo.BlogCategoriesVo;
+import com.ruoyi.blog.domain.bo.BlogCategoriesBo;
+import com.ruoyi.blog.service.IBlogCategoriesService;
+
+
+/**
+ * 博客分类Controller
+ *
+ * @author huangge1199
+ * 2024-08-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/blog/categories")
+public class BlogCategoriesController extends BaseController
+{
+ @Resource
+ private IBlogCategoriesService blogCategoriesService;
+
+ /**
+ * 查询博客分类列表
+ */
+ @SaCheckPermission("blog:categories:list")
+ @GetMapping("/list")
+ public R> list(BlogCategoriesBo blogCategoriesBo)
+ {
+ List list = blogCategoriesService.selectList(blogCategoriesBo);
+ return R.ok(list);
+ }
+
+ /**
+ * 导出博客分类列表
+ */
+ @SaCheckPermission("blog:categories:export")
+ @Log(title = "博客分类", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BlogCategoriesBo blogCategoriesBo)
+ {
+ List list = blogCategoriesService.selectList(blogCategoriesBo);
+ ExcelUtil.exportExcel(list, "博客分类", BlogCategoriesVo.class, response);
+ }
+
+ /**
+ * 获取博客分类详细信息
+ */
+ @SaCheckPermission("blog:categories:query")
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable Long id)
+ {
+ return R.ok(blogCategoriesService.selectById(id));
+ }
+
+ /**
+ * 新增博客分类
+ */
+ @SaCheckPermission("blog:categories:add")
+ @Log(title = "博客分类", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping
+ public R add(@Validated @RequestBody BlogCategoriesBo blogCategoriesBo)
+ {
+ boolean inserted = blogCategoriesService.insert(blogCategoriesBo);
+ if (!inserted) {
+ return R.fail("新增博客分类记录失败!");
+ }
+ return R.ok();
+ }
+
+ /**
+ * 修改博客分类
+ */
+ @SaCheckPermission("blog:categories:edit")
+ @Log(title = "博客分类", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping
+ public R edit(@Validated @RequestBody BlogCategoriesBo blogCategoriesBo)
+ {
+ Boolean updated = blogCategoriesService.update(blogCategoriesBo);
+ if (!updated) {
+ R.fail("修改博客分类记录失败!");
+ }
+ return R.ok();
+ }
+
+ /**
+ * 删除博客分类
+ */
+ @SaCheckPermission("blog:categories:remove")
+ @Log(title = "博客分类", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable Long[] ids)
+ {
+ boolean deleted = blogCategoriesService.deleteByIds(ids);
+ if (!deleted) {
+ R.fail("删除博客分类记录失败!");
+ }
+ return R.ok();
+ }
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/BlogCategories.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/BlogCategories.java
new file mode 100644
index 0000000..46adf13
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/BlogCategories.java
@@ -0,0 +1,40 @@
+package com.ruoyi.blog.domain;
+
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.ruoyi.common.orm.core.domain.TreeEntity;
+
+/**
+ * 博客分类对象 blog_categories
+ *
+ * @author huangge1199
+ * 2024-08-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "blog_categories")
+public class BlogCategories extends TreeEntity
+{
+ /** 主键 */
+ @Id
+ private Long id;
+
+ /** 描述 */
+ private String description;
+
+ /** 名称 */
+ private String name;
+
+ /** 密码 */
+ private String password;
+
+ /** 优先级 */
+ private Long priority;
+
+ /** 固定链接地址 */
+ private String slug;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/bo/BlogCategoriesBo.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/bo/BlogCategoriesBo.java
new file mode 100644
index 0000000..573c6c0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/bo/BlogCategoriesBo.java
@@ -0,0 +1,56 @@
+package com.ruoyi.blog.domain.bo;
+
+import com.ruoyi.blog.domain.BlogCategories;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import com.ruoyi.common.orm.core.domain.TreeEntity;
+
+/**
+ * 博客分类业务对象 blog_categories
+ *
+ * @author huangge1199
+ * @date 2024-08-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BlogCategories.class, reverseConvertGenerate = false)
+public class BlogCategoriesBo extends TreeEntity
+{
+
+ /**
+ * 主键
+ */
+ @NotNull(message = "主键不能为空")
+ private Long id;
+
+ /**
+ * 描述
+ */
+ @NotBlank(message = "描述不能为空")
+ private String description;
+
+ /**
+ * 名称
+ */
+ @NotBlank(message = "名称不能为空")
+ private String name;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 优先级
+ */
+ private Long priority;
+
+ /**
+ * 固定链接地址
+ */
+ private String slug;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/vo/BlogCategoriesVo.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/vo/BlogCategoriesVo.java
new file mode 100644
index 0000000..6ec4639
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/domain/vo/BlogCategoriesVo.java
@@ -0,0 +1,58 @@
+package com.ruoyi.blog.domain.vo;
+
+import com.ruoyi.blog.domain.BlogCategories;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.excel.annotation.ExcelDictFormat;
+import com.ruoyi.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import com.ruoyi.common.orm.core.domain.TreeEntity;
+
+/**
+ * 博客分类视图对象 blog_categories
+ *
+ * @author huangge1199
+ * @date 2024-08-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BlogCategories.class)
+public class BlogCategoriesVo extends TreeEntity implements Serializable
+{
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+ @ExcelProperty(value = "主键")
+ private Long id;
+
+ /** 描述 */
+ @ExcelProperty(value = "描述")
+ private String description;
+
+ /** 名称 */
+ @ExcelProperty(value = "名称")
+ private String name;
+
+ /** 密码 */
+ @ExcelProperty(value = "密码")
+ private String password;
+
+ /** 优先级 */
+ @ExcelProperty(value = "优先级")
+ private Long priority;
+
+ /** 固定链接地址 */
+ @ExcelProperty(value = "固定链接地址")
+ private String slug;
+
+
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/mapper/BlogCategoriesMapper.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/mapper/BlogCategoriesMapper.java
new file mode 100644
index 0000000..49acaef
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/mapper/BlogCategoriesMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.blog.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.ruoyi.blog.domain.BlogCategories;
+
+/**
+ * 博客分类Mapper接口
+ *
+ * @author huangge1199
+ * 2024-08-26
+ */
+@Mapper
+public interface BlogCategoriesMapper extends BaseMapper
+{
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/IBlogCategoriesService.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/IBlogCategoriesService.java
new file mode 100644
index 0000000..29f173b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/IBlogCategoriesService.java
@@ -0,0 +1,58 @@
+package com.ruoyi.blog.service;
+
+import java.util.List;
+import com.ruoyi.blog.domain.BlogCategories;
+import com.ruoyi.blog.domain.vo.BlogCategoriesVo;
+import com.ruoyi.blog.domain.bo.BlogCategoriesBo;
+import com.ruoyi.common.orm.core.service.IBaseService;
+
+/**
+ * 博客分类Service接口
+ *
+ * @author huangge1199
+ * 2024-08-26
+ */
+public interface IBlogCategoriesService extends IBaseService
+{
+ /**
+ * 查询博客分类
+ *
+ * @param id 博客分类主键
+ * @return 博客分类
+ */
+ BlogCategoriesVo selectById(Long id);
+
+ /**
+ * 查询博客分类列表
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 博客分类集合
+ */
+ List selectList(BlogCategoriesBo blogCategoriesBo);
+
+
+ /**
+ * 新增博客分类
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 结果:true 操作成功,false 操作失败
+ */
+ boolean insert(BlogCategoriesBo blogCategoriesBo);
+
+ /**
+ * 修改博客分类
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 结果:true 更新成功,false 更新失败
+ */
+ boolean update(BlogCategoriesBo blogCategoriesBo);
+
+ /**
+ * 批量删除博客分类
+ *
+ * @param ids 需要删除的博客分类主键集合
+ * @return 结果:true 删除成功,false 删除失败
+ */
+ boolean deleteByIds(Long[] ids);
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/impl/BlogCategoriesServiceImpl.java b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/impl/BlogCategoriesServiceImpl.java
new file mode 100644
index 0000000..180e002
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/java/com/ruoyi/blog/service/impl/BlogCategoriesServiceImpl.java
@@ -0,0 +1,125 @@
+package com.ruoyi.blog.service.impl;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import com.ruoyi.common.core.utils.MapstructUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.orm.core.page.PageQuery;
+import com.ruoyi.common.orm.core.page.TableDataInfo;
+import com.ruoyi.common.orm.core.service.impl.BaseServiceImpl;
+import com.ruoyi.common.core.utils.DateUtils;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.ruoyi.blog.mapper.BlogCategoriesMapper;
+import com.ruoyi.blog.domain.BlogCategories;
+import com.ruoyi.blog.domain.bo.BlogCategoriesBo;
+import com.ruoyi.blog.domain.vo.BlogCategoriesVo;
+import com.ruoyi.blog.service.IBlogCategoriesService;
+import static com.ruoyi.blog.domain.table.BlogCategoriesTableDef.BLOG_CATEGORIES;
+
+/**
+ * 博客分类Service业务层处理
+ *
+ * @author huangge1199
+ * 2024-08-26
+ */
+@Service
+public class BlogCategoriesServiceImpl extends BaseServiceImpl implements IBlogCategoriesService
+{
+ @Resource
+ private BlogCategoriesMapper blogCategoriesMapper;
+
+ @Override
+ public QueryWrapper query() {
+ return super.query().from(BLOG_CATEGORIES);
+ }
+
+ private QueryWrapper buildQueryWrapper(BlogCategoriesBo blogCategoriesBo) {
+ QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+
+ if (StringUtils.isNotBlank(blogCategoriesBo.getName())) {
+ queryWrapper.and(BLOG_CATEGORIES.NAME.like(blogCategoriesBo.getName()));
+ }
+ if (blogCategoriesBo.getParentId() != null) {
+ queryWrapper.and(BLOG_CATEGORIES.PARENT_ID.eq(blogCategoriesBo.getParentId()));
+ }
+
+ return queryWrapper;
+ }
+
+ /**
+ * 查询博客分类
+ *
+ * @param id 博客分类主键
+ * @return 博客分类
+ */
+ @Override
+ public BlogCategoriesVo selectById(Long id)
+ {
+ return this.getOneAs(query().where(BLOG_CATEGORIES.ID.eq(id)), BlogCategoriesVo.class);
+
+ }
+
+ /**
+ * 查询博客分类列表
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 博客分类集合
+ */
+ @Override
+ public List selectList(BlogCategoriesBo blogCategoriesBo)
+ {
+ QueryWrapper queryWrapper = buildQueryWrapper(blogCategoriesBo);
+ return this.listAs(queryWrapper, BlogCategoriesVo.class);
+ }
+
+
+ /**
+ * 新增博客分类
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 结果:true 操作成功,false 操作失败
+ */
+ @Override
+ public boolean insert(BlogCategoriesBo blogCategoriesBo)
+ {
+ BlogCategories blogCategories = MapstructUtils.convert(blogCategoriesBo, BlogCategories.class);
+
+ return this.save(blogCategories);//使用全局配置的雪花算法主键生成器生成ID值
+ }
+
+ /**
+ * 修改博客分类
+ *
+ * @param blogCategoriesBo 博客分类Bo
+ * @return 结果:true 更新成功,false 更新失败
+ */
+ @Override
+ public boolean update(BlogCategoriesBo blogCategoriesBo)
+ {
+ BlogCategories blogCategories = MapstructUtils.convert(blogCategoriesBo, BlogCategories.class);
+ if(ObjectUtil.isNotNull(blogCategories) && ObjectUtil.isNotNull(blogCategories.getId())) {
+ boolean updated = this.updateById(blogCategories);
+ }
+ return false;
+ }
+
+ /**
+ * 批量删除博客分类
+ *
+ * @param ids 需要删除的博客分类主键集合
+ * @return 结果:true 删除成功,false 删除失败
+ */
+ @Transactional
+ @Override
+ public boolean deleteByIds(Long[] ids)
+ {
+ return this.removeByIds(Arrays.asList(ids));
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-blog/src/main/resources/mapper/blog/BlogCategoriesMapper.xml b/ruoyi-modules/ruoyi-blog/src/main/resources/mapper/blog/BlogCategoriesMapper.xml
new file mode 100644
index 0000000..3a81ccf
--- /dev/null
+++ b/ruoyi-modules/ruoyi-blog/src/main/resources/mapper/blog/BlogCategoriesMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml
index 6a09165..48e5811 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml
@@ -1,7 +1,7 @@
# 代码生成
gen:
# 作者
- author: 轩辕龙儿
+ author: huangge1199
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
packageName: com.ruoyi.demo
# 自动去除表前缀,默认是false