一、系统概述
美菜生鲜系统的商品分类管理模块是电商平台的核心功能之一,用于实现生鲜商品的科学分类、便捷检索和高效管理。该模块需要支持多级分类体系、分类属性定义、分类关联商品等功能。
二、核心功能设计
1. 分类体系设计
- 多级分类结构:支持3-5级分类体系(如:一级分类:蔬菜;二级分类:叶菜类;三级分类:菠菜)
- 分类编码规则:为每个分类设置唯一编码,便于系统识别和管理
- 分类图标管理:支持为每个分类上传特色图标
2. 分类属性管理
- 基础属性:分类名称、编码、父级分类、排序权重
- 业务属性:
- 是否为热销分类
- 是否显示在首页
- 分类描述信息
- SEO相关信息(关键词、描述)
3. 分类与商品关联
- 商品分类绑定:支持单个商品绑定多个分类
- 分类商品排序:可设置分类下商品的展示顺序
- 分类过滤条件:为不同分类设置特定的筛选条件(如:蔬菜分类可按"有机/非有机"筛选)
三、技术实现方案
1. 数据库设计
```sql
-- 分类表
CREATE TABLE `category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT 分类名称,
`code` varchar(20) NOT NULL COMMENT 分类编码,
`parent_id` bigint(20) DEFAULT NULL COMMENT 父级分类ID,
`level` tinyint(4) NOT NULL COMMENT 分类层级,
`sort_order` int(11) DEFAULT 0 COMMENT 排序权重,
`icon_url` varchar(255) DEFAULT NULL COMMENT 分类图标,
`is_hot` tinyint(1) DEFAULT 0 COMMENT 是否热销分类,
`is_show` tinyint(1) DEFAULT 1 COMMENT 是否显示,
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 分类属性表(扩展属性)
CREATE TABLE `category_attr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`category_id` bigint(20) NOT NULL COMMENT 分类ID,
`attr_key` varchar(50) NOT NULL COMMENT 属性键,
`attr_value` varchar(255) NOT NULL COMMENT 属性值,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_category_attr` (`category_id`,`attr_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 商品分类关联表
CREATE TABLE `product_category` (
`product_id` bigint(20) NOT NULL COMMENT 商品ID,
`category_id` bigint(20) NOT NULL COMMENT 分类ID,
PRIMARY KEY (`product_id`,`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
2. 后端API设计
```java
// 分类管理接口示例
@RestController
@RequestMapping("/api/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
// 获取分类树
@GetMapping("/tree")
public Result> getCategoryTree() {
return Result.success(categoryService.getCategoryTree());
}
// 添加分类
@PostMapping
public Result addCategory(@RequestBody CategoryAddDTO dto) {
categoryService.addCategory(dto);
return Result.success();
}
// 更新分类
@PutMapping("/{id}")
public Result updateCategory(@PathVariable Long id,
@RequestBody CategoryUpdateDTO dto) {
categoryService.updateCategory(id, dto);
return Result.success();
}
// 删除分类(逻辑删除)
@DeleteMapping("/{id}")
public Result deleteCategory(@PathVariable Long id) {
categoryService.deleteCategory(id);
return Result.success();
}
// 获取分类详情
@GetMapping("/{id}")
public Result getCategoryDetail(@PathVariable Long id) {
return Result.success(categoryService.getCategoryDetail(id));
}
}
```
3. 前端实现要点
1. 分类树形展示:
- 使用树形控件展示分类层级关系
- 支持展开/折叠节点
- 支持拖拽调整分类顺序
2. 分类管理界面:
- 分类列表展示(名称、编码、商品数量等)
- 批量操作功能(删除、启用/禁用)
- 搜索和筛选功能
3. 商品关联界面:
- 选择分类时提供搜索和筛选功能
- 显示已关联商品数量
- 支持批量关联/取消关联商品
四、关键业务逻辑
1. 分类删除验证
```java
public void deleteCategory(Long id) {
// 验证分类下是否有商品
long productCount = productCategoryMapper.countByCategoryId(id);
if (productCount > 0) {
throw new BusinessException("该分类下存在商品,不能删除");
}
// 验证是否有子分类
long childCount = categoryMapper.countByParentId(id);
if (childCount > 0) {
throw new BusinessException("该分类存在子分类,请先删除子分类");
}
// 执行删除(逻辑删除)
categoryMapper.deleteById(id);
}
```
2. 分类移动处理
```java
public void moveCategory(Long categoryId, Long newParentId) {
// 验证新父分类不能是自身或子分类
if (isChildOf(categoryId, newParentId)) {
throw new BusinessException("不能移动到自身或子分类下");
}
// 更新分类信息
Category category = categoryMapper.selectById(categoryId);
category.setParentId(newParentId);
// 重新计算层级(根据业务规则可能需要)
categoryMapper.updateById(category);
// 更新所有子分类的层级(如果需要)
updateChildrenLevel(categoryId);
}
```
五、性能优化考虑
1. 分类数据缓存:
- 使用Redis缓存分类树结构
- 设置合理的过期时间或实现主动刷新机制
2. 数据库优化:
- 为分类表建立适当的索引
- 考虑使用闭包表(Closure Table)模式存储分类关系(如果分类层级很深且频繁查询)
3. 查询优化:
- 对于分类商品数量统计,考虑使用计数器表或定时任务更新
- 避免在热点路径上执行复杂的分类查询
六、扩展功能建议
1. 分类标签系统:为分类添加标签,支持更灵活的商品检索
2. 分类推荐规则:基于用户行为推荐相关分类
3. 分类运营位:在分类页设置运营位,支持促销活动展示
4. 分类数据分析:统计各分类的访问量、转化率等指标
七、实施路线图
1. 第一阶段:实现基础分类管理功能(增删改查)
2. 第二阶段:完善分类与商品关联功能
3. 第三阶段:添加分类运营和数据分析功能
4. 第四阶段:优化性能和用户体验
以上方案可根据美菜生鲜系统的具体业务需求和技术栈进行调整和扩展。