一、系统目标
实现叮咚买菜平台商品信息的版本控制和迭代记录功能,支持:
1. 商品信息的全生命周期管理
2. 商品变更历史追溯
3. 商品版本对比与回滚
4. 商品变更审批流程
二、核心功能设计
1. 商品版本管理模块
```python
class ProductVersion:
def __init__(self, product_id, version, changes, operator, timestamp):
self.product_id = product_id 商品ID
self.version = version 版本号(v1.0, v1.1...)
self.changes = changes 变更内容(JSON格式)
self.operator = operator 操作人
self.timestamp = timestamp 操作时间
self.status = active 状态(active/archived)
def to_dict(self):
return {
product_id: self.product_id,
version: self.version,
changes: self.changes,
operator: self.operator,
timestamp: self.timestamp,
status: self.status
}
```
2. 变更记录存储结构
```
商品变更记录表(product_version_history)
- id: 主键
- product_id: 商品ID
- version: 版本号
- change_type: 变更类型(新增/修改/删除/上下架)
- change_fields: 变更字段(JSON)
- operator: 操作人
- operate_time: 操作时间
- before_snapshot: 变更前快照(JSON)
- after_snapshot: 变更后快照(JSON)
- approval_status: 审批状态
- remark: 备注
```
三、关键实现技术
1. 版本控制策略
- 语义化版本控制:主版本号.次版本号.修订号(v1.2.3)
- 自动版本递增:
- 重大变更:主版本号+1
- 功能新增:次版本号+1
- 缺陷修复:修订号+1
2. 变更捕获机制
```java
// 伪代码示例
public class ProductChangeInterceptor {
public void beforeUpdate(Product oldProduct, Product newProduct) {
// 计算变更字段
Map changes = calculateDifferences(oldProduct, newProduct);
// 创建版本记录
ProductVersion version = new ProductVersion(
newProduct.getId(),
generateNextVersion(oldProduct.getVersion()),
changes,
getCurrentUser(),
new Date()
);
// 保存版本记录
versionRepository.save(version);
}
private Map calculateDifferences(Product old, Product new) {
// 实现对象差异比较逻辑
}
}
```
3. 变更审批流程
```mermaid
graph TD
A[提交变更] --> B{是否重大变更?}
B -- 是 --> C[部门负责人审批]
B -- 否 --> D[自动通过]
C -->|通过| E[执行变更]
C -->|拒绝| F[返回修改]
D --> E
E --> G[生成新版本]
```
四、数据库设计
商品主表(product)
```sql
CREATE TABLE product (
id VARCHAR(32) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category_id VARCHAR(32),
price DECIMAL(10,2),
stock INT,
status ENUM(online, offline, deleted) DEFAULT online,
current_version VARCHAR(20),
created_at TIMESTAMP,
updated_at TIMESTAMP
);
```
商品版本历史表
```sql
CREATE TABLE product_version_history (
id VARCHAR(32) PRIMARY KEY,
product_id VARCHAR(32) NOT NULL,
version VARCHAR(20) NOT NULL,
change_type ENUM(create, update, delete, status_change),
changed_fields JSON,
before_snapshot JSON,
after_snapshot JSON,
operator VARCHAR(50),
operator_id VARCHAR(32),
operate_time DATETIME,
approval_status ENUM(pending, approved, rejected),
approval_comment TEXT,
INDEX idx_product_version (product_id, version)
);
```
五、API设计
1. 商品变更记录查询
```
GET /api/products/{productId}/versions
响应示例:
{
"productId": "p12345",
"versions": [
{
"version": "v1.2",
"changeTime": "2023-05-15T10:30:00",
"operator": "张三",
"changeType": "price_update",
"changes": {
"price": {"old": 29.9, "new": 32.5},
"stock": {"old": 100, "new": 85}
}
}
]
}
```
2. 商品版本对比
```
GET /api/products/{productId}/versions/compare?v1=v1.0&v2=v1.2
响应示例:
{
"differences": [
{
"field": "price",
"v1_value": 25.9,
"v2_value": 32.5
},
{
"field": "description",
"v1_value": "新鲜蔬菜",
"v2_value": "有机新鲜蔬菜"
}
]
}
```
六、实现技术栈建议
1. 后端框架:Spring Boot (Java) / Django (Python) / Express (Node.js)
2. 数据库:MySQL (关系型) + MongoDB (变更历史文档存储)
3. 缓存:Redis (版本列表缓存)
4. 搜索:Elasticsearch (商品变更历史搜索)
5. 消息队列:Kafka/RabbitMQ (异步处理变更通知)
6. 前端:React/Vue + Ant Design/Element UI
七、部署与运维考虑
1. 数据归档策略:
- 保留最近10个版本在线可查
- 历史版本归档至冷存储(如S3/OSS)
2. 性能优化:
- 对频繁查询的版本字段建立索引
- 实现分页查询版本历史
- 对大商品数据采用差异存储而非全量快照
3. 安全控制:
- 版本变更操作审计日志
- 敏感字段变更二次审批
- 版本回滚权限严格控制
八、扩展功能
1. 变更影响分析:分析商品变更对订单、库存的影响
2. 自动化测试:版本变更后自动触发兼容性测试
3. A/B测试支持:并行维护多个商品版本进行测试
4. 多环境管理:支持开发、测试、生产环境版本隔离
该实现方案可帮助叮咚买菜系统建立完善的商品迭代管理体系,提升商品信息管理的可追溯性和可控性,同时为数据分析提供历史版本对比能力。