一、系统概述
美团买菜商品迭代记录系统旨在跟踪商品从上架到下架的全生命周期变化,记录商品信息修改历史,支持版本回滚和变更审计,为运营和产品团队提供决策支持。
二、核心功能模块
1. 商品变更记录模块
- 变更类型分类:
- 基础信息变更(名称、描述、分类等)
- 价格体系变更(售价、会员价、促销价)
- 库存相关变更(总库存、区域库存)
- 图片/视频等多媒体变更
- 上下架状态变更
- 变更记录结构:
```json
{
"record_id": "唯一标识",
"sku_id": "商品SKU",
"change_type": "变更类型",
"operator": "操作人",
"operation_time": "操作时间",
"before_value": "变更前值",
"after_value": "变更后值",
"change_reason": "变更原因",
"version": "版本号"
}
```
2. 版本管理模块
- 版本快照:完整保存每个版本的商品信息
- 版本对比:支持任意两个版本间的差异对比
- 版本回滚:支持一键回滚到指定版本
3. 审计追踪模块
- 操作日志记录
- 变更审批流程(可选)
- 变更影响分析
三、技术实现方案
1. 数据库设计
```sql
CREATE TABLE product_change_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
sku_id VARCHAR(32) NOT NULL,
change_type VARCHAR(32) NOT NULL COMMENT 变更类型,
operator_id VARCHAR(32) NOT NULL COMMENT 操作人ID,
operator_name VARCHAR(64) COMMENT 操作人姓名,
operation_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
before_value TEXT COMMENT 变更前值(JSON),
after_value TEXT COMMENT 变更后值(JSON),
change_reason VARCHAR(512) COMMENT 变更原因,
version INT NOT NULL COMMENT 版本号,
INDEX idx_sku_id (sku_id),
INDEX idx_operation_time (operation_time)
);
CREATE TABLE product_version_snapshot (
version_id BIGINT PRIMARY KEY AUTO_INCREMENT,
sku_id VARCHAR(32) NOT NULL,
version INT NOT NULL,
snapshot_data TEXT NOT NULL COMMENT 完整快照(JSON),
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_sku_version (sku_id, version)
);
```
2. 变更捕获机制
方案一:应用层拦截(推荐)
```java
// 使用AOP拦截商品服务方法
@Aspect
@Component
public class ProductChangeAspect {
@Autowired
private ChangeLogService changeLogService;
@AfterReturning(
pointcut = "execution(* com.meituan.buyer.service.ProductService.update*(..))",
returning = "result"
)
public void afterUpdate(JoinPoint joinPoint, Object result) {
// 获取方法参数和修改前数据
Object[] args = joinPoint.getArgs();
// 构造变更记录
ChangeLog log = buildChangeLog(joinPoint, args);
changeLogService.save(log);
}
private ChangeLog buildChangeLog(JoinPoint joinPoint, Object[] args) {
// 实现细节:比较修改前后的差异
// ...
}
}
```
方案二:数据库触发器(不推荐,耦合度高)
3. 版本管理实现
```java
public class VersionManager {
@Autowired
private ProductVersionRepository versionRepository;
@Transactional
public void createVersionSnapshot(String skuId) {
// 获取当前商品完整信息
Product product = productService.getProduct(skuId);
// 保存版本快照
ProductVersion version = new ProductVersion();
version.setSkuId(skuId);
version.setVersion(getNextVersion(skuId));
version.setSnapshotData(JSON.toJSONString(product));
versionRepository.save(version);
}
public Product getVersionSnapshot(String skuId, int version) {
// 从版本库获取指定版本
// ...
}
}
```
四、前端展示方案
1. 变更历史列表
- 按时间倒序展示所有变更
- 支持按变更类型、时间范围筛选
- 每条记录显示:变更时间、操作人、变更类型、简要变更内容
2. 版本对比视图
- 并排显示两个版本的差异
- 高亮显示变更字段
- 支持文本差异对比和多媒体变更预览
3. 版本回滚界面
- 选择目标版本
- 预览回滚后的商品信息
- 确认回滚操作
五、高级功能实现
1. 变更影响分析
```java
public class ChangeImpactAnalyzer {
public List analyzeImpact(ChangeLog log) {
List impacts = new ArrayList<>();
// 分析价格变更对促销活动的影响
if ("PRICE".equals(log.getChangeType())) {
impacts.add("可能影响以下促销活动: " +
promotionService.getAffectedPromotions(log.getSkuId()));
}
// 分析分类变更对搜索和推荐的影响
if ("CATEGORY".equals(log.getChangeType())) {
impacts.add("将影响商品在以下分类下的展示: " +
log.getAfterValue());
}
return impacts;
}
}
```
2. 自动化变更检测
- 使用机器学习模型识别异常变更模式
- 设置变更阈值警报(如价格突然大幅变动)
六、部署与运维
1. 数据归档策略:
- 保留最近6个月的详细变更记录
- 历史数据归档至冷存储
2. 性能优化:
- 对商品ID和操作时间建立复合索引
- 热门商品的变更记录缓存
3. 监控告警:
- 监控变更记录写入延迟
- 异常变更频率告警
七、扩展功能建议
1. 变更订阅服务:
- 允许其他系统订阅商品变更事件
- 实现基于事件的架构
2. 变更预测分析:
- 分析历史变更模式预测未来变更趋势
- 为采购和库存管理提供数据支持
3. 多端同步:
- 确保小程序、App、PC端商品信息变更同步
该系统实现后,美团买菜团队可以获得完整的商品变更审计能力,提高运营效率,降低人为错误风险,并为数据分析提供丰富的历史数据支持。