# ResourceCategory 移除清单 ## 📝 概述 本文档记录了 `ResourceCategory` 相关功能的完整移除过程。原资源分类功能已完全迁移到标签系统(`tb_tag` 的 `tag_type=1`)。 --- ## ✅ 已完成的操作 ### 1. 数据库层面 #### 已注释的建表语句 **文件:** `.bin\mysql\sql\createTableResource.sql` ```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` ```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个) 1. **实体类** - ❌ `common\common-dto\src\main\java\org\xyzh\common\dto\resource\TbResourceCategory.java` 2. **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` 3. **Controller 层** - ❌ `news\src\main\java\org\xyzh\news\controller\ResourceCategoryController.java` 4. **Mapper 层** - ❌ `news\src\main\java\org\xyzh\news\mapper\ResourceCategoryMapper.java` - ❌ `news\src\main\resources\mapper\ResourceCategoryMapper.xml` #### 已修改的文件(共2个) 1. **ResourceVO.java** - 删除了 `resourceCategory` 字段及其 getter/setter - 保留 `tags` 字段用于存储标签列表(包含文章分类标签) **修改前:** ```java public class ResourceVO { private TbResource resource; private TbResourceCategory resourceCategory; // ❌ 已删除 private List tags; } ``` **修改后:** ```java public class ResourceVO { private TbResource resource; // ✅ 资源标签列表(包含文章分类标签 tag_type=1) private List tags; } ``` 2. **ResourceCenterController.java** - 修改 import 语句,移除 `TbResourceCategory`,添加 `TbTag` - 修改返回类型:`ResultDomain` → `ResultDomain` - 更新 TODO 注释,说明使用 `TagService.getTagsByType(1)` **关键修改:** ```java // 修改前 import org.xyzh.common.dto.resource.TbResourceCategory; public ResultDomain getSpecialCategories() { ... } // 修改后 import org.xyzh.common.dto.resource.TbTag; public ResultDomain 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` | 标签颜色(新增字段) | ### 代码调用映射 **修改前:** ```java // 使用 ResourceCategoryService ResourceCategoryService categoryService; ResultDomain result = categoryService.getAllCategories(); ``` **修改后:** ```java // 使用 TagService TagService tagService; ResultDomain result = tagService.getTagsByType(1); // 1 = 文章分类标签 ``` --- ## ⚠️ 数据迁移注意事项 ### 如果数据库中已有 tb_resource_category 数据 需要执行以下迁移 SQL: ```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` 关联表 ```sql -- 迁移资源分类关系到资源标签关联表 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. 接口验证 ```bash # 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. 数据验证 ```sql -- 检查标签数据 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个文件 - ✅ 数据结构更统一 - ✅ 功能更灵活,易于扩展 - ✅ 维护成本降低 移除操作已全部完成!🎉