一、系统需求分析 商品分类管理是生鲜电商系统的核心功能之一,主要需求包括: 1.多级分类体系:支持主分类-子分类-明细分类的多级结构 2.分类属性管理:不同分类可配置不同商品属性(如水果需标注产地、保质期等) 3.分类权限控制:不同角色对分类的增删改查权限 4.分类搜索优化
一、系统需求分析
商品分类管理是生鲜电商系统的核心功能之一,主要需求包括:
1. 多级分类体系:支持主分类-子分类-明细分类的多级结构
2. 分类属性管理:不同分类可配置不同商品属性(如水果需标注产地、保质期等)
3. 分类权限控制:不同角色对分类的增删改查权限
4. 分类搜索优化:支持快速定位分类
5. 分类统计报表:按分类统计销售数据、库存数据等
二、数据库设计
核心表结构
```sql
-- 商品分类表
CREATE TABLE `product_category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 分类ID,
`name` varchar(50) NOT NULL COMMENT 分类名称,
`parent_id` bigint(20) DEFAULT NULL COMMENT 父分类ID,
`level` tinyint(4) NOT NULL COMMENT 分类层级(1-一级分类,2-二级分类...),
`sort_order` int(11) DEFAULT 0 COMMENT 排序字段,
`icon_url` varchar(255) DEFAULT NULL COMMENT 分类图标URL,
`is_active` tinyint(1) DEFAULT 1 COMMENT 是否启用,
`create_time` datetime NOT NULL COMMENT 创建时间,
`update_time` datetime NOT NULL COMMENT 更新时间,
PRIMARY KEY (`id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_level` (`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=商品分类表;
-- 分类属性表
CREATE TABLE `category_attribute` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 属性ID,
`category_id` bigint(20) NOT NULL COMMENT 分类ID,
`attr_name` varchar(50) NOT NULL COMMENT 属性名称,
`attr_type` tinyint(4) NOT NULL COMMENT 属性类型(1-文本,2-数字,3-日期,4-选项),
`is_required` tinyint(1) DEFAULT 0 COMMENT 是否必填,
`options` varchar(500) DEFAULT NULL COMMENT 选项值(JSON格式),
`sort_order` int(11) DEFAULT 0 COMMENT 排序字段,
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=分类属性表;
```
三、核心功能实现
1. 分类树形结构管理
```java
// Java实现示例 - 获取分类树
public List
getCategoryTree(Long parentId) {
List categories = categoryMapper.selectByParentId(parentId);
List treeNodes = new ArrayList<>();
for (ProductCategory category : categories) {
CategoryTreeDTO node = new CategoryTreeDTO();
BeanUtils.copyProperties(category, node);
// 递归获取子分类
List children = getCategoryTree(category.getId());
if (!children.isEmpty()) {
node.setChildren(children);
}
treeNodes.add(node);
}
return treeNodes;
}
```
2. 分类属性管理
```javascript
// 前端Vue组件示例 - 分类属性配置
编辑
删除
添加属性
<script>
export default {
data() {
return {
attributes: [],
attrTypeOptions: [
{ value: 1, label: 文本 },
{ value: 2, label: 数字 },
{ value: 3, label: 日期 },
{ value: 4, label: 选项 }
]
}
},
methods: {
formatAttrType(row) {
const option = this.attrTypeOptions.find(item => item.value === row.attrType);
return option ? option.label : ;
},
// 其他方法...
}
}
```
3. 分类搜索优化
```java
// 使用Elasticsearch实现分类快速搜索
public List searchCategories(String keyword) {
// 构建搜索请求
SearchRequest searchRequest = new SearchRequest("category_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 多字段匹配查询
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword, "name", "name.pinyin", "name.fuzzy");
sourceBuilder.query(queryBuilder);
// 添加高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("name");
sourceBuilder.highlighter(highlightBuilder);
searchRequest.source(sourceBuilder);
// 执行搜索
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
// 处理结果
List categories = new ArrayList<>();
for (SearchHit hit : response.getHits().getHits()) {
Map sourceAsMap = hit.getSourceAsMap();
ProductCategory category = new ProductCategory();
category.setId(Long.parseLong(sourceAsMap.get("id").toString()));
category.setName((String) sourceAsMap.get("name"));
// 设置其他字段...
categories.add(category);
}
return categories;
}
```
四、系统架构设计
1. 技术栈选择
- 后端:Spring Boot + MyBatis/JPA + Redis
- 前端:Vue.js + Element UI
- 数据库:MySQL (主库) + Elasticsearch (搜索)
- 缓存:Redis (分类缓存)
- 消息队列:RabbitMQ (分类变更通知)
2. 微服务拆分建议
```
商品中心服务
├── 商品分类服务
├── 商品属性服务
├── 商品SKU服务
└── 商品搜索服务
```
五、性能优化方案
1. 分类缓存策略:
- 使用Redis缓存分类树结构,设置合理的过期时间
- 实现缓存预热机制,在系统启动时加载分类数据
- 采用多级缓存策略(本地缓存+分布式缓存)
2. 数据库优化:
- 为分类表添加适当的索引(parent_id, level等)
- 对分类树查询使用嵌套集模型或闭包表优化
- 考虑使用读写分离架构
3. 前端优化:
- 实现分类的懒加载,避免一次性加载过多数据
- 使用虚拟滚动技术处理大量分类数据
- 实现分类的本地存储,减少重复请求
六、安全考虑
1. 实现基于RBAC的分类权限控制
2. 对分类操作进行日志记录
3. 实现分类数据的定期备份
4. 对分类名称等字段进行XSS过滤
七、扩展功能建议
1. 智能分类推荐:基于商品销售数据自动推荐分类
2. 分类季节性管理:标记季节性分类,便于运营
3. 分类关联分析:分析分类间的关联购买关系
4. 多语言支持:为国际化业务准备
以上方案可根据美菜生鲜的实际业务需求和技术栈进行调整和优化。