影刀RPA实操指南:电商店群数据对账与库存监控自动化系统
店群运营到10个店铺以上,最痛苦的事不是运营,而是对账——拼多多结算单和银行流水对不上、淘宝支付宝账单差几块钱、TEMU的美元结算汇率每次都不一样。月底手工对账能把人逼疯,一笔一笔核对,稍有疏忽就是几百块的差额。
自动化对账系统是店群RPA的天花板场景——数据源多、逻辑复杂、容错率要求极高。

这套系统我迭代了三个版本。第一版只对总额,发现差1分钱都要人工查;第二版做了逐笔匹配,但TEMU汇率波动导致大量误报;第三版加入了容差机制和汇率自适应,跑了大半年零误报。下面把完整实现拆开讲。
系统架构总览
对账系统涉及的数据源最多、格式最杂,需要先理清架构:
数据采集层(影刀RPA自动执行)
├── 拼多多结算单 → 导出Excel(商家后台→资金中心→结算记录)
├── 淘宝支付宝账单 → 导出CSV(支付宝商家中心→交易记录)
├── TEMU结算报表 → 导出CSV(TEMU→Finance→Settlement Report)
└── 银行流水 → 下载PDF/CSV(网银自动下载)
数据清洗层(Python Pandas)
├── 格式标准化 → 统一日期/金额/订单号格式
├── 汇率换算 → TEMU美元→人民币
├── 费用分类 → 广告费/物流费/平台佣金/退款
└── 数据校验 → 检查必填字段和金额合理性

对账引擎层(核心逻辑)
├── 逐笔匹配 → 平台订单 vs 银行流水
├── 差额分析 → 手续费/汇率差/退款/平台扣费
├── 容差处理 → 设定可接受误差阈值
└── 异常标记 → 无法匹配的条目标记为待查
输出层
├── 对账报告Excel → 含差异明细和原因分析
├── 飞书通知 → 异常条目自动推送
└── MySQL归档 → 历史对账数据留存
数据采集层的实现
拼多多结算单导出
拼多多结算单在「资金中心」模块。影刀RPA操作流程:
拼多多店群自动化上架方案
[打开网页] → 拼多多商家后台(独立窗口+用户数据目录)
[等待网页元素出现] → 导航栏「资金中心」(确认登录成功)
[点击网页元素] → 「资金中心」
[等待网页元素出现] → 左侧菜单「结算记录」
[点击网页元素] → 「结算记录」
# 选择日期范围

[点击网页元素] → 日期选择器 → 选择「上月」
# 导出
[点击网页元素] → 「导出报表」按钮
[等待文件下载完成] → 检测下载目录出现新xlsx文件
拼多多结算单的关键字段:
# 结算单字段映射
pdd_settlement_cols = {
'结算日期': 'settlement_date', # 格式: 2026-06-25
'订单编号': 'order_no', # 拼多多订单号(19位)
'商品名称': 'product_name', # 用于核对商品
'成交金额': 'order_amount', # 用户支付金额
'平台佣金': 'platform_fee', # 拼多多抽成
'技术服务费': 'tech_fee', # 技术服务费
'实际结算': 'settlement_amount', # 实际到账金额
'结算状态': 'settlement_status' # 已结算/待结算
}
银行流水自动下载
银行流水下载是自动化对账中最复杂的一环——每家银行的网银系统都不同,而且大部分要求U盾验证。目前有两种可行方案:
方案一:手动导出后影刀RPA自动读取(推荐,安全可控)

方案二:使用银行提供的企业API(需要对接银行开放平台,门槛较高)
实际操作中,方案一是主流:
# 银行流水读取子流程
[打开Excel] → 银行导出的流水文件
[读取Excel区域] → 读取所有行
[循环] 遍历每一行:
├── 提取: 日期、金额、对方户名、摘要
├── 分类:
│ ├── 对方户名含「拼多多」→ 标记为拼多多结算
│ ├── 对方户名含「支付宝」→ 标记为淘宝结算
│ └── 其他 → 标记为其他收支
└── [写入变量] → bank_transactions列表
对账引擎的核心逻辑

