一、系统设计目标 1.实现商品信息的全生命周期管理 2.记录商品从上线到下架的完整变更历史 3.支持商品信息的版本回滚和差异对比 4.为运营决策提供数据支持 二、核心功能模块 1.商品基础信息管理 -商品ID、名称、分类、品牌等基础属性 -商品图片、视频等多媒体资
一、系统设计目标
1. 实现商品信息的全生命周期管理
2. 记录商品从上线到下架的完整变更历史
3. 支持商品信息的版本回滚和差异对比
4. 为运营决策提供数据支持
二、核心功能模块
1. 商品基础信息管理
- 商品ID、名称、分类、品牌等基础属性
- 商品图片、视频等多媒体资源管理
- 商品规格、单位、条码等属性
2. 商品迭代记录系统
- 版本控制:每次商品变更自动生成新版本
- 变更类型:新增、修改、删除、上下架等操作类型
- 变更字段:记录具体修改的字段及新旧值
- 变更人:记录操作人员及时间
3. 迭代记录查询
- 按商品ID查询完整迭代历史
- 按时间范围筛选变更记录
- 按变更类型筛选记录
- 版本差异对比功能
三、数据库设计
商品主表(product_main)
```sql
CREATE TABLE product_main (
id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category_id BIGINT NOT NULL,
brand_id BIGINT,
status TINYINT COMMENT 1-上架 2-下架 3-待审核,
create_time DATETIME,
update_time DATETIME,
current_version INT DEFAULT 1
);
```
商品属性表(product_attribute)
```sql
CREATE TABLE product_attribute (
id BIGINT PRIMARY KEY,
product_id BIGINT NOT NULL,
attr_key VARCHAR(50) NOT NULL COMMENT 如price,stock等,
attr_value VARCHAR(255) NOT NULL,
version INT NOT NULL,
update_time DATETIME NOT NULL
);
```
商品迭代记录表(product_version_history)
```sql
CREATE TABLE product_version_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
product_id BIGINT NOT NULL,
version INT NOT NULL,
operator VARCHAR(50) NOT NULL,
operation_type TINYINT NOT NULL COMMENT 1-新增 2-修改 3-删除 4-上下架,
change_details TEXT COMMENT JSON格式记录变更详情,
create_time DATETIME NOT NULL,
remark VARCHAR(255)
);
```
四、实现方案
1. 前端实现
- 商品编辑页面集成迭代记录查看器
- 变更时弹出确认对话框,要求填写变更原因
- 版本对比视图,高亮显示变更字段
2. 后端实现
```java
// 商品服务核心接口示例
public interface ProductService {
// 保存商品(自动生成版本)
ProductVersionResponse saveProduct(ProductSaveRequest request, String operator);
// 获取商品当前版本
ProductDetailResponse getProductCurrentVersion(Long productId);
// 获取商品迭代历史
List
getProductVersionHistory(Long productId,
LocalDateTime start, LocalDateTime end);
// 比较两个版本差异
ProductDiffResponse compareVersions(Long productId, Integer version1, Integer version2);
// 回滚到指定版本
boolean rollbackToVersion(Long productId, Integer version, String operator);
}
```
3. 版本控制逻辑
```java
// 保存商品时的版本控制示例
public ProductVersionResponse saveProduct(ProductSaveRequest request, String operator) {
// 1. 获取当前最大版本号
Integer currentVersion = productRepository.findMaxVersionByProductId(request.getProductId());
Integer newVersion = (currentVersion == null) ? 1 : currentVersion + 1;
// 2. 保存商品主信息
ProductMain productMain = new ProductMain();
// ...设置属性
productMain.setCurrentVersion(newVersion);
productRepository.save(productMain);
// 3. 保存属性变更(先删除旧属性,插入新属性)
productAttributeRepository.deleteByProductIdAndVersionLessThan(
request.getProductId(), newVersion);
for (ProductAttribute attr : request.getAttributes()) {
attr.setVersion(newVersion);
productAttributeRepository.save(attr);
}
// 4. 记录迭代历史
ProductVersionHistory history = new ProductVersionHistory();
history.setProductId(request.getProductId());
history.setVersion(newVersion);
history.setOperator(operator);
history.setOperationType(request.isNew() ? 1 : 2); // 1-新增 2-修改
history.setChangeDetails(buildChangeDetails(request)); // 构建变更详情JSON
historyRepository.save(history);
return new ProductVersionResponse(productMain.getId(), newVersion);
}
```
五、高级功能实现
1. 自动变更检测
```java
// 商品变更检测服务
public class ProductChangeDetector {
public Map detectChanges(ProductDetail oldProduct, ProductDetail newProduct) {
Map changes = new HashMap<>();
// 基础属性比较
if (!Objects.equals(oldProduct.getName(), newProduct.getName())) {
changes.put("name", Map.of(
"old", oldProduct.getName(),
"new", newProduct.getName()
));
}
// 价格比较
if (!Objects.equals(oldProduct.getPrice(), newProduct.getPrice())) {
changes.put("price", Map.of(
"old", oldProduct.getPrice(),
"new", newProduct.getPrice()
));
}
// 库存比较逻辑...
return changes;
}
}
```
2. 版本回滚实现
```java
public boolean rollbackToVersion(Long productId, Integer targetVersion, String operator) {
// 1. 验证目标版本是否存在
ProductMain currentProduct = productRepository.findById(productId)
.orElseThrow(() -> new RuntimeException("商品不存在"));
if (currentProduct.getCurrentVersion() <= targetVersion) {
throw new RuntimeException("目标版本不小于当前版本");
}
// 2. 获取目标版本属性
List targetAttributes = productAttributeRepository
.findByProductIdAndVersion(productId, targetVersion);
// 3. 创建新版本(当前版本+1)
Integer newVersion = currentProduct.getCurrentVersion() + 1;
// 4. 保存属性(使用目标版本属性)
productAttributeRepository.deleteByProductIdAndVersionLessThan(
productId, newVersion);
for (ProductAttribute attr : targetAttributes) {
ProductAttribute newAttr = new ProductAttribute();
// 复制属性并设置新版本
BeanUtils.copyProperties(attr, newAttr);
newAttr.setVersion(newVersion);
productAttributeRepository.save(newAttr);
}
// 5. 更新商品主表版本
currentProduct.setCurrentVersion(newVersion);
productRepository.save(currentProduct);
// 6. 记录回滚操作
ProductVersionHistory history = new ProductVersionHistory();
history.setProductId(productId);
history.setVersion(newVersion);
history.setOperator(operator);
history.setOperationType(5); // 5-回滚
history.setChangeDetails(String.format("回滚到版本%d", targetVersion));
historyRepository.save(history);
return true;
}
```
六、部署与监控
1. 数据备份策略:
- 每日全量备份迭代记录表
- 实时备份关键变更操作
2. 监控指标:
- 商品变更频率
- 回滚操作次数
- 变更操作响应时间
3. 告警机制:
- 异常变更检测(如短时间内大量修改)
- 回滚失败告警
七、扩展功能建议
1. 变更审批流程:对关键商品属性变更增加审批环节
2. AB测试支持:记录不同版本商品的销售表现对比
3. 智能推荐:基于历史变更数据推荐优化方案
4. 多端同步:确保Web、App、小程序等终端商品信息一致
通过以上实现方案,美团买菜系统可以构建完善的商品迭代记录体系,提升商品管理效率,降低运营风险,并为数据分析提供有力支持。