小象买菜系统商品更新记录功能实现方案

分类:IT频道 时间:2026-01-22 09:30 浏览:9
概述
    功能概述  商品更新记录功能用于跟踪小象买菜系统中商品信息的变更历史,包括价格调整、库存变化、商品上下架等操作,便于运营管理和问题追溯。    数据库设计    商品更新记录表(product_update_log)  ```sql  CREATETABLEproduct_update_lo
内容
  
   功能概述
  商品更新记录功能用于跟踪小象买菜系统中商品信息的变更历史,包括价格调整、库存变化、商品上下架等操作,便于运营管理和问题追溯。
  
   数据库设计
  
   商品更新记录表(product_update_log)
  ```sql
  CREATE TABLE product_update_log (
   id BIGINT PRIMARY KEY AUTO_INCREMENT,
   product_id BIGINT NOT NULL COMMENT 商品ID,
   update_type VARCHAR(20) NOT NULL COMMENT 更新类型:price/stock/status/info,
   old_value TEXT COMMENT 旧值(JSON格式),
   new_value TEXT COMMENT 新值(JSON格式),
   update_by BIGINT COMMENT 操作人ID,
   update_by_name VARCHAR(50) COMMENT 操作人姓名,
   update_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 更新时间,
   remark VARCHAR(255) COMMENT 更新备注,
   INDEX idx_product_id (product_id),
   INDEX idx_update_time (update_time)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=商品更新记录表;
  ```
  
   后端实现
  
   1. 记录更新服务
  ```java
  @Service
  public class ProductUpdateLogService {
  
   @Autowired
   private ProductUpdateLogMapper logMapper;
  
   /
   * 记录商品更新
   * @param productId 商品ID
   * @param updateType 更新类型
   * @param oldValue 旧值
   * @param newValue 新值
   * @param operator 操作人信息
   * @param remark 备注
   */
   public void recordUpdate(Long productId, String updateType,
   Object oldValue, Object newValue,
   UserInfo operator, String remark) {
  
   ProductUpdateLog log = new ProductUpdateLog();
   log.setProductId(productId);
   log.setUpdateType(updateType);
   log.setOldValue(JSON.toJSONString(oldValue));
   log.setNewValue(JSON.toJSONString(newValue));
   log.setUpdateBy(operator.getUserId());
   log.setUpdateByName(operator.getUsername());
   log.setRemark(remark);
  
   logMapper.insert(log);
   }
  
   /
   * 查询商品更新记录
   * @param productId 商品ID
   * @param startTime 开始时间
   * @param endTime 结束时间
   * @param pageNum 页码
   * @param pageSize 每页大小
   * @return 分页结果
   */
   public PageInfo queryUpdateLogs(Long productId,
   Date startTime,
   Date endTime,
   int pageNum,
   int pageSize) {
   PageHelper.startPage(pageNum, pageSize);
   List logs = logMapper.selectByConditions(productId, startTime, endTime);
   return new PageInfo<>(logs);
   }
  }
  ```
  
   2. 商品服务中集成更新记录
  ```java
  @Service
  public class ProductService {
  
   @Autowired
   private ProductUpdateLogService logService;
  
   @Autowired
   private ProductMapper productMapper;
  
   /
   * 更新商品价格
   */
   public boolean updatePrice(Long productId, BigDecimal newPrice, UserInfo operator) {
   Product product = productMapper.selectById(productId);
   BigDecimal oldPrice = product.getPrice();
  
   // 更新商品价格
   product.setPrice(newPrice);
   int affectedRows = productMapper.updateById(product);
  
   if (affectedRows > 0) {
   // 记录更新日志
   Map oldValue = new HashMap<>();
   oldValue.put("price", oldPrice);
  
   Map newValue = new HashMap<>();
   newValue.put("price", newPrice);
  
   logService.recordUpdate(productId, "price", oldValue, newValue,
   operator, "调整商品价格");
   return true;
   }
   return false;
   }
  
   // 其他更新方法类似...
  }
  ```
  
   前端实现
  
   1. 更新记录列表页面
  ```vue
  
  
  <script>
  export default {
   data() {
   return {
   dateRange: [],
   logList: [],
   pagination: {
   currentPage: 1,
   pageSize: 10,
   total: 0
   },
   detailDialogVisible: false,
   oldValue: ,
   newValue: ,
   currentLog: null
   }
   },
   methods: {
   searchLogs() {
   const params = {
   productId: this.$route.params.productId,
   startTime: this.dateRange ? this.dateRange[0] : null,
   endTime: this.dateRange ? this.dateRange[1] : null,
   pageNum: this.pagination.currentPage,
   pageSize: this.pagination.pageSize
   };
  
   this.$api.product.getUpdateLogs(params).then(res => {
   this.logList = res.data.list;
   this.pagination.total = res.data.total;
   });
   },
  
   handleCurrentChange(page) {
   this.pagination.currentPage = page;
   this.searchLogs();
   },
  
   showDetail(log) {
   this.currentLog = log;
   this.oldValue = JSON.stringify(JSON.parse(log.oldValue), null, 2);
   this.newValue = JSON.stringify(JSON.parse(log.newValue), null, 2);
   this.detailDialogVisible = true;
   },
  
   formatDate(dateStr) {
   // 日期格式化逻辑
   },
  
   formatUpdateType(type) {
   const map = {
   price: 价格变更,
   stock: 库存变更,
   status: 上下架状态变更,
   info: 商品信息变更
   };
   return map[type] || type;
   }
   },
   mounted() {
   this.searchLogs();
   }
  }
  
  ```
  
   关键点说明
  
  1. 更新类型定义:
   - price: 价格变更
   - stock: 库存变更
   - status: 上下架状态变更
   - info: 商品基本信息变更(标题、描述等)
  
  2. 数据存储:
   - 使用JSON格式存储变更前后的值,便于扩展和解析
   - 记录操作人信息和操作时间,便于追溯
  
  3. 性能考虑:
   - 对商品ID和更新时间建立索引,提高查询效率
   - 分页查询大量记录
  
  4. 扩展性:
   - 可以轻松添加新的更新类型
   - 支持按时间范围和商品ID筛选记录
  
  5. 安全考虑:
   - 记录操作人信息,防止未授权修改
   - 重要变更(如价格调整)需要权限验证
  
   部署建议
  
  1. 对于高频更新的商品,考虑使用异步方式记录日志,避免阻塞主业务
  2. 定期归档历史记录,保持数据库性能
  3. 对于重要变更,可以添加邮件或短信通知功能
  
  此实现方案可以完整记录小象买菜系统中商品的所有关键变更,为运营管理和问题排查提供有力支持。
评论
  • 下一篇

  • Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes) in /www/wwwroot/www.sjwxsc.com/config/function.php on line 274