这是整个系统的灵魂。对账引擎要处理三种匹配场景:精确匹配、模糊匹配、无法匹配。
# 对账引擎核心逻辑
import pandas as pd
from datetime import datetime, timedelta
# ==================== 1. 数据准备 ====================
# 读取平台结算数据
pdd = pd.read_excel(r"C:\\RPA_Data\\对账\\拼多多结算_202606.xlsx")
tb = pd.read_csv(r"C:\\RPA_Data\\对账\\支付宝账单_202606.csv", encoding='gbk')
temu = pd.read_csv(r"C:\\RPA_Data\\对账\\TEMU_Settlement_202606.csv")
# 读取银行流水
bank = pd.read_excel(r"C:\\RPA_Data\\对账\\银行流水_202606.xlsx")
# ==================== 2. 数据标准化 ====================
# 统一日期格式
pdd['date'] = pd.to_datetime(pdd['结算日期'])
tb['date'] = pd.to_datetime(tb['交易时间'])
temu['date'] = pd.to_datetime(temu['Settlement Date'])
bank['date'] = pd.to_datetime(bank['交易日期'])
# TEMU汇率换算(使用当月平均汇率)
avg_rate = 7.23 # 当月平均汇率
temu['amount_cny'] = round(temu['Settlement Amount'] * avg_rate, 2)
# 统一金额字段
pdd['amount'] = pdd['实际结算']
tb['amount'] = tb['收入金额'] – tb['支出金额'] # 净收入
temu['amount'] = temu['amount_cny']
# ==================== 3. 逐笔匹配 ====================
matched = [] # 已匹配记录
unmatched_bank = [] # 银行流水未匹配
unmatched_platform = [] # 平台数据未匹配
# 容差阈值(元)
AMOUNT_TOLERANCE = 0.05 # 允许5分钱的差额
DATE_TOLERANCE = 2 # 允许±2天的日期偏差
for _, tx in bank.iterrows():
found = False
# 第一轮:精确匹配(金额完全相等+日期一致)
for platform_data in [pdd, tb, temu]:
match = platform_data[
(platform_data['amount'] == tx['交易金额']) &
(abs((platform_data['date'] – tx['date']).days) <= 0)
]
if len(match) > 0:
matched.append({
'银行日期': tx['date'],
'银行金额': tx['交易金额'],
'平台': match.iloc[0].get('平台', ''),
'平台金额': match.iloc[0]['amount'],
'匹配方式': '精确匹配',
'差额': 0
})
found = True
break
if not found:
# 第二轮:模糊匹配(金额差≤容差 + 日期差≤2天)
for platform_data in [pdd, tb, temu]:
match = platform_data[
(abs(platform_data['amount'] – tx['交易金额']) <= AMOUNT_TOLERANCE) &
(abs((platform_data['date'] – tx['date']).days) <= DATE_TOLERANCE)
]
if len(match) > 0:
diff = round(tx['交易金额'] – match.iloc[0]['amount'], 2)
matched.append({
'银行日期': tx['date'],
'银行金额': tx['交易金额'],
'平台': match.iloc[0].get('平台', ''),
'平台金额': match.iloc[0]['amount'],
'匹配方式': f'模糊匹配(日期差{abs((match.iloc[0]["date"]–tx["date"]).days)}天)',
'差额': diff
})
found = True
break
if not found:
unmatched_bank.append(tx)
print(f"未匹配银行流水: {tx['date']} | {tx['交易金额']} | {tx['对方户名']}")
print(f"\\n对账完成!")
print(f"精确匹配: {sum(1 for m in matched if m['匹配方式']=='精确匹配')} 笔")
print(f"模糊匹配: {sum(1 for m in matched if '模糊' in m['匹配方式'])} 笔")
print(f"银行未匹配: {len(unmatched_bank)} 笔")
print(f"平台未匹配: {len(unmatched_platform)} 笔")
差额分析与自动分类
匹配后计算出差额,自动分析原因:

# 差额原因自动分析
def analyze_difference(diff, platform_type, tx_desc):
"""根据差额大小和交易类型分析原因"""
if abs(diff) < 0.01:
return "无差异"
# 拼多多常见差额原因
if platform_type == '拼多多':
if diff > 0 and diff < 0.5:
return "可能原因: 花呗分期手续费" # 花呗分期费用通常几毛钱
elif abs(diff – round(tx_amount * 0.006, 2)) < 0.01:
return "可能原因: 信用卡支付手续费(0.6%)"
# TEMU常见差额原因
if platform_type == 'TEMU':
if abs(diff) < abs(tx_amount * 0.02):
return "可能原因: 汇率波动(使用当月均价,与实际结算汇率有偏差)"
# 通用差额原因
if abs(diff) < 0.10:
return "可能原因: 银行手续费/四舍五入差异"
elif diff < 0:
return "可能原因: 平台扣费(广告费/技术服务费扣除、退款等)"
else:
return "可能原因: 回款(跨月结算/多笔合并打款)"
库存监控自动化
对账之外,库存监控是店群管理的另一个刚需。商品断货了才去补货,中间几天的销量直接没了。
库存预警逻辑

