# 书籍分类功能说明 ## 功能概述 实现了前端页面五个分类功能的后端接口和数据库支持: 1. **全部分类** - 显示所有上架的书籍 2. **排行榜** - 按综合热度排序的书籍 3. **热门书籍** - 按浏览量和阅读量排序的书籍 4. **新书榜** - 按创建时间排序的最新书籍 5. **VIP书籍** - VIP专享书籍 ## 数据库设计 ### 表结构 使用现有的 `books` 表,包含以下关键字段: - `id` - 书籍ID - `title` - 书名 - `author` - 作者 - `cover` / `image` - 封面图片 - `brief` / `desc` / `introduction` - 简介 - `price` - 价格 - `is_free` - 是否免费 - `is_vip` - 是否VIP专享 - `category_id` - 分类ID - `status` - 状态(1=上架,0=下架) - `view_count` - 浏览次数 - `like_count` - 点赞数 - `read_count` - 阅读次数 - `created_at` - 创建时间 - `updated_at` - 更新时间 ## 后端接口 ### 1. 全部分类 - **接口地址**:`GET /api/book/all` - **请求参数**: - `page` - 页码(默认:1) - `size` - 每页数量(默认:10) - **响应**:返回分页的书籍列表 - **排序规则**:按创建时间倒序(最新的在前) ### 2. 排行榜 - **接口地址**:`GET /api/book/ranking` - **请求参数**: - `limit` - 返回数量(默认:10) - **响应**:返回排行榜书籍列表 - **排序规则**:按综合热度排序 - 计算公式:`阅读量 * 3 + 点赞量 * 2 + 浏览量` - 权重:阅读量 > 点赞量 > 浏览量 ### 3. 热门书籍 - **接口地址**:`GET /api/book/popular` - **请求参数**: - `limit` - 返回数量(默认:10) - **响应**:返回热门书籍列表 - **排序规则**:按浏览量、阅读量排序 - 先按浏览量降序 - 再按阅读量降序 - 最后按创建时间降序 ### 4. 新书榜 - **接口地址**:`GET /api/book/new` - **请求参数**: - `limit` - 返回数量(默认:10) - **响应**:返回新书列表 - **排序规则**:按创建时间倒序(最新的在前) ### 5. VIP书籍 - **接口地址**:`GET /api/book/vip` - **请求参数**: - `page` - 页码(默认:1) - `size` - 每页数量(默认:10) - **响应**:返回分页的VIP书籍列表 - **筛选条件**:`is_vip = 1` 且 `status = 1` - **排序规则**:按创建时间倒序 ## 前端API方法 在 `books/utils/api.js` 中添加了以下方法: ```javascript // 获取全部书籍(分页) export function getAllBooks(page = 1, size = 10) // 获取排行榜书籍 export function getRankingBooks(limit = 10) // 获取热门书籍 export function getPopularBooks(limit = 10) // 获取新书榜 export function getNewBooks(limit = 10) // 获取VIP书籍(分页) export function getVipBooks(page = 1, size = 10) ``` ## 数据库查询SQL ### 1. 全部分类 ```sql SELECT * FROM books WHERE status = 1 ORDER BY created_at DESC LIMIT offset, size ``` ### 2. 排行榜 ```sql SELECT * FROM books WHERE status = 1 ORDER BY (read_count * 3 + like_count * 2 + view_count) DESC, created_at DESC LIMIT limit ``` ### 3. 热门书籍 ```sql SELECT * FROM books WHERE status = 1 ORDER BY view_count DESC, read_count DESC, created_at DESC LIMIT limit ``` ### 4. 新书榜 ```sql SELECT * FROM books WHERE status = 1 ORDER BY created_at DESC LIMIT limit ``` ### 5. VIP书籍 ```sql SELECT * FROM books WHERE status = 1 AND is_vip = 1 ORDER BY created_at DESC LIMIT offset, size ``` ## 数据准备 ### 1. 创建数据库表 如果还没有创建表,请先执行 `schema.sql` 创建基础表结构。 ### 2. 插入示例数据 执行 `books_category_data.sql` 插入示例书籍数据: ```bash mysql -u root -p books_db < book/src/main/resources/db/books_category_data.sql ``` 或者使用MySQL客户端工具执行SQL文件。 ### 3. 数据说明 示例数据包含: - **经典文学**:红楼梦、三国演义、水浒传等(高阅读量,适合排行榜) - **现代文学**:活着、围城、平凡的世界等(高浏览量,适合热门书籍) - **新书**:三体、解忧杂货店、人类简史等(最近添加,适合新书榜) - **VIP书籍**:百年孤独、1984、动物农场等(VIP专享,需要付费) ## 使用示例 ### 前端调用示例 ```javascript import { getAllBooks, getRankingBooks, getPopularBooks, getNewBooks, getVipBooks } from '@/utils/api.js' // 获取全部书籍(第一页,每页10本) getAllBooks(1, 10).then(res => { console.log('全部书籍:', res.data) }) // 获取排行榜(前10本) getRankingBooks(10).then(res => { console.log('排行榜:', res.data) }) // 获取热门书籍(前10本) getPopularBooks(10).then(res => { console.log('热门书籍:', res.data) }) // 获取新书榜(前10本) getNewBooks(10).then(res => { console.log('新书榜:', res.data) }) // 获取VIP书籍(第一页,每页10本) getVipBooks(1, 10).then(res => { console.log('VIP书籍:', res.data) }) ``` ## 接口响应格式 ### 列表接口响应(分页) ```json { "code": 200, "message": "成功", "data": { "list": [...], "total": 100, "page": 1, "size": 10 } } ``` ### 列表接口响应(限制数量) ```json { "code": 200, "message": "成功", "data": [ { "id": 1, "title": "书名", "author": "作者", "image": "封面URL", "brief": "简介", "viewCount": 1000, "likeCount": 100, "readCount": 500, "isVip": false, "price": 0.00 }, ... ] } ``` ## 注意事项 1. **路由顺序**:所有分类接口必须放在 `/{id}` 路由之前,避免路径冲突 2. **状态筛选**:所有查询都只返回 `status = 1`(上架)的书籍 3. **VIP书籍**:VIP书籍需要 `is_vip = 1` 且用户需要是VIP才能访问 4. **分页参数**:全部分类和VIP书籍支持分页,其他接口使用limit限制数量 5. **排序规则**:不同分类使用不同的排序规则,确保数据准确性 ## 测试建议 1. **接口测试**:使用Postman或类似工具测试各个接口 2. **数据测试**:确保数据库中有足够的数据进行测试 3. **分页测试**:测试分页功能是否正常工作 4. **排序测试**:验证排序规则是否正确 5. **VIP测试**:测试VIP书籍的访问控制 ## 后续优化 1. **缓存优化**:对热门数据添加缓存,提高查询性能 2. **索引优化**:为常用查询字段添加索引 3. **搜索功能**:添加关键词搜索功能 4. **筛选功能**:添加更多筛选条件(如分类、价格区间等) 5. **推荐算法**:根据用户行为推荐相关书籍