后续系统构建方案
后续系统构建方案
> 最后更新: 2026-06-07
> 版本: v1.0
> 基于:瑞美云数据分析体系迁移指南 + 光合盐现有架构审计 + 三层数据架构设计
---
总体路线图
`
Phase 1: 基础加固(已完成 ✅)
├── ✅ 每日 SQLite 自动备份(3:00)
├── ✅ 全 Profile Holographic 记忆
├── ✅ Web UI 升级 v0.6.11
├── ✅ 光合盐BI管理手册(9个核心文档)
└── ✅ Dify Plugin Daemon 运行 + 知识库导入(8个文档)
Phase 2: 三层数据仓库建设(当前阶段 ⏳)
├── 2A: PostgreSQL 建库 + ETL + DWD层
├── 2B: DWS + ADS 层(21个物化视图)
├── 2C: 展示层配置(Dify + BI)
└── 2D: 知识库持续补充
Phase 3: 企业级增强(规划中)
├── SQLite → PostgreSQL 迁移评估
├── AI 客服训练管线
├── 操作审计日志
└── 高可用/灾备
`
---
Phase 2A: 基础设施 + DWD 明细层(预计 1 天)
任务 2A-1: PostgreSQL 建数据仓库
`sql
-- 创建数据仓库数据库
CREATE DATABASE ruimeiyun_dw;
-- 创建 analytics schema(物化视图统一放在此 schema)
\c ruimeiyun_dw
CREATE SCHEMA analytics;
`
任务 2A-2: MySQL → PostgreSQL ETL 脚本
编写 Python 脚本,将 MySQL ruimeiyun 的 8 张基表同步到 PostgreSQL:
| 目标表 | 来源表 | 同步方式 |
|--------|--------|---------|
| stg_出纳结算单 | MySQL.出纳结算单 | 全量/增量 |
| stg_到院明细 | MySQL.到院明细 | 全量/增量 |
| stg_客户盘点 | MySQL.客户盘点 | 全量/增量 |
| stg_回访记录 | MySQL.回访记录 | 全量/增量 |
| stg_712执行业绩 | MySQL.712执行业绩 | 全量/增量 |
| stg_预约记录 | MySQL.预约记录 | 全量 |
| stg_入库记录 | MySQL.入库记录 | 全量 |
| stg_白鲸门店日报 | MySQL.白鲸门店日报 | 全量 |
ETL 逻辑(已踩坑经验):
- 字段类型映射(MySQL VARCHAR → PostgreSQL TEXT)
- 日期格式标准化(统一为 TIMESTAMP)
- 空值处理(空字符串 → NULL)
- 增量同步依据:
修改时间字段 - 初次部署全量,后续增量
任务 2A-3: 创建 DWD 层物化视图(2个)
`sql
-- DWD 1: 客户到院归一
CREATE MATERIALIZED VIEW analytics.dwd_customer_visit AS
SELECT
vip_num,
DATE(biz_time) AS visit_date,
store_name,
visit_type,
-- 同一客户同一天 = 1次
ROW_NUMBER() OVER (PARTITION BY vip_num, DATE(biz_time) ORDER BY biz_time) AS visit_seq
FROM stg_到院明细;
-- DWD 2: 客户咨询师归属
CREATE MATERIALIZED VIEW analytics.dwd_customer_consultant AS
SELECT
c.vip_num,
c.customer_name,
COALESCE(c.current_consultant, c.consultant_at_order) AS effective_consultant,
-- ...其他字段
FROM stg_客户盘点 c;
`
任务 2A-4: 每日刷新 crontab
`
crontab:
0 4 * /home/ubuntu/scripts/etl_mysql_to_pg.sh # ETL同步
30 4 * /home/ubuntu/scripts/refresh_dwd.sh # 刷新DWD
`
---
Phase 2B: DWS + KPI + APP 层(预计 1 天)
任务 2B-1: DWS 岗位事实层(4个物化视图)
`sql
-- 咨询师日表
CREATE MATERIALIZED VIEW analytics.dws_consultant_daily AS
SELECT
consultant_name,
biz_date,
SUM(actual_money) AS 收款,
SUM(project_performance) AS 开单,
SUM(settlement_amount) AS 划扣,
COUNT(DISTINCT vip_num) AS 服务客户数,
COUNT(*) AS 操作次数
FROM stg_出纳结算单
GROUP BY consultant_name, biz_date;
-- 医生日表
CREATE MATERIALIZED VIEW analytics.dws_doctor_daily AS
SELECT
doctor_name,
biz_date,
SUM(settlement_amount) AS 执行业绩,
COUNT(DISTINCT vip_num) AS 治疗人数,
COUNT(*) AS 治疗次数
FROM stg_712执行业绩
GROUP BY doctor_name, biz_date;
-- 护士日表(仅医美科室)
CREATE MATERIALIZED VIEW analytics.dws_nurse_daily AS
SELECT
deduct_operator AS nurse_name,
biz_date,
SUM(settlement_amount) AS 执行业绩,
COUNT(DISTINCT vip_num) AS 服务人数,
COUNT(*) AS 操作次数
FROM stg_712执行业绩
WHERE dept_l1 IN ('微创中心', '皮肤中心', '外科中心')
GROUP BY deduct_operator, biz_date;
-- 手艺人日表(仅生美科室)
CREATE MATERIALIZED VIEW analytics.dws_craftsman_daily AS
SELECT
deduct_operator AS craftsman_name,
biz_date,
SUM(settlement_amount) AS 执行业绩,
COUNT(DISTINCT vip_num) AS 服务人数,
COUNT(*) AS 操作次数
FROM stg_712执行业绩
WHERE dept_l1 IN ('洗脸', '修丽可', '医萃托兰', '白鲸洗脸')
GROUP BY deduct_operator, biz_date;
`
任务 2B-2: KPI 管理指标层(9个物化视图)
关键视图实现:
客户分层(kpi_customer_segment):
- RFM 评分(参考各行业周期差异:生美30天、医美60-90天)
- 客户分层(高价值VIP/重点发展/潜力保持/需唤醒/已流失)
医生复购率(kpi_doctor_monthly):
- ⚠️ 此处有已知坑:必须按月限定范围
- 正确:子查询按月 GROUP BY → HAVING COUNT(*) >= 2
回访考核(kpi_recall_performance):
- 完成率 = 已回访 / 总计划
- 平均延迟天数 = AVG(实际回访日期 - 计划回访日期)
任务 2B-3: APP 查询接口层(6个物化视图)
各视图面向不同用户角色:
| 视图 | 数据来源 | 刷新依赖 |
|------|---------|---------|
| app_customer_summary | DWD + KPI层 | DWD→DWS→KPI全刷新后 |
| app_customer_detail | DWD层 | DWD刷新后 |
| app_customer_monthly | DWS层 | DWS刷新后 |
| app_staff_summary | DWS+KPI层 | DWS→KPI刷新后 |
| app_store_dashboard | KPI层 | KPI刷新后 |
| app_consultant_customer_status | DWD+DWS层 | DWD→DWS刷新后 |
任务 2B-4: 刷新脚本
`bash
#!/bin/bash
refresh_all.sh — 按依赖顺序刷新所有物化视图
export PGHOST=localhost
export PGDATABASE=ruimeiyun_dw
export PGUSER=dify
export PGPASSWORD=*
echo "$(date): 刷新 DWD..."
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dwd_customer_visit;"
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dwd_customer_consultant;"
echo "$(date): 刷新 DWS..."
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dws_consultant_daily;"
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dws_doctor_daily;"
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dws_nurse_daily;"
psql -c "REFRESH MATERIALIZED VIEW CONCURRENTLY analytics.dws_craftsman_daily;"
echo "$(date): 刷新 KPI..."
... 9个KPI视图
echo "$(date): 刷新 APP..."
... 6个APP视图
echo "$(date): 全部刷新完成"
`
---
Phase 2C: 展示层配置(预计 0.5 天,需用户配合)
任务 2C-1: 安装 Dify 插件
通过 Dify Web UI(http://
| 插件 | 用途 | 安装方式 |
|------|------|---------|
| database | 连接 PostgreSQL 数据源 | Dify 插件市场 → 安装 |
| chartgen | 自动生成图表 | Dify 插件市场 → 安装 |
| wecom-bot / dingtalk | 日报推送 | 根据使用场景选装 |
任务 2C-2: 创建 Dify AI 应用
- 创建一个"文本生成"类型应用
- 关联知识库(光合盐BI数据系统管理手册)
- 添加
database工具(连接 PostgreSQL ruimeiyun_dw) - 配置 Prompt:让 AI 能根据自然语言查询物化视图
- 配置 ChartGen:自动生成图表
任务 2C-3: BI 仪表盘(可选)
如果固定看板需求明确,评估是否安装 Metabase(最轻量 BI 工具)。
---
Phase 2D: 知识库持续补充
当前知识库结构(9个文件已完成):
`
光合盐BI数据系统管理手册/
├── 索引.md
├── 01_业务逻辑/
│ ├── 01_业务架构概述.md ✅ 核心6原则
│ ├── 03_管理口径定义.md ✅ 全口径定义
│ └── 05_门店与组织架构.md ✅ 6门店+岗位
├── 02_架构设计/
│ ├── 01_三层数据架构总览.md ✅
│ └── 03_DWD:DWS物化视图层.md ✅ 21视图详细设计
├── 03_实施过程/
│ └── 01_数据库搭建记录.md ✅ 8基表+24视图
├── 04_问题记录/
│ └── 01_数据质量问题.md ✅ 8条已知问题
├── 05_优化策略/
│ └── 01_性能优化.md ✅
├── 06_更新日志/
│ └── CHANGELOG.md ✅
└── 07_附录/
├── 01_数据库连接信息.md ✅
└── 02_常用查询模板.md ✅
`
待补充文档(在实施过程中逐步完善):
| 文档 | 触发条件 | 责任人 |
|------|---------|--------|
| 02_业务逻辑/04_数据分析维度.md | 明确分析维度和场景后 | Hermes |
| 03_实施过程/02_视图创建记录.md | 开始创建物化视图时 | Hermes |
| 03_实施过程/03_ETL脚本记录.md | ETL脚本编写时 | Hermes |
| 03_实施过程/04_展示层配置记录.md | 配置Dify时 | Hermes |
| 03_实施过程/05_备份恢复策略.md | 数据量增长后 | Hermes |
---
实施时间线
| 阶段 | 任务 | 预计时间 | 我可以做的 | 需要你做的 |
|------|------|---------|-----------|-----------|
| 2A-1 | PostgreSQL 建库 | 10分钟 | ✅ 全部 | — |
| 2A-2 | ETL Python脚本 | 2小时 | ✅ 全部 | — |
| 2A-3 | 2个DWD物化视图 | 30分钟 | ✅ 全部 | — |
| 2A-4 | crontab刷新脚本 | 10分钟 | ✅ 全部 | — |
| 2B-1 | 4个DWS物化视图 | 1小时 | ✅ 全部 | — |
| 2B-2 | 9个KPI物化视图 | 2小时 | ✅ 全部 | 确认RFM阈值 |
| 2B-3 | 6个APP物化视图 | 1小时 | ✅ 全部 | — |
| 2B-4 | 完整刷新脚本 | 30分钟 | ✅ 全部 | — |
| 2C-1 | Dify登录+安装插件 | 30分钟 | ❌ 需要你 | Web UI操作 |
| 2C-2 | Dify应用配置 | 1小时 | ⚠️ 需要你配置 | 确认Prompt模板 |
| 2C-3 | BI仪表盘 | 按需 | ⚠️ 需评估 | 决定是否上 |
---
总结
| 维度 | 现状 | Phase 2完成后 |
|------|------|--------------|
| 查询性能 | 10-30秒(标准视图) | < 50ms(物化视图) |
| 数据架构 | 单层 MySQL | 三层(ODS→DWD/DWS/ADS→展示层) |
| 查询方式 | 手动 SQL | Dify AI自然语言 + BI看板 |
| 知识管理 | 散落在对话中 | 结构化知识库 |
| 文档传承 | 无 | 完整的系统管理手册+更新日志 |
| 问题追溯 | 无 | [[问题记录]]系统(8条已记录) |