Jelajahi Sumber

feat(doa): 迁移314创建DOA三表(doa_stage/doa_goal/doa_week)

Sisyphus 1 Minggu lalu
induk
melakukan
f84aa14953

+ 63 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -10972,6 +10972,69 @@ sqls.add("INSERT IGNORE INTO health_norm_reference (dimension, gender, age_min,
             log.info("迁移317: 已创建basic_quota_usage表");
             log.info("迁移317: 已创建basic_quota_usage表");
         } catch (Exception e) {
         } catch (Exception e) {
             // 表已存在,忽略
             // 表已存在,忽略
+
+
+        // 迁移318: 创建 DOA 个人目标-周计划-周复盘三表(家庭打卡个人目标模块,2026-09-12)
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS doa_stage (" +
+                    "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                    "family_id BIGINT NOT NULL COMMENT '家庭ID', " +
+                    "member_id BIGINT NOT NULL COMMENT '目标归属成员ID(family_members.id)', " +
+                    "title VARCHAR(200) COMMENT '阶段主题(可选)', " +
+                    "start_date DATE NOT NULL COMMENT '阶段开始日期', " +
+                    "end_date DATE NOT NULL COMMENT '阶段结束日期', " +
+                    "duration_weeks TINYINT NOT NULL COMMENT '周期周数:2/4/8/12', " +
+                    "status VARCHAR(20) DEFAULT 'active' COMMENT 'active/completed/cancelled', " +
+                    "created_by BIGINT NOT NULL COMMENT '创建人userId(代管时为代管人)', " +
+                    "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                    "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+                    "INDEX idx_ds_family_member (family_id, member_id), " +
+                    "INDEX idx_ds_status (status) " +
+                    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 阶段'");
+            log.info("迁移318: 已创建 doa_stage 表");
+        } catch (Exception e) {
+            log.warn("迁移318: 创建 doa_stage 表失败: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS doa_goal (" +
+                    "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                    "stage_id BIGINT NOT NULL COMMENT '所属阶段ID', " +
+                    "domain VARCHAR(20) NOT NULL COMMENT '领域:health/wealth/family/social/help', " +
+                    "content VARCHAR(500) NOT NULL COMMENT '量化目标内容', " +
+                    "status VARCHAR(20) DEFAULT 'active' COMMENT 'active/achieved/abandoned', " +
+                    "sort_order TINYINT DEFAULT 0 COMMENT '排序', " +
+                    "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                    "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+                    "INDEX idx_dg_stage (stage_id) " +
+                    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 阶段目标'");
+            log.info("迁移318: 已创建 doa_goal 表");
+        } catch (Exception e) {
+            log.warn("迁移318: 创建 doa_goal 表失败: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS doa_week (" +
+                    "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                    "stage_id BIGINT NOT NULL COMMENT '所属阶段ID', " +
+                    "week_no TINYINT NOT NULL COMMENT '第几周(1起)', " +
+                    "week_start DATE NOT NULL COMMENT '本周开始(周一)', " +
+                    "week_end DATE NOT NULL COMMENT '本周结束(周日)', " +
+                    "plan TEXT COMMENT '周行动宣告计划(A表)', " +
+                    "achieved TEXT COMMENT '复盘:本周达成了什么', " +
+                    "experience TEXT COMMENT '复盘:有什么体验', " +
+                    "worked TEXT COMMENT '复盘:行得通的', " +
+                    "improve TEXT COMMENT '复盘:要提升/行不通的', " +
+                    "next_challenge TEXT COMMENT '复盘:下周挑战自己什么', " +
+                    "status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/planned/reviewed', " +
+                    "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                    "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+                    "UNIQUE KEY uk_dw_stage_week (stage_id, week_no), " +
+                    "INDEX idx_dw_stage (stage_id) " +
+                    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 周记录'");
+            log.info("迁移318: 已创建 doa_week 表");
+        } catch (Exception e) {
+            log.warn("迁移318: 创建 doa_week 表失败: {}", e.getMessage());
         }
         }
     }
     }
 
 

