Răsfoiți Sursa

fix(backend): 迁移155-157 创建 interaction_logs/questionnaire_snapshots/questionnaire_responses 三张缺失表

iwt 1 lună în urmă
părinte
comite
aa9a1e7d67

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

@@ -7537,5 +7537,62 @@ private void runMigration100() {
 		} catch (Exception e) {
 			log.warn("插入PREMIUM等级种子数据失败: {}", e.getMessage());
 		}
+
+		// 迁移155: 创建 interaction_logs 表(关系互动记录)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS interaction_logs (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"family_id BIGINT NOT NULL COMMENT '所属家庭ID', " +
+					"from_member_id BIGINT NOT NULL COMMENT '互动发起方成员ID', " +
+					"to_member_id BIGINT NOT NULL COMMENT '互动接收方成员ID', " +
+					"interaction_type VARCHAR(20) NOT NULL COMMENT '互动类型: dining/outgoing/call/video/chat/play/gift', " +
+					"description VARCHAR(500) COMMENT '互动描述', " +
+					"happened_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '互动发生时间', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"INDEX idx_ilog_family (family_id), " +
+					"INDEX idx_ilog_to_member (to_member_id) " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员互动记录'");
+			log.info("已创建interaction_logs表");
+		} catch (Exception e) {
+			// 表已存在,忽略
+		}
+
+		// 迁移156: 创建 relationship_questionnaire_snapshots 表(关系问卷快照)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS relationship_questionnaire_snapshots (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"family_member_id BIGINT NOT NULL COMMENT '家庭成员ID', " +
+					"respondent_id BIGINT NOT NULL COMMENT '答卷人用户ID', " +
+					"member_name VARCHAR(50) COMMENT '成员名称', " +
+					"relationship_type VARCHAR(20) COMMENT '关系类型: parent/child', " +
+					"ai_generated_json TEXT COMMENT 'AI生成的题目JSON', " +
+					"version VARCHAR(20) COMMENT '版本号', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"INDEX idx_q_snap_member (family_member_id) " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系问卷快照'");
+			log.info("已创建relationship_questionnaire_snapshots表");
+		} catch (Exception e) {
+			// 表已存在,忽略
+		}
+
+		// 迁移157: 创建 relationship_questionnaire_responses 表(关系问卷回答)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS relationship_questionnaire_responses (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"snapshot_id BIGINT NOT NULL COMMENT '问卷快照ID', " +
+					"respondent_id BIGINT NOT NULL COMMENT '答卷人用户ID', " +
+					"answers_json TEXT COMMENT '用户回答JSON', " +
+					"trust_score DECIMAL(5,2) DEFAULT 0 COMMENT '信任度得分', " +
+					"intimacy_score DECIMAL(5,2) DEFAULT 0 COMMENT '亲密度得分', " +
+					"communication_score DECIMAL(5,2) DEFAULT 0 COMMENT '沟通质量得分', " +
+					"interaction_bonus DECIMAL(5,2) DEFAULT 0 COMMENT '互动记录加分', " +
+					"total_score DECIMAL(5,2) DEFAULT 0 COMMENT '综合得分', " +
+					"calculated_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"INDEX idx_q_resp_snap (snapshot_id) " +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系问卷回答记录'");
+			log.info("已创建relationship_questionnaire_responses表");
+		} catch (Exception e) {
+			// 表已存在,忽略
+		}
 	}
 }

+ 39 - 0
cfc-backend/src/main/resources/schema.sql

@@ -3799,3 +3799,42 @@ CREATE TABLE IF NOT EXISTS product_gift_rules (
     UNIQUE KEY uk_product_level (product_id, level_code),
     INDEX idx_product_id (product_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品赠送会员规则';
+
+CREATE TABLE IF NOT EXISTS interaction_logs (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    family_id BIGINT NOT NULL COMMENT '所属家庭ID',
+    from_member_id BIGINT NOT NULL COMMENT '互动发起方成员ID',
+    to_member_id BIGINT NOT NULL COMMENT '互动接收方成员ID',
+    interaction_type VARCHAR(20) NOT NULL COMMENT '互动类型: dining/outgoing/call/video/chat/play/gift',
+    description VARCHAR(500) COMMENT '互动描述',
+    happened_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '互动发生时间',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    INDEX idx_ilog_family (family_id),
+    INDEX idx_ilog_to_member (to_member_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员互动记录';
+
+CREATE TABLE IF NOT EXISTS relationship_questionnaire_snapshots (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    family_member_id BIGINT NOT NULL COMMENT '家庭成员ID',
+    respondent_id BIGINT NOT NULL COMMENT '答卷人用户ID',
+    member_name VARCHAR(50) COMMENT '成员名称',
+    relationship_type VARCHAR(20) COMMENT '关系类型: parent/child',
+    ai_generated_json TEXT COMMENT 'AI生成的题目JSON',
+    version VARCHAR(20) COMMENT '版本号',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    INDEX idx_q_snap_member (family_member_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系问卷快照';
+
+CREATE TABLE IF NOT EXISTS relationship_questionnaire_responses (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    snapshot_id BIGINT NOT NULL COMMENT '问卷快照ID',
+    respondent_id BIGINT NOT NULL COMMENT '答卷人用户ID',
+    answers_json TEXT COMMENT '用户回答JSON',
+    trust_score DECIMAL(5,2) DEFAULT 0 COMMENT '信任度得分',
+    intimacy_score DECIMAL(5,2) DEFAULT 0 COMMENT '亲密度得分',
+    communication_score DECIMAL(5,2) DEFAULT 0 COMMENT '沟通质量得分',
+    interaction_bonus DECIMAL(5,2) DEFAULT 0 COMMENT '互动记录加分',
+    total_score DECIMAL(5,2) DEFAULT 0 COMMENT '综合得分',
+    calculated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    INDEX idx_q_resp_snap (snapshot_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系问卷回答记录';