{ "schema_version": 3, "workflows": [ { "id": "content.metrics.daily", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_collaborators", "name": "采集合作达人指标", "description": "按每日范围并行抓取合作达人在 B站、小红书蒲公英和星图的曝光等指标,星图未命中的任务再用抖店达人广场补采;05:00 仅补 01:00 未完成的任务。", "data_flow": { "sources": [ { "system": "飞书", "label": "合作达人及内容清单" }, { "system": "内容平台", "label": "B站、小红书蒲公英与星图/抖店补采指标" } ], "processing": [ "按业务日期拆分平台采集任务", "并行抓取合作内容曝光与互动指标" ], "destinations": [ { "system": "本地采集产物", "label": "合作达人多平台指标结果" } ] }, "entry": "run_all.py", "args": [ "--daily-scope" ], "replay_policy": "repeatable" }, { "id": "refresh_self_mapping", "name": "刷新自营款式映射", "description": "从飞书索引刷新自营账号、款式与多维表映射,供后续自营采集准确定位目标记录;账号暂时失效时仅暂停自营采集,不移除工作流步骤。", "data_flow": { "sources": [ { "system": "飞书", "label": "自营内容索引、账号与款式配置" } ], "processing": [ "刷新自营账号、款式和多维表对应关系" ], "destinations": [ { "system": "本地映射", "label": "自营账号、款式与目标表索引" } ] }, "entry": "data/tools/refresh_self_mapping.py", "depends_on": [ "collect_collaborators" ], "run_after_failure": true, "replay_policy": "repeatable" }, { "id": "collect_self_bilibili", "name": "采集自营 B站指标", "description": "读取自营映射中的 B站笔记链接,通过公开 API 获取播放量和发布时间并回填对应飞书表。", "data_flow": { "sources": [ { "system": "本地映射", "label": "自营 B站笔记链接" }, { "system": "B站公开 API", "label": "播放量与发布时间" } ], "processing": [ "按映射定位自营笔记并读取公开指标" ], "destinations": [ { "system": "飞书", "label": "自营 B站内容指标表" }, { "system": "本地采集产物", "label": "B站自营指标结果" } ] }, "entry": "self_bilibili_scraper.py", "depends_on": [ "refresh_self_mapping" ], "run_after_failure": true, "replay_policy": "repeatable" }, { "id": "collect_self_douyin", "name": "采集自营抖音指标", "description": "使用蝉妈妈新账号登录态导出自营抖音视频数据,解析曝光指标并回填飞书自营表。", "data_flow": { "sources": [ { "system": "本地映射", "label": "自营抖音账号与款式" }, { "system": "蝉妈妈", "label": "已登录的抖音视频导出数据" } ], "processing": [ "导出自营视频数据并解析曝光指标" ], "destinations": [ { "system": "飞书", "label": "自营抖音内容指标表" }, { "system": "本地采集产物", "label": "抖音自营指标结果" } ] }, "entry": "chanmama_scraper.py", "depends_on": [ "collect_self_bilibili" ], "run_after_failure": true, "replay_policy": "repeatable" }, { "id": "sync", "name": "同步合作与自营曝光指标入库", "description": "汇总本轮合作达人及自营曝光结果,按记录映射更新或补建 PostgreSQL 内容笔记数据。", "data_flow": { "sources": [ { "system": "本轮采集产物", "label": "合作达人及自营内容指标" }, { "system": "本地映射", "label": "内容记录对应关系" } ], "processing": [ "合并各平台指标并匹配内容记录", "更新已有记录或补建缺失记录" ], "destinations": [ { "system": "PostgreSQL", "label": "内容笔记与曝光指标" } ] }, "entry": "data/tools/sync_metrics_to_cmt_notes.py", "depends_on": [ "collect_self_douyin" ], "replay_policy": "repeatable", "run_after_failure": true } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_DailyRun" }, "note": "每日 01:00 执行合作达人及自营 B站、蝉妈妈采集,05:00 按 01:00 产生的未完成清单补采;账号切换期间仅暂停自营采集步骤,不移除自营链;两次均完成后同步曝光指标入库。" }, { "id": "content.metrics.backfill", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_collaborators", "name": "补采合作达人指标", "description": "按每日范围并行补采合作达人在 B站、小红书蒲公英和星图的曝光等指标,星图未命中的任务再用抖店达人广场补采。", "data_flow": { "sources": [ { "system": "飞书", "label": "合作达人及内容清单" }, { "system": "内容平台", "label": "B站、小红书蒲公英与星图/抖店补采指标" } ], "processing": [ "按每日范围补采合作达人多平台指标" ], "destinations": [ { "system": "本地采集产物", "label": "合作达人多平台补采结果" } ] }, "entry": "run_all.py", "args": [ "--daily-scope" ] }, { "id": "sync", "name": "同步补采曝光指标入库", "description": "将合作达人补采产物同步到 PostgreSQL 内容笔记表;即使采集步骤失败也执行同步,保留来源批处理的收敛语义。", "data_flow": { "sources": [ { "system": "本轮采集产物", "label": "合作达人补采指标" }, { "system": "本地映射", "label": "内容记录对应关系" } ], "processing": [ "匹配合作达人内容记录并同步曝光指标" ], "destinations": [ { "system": "PostgreSQL", "label": "内容笔记与曝光指标" } ] }, "entry": "data/tools/sync_metrics_to_cmt_notes.py", "depends_on": [ "collect_collaborators" ], "run_after_failure": true } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_MondayBackfill" }, "note": "严格保留来源周一补采语义:只运行合作达人 run_all.py --daily-scope,随后无论采集是否失败都执行 PostgreSQL 同步;不包含自营映射和自营平台采集。" }, { "id": "content.marketing_report.daily", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "generate_and_send", "name": "生成并发送营销日报", "description": "聚合各款式内容与评论分析,生成一页全域种草日报并发送给飞书负责人。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "内容、经营、评论与达人数据", "detail": "款式指标、笔记、评论、合作和画像等" }, { "system": "飞书", "label": "款式、负责人及素材配置" } ], "processing": [ "聚合业务事实与款式表现", "调用 Hermes 生成营销分析", "生成图表和 Markdown 日报" ], "destinations": [ { "system": "本地报告", "label": "Markdown 日报与 PNG 数据看板" }, { "system": "飞书", "label": "负责人日报卡片", "condition": "正式执行且启用 --send" } ] }, "entry": "daily_marketing_report.py", "args": [ "--send" ] } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_DailyMarketingReport" } }, { "id": "content.relogin.weekly", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "relogin", "name": "刷新内容平台登录态", "description": "并行启动五个平台的二维码重新登录流程,按配置轮次重试,持久化登录状态并通知结果。", "data_flow": { "sources": [ { "system": "内容平台", "label": "五个平台登录页与当前会话状态" } ], "processing": [ "并行发起二维码登录并按轮次重试", "校验并持久化新的登录会话" ], "destinations": [ { "system": "浏览器状态", "label": "各平台 Cookie 与 storage state" }, { "system": "飞书", "label": "登录刷新结果通知" } ] }, "entry": "data/tools/friday_relogin_parallel.py", "args": [ "--max-attempts", "3", "--round-timeout", "300", "--screenshot-delay", "60" ] } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_FridayRelogin" } }, { "id": "content.creator_report.monthly", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "generate", "name": "生成达人合作月报", "description": "从 PostgreSQL 读取达人、款式和合作数据,生成完整的报价与合作分析报告。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "达人、款式、合作与内容表现数据" } ], "processing": [ "统计达人报价、合作和内容效果", "生成月度筛选与报价分析" ], "destinations": [ { "system": "本地报告", "label": "达人合作月报 Markdown" }, { "system": "飞书文档", "label": "达人合作分析报告" }, { "system": "PostgreSQL", "label": "月报记录与报告链接" } ] }, "entry": "data/tools/generate_creator_report.py" } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_MonthlyCreatorReport" } }, { "id": "content.summary.monthly", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "summarize", "name": "生成内容月度汇总", "description": "分析上月各款全部笔记并做跨平台横向对比,生成飞书文档、回写生命进程表并入库。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "上月各款内容、互动与评论数据" }, { "system": "飞书", "label": "款式与生命进程配置" } ], "processing": [ "按款式分析全部笔记", "完成跨平台对比与月度总结" ], "destinations": [ { "system": "飞书文档", "label": "内容月度报告" }, { "system": "飞书", "label": "款式生命进程表" }, { "system": "PostgreSQL", "label": "月度汇总结果" } ] }, "entry": "monthly_summary_all.py", "args": [ "--max-workers", "4" ] } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_MonthlySummary" } }, { "id": "content.notes_master.daily", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "sync", "name": "同步笔记清单与合作记录", "description": "遍历各款式合作达人和自营多维表格,一次拉取后幂等写入 PostgreSQL 笔记主表(笔记身份+合作财务同行),同步达人档案,并标记来源已删除记录。", "data_flow": { "sources": [ { "system": "飞书", "label": "各款式合作达人及自营笔记表" } ], "processing": [ "刷新款式与来源表映射", "全量读取笔记身份与合作字段并规范化", "按飞书来源记录幂等同步并标记已删除记录" ], "destinations": [ { "system": "PostgreSQL", "label": "笔记主表 cmt_notes_master 与达人档案" } ] }, "entry": "data/tools/sync_notes_master.py", "args": [ "--execute" ] } ] }, "provenance": { "source_project": "content", "task_name": "GYXX_DailyNotesMasterSync" }, "note": "合并原合作记录同步与完整笔记清单同步:一次飞书拉取同时落笔记身份与合作字段;笔记数量以主表 source_active AND is_countable 的去重链接为准,曝光指标由内容指标采集写回同一行。" }, { "id": "content.comments.weekly", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "bilibili", "name": "重采 B站评论", "description": "从数据库读取 B站视频,重新采集互动指标和评论,替换评论表数据并保存本地产物。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "B站视频清单" }, { "system": "B站", "label": "视频互动指标与评论" } ], "processing": [ "逐条重新采集视频互动和评论" ], "destinations": [ { "system": "PostgreSQL", "label": "B站评论与互动指标" }, { "system": "本地采集产物", "label": "B站评论结果" } ] }, "entry": "data/tools/batch_rescrape_bilibili.py" }, { "id": "xiaohongshu", "name": "重采小红书评论", "description": "从数据库读取小红书笔记,重新采集互动指标和评论,替换评论表数据并保存本地产物。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "小红书笔记清单" }, { "system": "小红书", "label": "笔记互动指标与评论" } ], "processing": [ "逐条重新采集笔记互动和评论" ], "destinations": [ { "system": "PostgreSQL", "label": "小红书评论与互动指标" }, { "system": "本地采集产物", "label": "小红书评论结果" } ] }, "entry": "data/tools/batch_rescrape_xiaohongshu.py" }, { "id": "douyin", "name": "重采抖音评论", "description": "从数据库读取抖音视频,重新采集互动指标和评论,替换评论表数据并保存本地产物。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "抖音视频清单" }, { "system": "抖音", "label": "视频互动指标与评论" } ], "processing": [ "逐条重新采集视频互动和评论" ], "destinations": [ { "system": "PostgreSQL", "label": "抖音评论与互动指标" }, { "system": "本地采集产物", "label": "抖音评论结果" } ] }, "entry": "data/tools/batch_rescrape_douyin.py" } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_WeeklyCommentScrape" }, "note": "保留来源批处理语义:三平台并行启动、全部等待,任一平台失败则工作流最终失败。" }, { "id": "content.summary.weekly", "module": "content_marketing", "trigger": "scheduled", "execution": { "steps": [ { "id": "summarize", "name": "生成内容周度汇总", "description": "分析上周各款新增笔记,调用模型生成综合评级,创建飞书周报并回写生命进程表。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "上周各款新增笔记与互动数据" }, { "system": "飞书", "label": "款式与生命进程配置" } ], "processing": [ "按款式汇总新增内容", "调用模型生成评级与周度分析" ], "destinations": [ { "system": "飞书文档", "label": "内容周报" }, { "system": "飞书", "label": "款式生命进程表" }, { "system": "PostgreSQL", "label": "周度汇总结果" } ] }, "entry": "weekly_summary_all.py", "args": [ "--max-workers", "4" ] } ] }, "provenance": { "source_project": "content", "task_name": "YingxiaoYunying_WeeklySummary" } }, { "id": "shop.metrics.weekly", "module": "shop_intelligence", "trigger": "scheduled", "execution": { "steps": [ { "id": "jd", "name": "采集京东店铺经营指标", "description": "独立采集京东店铺经营数据,生成本次产物并写入 PostgreSQL;不写入飞书 Base。", "data_flow": { "sources": [ { "system": "京东商智", "label": "店铺经营指标" } ], "processing": [ "按业务日期采集并规范化京东店铺数据" ], "destinations": [ { "system": "本地采集产物", "label": "京东店铺指标" }, { "system": "PostgreSQL", "label": "店铺经营指标" } ] }, "entry": "runners/run_shop.py", "args": [ "--platform", "jd", "--skip-feishu" ] }, { "id": "dy", "name": "采集抖音店铺经营指标", "description": "独立采集抖音店铺经营数据,生成本次产物并写入 PostgreSQL;不写入飞书 Base。", "data_flow": { "sources": [ { "system": "抖音电商罗盘", "label": "店铺经营指标" } ], "processing": [ "按业务日期采集并规范化抖音店铺数据" ], "destinations": [ { "system": "本地采集产物", "label": "抖音店铺指标" }, { "system": "PostgreSQL", "label": "店铺经营指标" } ] }, "entry": "runners/run_shop.py", "args": [ "--platform", "dy", "--skip-feishu" ] }, { "id": "tm", "name": "采集天猫店铺经营指标", "description": "独立采集天猫店铺经营数据,生成本次产物并写入 PostgreSQL;按原逻辑不写飞书店铺表。", "data_flow": { "sources": [ { "system": "天猫生意参谋", "label": "店铺经营指标" } ], "processing": [ "按业务日期采集并规范化天猫店铺数据" ], "destinations": [ { "system": "本地采集产物", "label": "天猫店铺指标" }, { "system": "PostgreSQL", "label": "店铺经营指标" } ] }, "entry": "runners/run_shop.py", "args": [ "--platform", "tm" ] } ] }, "provenance": { "source_project": "shop", "task_name": "shop-data-collection" }, "note": "三个平台作为独立 LangGraph 节点并行执行,分别采集并写入 PostgreSQL;店铺经营指标周采集不写飞书 Base,单个平台失败不阻断其他平台。" }, { "id": "shop.competitor.weekly", "module": "shop_intelligence", "trigger": "scheduled", "execution": { "steps": [ { "id": "jd", "name": "采集京东竞店经营指标", "description": "独立采集京东竞店排行,生成本次产物并写入 PostgreSQL;生产模式写入飞书 Base。", "data_flow": { "sources": [ { "system": "京东商智", "label": "竞店排行与经营指标" } ], "processing": [ "采集目标竞店并规范化排行数据" ], "destinations": [ { "system": "本地采集产物", "label": "京东竞店指标" }, { "system": "PostgreSQL", "label": "竞店经营指标" }, { "system": "飞书 Base", "label": "京东竞店周数据", "condition": "正式执行" } ] }, "entry": "runners/run_peer_store.py", "args": [ "--platform", "jd" ] }, { "id": "dy", "name": "采集抖音竞店经营指标", "description": "独立采集抖音竞店排行,生成本次产物并写入 PostgreSQL;生产模式写入飞书 Base。", "data_flow": { "sources": [ { "system": "抖音电商罗盘", "label": "竞店排行与经营指标" } ], "processing": [ "采集目标竞店并规范化排行数据" ], "destinations": [ { "system": "本地采集产物", "label": "抖音竞店指标" }, { "system": "PostgreSQL", "label": "竞店经营指标" }, { "system": "飞书 Base", "label": "抖音竞店周数据", "condition": "正式执行" } ] }, "entry": "runners/run_peer_store.py", "args": [ "--platform", "dy" ] } ] }, "provenance": { "source_project": "shop", "task_name": "peer-store-data-collection" }, "note": "京东和抖音作为独立 LangGraph 节点并行执行,分别入库和收敛错误,单个平台失败不阻断另一个平台;当前无天猫竞店采集任务。" }, { "id": "shop.jd_self_operated.daily", "module": "shop_intelligence", "trigger": "scheduled", "execution": { "steps": [ { "id": "brand", "name": "采集京东自营品牌业绩", "description": "按业务日期采集京东自营品牌维度业绩,保存原始产物并写入 PostgreSQL。", "data_flow": { "sources": [ { "system": "京东自营后台", "label": "品牌维度经营数据" } ], "processing": [ "按业务日期采集并整理品牌业绩" ], "destinations": [ { "system": "本地原始产物", "label": "品牌业绩数据" }, { "system": "PostgreSQL", "label": "京东自营品牌日指标" } ] }, "entry": "collectors/jd_self_operated_brand_daily.py", "args": [ "--start-date", "{business_date}", "--end-date", "{business_date}", "--headless" ], "timeout_seconds": 600 }, { "id": "product", "name": "采集京东自营商品业绩", "description": "按业务日期逐页采集京东自营商品维度业绩,保存原始产物并写入 PostgreSQL。", "data_flow": { "sources": [ { "system": "京东自营后台", "label": "商品维度经营数据" } ], "processing": [ "逐页采集商品明细并整理日业绩" ], "destinations": [ { "system": "本地原始产物", "label": "商品业绩数据" }, { "system": "PostgreSQL", "label": "京东自营商品日指标" } ] }, "entry": "collectors/jd_self_operated_product_daily.py", "args": [ "--start-date", "{business_date}", "--end-date", "{business_date}", "--headless" ], "depends_on": [ "brand" ], "run_after_failure": true, "timeout_seconds": 1800 } ] }, "provenance": { "source_project": "shop", "task_name": "京东自营昨日业绩每日采集" }, "note": "每天采集计划日期前两天;品牌失败仍继续商品,任一步失败则工作流失败。" }, { "id": "shop.douyin_price_appeal", "module": "shop_intelligence", "trigger": "scheduled", "execution": { "steps": [ { "id": "dy", "name": "提交抖音待改价申诉", "description": "复用店铺周采集的抖音商家账号 Cookie 与 Profile,打开活动广场;待改价不为 0 时逐条进入立即改价,兼容“申诉”和“发起申诉”入口,全选 SKU,并以固定原因提交申诉。", "data_flow": { "sources": [ { "system": "抖音电商", "label": "活动广场待改价商品" }, { "system": "浏览器状态", "label": "店铺周采集账号 Cookie 与 Profile" } ], "processing": [ "检查待改价数量并打开待处理列表", "逐条进入立即改价并兼容两种申诉入口", "全选 SKU,选择“对议价价格存疑 / 认为识别有误,该规格没有这么低的价格”并提交" ], "destinations": [ { "system": "抖音电商", "label": "待改价议价申诉", "condition": "正式执行(控制台或定时调度)" } ] }, "entry": "collectors/dy_store_competitor_store_scraping.py", "args": [ "--price-appeal", "--execute" ], "timeout_seconds": 1800, "replay_policy": "idempotent" } ] }, "provenance": { "source_project": "shop", "task_name": "douyin-price-appeal-daily" }, "note": "每天 08:00、16:00、22:00 自动执行;仍可在控制台手动执行。每个时点都会重新扫描,已申诉商品不会再次出现可申诉入口;安全预演不访问抖音也不提交申诉。" }, { "id": "product.persona.daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect", "name": "采集三平台人群画像", "description": "并行运行天猫、抖音和京东人群画像采集器,等待全部完成并写入对应飞书多维表。", "data_flow": { "sources": [ { "system": "天猫、抖音与京东", "label": "商品人群画像后台数据" }, { "system": "本地配置", "label": "款式与目标表映射" } ], "processing": [ "并行采集三平台画像", "统一画像维度并匹配款式" ], "destinations": [ { "system": "飞书多维表", "label": "各平台商品人群画像" } ] }, "entry": "run_daily_persona.py", "args": [ "--date", "{business_date}" ], "replay_policy": "idempotent" } ] }, "provenance": { "source_project": "product", "task_name": "PersonaDailyCollect" } }, { "id": "product.daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_import_analyze_publish", "name": "采集、入库、汇总并发布商品日报", "description": "按业务日期采集 ERP 与三平台数据,将原始商品日报幂等写入 PostgreSQL,完成汇总分析、导出并写入飞书日报记录。", "data_flow": { "sources": [ { "system": "ERP", "label": "商品库存与销售数据" }, { "system": "天猫、京东与抖音", "label": "商品经营指标" } ], "processing": [ "按业务日期采集各数据源", "将三平台原始商品日报幂等写入 PostgreSQL 商品日指标表", "汇总并分析商品经营表现", "导出日报记录" ], "destinations": [ { "system": "本地日报产物", "label": "商品经营汇总与导出文件" }, { "system": "PostgreSQL", "label": "商品日经营指标" }, { "system": "飞书", "label": "商品日报记录" } ] }, "entry": "orchestrate_daily_collection.py", "args": [ "--target-date", "{business_date}", "--stages", "collect,import,analyze,export,insert" ] } ] }, "provenance": { "source_project": "product", "task_name": "ProductCollectorDailyCollect" } }, { "id": "product.alert.daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "detect_and_notify", "name": "检测并通知销量下滑", "description": "检测连续销量下滑,幂等记录告警事件,并通过分析端 Hermes 机器人通知配置对象。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "商品日销量与历史趋势" }, { "system": "告警配置", "label": "检测规则与通知对象" } ], "processing": [ "检测连续销量下滑", "生成确定性告警说明", "幂等判定是否需要通知" ], "destinations": [ { "system": "PostgreSQL", "label": "销量告警事件" }, { "system": "飞书", "label": "配置对象告警通知", "condition": "命中规则且未重复发送" } ] }, "entry": "commands/run_alerts.py" } ] }, "provenance": { "source_project": "product", "task_name": "ProductCollectorSalesAlert" } }, { "id": "product.ecommerce_costs.daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "tmall_download", "name": "下载万相台商品广告报表", "description": "登录天猫万相台商品报表,点击下载报表,按业务日期设置日期范围并点击确定(定时默认昨天,手动可选任意日期);从下载任务管理页下载 ZIP 并安全解压商品级 CSV。", "entry": "collect_tmall_wanxiang_ads.py", "args": [ "--date", "{business_date}", "--headless" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "天猫万相台", "label": "商品报表与下载任务管理", "detail": "商品报表 item_promotion;点击下载报表后按业务日期设置日期范围" } ], "processing": [ "复用已登录 Profile 或用运行时凭据登录", "优先复用同日已有报表任务", "仅在没有同日任务时进入商品报表点击下载报表", "在日期范围选择昨日并点击确定", "轮询生成成功任务", "安全解压并写入原始 CSV 与 manifest" ], "destinations": [ { "system": "本地原始产物", "label": "万相台商品广告 ZIP/CSV", "detail": "raw/product_commerce/tmall_wanxiang_ads//" } ] } }, { "id": "tmall_import", "name": "导入万相台商品广告指标", "description": "解析解压后的商品 CSV,将花费、广告归因成交金额和投产比写入 product_daily_metrics.raw_data.tm_ad_metrics;款式按商品 ID 优先、商品名称精确包含兜底,并记录匹配方式,不覆盖经营日报字段。", "entry": "import_tmall_product_ads.py", "depends_on": [ "tmall_download" ], "args": [ "--date", "{business_date}", "--execute" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "本地原始产物", "label": "万相台商品广告 CSV" } ], "processing": [ "校验 CSV 编码、日期、商品主体和广告指标", "合并同商品同日多计划行", "按平台/日期/商品幂等更新广告 JSON 节点" ], "destinations": [ { "system": "PostgreSQL", "label": "product_daily_metrics.raw_data.tm_ad_metrics", "detail": "由 data-hub 产品生命进程读取并计算广告成交、投产比、电商费比;节点同时保存 style_name/style_match_method" } ] } }, { "id": "jd_download", "name": "下载京东营销概况全站与非全站报表", "description": "登录京准通 custom-report,按业务日期先提交并下载非全站营销的 SKU 报表,再在全站营销的 SPU 维度提交并下载;下载中心接近 100 条上限时自动批量删除旧报表,定时默认昨天,控制台可选择任意历史日期。", "entry": "collect_jd_ad_costs.py", "args": [ "--date", "{business_date}", "--headless" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "京准通", "label": "custom-report 营销概况与下载中心", "detail": "overview 页的非全站营销 SKU、全站营销 SPU 以及 download 页生成任务" } ], "processing": [ "复用运行时账号 Profile、Cookie 和已生成的同日下载任务", "选择光影行星旗舰店霖并设置目标业务日期", "先提交非全站 SKU 报表,再提交全站 SPU 报表且不重新选择店铺", "从下载中心下载两个原始 CSV 并写入日期隔离目录" ], "destinations": [ { "system": "本地原始产物", "label": "京东营销概况全站/非全站 CSV", "detail": "raw/product_commerce/jd_ad_costs//,含 manifest.json" } ] } }, { "id": "jd_import", "name": "导入京东电商费用指标", "description": "仅解析报表中的当前时间区块,跳过对比时间与汇总行;全站 SPU 直接入库,非全站 SKU 按 SKU 名称匹配 dim_style.jd_spus 与最新京东 SPU 商品名,歧义和未匹配行保留审计状态。", "entry": "import_jd_ad_costs.py", "depends_on": [ "jd_download" ], "args": [ "--date", "{business_date}", "--execute" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "本地原始产物", "label": "京东营销概况全站/非全站 CSV" }, { "system": "PostgreSQL", "label": "dim_style.jd_spus", "detail": "款式名到京东 SPU 的业务维度映射" }, { "system": "PostgreSQL", "label": "product_daily_metrics", "detail": "最新京东 SPU 商品名,用于补充当天全站报表未返回的 SPU" } ], "processing": [ "按当前时间标记过滤并校验目标业务日期覆盖", "保留全站 SPU 与非全站 SKU 的完整原始列和来源行号", "以 stat_date、广告主、报表类型、行键幂等覆盖" ], "destinations": [ { "system": "PostgreSQL", "label": "jd_product_ad_daily_metrics", "detail": "京东全站 SPU 和非全站 SKU 电商费用日报;SKU 的 spu_id/style_name 记录匹配结果" } ] } }, { "id": "douyin_download", "name": "下载巨量千川全域推广商品日报", "description": "复用周店铺采集使用的 douyin-shop 账号保险库,打开全域投放数据的推商品/商品维度页面,按业务日期下载包含商品日明细的 Excel。", "entry": "collect_douyin_qianchuan_ads.py", "args": [ "--date", "{business_date}", "--headless" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "巨量千川", "label": "全域投放数据 > 推商品 > 商品维度", "detail": "广告主 1813687011565580;登录态来自 douyin-shop 账号保险库" } ], "processing": [ "校验广告主 ID、店铺标识和商品数据明细", "按业务日期下载原始 Excel", "重置千川错误的 worksheet A1 dimension 并校验日期覆盖" ], "destinations": [ { "system": "本地原始产物", "label": "巨量千川商品推广 Excel", "detail": "raw/product_commerce/douyin_qianchuan_ads//,含 manifest.json" } ] } }, { "id": "douyin_import", "name": "导入抖音电商费用商品日报", "description": "跳过每个商品的全部汇总行,保留按日期展开的商品明细;商品 ID 按文本保存,以日期、广告主和商品幂等写入云端 PostgreSQL。", "entry": "import_douyin_qianchuan_ads.py", "depends_on": [ "douyin_download" ], "args": [ "--date", "{business_date}", "--execute" ], "timeout_seconds": 21600, "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "本地原始产物", "label": "巨量千川商品推广 Excel" } ], "processing": [ "解析展示、点击、消耗、成交、ROI、结算率和退款率", "跳过商品汇总行并校验目标日期完整性", "以 stat_date、advertiser_id、product_id 幂等覆盖" ], "destinations": [ { "system": "PostgreSQL", "label": "dy_product_ad_daily_metrics", "detail": "抖音商品级电商费用与推广成交日报" } ] } } ] }, "provenance": { "source_project": "product", "task_name": "EcommerceAdvertisingCostDaily" }, "note": "每天 10:00 并行采集天猫、京东、抖音业务日期前一天的电商费用;每个平台保持下载后再导入的依赖,单个平台失败不阻断其他平台;控制台手动运行可选择任意业务日期,正式调度沿用 gyxx schedule run。" }, { "id": "product.style_analysis.interval", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "analyze", "name": "生成款式周期分析", "description": "聚合每个款式最近 3 天经营指标,直连 MiniMax 分析,创建飞书文档并保存报告链接。", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "最近 3 天款式经营指标" }, { "system": "款式配置", "label": "待分析款式与最小分析间隔" } ], "processing": [ "聚合款式周期指标", "直连 MiniMax 生成经营分析", "跳过分析间隔未满足的款式" ], "destinations": [ { "system": "飞书文档", "label": "款式周期分析报告" }, { "system": "PostgreSQL", "label": "报告链接与分析状态" } ] }, "entry": "analyze_style.py", "args": [ "--all-styles", "--days", "3", "--min-interval-days", "3", "--skip-existing", "--end-date", "{business_date}" ] } ] }, "provenance": { "source_project": "product", "task_name": "StyleAnalysisEvery3Days" } }, { "id": "product.main_image.weekly", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "jd", "name": "采集京东主图表现", "description": "采集京东款式主图及曝光、点击指标,保存 JSON,并写入每款飞书主图表和 PostgreSQL。", "data_flow": { "sources": [ { "system": "京东商智", "label": "款式主图、曝光与点击指标" }, { "system": "本地配置", "label": "款式与飞书目标表映射" } ], "processing": [ "采集并按款式整理京东主图表现" ], "destinations": [ { "system": "本地 JSON", "label": "京东主图采集结果" }, { "system": "飞书", "label": "各款式京东主图表" }, { "system": "PostgreSQL", "label": "京东主图表现指标" } ] }, "entry": "run_weekly_jd_main_image.py", "args": [ "--date", "{business_date}", "--headless" ] }, { "id": "tmall", "name": "采集天猫主图表现", "description": "采集天猫万相台款式主图聚合指标,保存 JSON,并写入每款飞书主图表和 PostgreSQL。", "data_flow": { "sources": [ { "system": "天猫万相台", "label": "款式主图聚合表现" }, { "system": "本地配置", "label": "款式与飞书目标表映射" } ], "processing": [ "采集并按款式整理天猫主图表现" ], "destinations": [ { "system": "本地 JSON", "label": "天猫主图采集结果" }, { "system": "飞书", "label": "各款式天猫主图表" }, { "system": "PostgreSQL", "label": "天猫主图表现指标" } ] }, "entry": "run_weekly_main_image.py", "args": [ "--date", "{business_date}", "--headless" ] } ] }, "provenance": { "source_project": "product", "task_name": "WeeklyJdAndTmallMainImageCollect" }, "note": "每周日 08:30 并行执行京东与天猫万相主图采集;两个平台分别完成 PG 入库和飞书插入,资源、状态及失败互不影响。任一平台失败时另一个仍继续,工作流最终报告具体的平台错误。" }, { "id": "product.sales_sheet.daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "sync", "name": "刷新商品月度销量表", "description": "全量读取预算产品与款式主表,不按预算月份过滤款式;所选月份只控制聚水潭查询区间和飞书目标月份页。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "飞书多维表格", "label": "全部预算产品、目标销量、款式名与 ERP 款式编码" }, { "system": "聚水潭商品主体分析", "label": "所选自然月全渠道自定义销量与自定义退货量" } ], "processing": [ "合并预算 Base 与款式主表的全量款式并匹配 ERP 编码", "按所选月月初到月末逐 ERP 编码生成一次全渠道报表", "累加全部商品行和同款全部 ERP 编码并计算退货率、实销和目标达成率" ], "destinations": [ { "system": "飞书电子表格", "label": "当月产品销量页", "condition": "正式执行" } ] }, "entry": "sync_monthly_sales_sheet.py", "args": [ "--month", "{business_date}", "--execute", "--allow-missing-erp-as-zero" ] } ] }, "provenance": { "source_project": "product", "task_name": "ProductMonthlySalesSheetDailySync" }, "note": "同名月份页幂等覆盖;月份只控制聚水潭自然月区间与目标页,产品全集不按预算月份筛选;抓取和校验全部 ERP 报表成功后才清空写入;无 ERP 编码产品按 0 写入;缺页时复制最近历史月份页继承格式。" }, { "id": "product.erp_all_shop_daily", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect", "name": "采集聚水潭全店铺款式日报", "description": "在聚水潭商品主题分析中全选全部店铺,查询业务日期当天所有 ERP 款式编码的自定义销量和自定义退货量,并幂等写入 PostgreSQL。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "款式主配置", "label": "全部款式及 ERP 款式编码" }, { "system": "聚水潭商品主题分析", "label": "业务日期当天全店铺自定义销量与自定义退货量" } ], "processing": [ "全选全部店铺并一次提交全部 ERP 款式编码", "按款式编码汇总商品行销量和退货量", "保存当日原始证据并幂等覆盖数据库记录" ], "destinations": [ { "system": "本地原始证据", "label": "聚水潭全店铺款式日报 JSON" }, { "system": "PostgreSQL", "label": "全店铺款式日销量与退货量", "condition": "正式执行" } ] }, "entry": "backfill_erp_all_shop_daily.py", "args": [ "--from", "{business_date}", "--to", "{business_date}", "--execute", "--force" ], "timeout_seconds": 21600 } ] }, "provenance": { "source_project": "product", "task_name": "JushuitanAllShopStyleDailyCollect" }, "note": "每天自动采集昨天数据;控制台可手动选择任意补采日期并幂等覆盖该日。全选聚水潭全部店铺,不拆京东、抖音、天猫;每次只采集一个业务日期。" }, { "id": "product.video_upload", "module": "product_commerce", "trigger": "manual", "execution": { "steps": [ { "id": "upload", "name": "上传所选天猫店铺短视频", "description": "先按前端所选店铺扫描飞书并筛选符合路由的视频附件,再按视频 file_token、目标账号和飞书记录写入 PostgreSQL 附件级发布账本;仅在存在可领取附件时登录对应光合账号上传,已发布附件自动跳过。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "飞书多维表格", "label": "所选店铺待上传短视频、款式、品牌和性别信息" }, { "system": "PostgreSQL", "label": "天猫商品 ID、商品标题与附件级发布账本" }, { "system": "淘宝光合浏览器状态", "label": "旗舰店与箱包店独立账号和 Profile" } ], "processing": [ "按前端所选旗舰店或箱包店规则筛选飞书记录并拆分视频附件", "按视频 file_token、目标账号和飞书记录原子领取未上传附件", "确认存在可上传附件后登录所选店铺账号", "生成标题、关联天猫商品并发布;明确成功后写 published,提交后结果不明写 ambiguous" ], "destinations": [ { "system": "淘宝光合", "label": "前端所选天猫店铺短视频", "condition": "正式执行且存在可上传附件" }, { "system": "PostgreSQL", "label": "附件发布状态、尝试记录与确认凭据", "condition": "正式执行" }, { "system": "飞书多维表格", "label": "天猫上传状态", "condition": "旗舰店记录全部附件发布成功" } ] }, "entry": "upload_video_to_guanghe.py", "args": [ "--execute", "--keep-browser-open-on-failure" ], "timeout_seconds": 21600 } ] }, "provenance": { "source_project": "product", "task_name": "TmallGuangheVideoUpload" }, "topic_config": { "default_keyword": "我的夏日焕新清单", "label": "天猫话题关键词", "hint": "输入完整话题或关键词;例如输入“秋上新”也会匹配并选中“秋上新开拍了”。" }, "note": "前端手动选择旗舰店或箱包店后执行;脚本先扫描飞书并按所选店铺规则筛选,只有数据库存在可领取附件时才登录对应账号上传。允许同一业务日期重复扫描新增附件,PostgreSQL 附件级账本阻止已发布或结果不明的附件自动重发;框架安全预演不会启动上传脚本。" }, { "id": "product.jd_video_upload", "module": "product_commerce", "trigger": "manual", "execution": { "steps": [ { "id": "upload", "name": "扫描新增视频并发布到京东", "description": "每次点击执行都会从飞书视图中的凌云air基线记录起扫描到视图末尾,不依赖日期字段;以 record_id + 视频 file_token 为幂等键,只发布新增或安全可重试的单款视频。无飞书封面时保留京东从视频生成的默认封面。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "飞书多维表格", "label": "凌云air基线之后的代拍产品、视频与可选封面附件;日期可为空" }, { "system": "PostgreSQL", "label": "京东商品标题与附件级发布账本" }, { "system": "京麦浏览器状态", "label": "独立 JD 视频发布 Profile、Cookie 与 Storage State" } ], "processing": [ "每次执行按飞书视图顺序从固定 record_id 锚点扫描到末尾,识别新增视频 file_token", "组合款在下载素材前直接跳过;单款有封面时上传飞书封面,无封面时保留京东默认视频封面", "按款式标题模糊匹配并用直连多模态大模型判断包体颜色,多选最多10个同款同色商品", "选择相关话题和标签后逐条发布;已入账附件由 PostgreSQL 唯一键自动防重" ], "destinations": [ { "system": "京麦内容中心", "label": "京东旗舰店短视频", "condition": "正式执行且款式与包体颜色匹配" }, { "system": "PostgreSQL", "label": "视频发布状态、尝试记录与确认凭据", "condition": "正式执行" } ] }, "entry": "upload_video_to_jd.py", "args": [ "--anchor-record-id", "recvrXTRWWFXeJ", "--manual-login", "--execute" ], "timeout_seconds": 21600 } ] }, "provenance": { "source_project": "product", "task_name": "JdVideoUpload" }, "note": "前端手动幂等工作流;每次点击从凌云air基线扫描到视图末尾,新增行或旧行新增的视频 file_token 会入账,已发布 token 不会重复发布。安全验证出现时在有头浏览器中人工完成后脚本自动继续。" }, { "id": "product.tmall_baibu_apply", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "old_chain_bag", "name": "导入老天猫超链箱包模板", "description": "用 Feishu user 身份下载老天猫超链箱包模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。", "has_hyperlink": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "老天猫·超链·箱包商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星旗舰店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果" ], "destinations": [ { "system": "天猫百亿补贴", "label": "老天猫·超链·箱包商品导入" } ] }, "entry": "tmall_baibu_apply_old_chain_bag.py", "timeout_seconds": 21600 }, { "id": "old_all_bag", "name": "导入老天猫全渠道箱包模板", "description": "用 Feishu user 身份下载老天猫全渠道箱包模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。", "depends_on": [ "old_chain_bag" ], "run_after_failure": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "老天猫·全渠道·箱包商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星旗舰店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果" ], "destinations": [ { "system": "天猫百亿补贴", "label": "老天猫·全渠道·箱包商品导入" } ] }, "entry": "tmall_baibu_apply_old_all_bag.py", "timeout_seconds": 21600 }, { "id": "old_all_3c", "name": "导入老天猫全渠道 3C 模板", "description": "用 Feishu user 身份下载老天猫全渠道 3C 模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入;导入完成后进入草稿,逐个点击完善商品、选择否并下一步,直到草稿清空。", "depends_on": [ "old_all_bag" ], "run_after_failure": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "老天猫·全渠道·3C 商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星旗舰店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果", "进入草稿逐个完善商品,选择否并点击下一步,直到草稿清空" ], "destinations": [ { "system": "天猫百亿补贴", "label": "老天猫·全渠道·3C 商品导入" } ] }, "entry": "tmall_baibu_apply_old_all_3c.py", "timeout_seconds": 21600 }, { "id": "old_chain_3c", "name": "导入老天猫超链 3C 模板", "description": "用 Feishu user 身份下载老天猫超链 3C 模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。", "has_hyperlink": true, "depends_on": [ "old_all_3c" ], "run_after_failure": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "老天猫·超链·3C 商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星旗舰店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果" ], "destinations": [ { "system": "天猫百亿补贴", "label": "老天猫·超链·3C 商品导入" } ] }, "entry": "tmall_baibu_apply_old_chain_3c.py", "timeout_seconds": 21600 }, { "id": "new_chain_bag", "name": "导入新天猫超链箱包模板", "description": "用 Feishu user 身份下载新天猫超链箱包模板,打开文档指定报名入口,校验光影行星鑫华达专卖店身份后提交商品批量导入。", "has_hyperlink": true, "depends_on": [ "old_chain_3c" ], "run_after_failure": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "新天猫·超链·箱包商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星鑫华达专卖店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果" ], "destinations": [ { "system": "天猫百亿补贴", "label": "新天猫·超链·箱包商品导入" } ] }, "entry": "tmall_baibu_apply_new_chain_bag.py", "timeout_seconds": 21600 }, { "id": "new_all_bag", "name": "导入新天猫全渠道箱包模板", "description": "用 Feishu user 身份下载新天猫全渠道箱包模板,打开文档指定报名入口,校验光影行星鑫华达专卖店身份后提交商品批量导入。", "depends_on": [ "new_chain_bag" ], "run_after_failure": true, "args": [ "--execute" ], "replay_policy": "repeatable", "data_flow": { "sources": [ { "system": "飞书电子表格", "label": "新天猫·全渠道·箱包商品导入模板" }, { "system": "淘宝浏览器状态", "label": "光影行星鑫华达专卖店独立账号登录态" } ], "processing": [ "以 user 身份下载文档指定模板", "打开文档指定报名链接并校验店铺身份", "提交商品批量导入并等待页面结果" ], "destinations": [ { "system": "天猫百亿补贴", "label": "新天猫·全渠道·箱包商品导入" } ] }, "entry": "tmall_baibu_apply_new_all_bag.py", "timeout_seconds": 21600 } ] }, "provenance": { "source_project": "product", "task_name": "TmallBaibuBatchApplyHourly" }, "note": "默认按每小时整点调度,仅导入三个不带超链的普通入口;其中老天猫全渠道 3C 入口在导入完成后会逐个完善草稿商品并清空草稿;前端仍可切换为导入全部六个入口并手动执行,且同样经过该后置流程。每次运行都会重新从飞书下载模板并提交,不按业务日期分组或防重。四个老天猫入口固定使用光影行星旗舰店,两个新天猫入口固定使用光影行星鑫华达专卖店;选中的入口串行执行且后续步骤允许在前一步失败后继续,模板与报名链接均来自飞书清单;每个入口使用独立 Profile、Cookie/Storage State 和 CDP 端口,脚本 finally 必须关闭自己的浏览器。" }, { "id": "supply.purchase_confirmation.daily", "module": "supply_chain", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_analyze_notify", "name": "生成采购确认通知", "description": "从 ERP 识别库存缺口商品并检查协议到货时间,写入 PostgreSQL 后发送采购确认通知。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "ERP", "label": "商品库存、在途与采购数据" }, { "system": "采购配置", "label": "协议到货时间与确认规则" } ], "processing": [ "识别库存缺口商品", "核对协议到货时间并生成确认项" ], "destinations": [ { "system": "PostgreSQL", "label": "采购确认处理记录" }, { "system": "飞书", "label": "采购确认通知" } ] }, "entry": "run.py", "args": [ "mcp-run", "purchase-confirmation" ] } ] }, "provenance": { "source_project": "supply", "task_name": "auto-flow-purchase-confirmation" } }, { "id": "supply.replenishment.weekly", "module": "supply_chain", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_analyze_notify", "name": "生成并发送补货建议", "description": "导出 ERP 库存并计算补货量,写入 PostgreSQL 与飞书多维表,最后发送补货结果通知。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "ERP", "label": "库存、销售与商品数据" }, { "system": "补货配置", "label": "SKU 范围与补货规则" } ], "processing": [ "导出并规范化库存数据", "按规则计算建议补货量", "生成补货批次结果" ], "destinations": [ { "system": "PostgreSQL", "label": "补货批次与建议明细" }, { "system": "飞书多维表", "label": "补货建议记录" }, { "system": "飞书", "label": "补货结果通知" } ] }, "entry": "run.py", "args": [ "mcp-run", "replenishment" ] } ] }, "provenance": { "source_project": "supply", "task_name": "auto-flow-replenishment" } }, { "id": "supply.replenishment_alert.daily", "module": "supply_chain", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_analyze_notify", "name": "生成库存阈值预警", "description": "依据配置 SKU 和库存阈值生成预警并写入 PostgreSQL,仅在存在预警时发送业务通知。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "ERP", "label": "SKU 当前库存" }, { "system": "预警配置", "label": "监控 SKU 与库存阈值" } ], "processing": [ "比较当前库存与配置阈值", "生成需要处理的库存预警" ], "destinations": [ { "system": "PostgreSQL", "label": "库存阈值预警记录" }, { "system": "飞书", "label": "库存预警通知", "condition": "存在命中阈值的 SKU" } ] }, "entry": "run.py", "args": [ "mcp-run", "replenishment-alert" ] } ] }, "provenance": { "source_project": "supply", "task_name": "auto-flow-replenishment-alert" } }, { "id": "supply.replenishment_arrival_sync.daily", "module": "supply_chain", "trigger": "scheduled", "execution": { "steps": [ { "id": "sync_queue", "name": "同步补货建议预计到货时间", "description": "读取 erp_replenishment_arrival_sync 待处理队列,使用聚水潭采购单页面按商品编码更新预计到货时间,并逐条回写同步状态。", "replay_policy": "idempotent", "data_flow": { "sources": [ { "system": "PostgreSQL", "label": "erp_replenishment_arrival_sync 到货时间同步队列" }, { "system": "聚水潭", "label": "采购单管理页面与登录态" } ], "processing": [ "按租户和 SKU 原子认领 pending/failed 队列行", "在聚水潭采购单明细中更新协议到货日期", "按目标时间版本回写 success 或 failed 状态" ], "destinations": [ { "system": "聚水潭", "label": "采购单明细协议到货日期" }, { "system": "PostgreSQL", "label": "同步状态、更新时间、尝试次数和失败原因" } ] }, "entry": "orchestrator/scripts/collect_replenishment_arrival_sync.py" } ] }, "provenance": { "source_project": "supply", "task_name": "auto-flow-replenishment-arrival-sync" }, "note": "队列表为空时成功结束;失败行保留 failed 状态,下一次调度自动重试。默认租户为 1,可用 GYXX_ERP_TENANT_ID 覆盖。" }, { "id": "product.market_rank", "module": "product_commerce", "trigger": "scheduled", "execution": { "steps": [ { "id": "collect_analyze_publish", "name": "采集并发布三平台市场排行", "description": "并行采集天猫、京东和抖音市场排行,汇总平台结果并发送飞书报告链接。", "data_flow": { "sources": [ { "system": "天猫、京东与抖音", "label": "市场商品排行与表现数据" }, { "system": "本地配置", "label": "类目、关键词与采集范围" } ], "processing": [ "并行采集三平台排行", "汇总平台结果并生成市场分析", "归档报告并准备通知" ], "destinations": [ { "system": "本地报告产物", "label": "三平台市场排行结果" }, { "system": "飞书", "label": "市场排行报告链接与通知" } ] }, "entry": "orchestrate_market_rank_collection.py", "args": [ "--report-date", "{business_date}" ] } ] }, "provenance": { "source_project": "product", "task_name": "三平台市场排行月采集" }, "note": "每月 1 日 10:00 由项目内 Python 调度器触发。" } ] }