11-02 09:00 那批推到钉钉群的是「已发货 0 单 / 0 个包裹,异常 0 个包裹(0%)」, 业务问「怎么可能 0 单」。查库确认:物流镜像表 jst_order_express_details 最后灌库停在 2026-11-01 07:55,11-01 当天 12 个发货仓一条发货记录都没有 (订单表 jst_Orders 同日有 4601 单发货,说明货是真发了,只是物流没进库)。 根因不是口径,是「0 单没有告警」这个设计缺陷:freshness 只用本批窗口内行的 query_time 算,窗口一行都没有时 snapshotAt 为空串 → stale=false、hint='', 于是「上游没同步」和「当天真没发货」在页面和钉钉里长得完全一样,还写「全部正常」。 改动 - service:窗口 0 行时补查一次表级 MAX(query_time)(全表 13.5s,只在空窗口付这笔钱, 随主结果进 5 分钟缓存),新增 freshness.emptyWindow / sourceLastUpdate / sourceAgeMinutes / sourceStale,并按「真停更 / 表新但当天无记录 / 取不到时间」 三种情况给不同 hint。 - 钉钉正文:0 条时不再无脑写「本批无转运异常,全部正常」;真停更写 「⚠️ 物流数据未同步:镜像表最后更新 …(已 N 小时未同步)… 0 单不代表当天没发货」, 表新但当天无记录则说明「库里 0 条发货记录(数据源正常),请到聚水潭核对」。 - 前端:emptyWindow 走红条(原来只判 coversDeadline/stale,空窗口不告警), 发货卡片副标改为「数据未同步,见上方红条」。 - 前端顺带修:钉钉消息链接带 ?date=YYYY-MM-DD,但页面从不读这个参数, 点进去永远显示「今天这批」;现按 URL 初始化核验日。 验证 - npm --prefix backend run check:505 tests / 503 pass;新增 5 个用例 (停更 hint、表新但 0 条、有行时不付全表 MAX、推送文案两态)全过。 既有失败 2 个与本任务无关:cloudDatabaseConfigCache 负缓存 TTL、 resilientSecretStore 的 Windows 0600 权限断言。 - 生产库实跑(本地 4002,直连 JSReportReplica): date=2026-11-02 → emptyWindow=true、sourceLastUpdate=2026-11-01 07:55:04、 sourceAgeMinutes≈1590、hint 正确;date=2026-11-01 → 4390 单 / 9 异常、 emptyWindow=false,原有「未覆盖核验时刻」提示不变。 - 钉钉 dryRun 正文实测:前 3 行即带「⚠️ 物流数据未同步 … 0 单不代表当天没发货」。 - Playwright 真渲染(5173): ?date=2026-11-02 → 红条 + 「数据未同步,见上方红条」,0 pageerror; ?date=2026-11-01 → 4,390 单 / 9 异常正常出表,且 URL 参数已生效。 - 前端 eslint 干净,vite build 通过。 风险与回退 - 只增字段与提示,不改任何统计口径;packageCount/shippedOrders 计算逻辑未动。 - 空窗口多一条全表 MAX 查询(13.5s),已用 5 分钟缓存兜住,且只在异常路径触发。 - 回退:单文件 revert 本提交即可,无数据结构变更。
拼多多自动化运营平台
公开的拼多多业务精简版。欢迎所有人克隆、修改、分发代码并提交 Pull Request,代码按 MIT 许可证开放。
保留商品监控、仪表盘、激励看板、营销活动、推广、商品分析、工单以及在线客户端与执行任务等现有模块。部分菜单仍沿用原项目的占位页面。
已删除市场数据、店铺管理和运营工具整组页面、Claw 对话、skills 管理、平台切换与其他平台演示页,以及对应路由、页面资源、专属配置接口和权限项。首页为仪表盘。保留业务仍使用的模型配置、商品数据查询、桌面会话和自动上架公共服务继续可用;Claw 补全与图搜备用通道已经移除,缺失资料需使用业务接口或手工补充。
本地启动
需要 Node.js 22。团队开发机器无需安装或初始化 MySQL、Redis 及第三方数据库;使用管理员发放的部署 Key,一次注册后自动连接中央系统数据库、公网 TLS Redis 和第三方数据库。完整步骤及安全边界见 远程系统数据库部署。
npm --prefix backend ci
npm --prefix frontend ci
npm run remote:dev
首次启动时填写配置请求地址和部署 Key,系统自动写入被 Git 忽略的本机配置并重启后端。保存一次性显示的管理员账号和密码后直接登录,不需要在本地创建数据库或继续执行设置向导。前端默认访问 http://localhost:5173,API 默认代理到本地后端。
拉取主仓库更新后必须停止旧的 npm run remote:dev 进程并重新启动,保证前后端使用同一版本。MKH 页的强制刷新带有版本协议校验;如果新前端仍代理到未重启的旧后端,页面会停止展示可能过期的库存并明确提示重启,不再将旧值冒充为“最新数据”。
验证与构建
npm --prefix backend run check
npm --prefix frontend run check
前端构建输出位于 frontend/dist。部署时需为单页应用配置路由回退,并代理 /api 与 /cubejs-api 到后端。
启动时会迁移旧侧栏配置,并删除已退役页面的权限、专属设置和专用数据表。上架测算旧偏好表中的商品分析阈值会先迁移到商品分析专用表;其他保留模块的数据不受影响。迁移仅作用于实际配置给此实例的系统数据库。
参与修改
开始开发前请阅读 仓库提交与合并规范(多用户与 AI 开发必读)。准备更新生产服务器时必须继续阅读 服务器部署规范(开发者与 AI 必读)。AI 工具的规则入口为 AGENTS.md。每个任务使用独立目录和分支,通过 PR、同步验证和独立审核合并,禁止强推或覆盖其他开发者的工作。
所有用户均可 Fork 仓库、创建分支并提交 Pull Request。直接推送本仓库需要仓库所有者授予协作者写权限。提交时请说明修改和验证结果,勿提交 .env、密码、令牌、数据库备份或真实业务数据。