影刀RPA 库存预警自动化安全库存监控与自动补货作者林焱 | 适用人群影刀RPA新手 | 难度★★☆☆☆一、什么情况用这个做电商或实体零售的兄弟库存管理是个永恒的头疼事——畅销品快卖完了没人知道滞销品堆了一仓库。手动每天盘点几千个SKU眼睛看瞎。用影刀RPA定时读取ERP/进销存系统中的库存数据 → 对比安全库存阈值 → 低于阈值自动生成补货单 → 推送给采购。库存管理从「人盯」变成「机器盯」。实际场景电商仓库库存监控、门店补货提醒、原材料安全库存预警、效期商品临期处理。这篇文章能解决的问题自动从ERP系统读取库存数据安全库存阈值配置 自动对比生成补货建议单效期商品临期预警二、怎么做2.1 阈值配置表拼多多店群自动化报活动上架在Excel中建一张「安全库存配置表」SKU商品名称安全库存最低库存最高库存补货批量供应商SKU001蓝牙耳机200100500300供应商ASKU002手机壳5002001000500供应商B2.2 影刀主流程┌──────────────────────────────────────────────┐ │ ① 【读取Excel】 │ │ 读取库存配置表 安全阈值 │ │ ↓ │ │ ② 【打开网页/执行Python代码】 │ │ 从ERP/进销存系统读取当前库存 │ │ ↓ │ │ ③ 【执行Python代码】 │ │ 对比库存与阈值生成告警列表 │ │ ↓ │ │ ④ 【条件判断】 │ │ 有低于阈值的 → 生成补货单 │ │ ↓ │ │ ⑤ 【写入Excel 发送通知】 │ │ 输出补货建议单 推送采购通知 │ └──────────────────────────────────────────────┘2.3 核心代码importjsonfromdatetimeimportdatetime,timedelta# 安全库存配置从Excel读取thresholdsinventory_config# 影刀变量注入# 实际库存从ERP网页采集或API获取current_stockcurrent_stock_data todaydatetime.now().date()alerts[]# 库存告警replenish_suggestions[]# 补货建议expiry_alerts[]# 效期预警foritemincurrent_stock:skuitem.get(sku,)current_qtyint(item.get(stock_qty,0))# 找到对应的配置configNonefortinthresholds:ift.get(SKU)sku:configtbreakifnotconfig:continuesafe_qtyint(config.get(安全库存,0))min_qtyint(config.get(最低库存,0))max_qtyint(config.get(最高库存,0))batch_sizeint(config.get(补货批量,100))# 低于安全库存 → 预警ifcurrent_qtysafe_qty:need_qtysafe_qty-current_qty# 按补货批量向上取整batches(need_qtybatch_size-1)//batch_size order_qtybatches*batch_sizeifcurrent_qtymin_qty:level紧急else:level提醒alerts.append({sku:sku,name:config.get(商品名称,sku),current_qty:current_qty,safe_qty:safe_qty,min_qty:min_qty,gap:need_qty,suggest_order_qty:order_qty,supplier:config.get(供应商,),level:level,})# 滞销预警库存超过最高库存的150%ifcurrent_qtymax_qty*1.5:alerts.append({sku:sku,name:config.get(商品名称,sku),current_qty:current_qty,max_qty:max_qty,type:滞销,level:提醒,suggestion:f建议促销清理库存超出{current_qty-max_qty}件,})# 效期检查假设每个SKU有expiry_date字段foritemincurrent_stock:expiry_date_stritem.get(expiry_date,)ifnotexpiry_date_str:continuetry:expiry_datedatetime.strptime(expiry_date_str,%Y-%m-%d).date()days_left(expiry_date-today).daysifdays_left30:expiry_alerts.append({sku:item[sku],name:item.get(name,),batch:item.get(batch_no,),expiry_date:expiry_date_str,days_left:days_left,qty:item.get(stock_qty,0),level:紧急ifdays_left7else警告,})exceptValueError:pass# 汇总result{report_time:today.strftime(%Y-%m-%d %H:%M),stock_alerts:alerts,expiry_alerts:expiry_alerts,total_alerts:len(alerts)len(expiry_alerts),}outputjson.dumps(result,ensure_asciiFalse)2.4 生成补货建议单在影刀中写入Excel【新建Excel文件】→ D:\库存\补货建议单_{日期}.xlsx 【写入表头】 SKU | 商品名称 | 当前库存 | 安全库存 | 缺口 | 建议补货量 | 供应商 | 紧急程度 【遍历列表】→ alerts中的每条记录 【写入行】→ 对应字段 【设置条件格式】 紧急程度紧急 → 红色背景 紧急程度提醒 → 黄色背景2.5 通知推送【条件判断】 条件total_alerts 0 → 是 【发送企业微信消息】 库存预警日报 紧急缺货{紧急数量}项 {遍历level紧急的记录} 库存不足{提醒数量}项 {遍历level提醒的记录} 效期预警{效期预警数量}项 {遍历expiry_alerts} 详细补货单已生成D:\库存\补货建议单_{日期}.xlsx → 否 结束三、有什么坑坑1ERP系统数据延迟ERP系统的库存数据不是实时的——可能延迟几分钟到几小时。你影刀读到的「当前库存」和实际库存有偏差。解决在告警阈值上加缓冲。比如安全库存设为200实际库存低于180才告警给延迟留空间。或者在补货建议里加一句「请以ERP实时库存为准」。坑2多仓库SKU合并如果同一个SKU分布在多个仓库需要先合并再对比阈值。fromcollectionsimportdefaultdict# 按SKU合并多仓库库存merged_stockdefaultdict(lambda:{stock_qty:0,name:,total_qty:0})foritemincurrent_stock:skuitem[sku]merged_stock[sku][stock_qty]int(item.get(stock_qty,0))merged_stock[sku][name]item.get(name,)merged_stock[sku][total_qty]item.get(stock_qty,0)# 用合并后的数据与阈值对比坑3补货建议频率如果库存一直在阈值附近波动可能每天生成相同的补货建议。采购会烦的。TEMU店群矩阵自动化运营核价报活动去重逻辑记录最近一次补货单的生成时间同一SKU在补货后N天内不再建议补货。# 检查上次补货时间last_replenish_dateget_last_replenish_date(sku)iflast_replenish_dateand(today-last_replenish_date).days7:# 7天内已经建议过补货跳过continue坑4效期商品的批次管理同一SKU可能有多个批次不同批次效期不同。台账需要按批次记录SKU | 批次号 | 库存量 | 生产日期 | 到期日期一个SKU在台账中可能有多行按批次分别管理。坑5节假日/促销期间的阈值调整618、双11期间销售速度暴增正常的安全库存根本不够。建议在配置表中加「节假日倍数」字段节假日期间自动调高安全库存阈值。# 判断是否在促销期从配置表读取促销日期is_promotioncheck_if_promotion_period(today)multiplier2.0ifis_promotionelse1.0adjusted_safe_qtysafe_qty*multiplierifcurrent_qtyadjusted_safe_qty:# 告警总结库存预警的核心是「阈值对比」。安全库存、最低库存、最高库存三个阈值分别对应不同级别的告警。记得给ERP数据延迟留缓冲、多仓库要合并统计、重复补货建议要去重。