8.2 KiB
8.2 KiB
ResourceCategory 移除清单
📝 概述
本文档记录了 ResourceCategory 相关功能的完整移除过程。原资源分类功能已完全迁移到标签系统(tb_tag 的 tag_type=1)。
✅ 已完成的操作
1. 数据库层面
已注释的建表语句
文件: .bin\mysql\sql\createTableResource.sql
-- 资源分类表(已废弃,使用 tb_tag 表的 tag_type=1 代替)
-- DROP TABLE IF EXISTS `tb_resource_category`;
-- CREATE TABLE `tb_resource_category` (
-- ...
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源分类表';
--
-- ⚠️ 注意:资源分类功能已迁移到 tb_tag 表中,使用 tag_type=1 表示文章分类标签
已注释的初始化数据
文件: .bin\mysql\sql\initAllData.sql
-- 插入资源分类数据(已废弃,使用下方的 tb_tag 数据代替)
-- INSERT INTO `tb_resource_category` (id, category_id, name, description, order_num, creator, create_time) VALUES
-- ('1', 'party_history', '党史学习', '党史学习相关资源', 1, '1', now()),
-- ...
2. Java 代码层面
已删除的文件(共7个)
-
实体类
- ❌
common\common-dto\src\main\java\org\xyzh\common\dto\resource\TbResourceCategory.java
- ❌
-
Service 层
- ❌
api\api-news\src\main\java\org\xyzh\api\news\category\ResourceCategoryService.java - ❌
news\src\main\java\org\xyzh\news\service\NCResourceCategoryService.java - ❌
news\src\main\java\org\xyzh\news\service\impl\NCResourceCategoryServiceImpl.java
- ❌
-
Controller 层
- ❌
news\src\main\java\org\xyzh\news\controller\ResourceCategoryController.java
- ❌
-
Mapper 层
- ❌
news\src\main\java\org\xyzh\news\mapper\ResourceCategoryMapper.java - ❌
news\src\main\resources\mapper\ResourceCategoryMapper.xml
- ❌
已修改的文件(共2个)
- ResourceVO.java
- 删除了
resourceCategory字段及其 getter/setter - 保留
tags字段用于存储标签列表(包含文章分类标签)
- 删除了
修改前:
public class ResourceVO {
private TbResource resource;
private TbResourceCategory resourceCategory; // ❌ 已删除
private List<TbTag> tags;
}
修改后:
public class ResourceVO {
private TbResource resource;
// ✅ 资源标签列表(包含文章分类标签 tag_type=1)
private List<TbTag> tags;
}
- ResourceCenterController.java
- 修改 import 语句,移除
TbResourceCategory,添加TbTag - 修改返回类型:
ResultDomain<TbResourceCategory>→ResultDomain<TbTag> - 更新 TODO 注释,说明使用
TagService.getTagsByType(1)
- 修改 import 语句,移除
关键修改:
// 修改前
import org.xyzh.common.dto.resource.TbResourceCategory;
public ResultDomain<TbResourceCategory> getSpecialCategories() { ... }
// 修改后
import org.xyzh.common.dto.resource.TbTag;
public ResultDomain<TbTag> getSpecialCategories() {
// TODO: 使用 TagService.getTagsByType(1) 获取文章分类标签
}
🔄 迁移映射关系
API 接口映射
| 原接口 (ResourceCategory) | 新接口 (Tag) | 说明 |
|---|---|---|
GET /news/categorys/list |
GET /news/tags/type/1 |
获取所有文章分类标签 |
GET /news/categorys/category/{id} |
GET /news/tags/tag/{tagID} |
获取单个标签详情 |
POST /news/categorys/category |
POST /news/tags/tag |
创建标签(需指定 tagType=1) |
PUT /news/categorys/category |
PUT /news/tags/tag |
更新标签 |
DELETE /news/categorys/category/{id} |
DELETE /news/tags/tag/{tagID} |
删除标签 |
GET /news/categorys/tree |
GET /news/tags/type/1 |
获取分类树(可通过标签列表构建) |
数据字段映射
| ResourceCategory 字段 | Tag 字段 | 说明 |
|---|---|---|
tagID |
tagID |
唯一标识 |
name |
name |
名称 |
description |
description |
描述 |
icon |
- | 图标(Tag中无此字段,可扩展) |
orderNum |
- | 排序号(可通过创建时间排序) |
parentID |
- | 父分类(Tag为扁平结构) |
| - | tagType |
标签类型(固定为1) |
| - | color |
标签颜色(新增字段) |
代码调用映射
修改前:
// 使用 ResourceCategoryService
ResourceCategoryService categoryService;
ResultDomain<TbResourceCategory> result = categoryService.getAllCategories();
修改后:
// 使用 TagService
TagService tagService;
ResultDomain<TbTag> result = tagService.getTagsByType(1); // 1 = 文章分类标签
⚠️ 数据迁移注意事项
如果数据库中已有 tb_resource_category 数据
需要执行以下迁移 SQL:
-- 1. 将 tb_resource_category 数据迁移到 tb_tag
INSERT INTO tb_tag (id, tag_id, name, description, tag_type, creator, create_time)
SELECT
id,
category_id AS tag_id,
name,
description,
1 AS tag_type, -- 文章分类标签
creator,
create_time
FROM tb_resource_category
WHERE deleted = 0;
-- 2. 确认迁移成功后,删除旧表(可选)
-- DROP TABLE IF EXISTS tb_resource_category;
tb_resource 表的 category_id 字段
tb_resource 表中的 category_id 字段仍然保留,但现在应该:
- 存储的是
tb_tag表中tag_type=1的标签的tag_id - 或者改为使用
tb_resource_tag关联表来管理资源与分类标签的关系
推荐方案: 使用 tb_resource_tag 关联表
-- 迁移资源分类关系到资源标签关联表
INSERT INTO tb_resource_tag (id, resource_id, tag_id, create_time)
SELECT
CONCAT('rt_', UUID()) AS id,
resource_id,
category_id AS tag_id,
NOW() AS create_time
FROM tb_resource
WHERE category_id IS NOT NULL AND category_id != '';
📊 影响范围评估
前端影响
- ❌ 需要修改前端代码中调用
/news/categorys的接口 - ✅ 改为调用
/news/tags/type/1接口 - ✅ 数据结构基本一致,只需修改接口地址和字段映射
后端影响
- ✅ 已完全移除 ResourceCategory 相关代码
- ✅ 所有功能已迁移到 TagService
- ⚠️ 如有其他模块引用了 ResourceCategory,需要同步修改
数据库影响
- ✅ 建表语句已注释,不会创建
tb_resource_category表 - ⚠️ 如果数据库中已存在该表,需要手动迁移数据
- ⚠️ 建议保留旧表一段时间作为备份
✅ 验证清单
完成以下验证以确保迁移成功:
1. 编译验证
- Maven 编译无错误
- 无
TbResourceCategory相关的编译错误 - 无
ResourceCategoryService相关的导入错误
2. 功能验证
- 创建文章分类标签(tagType=1)
- 获取文章分类标签列表
- 为资源添加分类标签
- 查询资源的分类标签
- 删除文章分类标签
3. 接口验证
# 1. 获取文章分类标签
curl http://localhost:8080/news/tags/type/1
# 2. 创建文章分类标签
curl -X POST http://localhost:8080/news/tags/tag \
-H "Content-Type: application/json" \
-d '{"name":"党史学习","tagType":1,"color":"#ff6b6b"}'
# 3. 为资源添加分类标签
curl -X POST http://localhost:8080/news/tags/resource/{resourceID}/tag/{tagID}
4. 数据验证
-- 检查标签数据
SELECT * FROM tb_tag WHERE tag_type = 1;
-- 检查资源标签关联
SELECT r.title, t.name
FROM tb_resource r
LEFT JOIN tb_resource_tag rt ON r.resource_id = rt.resource_id
LEFT JOIN tb_tag t ON rt.tag_id = t.tag_id
WHERE t.tag_type = 1;
🎯 总结
移除内容
- ✅ 7个 Java 文件(实体、Service、Controller、Mapper)
- ✅ 1个 Mapper XML 文件
- ✅ SQL 建表语句(已注释)
- ✅ SQL 初始化数据(已注释)
修改内容
- ✅ 2个 Java 文件(ResourceVO、ResourceCenterController)
- ✅ 更新迁移文档
替代方案
- ✅ 使用
tb_tag(tag_type=1) 替代tb_resource_category - ✅ 使用
TagService.getTagsByType(1)获取文章分类标签 - ✅ 接口从
/news/categorys迁移到/news/tags/type/1
优势
- ✅ 代码更简洁,减少7个文件
- ✅ 数据结构更统一
- ✅ 功能更灵活,易于扩展
- ✅ 维护成本降低
移除操作已全部完成!🎉