| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- -- ========================================
- -- 测试数据种子脚本
- -- ========================================
- -- 用途:插入测试数据用于开发和演示
- -- 使用方法:mysql -u root -p campus_health < seed.sql
- -- ========================================
- USE `campus_health`;
- -- ========================================
- -- 1. 插入测试用户
- -- ========================================
- INSERT INTO `users` (`id`, `phone`, `nickname`, `school_id`, `grade`, `is_under_14`, `parent_phone`) VALUES
- ('test-user-001', '13800138001', '张三', 'school-001', '大一', FALSE, NULL),
- ('test-user-002', '13800138002', '李四', 'school-001', '大二', FALSE, NULL),
- ('test-user-003', '13800138003', '王五', 'school-001', '高一', TRUE, '13900139001')
- ON DUPLICATE KEY UPDATE nickname = VALUES(nickname);
- -- ========================================
- -- 2. 插入体重记录(90天数据)
- -- ========================================
- -- 为用户 test-user-001 生成90天的体重数据
- DELIMITER //
- CREATE PROCEDURE IF NOT EXISTS generate_weight_records()
- BEGIN
- DECLARE i INT DEFAULT 0;
- DECLARE test_date DATE;
- DECLARE base_weight DECIMAL(5,2) DEFAULT 70.00;
- DECLARE weight_var DECIMAL(5,2);
- DECLARE body_fat_var DECIMAL(4,2);
-
- -- 删除已存在的测试数据
- DELETE FROM weight_records WHERE user_id = 'test-user-001';
-
- -- 生成90天数据
- WHILE i < 90 DO
- SET test_date = DATE_SUB(CURDATE(), INTERVAL (90 - i) DAY);
- SET weight_var = base_weight - (i * 0.05) + (RAND() * 0.4 - 0.2);
- SET body_fat_var = 23.0 - (i * 0.03) + (RAND() * 0.3);
-
- INSERT INTO weight_records (
- id,
- user_id,
- record_date,
- measurement_time,
- weight,
- body_fat,
- muscle_mass,
- measurement_condition
- ) VALUES (
- UUID(),
- 'test-user-001',
- test_date,
- '08:00:00',
- ROUND(weight_var, 2),
- ROUND(body_fat_var, 2),
- ROUND(28.0 + (RAND() * 2), 2),
- IF(i % 2 = 0, 'fasting', 'after_meal')
- );
-
- SET i = i + 1;
- END WHILE;
-
- SELECT CONCAT('成功生成 ', i, ' 条体重记录') AS result;
- END //
- DELIMITER ;
- -- 执行存储过程
- CALL generate_weight_records();
- -- 删除存储过程
- DROP PROCEDURE IF EXISTS generate_weight_records;
- -- ========================================
- -- 3. 插入体重目标
- -- ========================================
- INSERT INTO `weight_goals` (
- `id`,
- `user_id`,
- `target_weight`,
- `target_body_fat`,
- `target_date`,
- `start_weight`,
- `start_body_fat`,
- `start_date`,
- `weekly_target`,
- `status`
- ) VALUES (
- UUID(),
- 'test-user-001',
- 65.00,
- 18.00,
- DATE_ADD(CURDATE(), INTERVAL 60 DAY),
- 70.00,
- 23.00,
- DATE_SUB(CURDATE(), INTERVAL 90 DAY),
- 0.50,
- 'active'
- )
- ON DUPLICATE KEY UPDATE target_weight = VALUES(target_weight);
- -- ========================================
- -- 4. 为部分记录添加标签
- -- ========================================
- -- 获取系统标签ID并为记录添加标签
- INSERT INTO weight_record_tags (id, weight_record_id, tag_id)
- SELECT
- UUID(),
- wr.id,
- (SELECT id FROM tags WHERE tag_name = '开始运动' AND user_id IS NULL LIMIT 1)
- FROM weight_records wr
- WHERE wr.user_id = 'test-user-001'
- AND wr.record_date = DATE_SUB(CURDATE(), INTERVAL 76 DAY)
- LIMIT 1
- ON DUPLICATE KEY UPDATE weight_record_id = VALUES(weight_record_id);
- INSERT INTO weight_record_tags (id, weight_record_id, tag_id)
- SELECT
- UUID(),
- wr.id,
- (SELECT id FROM tags WHERE tag_name = '目标调整' AND user_id IS NULL LIMIT 1)
- FROM weight_records wr
- WHERE wr.user_id = 'test-user-001'
- AND wr.record_date = DATE_SUB(CURDATE(), INTERVAL 48 DAY)
- LIMIT 1
- ON DUPLICATE KEY UPDATE weight_record_id = VALUES(weight_record_id);
- -- ========================================
- -- 5. 插入异常日志示例
- -- ========================================
- INSERT INTO `anomaly_logs` (
- `id`,
- `user_id`,
- `anomaly_type`,
- `severity`,
- `message`,
- `detected_date`,
- `is_read`
- ) VALUES (
- UUID(),
- 'test-user-001',
- 'rapid_change',
- 'warning',
- '近7天体重变化过快(-2.5kg/周),建议放慢减重速度',
- DATE_SUB(CURDATE(), INTERVAL 3 DAY),
- FALSE
- )
- ON DUPLICATE KEY UPDATE message = VALUES(message);
- -- ========================================
- -- 6. 显示测试数据统计
- -- ========================================
- SELECT '=== 测试数据插入完成 ===' AS status;
- SELECT
- '用户数量' AS metric,
- COUNT(*) AS count
- FROM users
- WHERE id LIKE 'test-user-%'
- UNION ALL
- SELECT
- '体重记录数量' AS metric,
- COUNT(*) AS count
- FROM weight_records
- WHERE user_id = 'test-user-001'
- UNION ALL
- SELECT
- '目标数量' AS metric,
- COUNT(*) AS count
- FROM weight_goals
- WHERE user_id = 'test-user-001'
- UNION ALL
- SELECT
- '标签数量' AS metric,
- COUNT(*) AS count
- FROM tags
- UNION ALL
- SELECT
- '异常日志数量' AS metric,
- COUNT(*) AS count
- FROM anomaly_logs
- WHERE user_id = 'test-user-001';
- -- 显示最近10条体重记录
- SELECT
- '=== 最近10条体重记录 ===' AS info;
- SELECT
- record_date,
- weight,
- body_fat,
- muscle_mass,
- measurement_condition
- FROM weight_records
- WHERE user_id = 'test-user-001'
- ORDER BY record_date DESC
- LIMIT 10;
|