# 库存预警计算
import pandas as pd
# 读取各店铺库存数据
inventory = pd.read_excel(r"C:\\RPA_Data\\库存汇总.xlsx")
# 计算近7天日均销量
daily_avg = inventory['近7天销量'] / 7
# 预估可售天数
inventory['可售天数'] = (inventory['当前库存'] / daily_avg).round(1)
# 库存预警分类
def classify_stock(days, is_hot_product):
if days <= 3:
return "🔴 紧急补货"
elif days <= 7:
return "🟡 需要补货"
elif days <= 14 and is_hot_product:
[video(video–CuDijZhF–1785259125460)(type–csdn)(url–https://live.csdn.net/v/embed/524993)(image–https://v–blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title–TEMU店群如何管理运营?)]
return "🟠 热销品建议备货"
else:
return "🟢 库存充足"
inventory['预警状态'] = inventory.apply(
lambda row: classify_stock(row['可售天数'], row['是否热销']),
axis=1
)
# 筛选出需要补货的商品
need_replenish = inventory[inventory['可售天数'] <= 7]
print(f"需要补货的商品共 {len(need_replenish)} 个:")
print(need_replenish[['店铺','商品名称','当前库存','可售天数','预警状态']])
# 输出到飞书推送
flow.set_variable("replenish_list", need_replenish.to_json(force_ascii=False))
库存数据采集
影刀RPA每天定时采集各平台库存数据:
[子流程] 库存数据采集
├── [循环] 遍历所有店铺
│ ├── [打开网页] → 店铺后台商品管理页
│ ├── [等待网页元素出现] → 商品列表加载完成
│ ├── [翻页循环] → 逐页采集
│ │ ├── [获取网页元素文本] → 商品名称/SKU/库存

│ │ └── [写入临时变量]
│ ├── [数据处理] → 合并本店铺所有商品数据
│ └── [关闭网页]
└── [Python脚本] → 写入MySQL库存表 + 飞书Base库存看板
完整的日度对账流程编排
把采集、对账、库存整合为一个日度自动化流程:
[定时触发] 每天凌晨2:00(避开平台结算时段)
阶段一:数据采集(并行3个线程)
├── 线程1: 拼多多结算+库存 → 预计15分钟
├── 线程2: 淘宝结算+库存 → 预计12分钟
└── 线程3: TEMU结算+库存 → 预计18分钟
阶段二:数据清洗+对账(串行)
├── [Python脚本] → 标准化所有平台数据
├── [Python脚本] → 执行对账引擎
├── [Python脚本] → 差额分析与分类
└── [Python脚本] → 库存预警计算
阶段三:输出+推送
├── [写入Excel] → 生成对账报告.xlsx
├── [写入飞书Base] → 对账结果+库存预警
├── [飞书消息推送] → 异常条目+补货清单
└── [写入MySQL] → 归档对账数据
常见问题/易错速查
| 对账结果总有几分钱差异 | 银行四舍五入与平台计算方式不同 | 设容差阈值0.05元,≤容差不视为异常 |
| TEMU汇率波动导致大额差额 | 结算汇率每天都在变 | 改用每日实际汇率(调用汇率API),而非月均价 |
| 多笔小订单合并为一笔打款 | 银行/支付平台合并结算 | 增加「多笔订单→单笔流水」的反向匹配逻辑 |
![]() |
| 库存数据采集不全 | 单个页面的商品数被限制 | 确认翻页逻辑正确,检查是否有分页参数漏页 | | 对账报告文件越来越大 | 未清理历史数据 | 设定保留周期(如90天),超期数据归档到MySQL |
推荐资源
- 影刀RPA「子流程」和「变量作用域」的官方文档——复杂流程拆分的基础
- Pandas merge 和 concat 文档——对账匹配的核心算法都靠这两个函数
- 飞书Base仪表盘的「公式」和「查找引用」字段——库存看板的数据源配置
#影刀RPA #RPA自动化 #店群运营 #数据对账 #库存监控 #综合实战 #电商数据 #飞书

作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
网硕互联帮助中心




评论前必须登录!
注册