# TTSHOP 销售看板 TTSHOP 从公开的 Google Sheets 工作簿读取销售数据,生成合并后的原始数据页面,并提供 Commission 与 GMV 趋势看板。 - **项目仓库**: - **销售看板**: - **原始数据**: ## 数据同步 数据源是公开的 Google Sheets 工作簿。`sync.py` 默认使用以下工作簿 ID: ```text 1DPbdVsX3SG_kgDXs2j34mDAgplRSfcAWKKG9yqalFmw ``` 运行时可通过 `WORKBOOK_ID` 环境变量覆盖默认值,例如: ```sh WORKBOOK_ID=your-workbook-id ./update.sh ``` 未设置 `WORKBOOK_ID` 时,脚本继续使用上述默认值。`sync.py` 的处理流程如下: 1. 读取 XLSX 导出文件,获取工作表顺序。 2. 使用 Google Visualization API(gviz)读取各工作表中的显示值。 3. 合并所有工作表,并生成 UTF-8 的 `data/merged.html`,供数据读取和 `IMPORTHTML` 使用。 ### 字段与合并规则 - 每张工作表的第一行作为标题行。 - 输出列按各工作表标题的首次出现顺序取并集。 - 源数据中的 `LinkName` 会重命名为 `LinkName_Source`、`LinkName_Source_2` 等,并保留原值。 - 合并结果末尾增加生成的 `LinkName` 列。 - 看板对仅包含 `Date`、且 `Commission` 与 `GMV` 均为空的日期行进行过滤;该过滤由 `index.html` 完成。 ### 同步运行日志 `data/sync-log.json` 保存最后一次成功同步的摘要,字段包括: - `last_success_at`:UTC ISO-8601 时间,使用 `Z` 表示 UTC。 - `last_success_at_shanghai`:`Asia/Shanghai` 时区的 ISO 时间。 - `worksheet_count`:本次读取的工作表数量。 - `record_count`:合并结果中的数据记录数量,不含标题行。 - `artifact_bytes`:本次生成的 `data/merged.html` 字节数。 只有 Google Sheets 读取、合并和 HTML 生成全部成功后才会生成并发布新的运行日志。同步失败或 Git 推送失败不会用失败时间覆盖已发布的最后成功时间。AgentStage 每次成功运行都会提交 `data/merged.html` 或 `data/sync-log.json` 中发生变化的文件;即使数据内容没有变化,运行日志的成功时间也会变化,因此仍可通过 Git 提交和日志确认运行记录。 ## 看板功能 看板页面采用上下布局,包含以下内容: - **总体趋势**:Commission 柱状图与 GMV 折线图。 - **LinkName Commission 趋势**:按日期和 LinkName 堆积的 Commission 柱状图。 - **LinkName GMV 趋势**:按日期和 LinkName 堆积的 GMV 柱状图。 - **币种切换**:支持 IDR 与 USD;检测到多个源币种时统一换算为 USD。 - **日期范围筛选**:支持当月、最近 30 天和全部日期;默认选择数据最新月份。 - **KPI**:显示 Total Commission 和 Total GMV,并提供记录数、LinkName 数等概览信息。 - **原始数据入口**:可从看板打开 `data/merged.html`。 ### 汇率 需要换算时,看板请求公开汇率接口: 页面注明该公开接口通常每日更新,不承诺分钟级实时,并提供汇率来源说明:。 ## 自动运行 AgentStage 自动执行仓库根目录的 `update.sh`,不使用 Gitea Actions workflow。 `schedule.conf` 为单独一行 `3`,表示每 3 小时自动运行一次。`update.sh` 会执行 `sync.py`。 当前没有独立持久化的更新日志;AgentStage 任务日志以及脚本的 stdout/stderr 是运行日志。同步失败时脚本返回非零退出状态。只有在 AgentStage 运行环境中配置并注入 `SYNC_FAILURE_WEBHOOK_URL` 时,脚本才会发送一次失败 Webhook;未配置时不会发送主动通知。Webhook URL 必须由 AgentStage 运行环境注入,不会因为仓库中的模板文件而自动生效。 ## 本地手动运行 在仓库根目录执行: ```sh python3 -m pip install -r requirements.txt ./update.sh ``` Git 推送凭据由环境变量或 AgentStage 运行环境提供。凭据不得写入 remote URL、脚本、提交文件或日志。 ## 安全提醒 - 不要提交 token、密码或 `credentials` 文件。 - 不要把敏感凭据写入 Git URL、代码、数据文件或日志。 - 本地密钥和临时文件应通过 `.gitignore` 等规则排除在提交之外。 - `update.sh` 失败时会返回非零状态,调用方应据此判断同步失败。