# 连锁餐饮数字化运营管理体系 — 技术架构方案与实施计划 > 基于现有 PostgreSQL 数据库、50+ 分析视图和 17 份分析报告,构建可落地的数字化运营管理平台 > 目标:实现"数据发现问题 → 自动分级 → 生成门店任务 → 现场执行 → 周度检查 → 月度验收 → 有效经验标准化"闭环 --- ## 一、现有资产盘点 ### 1.1 数据库资产 | 资产 | 规模 | 说明 | |---|---:|---| | `public.bill_records` | 1,677,990行 | 原始账单,196个文本字段(c001-c196) | | `public.bill_columns` | — | 字段映射字典 | | `public.dish_sales_details` | 5,553,314行 | 菜品销售明细,91家门店 | | `public.inventory_cost_records` | 54,973行 | 盘点倒挤成本,121个成本单位 | | `public.inventory_store_mapping` | — | 成本单位→销售门店映射 | | `analytics` schema | 3表+41视图+9物化视图 | 已建分析层 | ### 1.2 数据库连接 - PostgreSQL 15(Homebrew),`localhost:5432` - 数据库:`bill_query` - 用户:`freedak`(trust认证,仅本机开发) - 前端不直连数据库,通过后端API访问 --- ## 二、技术选型 ### 2.1 整体架构 ``` ┌─────────────────────────────────────────────────────┐ │ 前端 (React) │ │ 管理驾驶舱 / 区域经理页面 / 店长页面 / 专业部门页面 │ │ TailwindCSS + shadcn/ui │ ├─────────────────────────────────────────────────────┤ │ 后端 API (Node.js) │ │ Express + TypeScript │ │ RESTful API + WebSocket (实时推送) │ ├─────────────────────────────────────────────────────┤ │ 数据层 (PostgreSQL 15) │ │ 原始层 → 标准层 → 事实层 → 汇总层 → 应用层 │ │ bill_query @ localhost:5432 │ └─────────────────────────────────────────────────────┘ ``` ### 2.2 技术栈明细 | 层 | 技术 | 理由 | |---|---|---| | 前端框架 | React 18 + TypeScript | 组件化、类型安全、生态成熟 | | UI组件 | TailwindCSS + shadcn/ui | 快速构建高质量管理界面 | | 图表 | Recharts | React原生图表库,支持下钻交互 | | 路由 | React Router v6 | 多页面管理 | | 状态管理 | TanStack Query (React Query) | 服务端状态管理,缓存/刷新/乐观更新 | | 后端 | Node.js + Express + TypeScript | 轻量、快速开发、与前端同语言 | | 数据库驱动 | pg (node-postgres) | PostgreSQL原生驱动 | | API风格 | RESTful | 简单直观,适合管理后台 | | 认证 | JWT (json-webtoken) | 轻量级角色权限控制 | | 进程管理 | tsx (开发) / pm2 (生产) | 开发热重载,生产稳定 | ### 2.3 项目结构 ``` SBrainCO/ ├── package.json # 根工作区配置 ├── run.md # 数据库连接信息 ├── 技术架构方案与实施计划.md # 本文档 ├── 马兰拉面数据分析/ # 现有分析文档和SQL(保留不动) │ ├── server/ # 后端 │ ├── package.json │ ├── tsconfig.json │ ├── src/ │ │ ├── index.ts # 入口 │ │ ├── config/ │ │ │ └── database.ts # PostgreSQL连接池配置 │ │ ├── middleware/ │ │ │ ├── auth.ts # JWT认证中间件 │ │ │ └── error.ts # 统一错误处理 │ │ ├── routes/ │ │ │ ├── overview.ts # 公司概览API │ │ │ ├── stores.ts # 门店管理API │ │ │ ├── cost.ts # 成本管理API │ │ │ ├── platform.ts # 平台经济性API │ │ │ ├── member.ts # 会员复购API │ │ │ ├── sku.ts # 商品SKU API │ │ │ ├── risk.ts # 风险内控API │ │ │ ├── tasks.ts # 任务闭环API │ │ │ └── benchmark.ts # 标杆分析API │ │ ├── services/ │ │ │ ├── queryService.ts # 通用查询服务 │ │ │ ├── taskService.ts # 任务生成与跟进 │ │ │ └── gradingService.ts # 门店自动分级 │ │ └── types/ │ │ └── index.ts # 共享类型定义 │ └── .env # 环境变量 │ ├── client/ # 前端 │ ├── package.json │ ├── tsconfig.json │ ├── vite.config.ts │ ├── index.html │ ├── src/ │ │ ├── main.tsx │ │ ├── App.tsx # 路由配置 │ │ ├── api/ │ │ │ └── client.ts # API客户端 │ │ ├── components/ │ │ │ ├── ui/ # shadcn/ui基础组件 │ │ │ ├── charts/ # 图表组件 │ │ │ ├── layout/ # 布局组件 │ │ │ └── common/ # 通用组件 │ │ ├── pages/ │ │ │ ├── HeadquartersDashboard.tsx # 总部驾驶舱 │ │ │ ├── RegionalManager.tsx # 区域经理页面 │ │ │ ├── StoreManager.tsx # 店长页面 │ │ │ ├── ProductDept.tsx # 商品部页面 │ │ │ ├── MemberDept.tsx # 会员部页面 │ │ │ ├── FinanceDept.tsx # 财务页面 │ │ │ ├── SupplyChainDept.tsx # 供应链页面 │ │ │ ├── ITDept.tsx # 信息部页面 │ │ │ └── StoreDetail.tsx # 门店详情(下钻) │ │ ├── hooks/ │ │ │ └── useApi.ts # 数据查询hooks │ │ └── lib/ │ │ └── utils.ts # 工具函数 │ └── tailwind.config.ts │ └── shared/ # 前后端共享类型 └── types.ts ``` --- ## 三、数据层设计 ### 3.1 现有视图直接复用 以下视图已有且可直接作为API数据源: | API模块 | 数据源视图 | 说明 | |---|---|---| | 公司概览 | `v_overview_daily` | 日度实收/账单/客单/优惠率/毛利率 | | 门店记分卡 | `v_store_scorecard` | 门店核心指标 | | 门店风险分级 | `v_store_risk_rating` | 红黄绿分级 | | 门店经营象限 | `v_store_benchmark` | 明星/规模承压/高效潜力/重点改善 | | 门店行动清单 | `v_store_action_list` | 含品类结构和平台成本 | | 门店执行优先级 | `v_store_execution_priority` | 含餐段/会员/零实收机会 | | 平台经济性 | `v_store_platform_economics` | 三平台收入/折扣/佣金/成本率 | | 会员对比 | `v_member_comparison` | 会员vs非会员 | | 会员复购 | `v_store_repeat_summary_monthly` | 门店复购率 | | 餐段机会 | `v_store_meal_opportunity` | 餐段平均单价提升空间 | | 会员渗透 | `v_store_member_opportunity` | 会员转化空间 | | 零实收 | `v_zero_received_detail` / `v_zero_received_store_summary` | 零实收归因 | | 异常账单 | `v_anomaly_bills` / `v_anomaly_summary` | 异常明细和汇总 | | 营销方案 | `v_marketing_plan_summary` | 各营销方案效果 | | 收银员风险 | `v_cashier_risk` | 收银员异常率 | | 星期/小时 | `v_weekday_summary` / `v_hourly_summary` | 时间规律 | | 渠道 | `v_channel_daily` | 支付渠道结构 | | 品类 | `category_summary` / `v_store_category_mix` | 品类贡献和门店结构 | | 优惠 | `discount_summary` | 优惠项目汇总 | | 深入诊断 | `v_store_deep_diagnosis_april` | 门店综合诊断 | | 整改优先级 | `v_store_action_priority_deep_april` | P0/P1/P2分级 | | 成本对比 | `v_store_theoretical_actual_cost_april` | 理论vs实际 | | 分类成本 | `v_store_category_cost_benchmark_april` | 同类对标 | | 库存效率 | `v_store_inventory_efficiency_april` | 库存天数/异常 | | 标杆 | `v_store_benchmark_composite` | 综合标杆 | | 任务计划 | `store_monthly_action_plan` | 门店月度计划(表) | | 任务跟进 | `v_store_monthly_followup` | 计划vs实际 | | SKU ABC | `v_dish_sku_abc_april` | SKU分级 | | 菜品销售 | `dish_sales_april` / `dish_sku_summary_april` | 菜品分析 | | 搭售 | `dish_pair_summary_april` / `dish_basket_april` | 购物篮分析 | | 重点改进 | `v_priority_store_improvement` | 重点改进门店 | ### 3.2 需新建的表和视图 #### 任务闭环表(第一阶段核心) ```sql -- 门店整改任务表 CREATE TABLE analytics.store_task ( task_id SERIAL PRIMARY KEY, plan_month DATE NOT NULL, store_code TEXT NOT NULL, store_name TEXT NOT NULL, priority TEXT NOT NULL, -- P0/P1/P2/P3 problem_indicator TEXT NOT NULL, -- 问题指标 current_value NUMERIC, benchmark_value NUMERIC, target_value NUMERIC, problem_description TEXT, action_required TEXT, -- 具体行动,不允许只写"加强管理" owner TEXT NOT NULL, -- 责任人 collaborators TEXT, -- 协同人 deadline DATE NOT NULL, status TEXT DEFAULT '待启动', -- 待启动/进行中/已完成/已验收/已回滚 process_evidence TEXT, -- 过程证据(照片URL、文档链接) verification_indicator TEXT, -- 验收指标 verification_result TEXT, -- 验收结果 incomplete_reason TEXT, -- 未完成原因 next_step TEXT, -- 下一步 created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); -- 任务状态变更日志 CREATE TABLE analytics.store_task_log ( log_id SERIAL PRIMARY KEY, task_id INT REFERENCES analytics.store_task(task_id), action TEXT NOT NULL, -- 创建/更新/完成/验收/回滚 old_status TEXT, new_status TEXT, operator TEXT NOT NULL, comment TEXT, created_at TIMESTAMPTZ DEFAULT NOW() ); ``` #### 通用月度汇总视图(替代 `_april` 固定视图) ```sql -- 门店月度汇总(按 report_month 参数化) CREATE OR REPLACE FUNCTION analytics.f_store_monthly_summary(p_month DATE) RETURNS TABLE(...) AS $$ SELECT ... FROM analytics.bill_fact WHERE date_trunc('month', closed_at) = p_month GROUP BY store_code, store_name; $$ LANGUAGE sql STABLE; ``` --- ## 四、API设计 ### 4.1 API路由总览 | 方法 | 路径 | 说明 | 对应视图 | |---|---|---|---| | GET | `/api/overview` | 公司概览 | `v_overview_daily` | | GET | `/api/overview/daily` | 日度趋势 | `v_overview_daily` | | GET | `/api/stores` | 门店列表 | `v_store_scorecard` | | GET | `/api/stores/:code` | 门店详情 | 多视图联查 | | GET | `/api/stores/:code/daily` | 门店日度 | `v_store_daily` | | GET | `/api/stores/risk` | 门店风险分级 | `v_store_risk_rating` | | GET | `/api/stores/quadrant` | 经营象限 | `v_store_benchmark` | | GET | `/api/stores/priority` | 整改优先级 | `v_store_action_priority_deep_april` | | GET | `/api/stores/:code/cost` | 门店成本 | `v_store_theoretical_actual_cost_april` | | GET | `/api/stores/:code/platform` | 门店平台 | `v_store_platform_economics` | | GET | `/api/stores/:code/meal` | 门店餐段 | `v_store_meal_opportunity` | | GET | `/api/stores/:code/member` | 门店会员 | `v_store_member_opportunity` | | GET | `/api/cost/comparison` | 成本对比 | `v_store_theoretical_actual_cost_april` | | GET | `/api/cost/category-benchmark` | 分类成本对标 | `v_store_category_cost_benchmark_april` | | GET | `/api/cost/inventory` | 库存效率 | `v_store_inventory_efficiency_april` | | GET | `/api/platform/economics` | 平台经济性 | `v_store_platform_economics` | | GET | `/api/member/comparison` | 会员对比 | `v_member_comparison` | | GET | `/api/member/repeat` | 复购分析 | `v_store_repeat_summary_monthly` | | GET | `/api/sku/abc` | SKU ABC分析 | `v_dish_sku_abc_april` | | GET | `/api/sku/category` | 品类结构 | `category_summary` | | GET | `/api/sku/attach` | 搭售分析 | `dish_pair_summary_april` | | GET | `/api/risk/anomaly` | 异常账单 | `v_anomaly_bills` | | GET | `/api/risk/cashier` | 收银员风险 | `v_cashier_risk` | | GET | `/api/risk/zero-received` | 零实收 | `v_zero_received_detail` | | GET | `/api/marketing/plans` | 营销方案 | `v_marketing_plan_summary` | | GET | `/api/benchmark/composite` | 标杆分析 | `v_store_benchmark_composite` | | GET | `/api/tasks` | 任务列表 | `store_monthly_action_plan` | | GET | `/api/tasks/:id` | 任务详情 | `store_task` | | POST | `/api/tasks` | 创建任务 | `store_task` | | PUT | `/api/tasks/:id` | 更新任务 | `store_task` | | PUT | `/api/tasks/:id/verify` | 验收任务 | `store_task` | | GET | `/api/tasks/followup` | 任务跟进 | `v_store_monthly_followup` | | GET | `/api/time/weekday` | 星期规律 | `v_weekday_summary` | | GET | `/api/time/hourly` | 小时规律 | `v_hourly_summary` | | GET | `/api/channel` | 渠道结构 | `v_channel_daily` | ### 4.2 查询参数支持 - `month`: 月份筛选(默认2026-04) - `store_code`: 门店筛选 - `priority`: 优先级筛选(P0/P1/P2/P3) - `risk_level`: 风险等级(红/黄/绿) - `quadrant`: 经营象限 - `page` + `page_size`: 分页 - `sort_by` + `sort_order`: 排序 ### 4.3 响应格式 ```typescript interface ApiResponse { success: boolean; data: T; meta?: { total?: number; page?: number; page_size?: number; }; error?: string; } ``` --- ## 五、前端页面设计 ### 5.1 页面与角色映射 | 页面 | 角色 | 核心内容 | 对应文档章节 | |---|---|---|---| | 总部驾驶舱 | 总经理/经营班子 | 公司利润桥、P0/P1门店、重大风险 | §9.1 | | 区域经理 | 区域经理 | 门店红黄绿、任务完成、周度改善 | §9.2 | | 店长页面 | 店长 | 昨日异常、今日待办、核心指标 | §9.3 / §6.1 | | 商品部 | 商品负责人 | SKU ABC、长尾、搭售、缺货 | §9.4 | | 会员部 | 会员负责人 | 首购、复购、沉睡、召回 | §9.4 | | 财务部 | 财务负责人 | 理论vs实际成本、平台费用、异常优惠 | §9.4 | | 供应链 | 供应链负责人 | 采购价格、库存、调拨、损耗 | §9.4 | | 信息部 | 信息负责人 | 数据更新状态、映射失败、接口异常 | §9.4 | | 门店详情 | 所有角色 | 门店全维度下钻 | 下钻页 | ### 5.2 总部驾驶舱详细设计 **首页指标卡**(对应 §9.1): - 实收金额 + 环比 - 账单数 + 环比 - 平均客单价 + 环比 - 理论成本率 - 实际成本率 - 成本差异率 - 平台合并加权成本率 - 会员30日复购率 - P0/P1门店数 + 实收覆盖 **图表区**: - 日度实收趋势折线图(可切换日/周/月) - 门店风险分级分布(红黄绿堆叠图) - 门店经营象限散点图(日均实收 × 毛利率) - 平台成本率分布柱状图 - P0/P1门店实收覆盖瀑布图 **下钻能力**: - 公司 → 区域 → 门店 → 餐段 → 渠道 → SKU → 原料 → 任务 ### 5.3 店长页面设计(对应 §6.1 / §9.3) **昨日经营卡**(6个模块,每模块3个异常上限): - 收入:实收/账单/客单 vs 最近4个同星期 - 商品:核心SKU销量/缺货/搭售率 - 优惠:优惠率/异常优惠/平台活动 - 会员:新会员/二次到店/待召回 - 成本:高价值原料领用/报损/盘点异常 - 风险:零实收/撤单/退款/异常操作 **今日待办**(最多3项): - 系统自动生成的任务 - 可标记完成/填写原因/上传凭证 **本周进度**: - 核心指标 vs 目标的进度条 - 任务完成率 ### 5.4 区域经理页面设计(对应 §6.3 / §9.2) - 门店红黄绿列表/地图 - 本周需到店检查的门店 - 各店核心指标(最多2个) - 任务责任人/截止日/状态 - 同类门店基准对比 - 最近4周趋势 --- ## 六、任务闭环系统设计 ### 6.1 自动分级逻辑(对应 §7.1) ``` P0: 数据失真 / 重大风险 / 四项以上综合问题 → 当日确认、7天内形成方案 P1: 对利润或顾客持续产生明显影响 → 48小时确认、当月整改 P2: 单项指标偏弱但总体可控 → 一周内纳入计划 P3: 正常波动或观察项 → 持续监控 ``` ### 6.2 任务自动生成规则 基于 `v_store_action_priority_deep_april` 和 `store_monthly_action_plan`: - 高优惠(>23%) → 拆解平台折扣任务 - 低毛利(<70%) → SKU成本分析任务 - 高异常(>1.5%) → 全额优惠治理任务 - 低复购(<25%) → 会员触达任务 - 低客单(<33.63) → 餐段组合优化任务 - 标杆门店 → 经验输出任务 ### 6.3 任务字段(对应 §7.2) 每个任务必须包含: - 问题门店、问题指标、发生日期 - 当前值、同类基准、目标值 - 问题说明及可能原因 - 具体行动(不允许只写"加强管理") - 责任人、协同人、截止日期 - 过程证据 - 验收指标和验收结果 - 未完成原因及下一步 ### 6.4 验收规则(对应 §6.4 / §7.3) - 每家门店每月最多两个核心改进指标 - 连续两周不改善 → 重新判断原因 - 指标改善但顾客/收入恶化 → 回滚 - 验收标准:收入稳定 + 毛利改善 + 客户指标稳定 + 异常率下降 --- ## 七、实施路线图 ### 第一阶段:0-30天 — 基础平台 + 管理驾驶舱 **目标**:让现有分析真正进入管理,实现可视化驾驶舱和任务闭环 | 周次 | 后端任务 | 前端任务 | 数据层任务 | |---|---|---|---| | W1 | 项目搭建、DB连接池、基础API框架 | 项目搭建、UI框架、布局组件 | 创建 `store_task` 表 | | W2 | 概览API、门店API、风险API | 总部驾驶舱首页 | 创建任务自动生成函数 | | W3 | 成本API、平台API、会员API、SKU API | 区域经理页面、门店详情页 | — | | W4 | 任务API(CRUD+验收)、标杆API | 店长页面、任务管理页面 | 任务自动生成并关联门店 | **第一阶段交付物**: 1. 总部驾驶舱(公司概览 + 门店分级 + 下钻) 2. 区域经理页面(门店红黄绿 + 任务跟进) 3. 店长页面(昨日经营卡 + 今日待办) 4. 任务闭环系统(自动分级 → 生成任务 → 状态更新 → 验收) 5. 门店详情页(全维度指标下钻) **验收标准**: - 门店任务有责任人、有截止日、有结果 - P0/P1门店问题可以下钻到具体指标和原始明细 - 所有指标可按月份、门店筛选 ### 第二阶段:31-90天 — 补齐成本和利润主链路 | 模块 | 任务 | |---|---| | 数据层 | 建设标准主数据(dim_store/dim_sku/dim_material等) | | 数据层 | 将 `_april` 固定视图改为通用月度模型 | | 数据层 | 建立周趋势、同比、环比和整改前后对照 | | 后端 | 通用月度参数化API | | 前端 | 趋势对比页面、整改前后对照 | | 前端 | 专业部门页面(商品/会员/财务/供应链/信息) | | 前端 | 标杆分析页面与经验推广跟踪 | **第二阶段交付物**: 1. 商品部页面(SKU ABC + 长尾治理 + 搭售分析) 2. 会员部页面(复购漏斗 + 沉睡召回 + 活动贡献) 3. 财务页面(理论vs实际成本 + 平台损益 + 异常优惠) 4. 供应链页面(库存效率 + 异常货品 + 成本对标) 5. 信息部页面(数据质量监控) 6. 月度参数化模型(支持任意月份切换) 7. 趋势对比和整改前后对照 ### 第三阶段:3-6个月 — 预测和精细化运营 - 餐段销量预测、备货建议 - 排班建议 - 会员分层、流失预警、自动召回 - SKU新品准入和旧品退出机制 - 供应商评价 --- ## 八、开发环境与启动命令 ### 8.1 环境要求 - Node.js >= 18 - PostgreSQL 15(已有) - npm 或 pnpm ### 8.2 环境变量 ```env # server/.env DB_HOST=localhost DB_PORT=5432 DB_NAME=bill_query DB_USER=freedak DB_PASSWORD= PORT=3001 JWT_SECRET=your-secret-key CLIENT_URL=http://localhost:5173 ``` ### 8.3 启动命令 ```bash # 安装依赖 cd server && npm install cd ../client && npm install # 开发模式启动 cd server && npm run dev # 后端 http://localhost:3001 cd client && npm run dev # 前端 http://localhost:5173 ``` --- ## 九、关键约束与注意事项 1. **不修改现有SQL和视图**:所有现有分析视图保持不动,后端API直接查询 2. **不修改原始数据表**:`bill_records`、`dish_sales_details`等保持原样 3. **新增表放在 `analytics` schema**:与现有分析对象统一管理 4. **API不暴露SQL**:后端封装查询逻辑,前端只消费RESTful API 5. **月份参数化**:所有API支持 `month` 参数,默认 `2026-04` 6. **角色权限**:总部/区域/店长/专业部门看到不同页面和数据范围 7. **移动端适配**:店长页面优先移动端,其他页面桌面端为主 8. **数据安全**:JWT认证,敏感数据脱敏,不暴露数据库连接信息