Files
SBrainCO/docs/智脑实施方法论/10-技术参考-项目概述与架构.md
T

72 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 10 · 技术参考:项目概述与架构
## 1. 项目背景
为连锁经营企业(西部马华,100+门店)构建数据分析智脑平台,覆盖:
- **老板驾驶舱**:门店风险评级、营收概览、平台经济性
- **门店分级**:红/黄/绿三色风险评级与明细
- **态势感知**:健康度评分、自动化预警、跨模块关联分析、趋势预测
- **风险明细**:异常账单、零实收、收银员风险
- **智能排班**:客流热力图、排班匹配度、人效对标、考勤预警
- **成本分析**:理论成本vs实际成本、成本方差、菜品级分析
- **会员复购**:会员占比、复购率、营销方案效果
- **SKU分析**:ABC分类、菜品销售结构
## 2. 技术架构
```
┌─────────────────────────────────────────────────┐
│ 前端 (React + TypeScript + Vite) │
│ - Recharts 图表库 │
│ - @tanstack/react-query 数据请求 │
│ - 自研组件: MetricCard / FilterableTable / │
│ CollapsibleSection / MonthPicker │
│ - 部署到 Nginx 静态文件 │
├─────────────────────────────────────────────────┤
│ 后端 (Express + TypeScript) │
│ - 路由按模块拆分: data.ts / situational- │
│ awareness.ts / smart-scheduling.ts / │
│ cost-analysis.ts / store-expense.ts │
│ - pg 库直连 PostgreSQL │
│ - JWT 认证 + 数据权限 (getDataScope) │
│ - PM2 进程管理 │
├─────────────────────────────────────────────────┤
│ 数据库 (PostgreSQL 15) │
│ - bill_query: 业务数据 (原始表 + 物化视图) │
│ - sbrain_admin: 平台管理 (租户/用户/配置) │
│ - FRP 隧道: 本地5432 → 服务器15432 │
└─────────────────────────────────────────────────┘
```
## 3. 数据流
```
原始Excel/CSV → 导入脚本 → bill_records / salary_detail_records / attendance_records
物化视图层 (mv_*)
┌─────────────┼─────────────┐
↓ ↓ ↓
mv_bill_hourly mv_risk_* mv_store_*_monthly
↓ ↓ ↓
后端API (SQL查询)
前端Dashboard
```
## 4. 部署拓扑
| 组件 | 位置 | 说明 |
|------|------|------|
| 前端 | 服务器 Nginx | `/var/www/dm.all8ai.top` 静态文件 |
| 后端 | 服务器 PM2 | `sbrain-server` 进程,端口9333 |
| 数据库 | 本地 PostgreSQL | 通过FRP隧道暴露到服务器15432 |
| 域名 | dm.all8ai.top | Nginx反向代理 `/api/` → 后端 |
## 5. 关键设计决策
1. **物化视图而非实时查询**:原始表千万级,物化视图预聚合保证API响应速度
2. **FRP隧道而非云数据库**:数据安全要求高,数据库留在本地,通过隧道供服务器访问
3. **多租户SaaS架构**`sbrain_admin` 管理租户配置,`tenant_configs` 表驱动数据源连接
4. **数据权限分层**:总部看全部门店、区域经理看本区域、店长看本店
5. **默认月份参数**:前端统一使用 `DEFAULT_MONTH` 常量,避免新月份无数据时空白