一、系统设计目标
1. 实现商品全生命周期管理记录
2. 支持商品信息变更的可追溯性
3. 提供多维度的商品迭代分析
4. 确保数据准确性和操作可审计性
二、核心功能模块
1. 商品信息管理模块
- 商品基础信息:名称、条码、规格、品类、品牌等
- 价格信息:原价、促销价、会员价、历史价格
- 库存信息:实时库存、预警阈值、库存变动记录
- 供应商信息:供应商名称、联系方式、合作历史
2. 迭代记录管理模块
- 变更类型:新增商品、信息修改、价格调整、上下架等
- 变更内容:详细记录变更前后的值对比
- 变更时间:精确到秒的操作时间戳
- 操作人:记录执行变更的操作员ID和姓名
- 变更原因:支持填写变更说明或关联工单号
3. 版本控制模块
- 版本快照:每次重大变更生成商品完整版本
- 版本对比:支持不同版本间的差异对比
- 回滚机制:支持恢复到指定历史版本
4. 审批流程模块
- 变更申请:提交商品变更申请单
- 审批流程:配置多级审批规则
- 审批记录:完整记录审批过程和意见
三、技术实现方案
1. 数据库设计
```sql
CREATE TABLE product (
product_id VARCHAR(32) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
barcode VARCHAR(20),
category_id VARCHAR(32),
brand_id VARCHAR(32),
status TINYINT DEFAULT 1 COMMENT 1-上架 0-下架,
create_time DATETIME,
update_time DATETIME
);
CREATE TABLE product_version (
version_id VARCHAR(32) PRIMARY KEY,
product_id VARCHAR(32) NOT NULL,
version_no VARCHAR(20) NOT NULL,
version_content TEXT,
operator_id VARCHAR(32),
operator_name VARCHAR(50),
operate_time DATETIME,
change_reason TEXT,
status TINYINT COMMENT 0-草稿 1-已发布 2-已回滚,
FOREIGN KEY (product_id) REFERENCES product(product_id)
);
CREATE TABLE product_version_detail (
detail_id VARCHAR(32) PRIMARY KEY,
version_id VARCHAR(32),
field_name VARCHAR(50),
old_value TEXT,
new_value TEXT,
change_type VARCHAR(20),
FOREIGN KEY (version_id) REFERENCES product_version(version_id)
);
```
2. 关键实现代码示例
```java
// 商品变更记录服务
@Service
public class ProductChangeService {
@Autowired
private ProductVersionRepository versionRepository;
@Autowired
private ProductVersionDetailRepository detailRepository;
@Transactional
public void recordProductChange(Product product, Product oldProduct,
String operatorId, String reason) {
// 创建版本记录
ProductVersion version = new ProductVersion();
version.setProductId(product.getId());
version.setVersionNo(generateVersionNo());
version.setOperatorId(operatorId);
version.setOperateTime(new Date());
version.setChangeReason(reason);
version.setStatus(VersionStatus.PUBLISHED);
versionRepository.save(version);
// 记录变更详情
List
details = compareFields(oldProduct, product);
for (ProductVersionDetail detail : details) {
detail.setVersionId(version.getId());
detailRepository.save(detail);
}
}
private List compareFields(Product oldProduct, Product newProduct) {
List details = new ArrayList<>();
// 比较名称
if (!Objects.equals(oldProduct.getName(), newProduct.getName())) {
details.add(buildDetail("name", oldProduct.getName(), newProduct.getName()));
}
// 比较价格
if (!Objects.equals(oldProduct.getPrice(), newProduct.getPrice())) {
details.add(buildDetail("price",
oldProduct.getPrice() != null ? oldProduct.getPrice().toString() : null,
newProduct.getPrice() != null ? newProduct.getPrice().toString() : null));
}
// 其他字段比较...
return details;
}
}
```
3. 前端展示实现
```javascript
// 商品详情页展示变更历史
function renderChangeHistory(productId) {
fetch(`/api/products/${productId}/versions`)
.then(response => response.json())
.then(versions => {
const historyContainer = document.getElementById(change-history);
historyContainer.innerHTML = versions.map(version => `
版本 ${version.versionNo}
变更时间: ${formatDate(version.operateTime)}
操作人: ${version.operatorName}
变更原因: ${version.changeReason}
`).join();
});
}
function showVersionDetails(versionId) {
fetch(`/api/versions/${versionId}/details`)
.then(response => response.json())
.then(details => {
// 显示模态框展示详细变更
const modalContent = details.map(detail => `
${detail.fieldName}:
${detail.oldValue || 空}
→
${detail.newValue || 空}
`).join();
// 渲染模态框
showModal(版本变更详情, modalContent);
});
}
```
四、高级功能实现
1. 变更影响分析
```java
// 分析价格变更对销售的影响
public ImpactAnalysis analyzePriceChangeImpact(String productId, Date startDate, Date endDate) {
// 获取价格变更记录
List changes = getPriceChanges(productId, startDate, endDate);
// 获取对应时间段的销售数据
Map salesBefore = getSalesBeforeChanges(changes);
Map salesAfter = getSalesAfterChanges(changes);
// 计算影响指标
ImpactAnalysis analysis = new ImpactAnalysis();
for (PriceChangeRecord change : changes) {
SalesData before = salesBefore.get(change.getChangeDate());
SalesData after = salesAfter.get(change.getChangeDate());
// 计算销量变化、销售额变化等
analysis.addChangeImpact(change, before, after);
}
return analysis;
}
```
2. 自动化变更检测
```python
商品信息变更检测脚本
def detect_product_changes():
获取当前所有商品快照
current_products = get_current_products()
从数据库获取上一次的快照
last_snapshot = get_last_snapshot()
changes = []
for product in current_products:
last_version = last_snapshot.get(product.id)
if last_version:
比较各字段变化
field_changes = compare_product_fields(last_version, product)
if field_changes:
changes.append({
product_id: product.id,
changes: field_changes,
timestamp: datetime.now()
})
保存变更记录
if changes:
save_change_records(changes)
send_notification(changes) 发送变更通知
```
五、系统优化建议
1. 性能优化:
- 对频繁查询的变更记录表建立适当索引
- 实现分页查询历史记录
- 对大数据量的版本对比采用增量对比策略
2. 安全考虑:
- 实现细粒度的权限控制,不同角色查看不同粒度的变更记录
- 变更记录不可篡改,采用区块链技术或数字签名确保完整性
3. 用户体验:
- 提供变更记录的图形化时间轴展示
- 支持按字段、时间范围、操作人等多维度筛选
- 实现变更记录的导出功能
4. 扩展性:
- 设计可扩展的变更记录结构,方便新增字段类型
- 支持与审计系统对接,满足合规要求
六、实施路线图
1. 第一阶段:实现基础商品变更记录功能(1个月)
- 商品信息变更捕捉
- 基础版本管理
- 简单历史查询
2. 第二阶段:增强变更分析和可视化(2个月)
- 变更影响分析
- 图形化展示
- 多维度筛选
3. 第三阶段:高级功能实现(1个月)
- 自动化变更检测
- 审批流程集成
- 回滚机制
4. 第四阶段:性能优化和安全加固(持续)
- 查询性能优化
- 安全审计对接
- 灾备方案
通过以上方案,叮咚买菜系统可以实现完善的商品迭代记录管理,为商品运营提供有力的数据支持和决策依据。