+ 51 - 1
cfc-backend/src/main/resources/schema.sql

@@ -5577,7 +5577,8 @@ CREATE TABLE IF NOT EXISTS pearl_interaction_reminder (
 
 
 -- ============================================================
 -- ============================================================
 -- BASIC 体验会员(迁移311-313)
 -- BASIC 体验会员(迁移311-313)
--- ============================================================
+-- =====================================================
+
 INSERT IGNORE INTO membership_levels 
 INSERT IGNORE INTO membership_levels 
 (level_code, level_name, level_desc, price_monthly, features, max_children, max_tasks_per_day) 
 (level_code, level_name, level_desc, price_monthly, features, max_children, max_tasks_per_day) 
 VALUES (
 VALUES (
@@ -5610,3 +5611,52 @@ CREATE TABLE IF NOT EXISTS basic_quota_usage (
     UNIQUE KEY uk_user_type_period (user_id, quota_type, period_start),
     UNIQUE KEY uk_user_type_period (user_id, quota_type, period_start),
     INDEX idx_user_period (user_id, period_start)
     INDEX idx_user_period (user_id, period_start)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BASIC会员月度配额使用记录';
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BASIC会员月度配额使用记录';
+
+-- DOA 个人目标-周计划-周复盘(迁移318,家庭打卡个人目标模块)
+-- ============================================================
+CREATE TABLE IF NOT EXISTS doa_stage (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    family_id BIGINT NOT NULL COMMENT '家庭ID',
+    member_id BIGINT NOT NULL COMMENT '目标归属成员ID(family_members.id)',
+    title VARCHAR(200) COMMENT '阶段主题(可选)',
+    start_date DATE NOT NULL COMMENT '阶段开始日期',
+    end_date DATE NOT NULL COMMENT '阶段结束日期',
+    duration_weeks TINYINT NOT NULL COMMENT '周期周数:2/4/8/12',
+    status VARCHAR(20) DEFAULT 'active' COMMENT 'active/completed/cancelled',
+    created_by BIGINT NOT NULL COMMENT '创建人userId(代管时为代管人)',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_ds_family_member (family_id, member_id),
+    INDEX idx_ds_status (status)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 阶段';
+
+CREATE TABLE IF NOT EXISTS doa_goal (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    stage_id BIGINT NOT NULL COMMENT '所属阶段ID',
+    domain VARCHAR(20) NOT NULL COMMENT '领域:health/wealth/family/social/help',
+    content VARCHAR(500) NOT NULL COMMENT '量化目标内容',
+    status VARCHAR(20) DEFAULT 'active' COMMENT 'active/achieved/abandoned',
+    sort_order TINYINT DEFAULT 0 COMMENT '排序',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_dg_stage (stage_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 阶段目标';
+
+CREATE TABLE IF NOT EXISTS doa_week (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    stage_id BIGINT NOT NULL COMMENT '所属阶段ID',
+    week_no TINYINT NOT NULL COMMENT '第几周(1起)',
+    week_start DATE NOT NULL COMMENT '本周开始(周一)',
+    week_end DATE NOT NULL COMMENT '本周结束(周日)',
+    plan TEXT COMMENT '周行动宣告计划(A表)',
+    achieved TEXT COMMENT '复盘:本周达成了什么',
+    experience TEXT COMMENT '复盘:有什么体验',
+    worked TEXT COMMENT '复盘:行得通的',
+    improve TEXT COMMENT '复盘:要提升/行不通的',
+    next_challenge TEXT COMMENT '复盘:下周挑战自己什么',
+    status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/planned/reviewed',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    UNIQUE KEY uk_dw_stage_week (stage_id, week_no),
+    INDEX idx_dw_stage (stage_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DOA 周记录';