|
|
@@ -0,0 +1,494 @@
|
|
|
+# 心版块 Phase 1 实现计划
|
|
|
+
|
|
|
+## 概述
|
|
|
+
|
|
|
+心维度(火 #FF6B9D,大爱相随)第一阶段聚焦**核心体验闭环补齐**,整合六大补充内容:八字深化、星盘引入、数字能量、DAN情绪指标深度整合、菌群报告情绪指标、拍照记录情绪。
|
|
|
+
|
|
|
+目标:用户在心版块获得**认识→记录→疏导→成长**的完整体验。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 优先级与依赖关系
|
|
|
+
|
|
|
+```
|
|
|
+ Phase 1a Phase 1b Phase 1c
|
|
|
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
|
+ │ A: 情绪打卡(含拍照) │ │ C: 传统文化镜展示 │ │ E: 疏导工具箱MVP │
|
|
|
+ │ B: Schema修复 │ → │ D: 菌群情绪指标 │ → │ F: DAN深度整合 │
|
|
|
+ │ (核心日活 + 基础) │ │ (三项并行) │ │ (持续完善) │
|
|
|
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+| 阶段 | 任务 | 依赖 | 工作量评估 |
|
|
|
+|------|------|------|-----------|
|
|
|
+| 1a-1 | A: 情绪打卡(含拍照) | 无 | 大(后端+前端+存储) |
|
|
|
+| 1a-2 | B: DAN schema修复 | 无 | 小(SQL迁移) |
|
|
|
+| 1b-1 | C: 传统文化镜(八字/星座/灵数) | 无(数据已有) | 中(前端+内容) |
|
|
|
+| 1b-2 | D: 菌群情绪指标打通 | 无(数据已有) | 小(API+前端片段) |
|
|
|
+| 1b-3 | F: DAN情绪指标深度整合 | 依赖 B | 中(DTO+Service+前端) |
|
|
|
+| 1c | E: 疏导工具箱+AI情境感知 | 依赖 A+D+F 上线 | 中(内容+AI prompt) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1a-1: 情绪打卡(含拍照)
|
|
|
+
|
|
|
+### 1a-1.1 数据层
|
|
|
+
|
|
|
+**新增表 `emotion_checkin`**
|
|
|
+
|
|
|
+```sql
|
|
|
+CREATE TABLE emotion_checkin (
|
|
|
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
|
+ child_id BIGINT NOT NULL,
|
|
|
+ mood_weather VARCHAR(20) NOT NULL COMMENT '天气类比: sunny/cloudy/rainy/stormy/rainbow',
|
|
|
+ emotion_tags VARCHAR(200) COMMENT '情绪标签JSON数组: ["开心","期待"]',
|
|
|
+ photo_url VARCHAR(500) COMMENT '拍照URL(仅自己可见)',
|
|
|
+ note TEXT COMMENT '文字记录',
|
|
|
+ energy_awarded INT DEFAULT 5 COMMENT '本次获得心能量',
|
|
|
+ checkin_date DATE NOT NULL,
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ INDEX idx_child_date (child_id, checkin_date),
|
|
|
+ INDEX idx_child_weather (child_id, mood_weather)
|
|
|
+) COMMENT='情绪打卡记录';
|
|
|
+```
|
|
|
+
|
|
|
+**文件:** `cfc-backend/src/main/resources/migration_add_emotion_checkin.sql`
|
|
|
+
|
|
|
+### 1a-1.2 后端
|
|
|
+
|
|
|
+**实体:** `EmotionCheckin.java`
|
|
|
+
|
|
|
+```java
|
|
|
+@TableName("emotion_checkin")
|
|
|
+public class EmotionCheckin implements Serializable {
|
|
|
+ @TableId(type = IdType.AUTO)
|
|
|
+ private Long id;
|
|
|
+ private Long childId;
|
|
|
+ private String moodWeather; // sunny/cloudy/rainy/stormy/rainbow
|
|
|
+ private String emotionTags; // JSON array
|
|
|
+ private String photoUrl;
|
|
|
+ private String note;
|
|
|
+ private Integer energyAwarded;
|
|
|
+ private Date checkinDate;
|
|
|
+ private Date createdAt;
|
|
|
+ private Date updatedAt;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**DTO:**
|
|
|
+- `EmotionCheckinDTO` — 创建打卡的请求体(包含 moodWeather/emotionTags/photoUrl/note)
|
|
|
+- `EmotionCheckinVO` — 打卡记录的展示对象(含儿童信息、格式化日期)
|
|
|
+- `EmotionTrendVO` — 趋势数据(按周/月的情绪分布统计)
|
|
|
+
|
|
|
+**Controller:** `EmotionCheckinController.java`
|
|
|
+
|
|
|
+| API | 方法 | 说明 |
|
|
|
+|-----|------|------|
|
|
|
+| `POST /api/mind/checkin/create` | create | 创建打卡,自动奖励心能量 |
|
|
|
+| `POST /api/mind/checkin/list` | list | 打卡记录列表(分页) |
|
|
|
+| `POST /api/mind/checkin/latest` | latest | 获取最近打卡 |
|
|
|
+| `POST /api/mind/checkin/trend` | trend | 情绪趋势(周/月统计) |
|
|
|
+| `POST /api/mind/checkin/stats` | stats | 统计(连续天数/总次数/各天气占比) |
|
|
|
+
|
|
|
+**Service:** `EmotionCheckinService.java`
|
|
|
+
|
|
|
+核心逻辑:
|
|
|
+- `createCheckin()` → 保存记录 → 调用 `EnergyService.awardEnergy(childId, "emotion_checkin", checkinId, 5, "情绪打卡奖励", 0)`
|
|
|
+- `getTrend()` → 按日期分组统计各 moodWeather 出现频率
|
|
|
+- `getStats()` → 连续打卡天数、本月打卡次数、能量累积
|
|
|
+
|
|
|
+**Mapper:** `EmotionCheckinMapper.java`
|
|
|
+
|
|
|
+### 1a-1.3 前端(小程序)
|
|
|
+
|
|
|
+**新页面:** `pages/mind/emotion-checkin.vue`
|
|
|
+
|
|
|
+交互流程:
|
|
|
+1. 顶部:日期显示 + 连续打卡徽章
|
|
|
+2. 天气选择(5个大按钮带图标的 moodWeather):
|
|
|
+ - ☀️ sunny = 心情很好
|
|
|
+ - ⛅ cloudy = 一般般
|
|
|
+ - 🌧️ rainy = 有点难过
|
|
|
+ - ⚡ stormy = 很烦躁
|
|
|
+ - 🌈 rainbow = 特别开心
|
|
|
+3. 情绪标签(可多选):开心/期待/平静/惊喜/难过/生气/紧张/无聊/疲惫/害怕 + 自定义
|
|
|
+4. 拍照按钮 → `uni.chooseImage` 或相机 → 预览+重拍
|
|
|
+5. 文字输入框(可选)
|
|
|
+6. 提交按钮 → 显示「+5心能量」toast + 跳转情绪趋势
|
|
|
+
|
|
|
+**新页面:** `pages/mind/emotion-trend.vue`
|
|
|
+
|
|
|
+显示:
|
|
|
+- 月度情绪热力图(日历图,每天用对应天气颜色标记)
|
|
|
+- 各情绪占比统计(环形图)
|
|
|
+- 连续打卡天数
|
|
|
+- 本月累积心能量
|
|
|
+
|
|
|
+**组件:**
|
|
|
+- `EmotionWeatherPicker.vue` — 天气选择器
|
|
|
+- `EmotionTagPicker.vue` — 标签选择器
|
|
|
+- `EmotionCalendar.vue` — 情绪日历热力图
|
|
|
+
|
|
|
+**API 集成:** 在 `utils/api.js` 添加:
|
|
|
+- `createEmotionCheckin(data)` → POST `/api/mind/checkin/create`
|
|
|
+- `getEmotionCheckinList(params)` → POST `/api/mind/checkin/list`
|
|
|
+- `getEmotionCheckinTrend(params)` → POST `/api/mind/checkin/trend`
|
|
|
+- `getEmotionCheckinStats(params)` → POST `/api/mind/checkin/stats`
|
|
|
+- `getLatestEmotionCheckin(params)` → POST `/api/mind/checkin/latest`
|
|
|
+
|
|
|
+### 1a-1.4 文件上传
|
|
|
+
|
|
|
+- 小程序端:`uni.chooseImage` → `uni.uploadFile` → 后端文件服务
|
|
|
+- 后端:文件上传到配置的存储路径(沿用现有 `config.js` 的上传配置)
|
|
|
+- `EmotionCheckin.photoUrl` 只存储相对路径,前端拼接完整URL
|
|
|
+- **隐私控制**:photoUrl 仅对孩子自己可见,家长端 `/api/mind/checkin/list` 返回的VO中 photoUrl 置空
|
|
|
+
|
|
|
+### 1a-1.5 QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 打卡创建 | curl/Postman | `POST /api/mind/checkin/create` 传 childId=1, moodWeather=sunny, emotionTags=["开心"] | 返回 id > 0, energyAwarded=5 |
|
|
|
+| 拍照上传 | 小程序预览 | 在打卡页点击拍照按钮,拍摄后提交 | photoUrl 非空,相册页可见 |
|
|
|
+| 能量奖励 | curl 查 db | `SELECT energy_balance FROM energy_balance WHERE child_id=1 AND dimension_code='mind'` | 余额增加5 |
|
|
|
+| 趋势统计 | curl | `POST /api/mind/checkin/trend` 传 childId=1, period=month | 返回按日期的 moodWeather 分布 |
|
|
|
+| 家长隐私 | curl | 用 parent role token 调 `/api/mind/checkin/list?childId=1` | 返回的 photoUrl 为 null |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1a-2: DAN Schema 修复
|
|
|
+
|
|
|
+### 背景
|
|
|
+
|
|
|
+`DanAssessmentResult.java` 实体中定义了 v1.2 EMI 字段和大五人格字段,但 `dan_assessment_results` 表缺少对应的列。
|
|
|
+
|
|
|
+### SQL 迁移
|
|
|
+
|
|
|
+**文件:** `cfc-backend/src/main/resources/migration_fix_dan_schema.sql`
|
|
|
+
|
|
|
+```sql
|
|
|
+-- v1.2 EMI 心理子维度(与 DanAssessmentResult.java 实体 Integer 类型一致)
|
|
|
+ALTER TABLE dan_assessment_results
|
|
|
+ ADD COLUMN emotion_score INT DEFAULT NULL COMMENT '情绪商数 0-100',
|
|
|
+ ADD COLUMN resilience_score INT DEFAULT NULL COMMENT '心理韧性 0-100',
|
|
|
+ ADD COLUMN stress_coping_score INT DEFAULT NULL COMMENT '压力应对 0-100',
|
|
|
+ ADD COLUMN self_awareness_score INT DEFAULT NULL COMMENT '自我认知 0-100';
|
|
|
+
|
|
|
+-- 大五人格
|
|
|
+ALTER TABLE dan_assessment_results
|
|
|
+ ADD COLUMN openness_score INT DEFAULT NULL COMMENT '开放性 0-100',
|
|
|
+ ADD COLUMN conscientiousness_score INT DEFAULT NULL COMMENT '尽责性 0-100',
|
|
|
+ ADD COLUMN extraversion_score INT DEFAULT NULL COMMENT '外向性 0-100',
|
|
|
+ ADD COLUMN agreeableness_score INT DEFAULT NULL COMMENT '宜人性 0-100',
|
|
|
+ ADD COLUMN neuroticism_score INT DEFAULT NULL COMMENT '神经质性 0-100',
|
|
|
+ ADD COLUMN big_five_overall_score INT DEFAULT NULL COMMENT '大五人格综合分 0-100';
|
|
|
+```
|
|
|
+
|
|
|
+### QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 字段写入 | curl + 直连DB | 手工 INSERT 包含新字段的 dan_assessment_results 记录 | 写入成功,无截断错误 |
|
|
|
+| 字段读取 | curl | `SELECT emotion_score, resilience_score, openness_score FROM dan_assessment_results WHERE id=新记录id` | 返回写入的 INT 值 |
|
|
|
+| 服务接口 | curl | `POST /api/emireport/latest` 传 childId | 返回的 EmiReportDTO 含新字段且值正确 |
|
|
|
+| EnergyService 不受影响 | curl | `POST /api/energy/overview` 传 familyId | mind 能量值正常显示,与旧逻辑一致 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1b-1: 传统文化镜展示
|
|
|
+
|
|
|
+### 定位
|
|
|
+
|
|
|
+在心版块增加"传统文化镜"标签页,将已有但用户不可见的先天属性数据可视化。
|
|
|
+
|
|
|
+**页面位置:** `pages/mind/index.vue` 在现有双Tab(心理/认知)基础上增加第三个Tab "传统",或作为心版块首页下方的子区域。
|
|
|
+
|
|
|
+**推荐方案:** 心版块首页保留心理Tab为主内容,下方增加「传统文化洞察」卡片区域,点击进入详情页 `pages/mind/traditional-mirror.vue`。
|
|
|
+
|
|
|
+### 八字展示
|
|
|
+
|
|
|
+**数据源:** `FamilyMemberAttributes.eightCharacters` (JSON: `{"year":"甲子","month":"丙寅","day":"戊辰","hour":"壬申"}`) + `FamilyMemberAttributes.wuxingElements` (JSON: `{"wood":30,"fire":45,"earth":60,"metal":25,"water":40}`)
|
|
|
+
|
|
|
+**API 复用:** `POST /api/family/attributes/get` — 已有
|
|
|
+
|
|
|
+**前端组件设计:**
|
|
|
+
|
|
|
+八字卡包含:
|
|
|
+- 四柱竖排显示(年柱/月柱/日柱/时柱 各一列,每列显示天干+地支)
|
|
|
+- 五行能量条(木火土金水 五项水平条形图)
|
|
|
+- 五行比例圆形图
|
|
|
+- 个性化解读(基于五行分布)
|
|
|
+
|
|
|
+### 五行命理解读
|
|
|
+
|
|
|
+**新增表 `bazi_reading_template`:**
|
|
|
+
|
|
|
+```sql
|
|
|
+CREATE TABLE bazi_reading_template (
|
|
|
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
|
+ element VARCHAR(20) NOT NULL COMMENT '五行: wood/fire/earth/metal/water',
|
|
|
+ condition VARCHAR(20) NOT NULL COMMENT '状态: strong/weak/balanced',
|
|
|
+ personal_trait TEXT COMMENT '性格特质描述',
|
|
|
+ mind_growth_advice TEXT COMMENT '心理成长建议',
|
|
|
+ daily_tip_template TEXT COMMENT '每日宜忌模板',
|
|
|
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ UNIQUE KEY uk_element_condition (element, condition)
|
|
|
+) COMMENT='五行命理解读模板';
|
|
|
+```
|
|
|
+
|
|
|
+**解析逻辑:** 在 `FamilyMemberAttributeService` 中新增 `getWuxingReading()` 方法,根据 wuxingElements 中占比最高的元素和占比判断强弱,匹配 `bazi_reading_template`。
|
|
|
+
|
|
|
+### 星座展示
|
|
|
+
|
|
|
+**数据源:** `ZodiacConfig` + `FamilyMemberAttributes.zodiac`
|
|
|
+
|
|
|
+已通过 `ZodiacConfigController` 管理星座配置(含日期范围、元素属性、base分数)。
|
|
|
+
|
|
|
+前端展示:
|
|
|
+- 太阳星座图标 + 名称
|
|
|
+- 元素属性(火/土/风/水)+ 对应的五行类比
|
|
|
+- 星座性格关键字
|
|
|
+- "今日星座运程"(内容可后期通过运营配置)
|
|
|
+
|
|
|
+### QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 八字数据读取 | curl | `POST /api/family/attributes/get` 传 memberId | eightCharacters JSON 含四柱,wuxingElements 含五行百分比 |
|
|
|
+| 前端八字展示 | 小程序预览 | 打开心 > 传统文化镜 | 四柱竖排展示,五行能量条显示正确 |
|
|
|
+| 星座展示 | 小程序预览 | 同上页面 | 显示太阳星座名称、元素、性格关键字 |
|
|
|
+| 生命灵数展示 | 小程序预览 | 同上页面 | 显示灵数(1-9)、称号、特质关键词 |
|
|
|
+
|
|
|
+### 生命灵数展示
|
|
|
+
|
|
|
+**数据源:** `FamilyMemberAttributes.behaviorModifier` JSON 中的 `lifeNumber` (1-9)
|
|
|
+
|
|
|
+**新增表 `numsoul_config`:**
|
|
|
+
|
|
|
+```sql
|
|
|
+CREATE TABLE numsoul_config (
|
|
|
+ number INT PRIMARY KEY COMMENT '灵数1-9',
|
|
|
+ title VARCHAR(50) NOT NULL COMMENT '称号,如"开创者"',
|
|
|
+ keywords VARCHAR(200) COMMENT '性格关键词',
|
|
|
+ mind_growth_advice TEXT COMMENT '心理成长建议',
|
|
|
+ recommended_article_tags VARCHAR(200) COMMENT '关联文章标签',
|
|
|
+ color_hex VARCHAR(7) COMMENT '代表色'
|
|
|
+) COMMENT='生命灵数配置';
|
|
|
+```
|
|
|
+
|
|
|
+**API:** 新增 `POST /api/mind/numsoul/{number}` 或复用 `FamilyAttributeController` 扩展
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1b-2: 菌群情绪指标打通
|
|
|
+
|
|
|
+### 数据链路
|
|
|
+
|
|
|
+```
|
|
|
+HealthReport (菌群报告)
|
|
|
+ → HealthIndicator (category="神经递质与激素")
|
|
|
+ → 血清素/多巴胺/GABA/皮质醇 等指标
|
|
|
+ → 心版块展示
|
|
|
+```
|
|
|
+
|
|
|
+### QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 神经递质指标查询 | curl | `POST /api/mind/neurotransmitters` 传 childId(该 child 已有菌群报告) | 返回 category="神经递质与激素" 的指标列表,含 indicatorName/value/status |
|
|
|
+| 无报告时处理 | curl | `POST /api/mind/neurotransmitters` 传无报告的 childId | 返回空列表,不抛异常 |
|
|
|
+| 前端展示 | 小程序预览 | 打开心首页 | 显示肠脑轴卡片,含神经递质指标和状态图标 |
|
|
|
+| 身维度不受影响 | curl | `POST /api/health/body/detail` 传 childId | 身维度数据正常,不受影响 |
|
|
|
+
|
|
|
+### API 扩展
|
|
|
+
|
|
|
+**在现有 `HealthReportController` 中新增:**
|
|
|
+
|
|
|
+| API | 说明 |
|
|
|
+|-----|------|
|
|
|
+| `POST /api/mind/neurotransmitters` | 获取儿童最新的神经递质类指标 |
|
|
|
+| `POST /api/mind/gut-emotion-insight` | 基于菌群数据的情绪洞察摘要 |
|
|
|
+
|
|
|
+**Service 扩展:** `HealthReportService` 新增方法:
|
|
|
+
|
|
|
+```java
|
|
|
+public List<HealthIndicator> getMindRelatedIndicators(Long childId) {
|
|
|
+ // 获取最新菌群报告中 category="神经递质与激素" 的指标
|
|
|
+ // 按重要性排序返回
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 前端展示
|
|
|
+
|
|
|
+在心版块首页添加「肠脑轴」小卡片区域:
|
|
|
+- 显示关键神经递质指标(最多4项)+ 状态图标
|
|
|
+- 每项显示:名称 + 值 + 状态(正常/偏低/偏高)+ 一句话解读
|
|
|
+- 点击进入详情页或展开详情
|
|
|
+
|
|
|
+**示例展示:**
|
|
|
+```
|
|
|
+🧠 肠脑情绪关联
|
|
|
+┌──────────────────────────────┐
|
|
|
+│ 血清素 76% ████████ ✅ │
|
|
|
+│ 多巴胺 42% ████ ⚠️ │
|
|
|
+│ GABA 81% ████████ ✅ │
|
|
|
+│ 皮质醇 55% █████ ✅ │
|
|
|
+└──────────────────────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1b-3: DAN情绪指标深度整合
|
|
|
+
|
|
|
+### 问题修复
|
|
|
+
|
|
|
+**现状:** `EmiReportService` 已映射大五人格字段,但**未映射 original EMI 四字段**(emotionManagementScore/empathyScore/socialAdaptabilityScore/selfMotivationScore)。`EmiReportDTO` 已包含大五人格字段,只需补充 original EMI 四字段。
|
|
|
+
|
|
|
+**修复:** `EmiReportService.getChildLatestEmiReport()` 补充映射:
|
|
|
+
|
|
|
+```java
|
|
|
+// 补充mapping — original EMI 四字段
|
|
|
+dto.setEmotionManagementScore(result.getEmotionManagementScore());
|
|
|
+dto.setEmpathyScore(result.getEmpathyScore());
|
|
|
+dto.setSocialAdaptabilityScore(result.getSocialAdaptabilityScore());
|
|
|
+dto.setSelfMotivationScore(result.getSelfMotivationScore());
|
|
|
+```
|
|
|
+
|
|
|
+### DTO 扩展
|
|
|
+
|
|
|
+`EmiReportDTO` 补充 original EMI 四字段(大五人格字段已存在):
|
|
|
+
|
|
|
+| 新增字段 | 类型 | 说明 |
|
|
|
+|---------|------|------|
|
|
|
+| emotionManagementScore | Integer | original EMI — 情绪管理 |
|
|
|
+| empathyScore | Integer | original EMI — 同理心 |
|
|
|
+| socialAdaptabilityScore | Integer | original EMI — 社交适应 |
|
|
|
+| selfMotivationScore | Integer | original EMI — 自我激励 |
|
|
|
+
|
|
|
+### QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 字段映射完整性 | curl | `POST /api/emireport/latest` 传 childId | 返回的 DTO 含 emotionManagementScore/empathyScore/socialAdaptabilityScore/selfMotivationScore 且值正确 |
|
|
|
+| 前端展示 | 小程序预览 | 打开心>心理Tab > EMI报告 | 显示新增的情绪管理、同理心等维度 |
|
|
|
+
|
|
|
+### 前端 emotion-report.vue 扩展
|
|
|
+
|
|
|
+- 增加"情绪管理三原色"(emotionManagement + empathy + selfMotivation 的三角形对比图)
|
|
|
+- 增加大五人格的详细解读(每种特质的含义 + 高分/低分描述)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1c: 疏导工具箱 + AI情境感知
|
|
|
+
|
|
|
+### 疏导工具箱
|
|
|
+
|
|
|
+**前端页面:** `pages/mind/soothe-toolbox.vue`
|
|
|
+
|
|
|
+内容:
|
|
|
+- **呼吸练习**:4-7-8 呼吸法动画引导(吸气4秒→屏息7秒→呼气8秒)
|
|
|
+- **正念练习**:简单的正念引导文本(可配合 Dify AI 语音)
|
|
|
+- **情绪涂鸦**:鼓励孩子在纸上/平板上画下情绪
|
|
|
+- **运动释压**:简单的伸展动作推荐(结合身维度)
|
|
|
+
|
|
|
+### QA 验证
|
|
|
+
|
|
|
+| 验证项 | 工具 | 步骤 | 预期结果 |
|
|
|
+|--------|------|------|----------|
|
|
|
+| 工具箱页面加载 | 小程序预览 | 打开疏导工具箱 | 显示呼吸练习/正念引导/涂鸦/运动 四个模块 |
|
|
|
+| 呼吸动画 | 小程序预览 | 点击呼吸练习 | 4-7-8 呼吸动画引导正常播放 |
|
|
|
+| AI情绪感知 | curl | 先创建3次 rainy 打卡,再发 `POST /api/ai/chat/send` | AI 回复体现对负面情绪的关怀 |
|
|
|
+| 无情绪数据时 | curl | 对无打卡记录的 child 发 `POST /api/ai/chat/send` | 正常对话,不注入情绪上下文 |
|
|
|
+
|
|
|
+### AI情境感知
|
|
|
+
|
|
|
+**修改:** `AIService.java` — 新增 `buildMindContextPrompt()` 方法
|
|
|
+
|
|
|
+当情绪打卡数据可用时,AI 对话自动注入:
|
|
|
+```
|
|
|
+用户最近情绪状态:[摘要]
|
|
|
+连续负面情绪:[是/否]
|
|
|
+建议关怀方向:[根据情绪标签推荐的对话策略]
|
|
|
+```
|
|
|
+
|
|
|
+**触发条件:**
|
|
|
+- `EmotionCheckinService` 检测到连续3天 moodWeather 为 rainy/stormy → 自动建议家长关注
|
|
|
+- AI 对话时注入最近情绪数据作为上下文
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 文件变更清单总览
|
|
|
+
|
|
|
+### 后端新增文件
|
|
|
+
|
|
|
+| 文件 | 阶段 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `entity/EmotionCheckin.java` | 1a-1 | 情绪打卡实体 |
|
|
|
+| `dto/EmotionCheckinDTO.java` | 1a-1 | 打卡创建请求体 |
|
|
|
+| `dto/EmotionCheckinVO.java` | 1a-1 | 打卡展示对象 |
|
|
|
+| `dto/EmotionTrendVO.java` | 1a-1 | 情绪趋势数据 |
|
|
|
+| `controller/EmotionCheckinController.java` | 1a-1 | 打卡API |
|
|
|
+| `service/EmotionCheckinService.java` | 1a-1 | 打卡业务逻辑 |
|
|
|
+| `mapper/EmotionCheckinMapper.java` | 1a-1 | MyBatis Mapper |
|
|
|
+| `entity/BaziReadingTemplate.java` | 1b-1 | 五行命理解读实体 |
|
|
|
+| `entity/NumSoulConfig.java` | 1b-1 | 灵数配置实体 |
|
|
|
+
|
|
|
+### 后端修改文件
|
|
|
+
|
|
|
+| 文件 | 阶段 | 变更 |
|
|
|
+|------|------|------|
|
|
|
+| `dto/EmiReportDTO.java` | 1b-3 | 增加 original EMI + Big Five 字段 |
|
|
|
+| `service/EmiReportService.java` | 1b-3 | 增加所有字段的映射 |
|
|
|
+| `service/HealthReportService.java` | 1b-2 | 新增 getMindRelatedIndicators() |
|
|
|
+| `service/FamilyMemberAttributeService.java` | 1b-1 | 新增 getWuxingReading() |
|
|
|
+| `service/EnergyService.java` | 1a-1 | 确认打卡→奖能量调用点 |
|
|
|
+| `utils/api.js` (前端) | 1a-1 | 新增打卡/趋势API |
|
|
|
+
|
|
|
+### 前端新增页面
|
|
|
+
|
|
|
+| 页面 | 阶段 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `pages/mind/emotion-checkin.vue` | 1a-1 | 情绪打卡页 |
|
|
|
+| `pages/mind/emotion-trend.vue` | 1a-1 | 情绪趋势页 |
|
|
|
+| `pages/mind/traditional-mirror.vue` | 1b-1 | 传统文化镜详情页 |
|
|
|
+| `pages/mind/soothe-toolbox.vue` | 1c | 疏导工具箱 |
|
|
|
+
|
|
|
+### 前端新建组件
|
|
|
+
|
|
|
+| 组件 | 阶段 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `components/EmotionWeatherPicker.vue` | 1a-1 | 天气选择器 |
|
|
|
+| `components/EmotionTagPicker.vue` | 1a-1 | 标签选择器 |
|
|
|
+| `components/EmotionCalendar.vue` | 1a-1 | 情绪日历热力图 |
|
|
|
+| `components/WuxingChart.vue` | 1b-1 | 五行能量可视化 |
|
|
|
+| `components/BaziCard.vue` | 1b-1 | 八字展示卡 |
|
|
|
+
|
|
|
+### SQL 迁移
|
|
|
+
|
|
|
+| 文件 | 阶段 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `migration_add_emotion_checkin.sql` | 1a-1 | 新建情绪打卡表 |
|
|
|
+| `migration_fix_dan_schema.sql` | 1a-2 | DAN表加字段 |
|
|
|
+| `migration_add_wuxing_reading.sql` | 1b-1 | 命理解读+灵数配置表 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 执行顺序建议
|
|
|
+
|
|
|
+```
|
|
|
+第1周: [1a-1] 情绪打卡(含拍照)+ [1a-2] DAN schema修复
|
|
|
+ → 核心日活功能上线,基础数据修复
|
|
|
+
|
|
|
+第2周: [1b-1] 传统文化镜展示 + [1b-2] 菌群情绪指标
|
|
|
+ → 八字/星座/灵数可视化,肠脑轴卡片
|
|
|
+
|
|
|
+第3周: [1b-3] DAN情绪指标深度整合
|
|
|
+ → EMI报告丰富化,大五人格展示
|
|
|
+
|
|
|
+第4周: [1c] 疏导工具箱 + AI情境感知
|
|
|
+ → 呼吸练习、正念引导、AI情感关怀
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+*注:本计划为 Phase 1 核心闭环,Phase 2(亲子互动活动、月度心理成长报告)和 Phase 3(情绪预警、维度联动算法)将在 Phase 1 上线验证后规划。*
|