ER图

关键点总结
Session是顶层容器:每次"卖家+角色"登录创建一个session
Diagnosis按角色创建:GM创建3个,LGM创建2个,OPS创建1个
Optimize是1:1关系:每个诊断只有一次优化过程(重置会创建新的诊断)
Dialog是多轮对话:一次优化包含多轮对话,每轮对话是一条记录
History是归档:诊断完成后创建历史记录,保存报告文件ID
Chat是独立功能:与诊断流程无关,直接关联session
数据库表关系图
用户登录 → 选择卖家+角色 → 上传Excel
scop_session (会话表) 1:N
├─ scop_diagnosis (诊断表)
│ ├─ IPSF (入库配置费)
│ ├─ SIPP (自包裹计划)
│ └─ LTSF (长期仓储费)
│
├─ scop_file (上传的Excel文件) 1:N
│
├─ scop_file_response (AI返回的看板数据) 1:N
│ ├─ 10个看板指标 (多条记录)
│ ├─ 引导语 (1条记录)
│ └─ 3个诊断卡片数据 (3条记录)
│
└─ scop_chat (问题答疑聊天) 1:N
scop_diagnosis (诊断表) 1:1
└─ scop_diagnosis_optimize (优化表)
└─ scop_diagnosis_optimize_dialog (对话表) 1:N
├─ 第1步对话
├─ 第2步对话
└─ 第N步对话
scop_diagnosis (诊断表) 1:1
└─ scop_diagnosis_history (历史表)
└─ reportId (生成的Excel报告)
完整业务流程
第1步:首页 - 开始诊断
界面:输入卖家名称 + 选择角色(总经理/物流经理/运营经理) + 上传Excel
↓
后端:startDiagnosis()
├─ 创建 scop_session (1条)
├─ 创建 scop_diagnosis (根据角色创建1-3条)
│ └─ GM角色 → IPSF + SIPP + LTSF (3条)
│ └─ LGM角色 → IPSF + SIPP (2条)
│ └─ OPS角色 → LTSF (1条)
├─ 保存 scop_file (上传的Excel文件)
└─ 调用AI: /scop/upload-data
└─ 保存 scop_file_response
├─ 10条看板数据 (多条数据看板)
├─ 1条引导语
└─ 3条诊断卡片数据
第2步:诊断首页 - 查看看板和诊断卡片
界面:显示10个看板指标 + 引导语 + 3个诊断卡片
-
入库配置费IPSF: $30,260.2
-
自包裹计划SIPP: $88,672.9
-
长期仓储费LTSF: $7,455.3
↓
后端:getDiagnosisDetail(sessionId)
└─ 从 scop_file_response 读取数据
第3步:点击诊断卡片 - 开始优化(例如IPSF)
界面:点击"入库配置费IPSF"的"继续优化"按钮
↓
后端:startOptimize(sessionId, diagnosis="IPSF")
├─ 调用AI: /scop/analysis (通知AI开始分析)
├─ 调用AI: /scop/optimize (message="start")
├─ 创建 scop_diagnosis_optimize (1条优化记录)
└─ 创建 scop_diagnosis_optimize_dialog (第1轮对话)
└─ message: "您希望深入了解哪些进化优化的详细内容和如何有效地实施吗?"
content: ["是的,我想要了解更多步骤", "暂时不需要,继续后续"]
第4步:IPSF优化指南 - 多轮对话
界面:显示AI的问题和选项,用户选择答案
↓
后端:continueOptimize(sessionId, diagnosisId, content="用户选择的答案")
├─ 调用AI: /scop/optimize (message=用户选择)
├─ 更新上一轮对话的answer字段
└─ 创建新的 scop_diagnosis_optimize_dialog (第N轮对话)
└─ 重复直到 endFlag=true
第5步:优化完成 - 生成报告
当 endFlag=true 时:
├─ 调用AI: /scop/report (获取Word报告)
├─ 保存报告到文件系统
├─ 创建 scop_diagnosis_history (1条历史记录)
│ └─ reportId: 报告文件ID
│ └─ reportName: "report_张三_gm_IPSF.docx"
└─ 更新 scop_diagnosis.status = "已完成"
第6步:问题答疑 - 独立聊天
界面:右侧"SCOP问题答疑"聊天框
↓
后端:chat(sessionId, requestContent)
├─ 调用AI: /scop/chat
└─ 保存 scop_chat (每次对话1条记录)
└─ 与session是1:N关系