|
|
2 viikkoa sitten | |
|---|---|---|
| docs | 2 viikkoa sitten | |
| napos | 2 viikkoa sitten | |
| public | 2 viikkoa sitten | |
| scripts | 2 viikkoa sitten | |
| server | 2 viikkoa sitten | |
| .gitignore | 2 viikkoa sitten | |
| README.md | 2 viikkoa sitten | |
| config.example.json | 2 viikkoa sitten | |
| imageMeta.js | 1 kuukausi sitten | |
| napos-service.js | 2 viikkoa sitten | |
| nl-query.js | 2 viikkoa sitten | |
| ops-import.js | 2 viikkoa sitten | |
| ops-store.js | 2 viikkoa sitten | |
| package-lock.json | 2 viikkoa sitten | |
| package.json | 2 viikkoa sitten | |
| report-html.js | 2 viikkoa sitten | |
| reports-mcp.js | 2 viikkoa sitten | |
| reports-store.js | 2 viikkoa sitten | |
| server.js | 2 viikkoa sitten | |
| 启动.bat | 2 viikkoa sitten | |
| 启动.command | 2 viikkoa sitten | |
| 启动.sh | 2 viikkoa sitten | |
| 打包分发.bat | 2 viikkoa sitten | |
| 打包分发.command | 2 viikkoa sitten | |
| 打包分发.sh | 2 viikkoa sitten |
智慧运营中台是一个本地 Web 应用,集「门店采集」「AI 视觉生成」「数据采集与智能分析」于一体:采集门店菜品并批量生成品牌视觉资产,同时从淘宝闪购商家客户端取数沉淀本地,形成可持续加工的经营数据中台。
淘宝闪购经营数据中台:从本机商家客户端取数、沉淀本地、多维报表。
9669),由客户端页面自身的登录态代发请求(非爬虫),数据中心接口自动补签名。首次使用需以 --remote-debugging-port=9669 启动商家客户端并登录。data/reports/,反复同步自动去重合并,可用于二次加工。node scripts/diagnose-napos.js [日期] [门店ID],对门店维度取数做参数对照实验并生成 JSON 诊断报告,拷回开发机即可定位取数异常。node reports-mcp.js 启动 stdio MCP server(reports_list_entities / reports_summary / reports_query),注册到 ~/.workbuddy/mcp.json 即可供 Agent 直接查数,与 napos-mcp(取数)形成闭环。采集之外的另一条数据入口:直接上传商家后台导出的人工统计表,不依赖商家客户端。
学校名称 / 店铺名称 / ID / 上线状态 + 每天 4 列(订单量 / 营收 / 曝光量 / 进店转换率)。日期列写成 9.9订单量 这种形式即可,年份在上传时选择。10..6%、12.3(应为 12.3%)、未开放、空白等都会按规则清洗并带标记(表格里显示 ⚠,悬停看原始值),不会因为一格填错整批失败。data/ops.db),不引入额外依赖。改 config.json 的 storage.driver 为 postgres 即可切到云端库(需 npm i pg、填连接串、npm run db:init 建表,db:export / db:import 搬迁数据)。node:sqlite);低版本时该菜单提示不可用,其余功能不受影响。ksid)。安装依赖:
npm install
创建本地配置:
cp config.example.json config.json
编辑 config.json,至少填写 apiKey。也可以启动后在“系统设置”中填写。
启动服务:
npm start
或使用平台脚本:
启动.command,或执行 ./启动.command启动.bat./启动.shhttp://localhost:5177。若修改了 port,请访问对应端口。| 配置 | 说明 |
|---|---|
apiKey |
图片生成服务密钥。界面中会脱敏显示,重新输入新值即可更新。 |
apiBase |
图片生成服务地址。当前固定为 https://api.lk888.ai,界面中不可修改。 |
model |
默认生成模型,例如 gpt-image-2。可在系统设置中切换。 |
rootDir |
门店数据与生成结果的输出根目录。默认使用项目上一级的 workspace 目录。 |
pageSize |
门店采集时每一页请求的菜品数量,范围 1-200。 |
delayMs |
采集下载间隔,范围 0-60000 毫秒。 |
maxConcurrentJobs |
同时进行的生成任务数量。 |
requestTimeoutMs |
生成服务请求超时时间,单位毫秒。 |
| Cookie | 用于淘宝闪购后台采集,仅保存在本地 session.json。 |
accessToken |
局域网访问口令:设置后其他电脑访问本服务需输入口令(本机 127.0.0.1 不受影响)。留空保持不变,输入 - 清除。也可用环境变量 ACCESS_TOKEN 临时开关(不落盘)。 |
autoSync |
每日自动同步:{ "enabled": true, "time": "06:00" },也可在「同步数据」弹窗里开关。 |
aitable |
钉钉 AI 表格同步:{ "enabled": true, "appKey": "...", "appSecret": "...", "baseId": "...", "sheetDetail": "门店明细", "sheetChain": "连锁汇总", "sheetCompany": "公司汇总" },三张表名留空用默认值;也可在「系统设置 → 钉钉 AI 表格」配置。问数落地钉钉的实测问题清单见 docs/钉钉问数上线指引.md。 |
httpLog |
true 时在控制台打印每个 HTTP 请求(5xx 与超过 1 秒的慢请求始终打印)。 |
API Key 获取与充值入口可在“系统设置 → API 设置”中打开。
默认输出根目录为:
<项目上一级>/workspace
单个门店目录结构类似:
workspace/
001_门店名称_店铺ID/
菜品原图.jpg
_菜品图爬取记录.json
_生成图片/
logo.png
店内海报_1138x292.png
招牌头图_750x288.png
菜品图/
菜品名称.png
generation-history.json
生成结果的本地文件可能因为重新生成被覆盖;generation-history.json 会追加保存远程结果地址,用于历史创作页恢复和下载。
生成任务会保存到输出根目录下的 .genpic/tasks.json。页面刷新或服务重启后,任务中心仍能看到任务状态;已经提交给模型服务且仍在运行的任务会恢复轮询。排队任务因原始图片数据不落盘,重启后会标记为失败并提示重新提交。
gpt-image-2gpt-image-2-guandoubao-seedream-5-0-pro-260628doubao-seedream-5-0-260128doubao-seedream-4-5-251128wan2.6-image.
├── server.js # 引导入口:装配状态 → 挂载路由 → 监听(含端口自动回收)
├── server/ # 服务端模块(路由 / 服务 / 中间件分层)
│ ├── router.js # 迷你路由(零依赖):路径匹配、:参数、405、fallback
│ ├── middleware.js # 标准错误边界:统一异常 → JSON 响应(含错误码映射)
│ ├── context.js # 共享状态装配:config / session / 店铺清单 / 路径守卫 / 日志
│ ├── util.js # 无状态工具:响应、请求体、文件名、静态资源常量
│ ├── stores/ # 存储驱动(ops-sqlite.js / ops-pg.js)
│ ├── services/xlsx.js # 零依赖 xlsx 读取器(ZIP + XML)
│ ├── routes/ # 薄 HTTP 层(按业务域拆分)
│ │ ├── health.js # 健康检查 / 默认根目录
│ │ ├── session.js # 采集 Cookie 会话
│ │ ├── crawl.js # 门店采集:店铺清单、抓取控制、日志
│ │ ├── settings.js # 系统设置 + 生图/对话 API 连通性测试
│ │ ├── generate.js # 视觉生成、任务中心(含采集任务)、画板保存、打开目录
│ │ ├── history.js # 门店扫描(图片尺寸缓存)、历史创作、图片文件服务
│ │ ├── reports.js # 数据采集 + 智能问数(同步/查询/导出/周报)
│ │ ├── ops.js # 店铺运营数据:上传/解析/矩阵查询/原件下载
│ │ ├── static.js # 静态前端(精确白名单 + /assets/)
│ │ └── index.js # 路由注册总入口
│ └── services/ # 有状态引擎
│ ├── crawl.js # 采集引擎:翻页抓取、下载、断点跳过、可取消任务循环、进度持久化
│ ├── generation.js # 生成引擎:任务队列、供应商 API、轮询、图片合成、任务持久化
│ └── auto-sync.js # 经营数据每日自动同步(默认关闭)
├── scripts/
│ └── smoke.js # 冒烟测试:零依赖拉起真实服务全量核对端点(node scripts/smoke.js)
├── napos-service.js # 数据采集:取数服务层(同步任务 / 查询聚合 / CSV)
├── reports-store.js # 数据采集:本地数据湖(多主体 / 日期×门店 upsert)
├── napos/ # napos-mcp 取数引擎(CDP 附着商家客户端,零第三方依赖)
│ ├── cdp.js # CDP 客户端 + 子站路由(按域选执行上下文)
│ ├── kit.js # 业务取数工具箱(组织树 / 经营数据 / 签名)
│ ├── guard.js # 写操作防护(只放行只读接口)
│ └── data/apis.json # 140 个后台接口目录(防护索引)
├── public/
│ ├── index.html # 应用外壳和页面结构
│ ├── app.js # 导航、启动画面和系统设置
│ ├── crawl.js # 门店采集界面逻辑
│ ├── gen.js # 视觉生成界面逻辑
│ ├── history.js # 历史创作界面逻辑
│ ├── tasks.js # 任务中心界面逻辑
│ ├── reports.js # 数据采集 + 智能分析界面逻辑
│ └── style.css # 统一视觉系统
├── config.example.json # 配置模板
├── 启动.command # macOS 启动脚本
├── 启动.bat # Windows 启动脚本
└── 启动.sh # Linux/macOS 启动脚本
服务默认仅监听本机 127.0.0.1。如需局域网访问,可临时设置 HOST=0.0.0.0,但建议仅在可信网络中使用。
在「系统设置」设置 accessToken(或以 ACCESS_TOKEN=xxx 环境变量临时开启)后,局域网内其他电脑访问 /api/* 与图片/文件接口都需要口令:浏览器首次访问会弹窗引导输入一次(保存在浏览器 Cookie),命令行可用 curl -H 'X-Access-Token: xxx' … 或在 URL 后加 ?token=xxx。本机回环访问、健康检查与静态页面不受影响。
| 文件 | 内容 | 说明 |
|---|---|---|
config.json |
API Key、模型、端口等 | 系统设置保存时写入;首次启动若缺失会自动从模板生成 |
session.json |
淘宝闪购采集 Cookie(含 ksid) |
仅门店采集使用;界面保存后不回显 |
data/reports/ |
经营数据本地数据湖 | 各主体经营数据,按「日期 × 门店」沉淀 |
data/ops.db |
店铺运营数据(上传解析) | SQLite;含原件与解析行,备份 data/ 时一并保留 |
manual-shops.json |
手动店铺清单 | 门店采集用 |
以上文件均不进 Git;数据采集的取数不依赖 Cookie —— 它实时读取本机商家客户端的登录态(调试端口 9669)。
双击 打包分发.command(macOS/Linux)或 打包分发.bat(Windows),会在项目上级目录生成 智慧运营中台-分发包.zip。包内只含代码、依赖和配置模板,不含你的 config.json / session.json / manual-shops.json / data/(API Key、Cookie、报表数据只留在你本机)。
对方解压后双击 启动.command(macOS)或 启动.bat(Windows)即可:首次启动自动生成其本机 config.json,在「系统设置」中填写自己的 API Key;数据采集页按提示以调试端口启动并登录自己的商家客户端后同步取数。
升级已装过旧版的电脑:把分发包解压覆盖到原目录即可(不要先删旧目录)。包内不含配置文件,覆盖不会动他们的历史 config.json / session.json;新版启动时会把历史配置与默认值合并读取 —— API Key、模型、Cookie 全部原样沿用,无需重填;若历史 rootDir 在本机不可用,启动时会提示到「系统设置」修改,不会崩溃。
健康检查:
curl http://127.0.0.1:5177/healthz
curl http://127.0.0.1:5177/readyz
本地接口只允许访问当前配置的输出根目录。采集 Cookie 保存后不会在设置页回显;需要更换时重新粘贴完整 Cookie 并保存即可。
以下文件包含本机运行数据或密钥,默认不会被 Git 提交:
config.json
session.json
manual-shops.json
output/
workspace/
data/
.genpic/
请勿将 API Key、后台 Cookie 或门店数据提交到 Git。采集功能只应操作你有权管理的店铺,并遵守平台条款与当地法规。
重新登录淘宝闪购后台,复制完整 Cookie,并到“系统设置 → 采集配置”更新。
确认“系统设置”中的输出根目录正确;门店目录必须直接位于该根目录下,并且目录内有菜品图片或已生成的 _生成图片 目录。
检查 maxConcurrentJobs 是否过小,或等待已有任务完成。生成服务也可能存在限流或临时不可用。
历史创作列表只显示最近 48 小时内的记录。本地文件被重新生成覆盖时,页面会优先使用 API 返回的远程地址。
数据采集的取数通道依赖本机淘宝闪购商家客户端的调试端口。完全退出客户端后,用以下方式重新启动并登录:
淘宝闪购商家客户端 --remote-debugging-port=9669
连接后进入「数据采集 → 同步数据」,选择范围与日期区间开始同步。
单个门店取数失败不影响其他门店,失败项会计入「失败」计数并保留在同步步骤里。常见原因是登录态失效(客户端重新登录即可)或触发了后台风控(在客户端完成验证后重试)。