功能概述 商品更新记录功能用于跟踪和记录小象买菜系统中所有商品的变更历史,包括价格调整、库存变化、商品上下架等操作,便于系统管理和数据分析。 数据库设计 商品更新记录表(product_update_log) ```sql CREATETABLE`product_u
功能概述
商品更新记录功能用于跟踪和记录小象买菜系统中所有商品的变更历史,包括价格调整、库存变化、商品上下架等操作,便于系统管理和数据分析。
数据库设计
商品更新记录表(product_update_log)
```sql
CREATE TABLE `product_update_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,
`product_id` bigint(20) NOT NULL COMMENT 商品ID,
`update_type` tinyint(4) NOT NULL COMMENT 更新类型:1-价格变更 2-库存变更 3-上下架状态变更 4-商品信息变更,
`old_value` varchar(255) DEFAULT NULL COMMENT 旧值,
`new_value` varchar(255) DEFAULT NULL COMMENT 新值,
`update_field` varchar(50) DEFAULT NULL COMMENT 更新字段名,
`operator_id` bigint(20) DEFAULT NULL COMMENT 操作人ID,
`operator_name` varchar(50) DEFAULT NULL COMMENT 操作人姓名,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 更新时间,
`remark` varchar(500) DEFAULT NULL COMMENT 备注,
PRIMARY KEY (`id`),
KEY `idx_product_id` (`product_id`),
KEY `idx_update_time` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=商品更新记录表;
```
后端实现
1. 创建更新记录实体类
```java
@Data
public class ProductUpdateLog {
private Long id;
private Long productId;
private Integer updateType;
private String oldValue;
private String newValue;
private String updateField;
private Long operatorId;
private String operatorName;
private Date updateTime;
private String remark;
}
```
2. 创建Mapper接口
```java
@Mapper
public interface ProductUpdateLogMapper {
int insert(ProductUpdateLog log);
List
selectByProductId(@Param("productId") Long productId);
List selectByTimeRange(@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
}
```
3. 创建Service层
```java
@Service
public class ProductUpdateLogService {
@Autowired
private ProductUpdateLogMapper productUpdateLogMapper;
/
* 记录商品更新
*/
public void recordUpdate(Long productId, Integer updateType,
String updateField, String oldValue, String newValue,
Long operatorId, String operatorName, String remark) {
ProductUpdateLog log = new ProductUpdateLog();
log.setProductId(productId);
log.setUpdateType(updateType);
log.setUpdateField(updateField);
log.setOldValue(oldValue);
log.setNewValue(newValue);
log.setOperatorId(operatorId);
log.setOperatorName(operatorName);
log.setRemark(remark);
productUpdateLogMapper.insert(log);
}
/
* 查询商品更新记录
*/
public List getProductUpdateLogs(Long productId) {
return productUpdateLogMapper.selectByProductId(productId);
}
/
* 查询时间范围内的更新记录
*/
public List getUpdateLogsByTimeRange(Date startTime, Date endTime) {
return productUpdateLogMapper.selectByTimeRange(startTime, endTime);
}
}
```
4. 在商品相关操作中添加日志记录
在商品价格更新、库存变更等操作中添加日志记录逻辑:
```java
@Service
public class ProductService {
@Autowired
private ProductUpdateLogService productUpdateLogService;
// 更新商品价格示例
public boolean updateProductPrice(Long productId, BigDecimal newPrice,
Long operatorId, String operatorName) {
// 获取商品当前信息
Product product = productMapper.selectById(productId);
BigDecimal oldPrice = product.getPrice();
// 更新价格逻辑...
// 记录价格变更日志
productUpdateLogService.recordUpdate(
productId,
1, // 1表示价格变更
"price",
oldPrice.toString(),
newPrice.toString(),
operatorId,
operatorName,
"修改商品价格"
);
return true;
}
// 其他商品操作类似...
}
```
前端实现
1. 商品详情页添加更新记录标签页
```vue
<script>
export default {
data() {
return {
activeTab: info,
updateLogs: [],
productId: null // 从路由或其他地方获取
}
},
created() {
this.fetchUpdateLogs();
},
methods: {
fetchUpdateLogs() {
// 调用API获取更新记录
this.$api.product.getUpdateLogs(this.productId).then(response => {
this.updateLogs = response.data.map(log => {
// 转换更新类型为描述
const typeMap = {
1: 价格变更,
2: 库存变更,
3: 上下架状态变更,
4: 商品信息变更
};
return {
...log,
updateTypeDesc: typeMap[log.updateType] || 未知类型
};
});
});
}
}
}
```
2. 更新记录查询页面
可以创建一个专门的更新记录查询页面,支持按商品、时间范围等条件筛选。
扩展功能
1. 批量导出:支持将更新记录导出为Excel或CSV格式
2. 变更对比:在商品详情页提供变更对比功能,直观展示修改前后的差异
3. 操作审计:记录操作IP、设备信息等,增强审计能力
4. 变更通知:当重要商品信息变更时,自动通知相关人员
5. 数据可视化:对价格、库存等关键指标的变更进行可视化展示
注意事项
1. 确保日志记录操作是原子性的,避免因主操作失败而记录了无效日志
2. 对于高频更新的字段(如库存),考虑批量记录或异步记录以提高性能
3. 定期归档或清理过期的日志记录,避免数据库过大
4. 对敏感操作(如价格大幅调整)增加额外的审批流程和记录
通过实现商品更新记录功能,小象买菜系统可以更好地追踪商品变更历史,提高运营透明度,便于问题排查和数据分析。