门店销售数据同步#

读取本地门店销售 CSV,批量写入 MySQL 并归档已处理文件的同步工具。中台数据库只能通过 JumpServer 访问且有导出量限制,本地库同时承担数据备份,供 Python / Power Query 调用。

功能#

  • 扫描 门店销售/待同步/ 下全部 .csv,自动添加 录入时间 列
  • 批量写入 Tianlala.ads_dbs_trade_shop_pay_channel_di(每批 500 行,追加写入)
  • 表不存在时自动建表;CSV 出现新列时自动补齐
  • 写入成功后移动到 门店销售/已同步/ 归档;失败文件保留在待同步目录,可重复重跑

运行方式#

pip install pymysql pandas
# 1. CSV 放入 门店销售/待同步/
# 2. 确认 config.py 数据库配置
python main.py

中台数据导出#

JumpServer 有导出量限制,逐月查询、导出后放入 门店销售/待同步/:

SELECT *
FROM ads_dbs_trade_shop_pay_channel_di
WHERE pt LIKE '202604%'

月度校验#

分别在中台与本地按月查询,比较各月流水是否一致:

SELECT
    SUBSTR(pt, 1, 6) AS month_pt,
    SUM(amount) AS total_amount
FROM ads_dbs_trade_shop_pay_channel_di
WHERE pt >= '20250101'
GROUP BY SUBSTR(pt, 1, 6)
ORDER BY month_pt;

2023–2024 历史数据#

历史数据取自中台旧表 ads_dbs_trade_shop_di,注意过滤全零记录:

SELECT
    business_date AS pt,
    stat_shop_id AS shop_id,
    channel_name AS payment_channels,
    order_count AS order_cnt,
    total_amount AS amount,
    pay_amount AS income,
    discount_amount AS discount
FROM ads_dbs_trade_shop_di
WHERE business_date BETWEEN 20230101 AND 20241231
  AND NOT (order_count = 0 AND total_amount = 0 AND pay_amount = 0 AND discount_amount = 0);

注意事项#

注意

中台会刷新前一个月的数据,同步前先删除上个月数据再重新同步;一年前的历史数据也会偶尔轻微变动,与本地保存值可能相差几块钱。

目标表结构参见数据字典 ads_dbs_trade_shop_pay_channel_di。