后续系统构建方案

管理

后续系统构建方案

最后更新: 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_per[[f]]ormance):

  • 完成率 = 已回访 / 总计划
  • 平均延迟天数 = AVG(实际回访日期 - 计划回访日期)

任务 2B-3: APP 查询接口层(6个物化视图)

各视图面向不同用户角色:

视图数据来源刷新依赖
app_customer_summaryDWD + KPI层DWD→DWS→KPI全刷新后
app_customer_detailDWD层DWD刷新后
app_customer_monthlyDWS层DWS刷新后
app_sta[[f]]f_summaryDWS+KPI层DWS→KPI刷新后
app_store_dashboardKPI层KPI刷新后
app_consultant_customer_statusDWD+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 插件

通过 Di[[f]]y Web UI(http://:3000)登录后:

插件用途安装方式
database连接 PostgreSQL 数据源Di[[f]]y 插件市场 → 安装
chartgen自动生成图表Di[[f]]y 插件市场 → 安装
wecom-bot / dingtalk日报推送根据使用场景选装

任务 2C-2: 创建 Dify AI 应用

  1. 创建一个"文本生成"类型应用
  2. 关联知识库(光合盐BI数据系统管理手册)
  3. 添加 database 工具(连接 PostgreSQL ruimeiyun_dw)
  4. 配置 Prompt:让 AI 能根据自然语言查询物化视图
  5. 配置 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脚本记录.mdETL脚本编写时Hermes
03_实施过程/04_展示层配置记录.md配置Di[[f]]y时Hermes
03_实施过程/05_备份恢复策略.md数据量增长后Hermes

实施时间线

阶段任务预计时间我可以做的需要你做的
2A-1PostgreSQL 建库10分钟✅ 全部
2A-2ETL Python脚本2小时✅ 全部
2A-32个DWD物化视图30分钟✅ 全部
2A-4crontab刷新脚本10分钟✅ 全部
2B-14个DWS物化视图1小时✅ 全部
2B-29个KPI物化视图2小时✅ 全部确认RFM阈值
2B-36个APP物化视图1小时✅ 全部
2B-4完整刷新脚本30分钟✅ 全部
2C-1Di[[f]]y登录+安装插件30分钟❌ 需要你Web UI操作
2C-2Di[[f]]y应用配置1小时⚠️ 需要你配置确认Prompt模板
2C-3BI仪表盘按需⚠️ 需评估决定是否上

总结

维度现状Phase 2完成后
查询性能10-30秒(标准视图)< 50ms(物化视图)
数据架构单层 MySQL三层(ODS→DWD/DWS/ADS→展示层)
查询方式手动 SQLDi[[f]]y AI自然语言 + BI看板
知识管理散落在对话中结构化知识库
文档传承完整的系统管理手册+更新日志
问题追溯[[问题记录]]系统(8条已记录)

最后更新: 2026/6/17 22:00:04