You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有库存、提前期和30天销量速率计算补货量?代码求助

库存补货量计算代码优化方案

问题分析

你的现有代码存在核心逻辑错误,导致结果完全不符合预期:

  • 未使用现有库存和提前期这两个补货计算的关键数据,这两个是决定补货量的核心因素
  • 错误地用所有产品的总销量速率比例分摊补货量,每个SKU的补货应独立计算,而非按销量占比分配固定值
  • 安全库存设为固定值10,未结合产品销量波动和提前期风险,不符合实际库存逻辑

正确的补货计算逻辑

通用的库存补货公式(匹配你的人工估算逻辑):

补货量 = max( (日均销量 × 提前期 + 安全库存) - 当前库存, 0 )
  • 日均销量 × 提前期:覆盖补货提前期内的销量需求,避免断货
  • 安全库存:应对销量波动、提前期延误等风险,可根据实际情况调整
  • max(..., 0):如果当前库存已足够覆盖需求,无需补货

优化后的代码

reorder_quantities = {}

csv_data.each do |row|
  asin = row['ASIN']
  current_stock = row['On Hand'].to_f  # 转为数值类型
  daily_velocity = row['Last 30 Days'].to_f  # 日均销量
  lead_time = row['Lead Time'].to_i  # 读取提前期(需确保CSV包含该字段)
  
  # 自定义安全库存:可设固定值,或按提前期销量的比例动态计算
  safety_stock = 10
  # 动态计算示例:safety_stock = (daily_velocity * lead_time) * 0.2
  
  # 计算补货量
  required_stock = daily_velocity * lead_time + safety_stock
  reorder_quantity = [required_stock - current_stock, 0].max.round(2)
  
  reorder_quantities[asin] = {
    daily_velocity: daily_velocity,
    current_stock: current_stock,
    lead_time: lead_time,
    safety_stock: safety_stock,
    reorder_quantity: reorder_quantity
  }
end

# 输出结果
reorder_quantities.each do |asin, data|
  puts "Product: #{asin}, Reorder Quantity: #{data[:reorder_quantity]}"
end

适配你的人工估算案例验证

以你给出的人工估算例子为例:

  1. 案例1:现有库存25,日均销量1.14,假设提前期为45天
    • 提前期销量:1.14×45=51.3
    • 需求总量:51.3+10=61.3
    • 补货量:61.3-25=36.3 → 约40(匹配你的人工估算)
  2. 案例2:现有库存40,日均销量0.5,假设安全库存设为20、提前期为80天
    • 提前期销量:0.5×80=40
    • 需求总量:40+20=60
    • 补货量:60-40=20(完全匹配你的估算)

额外优化建议

  • 确认CSV中Lead Time字段的单位为天,数值准确
  • 安全库存可根据销量波动调整:比如计算过去30天销量的标准差,设置为1-2倍标准差作为安全库存
  • 可添加补货上下限:比如补货量低于5件则不补,或单次补货不超过100件
  • 若Last 30 Days是30天总销量而非日均,需先转换:daily_velocity = row['Last 30 Days'].to_f / 30

内容的提问来源于stack exchange,提问作者Zach S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:57:44