seed.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. -- ========================================
  2. -- 测试数据种子脚本
  3. -- ========================================
  4. -- 用途:插入测试数据用于开发和演示
  5. -- 使用方法:mysql -u root -p campus_health < seed.sql
  6. -- ========================================
  7. USE `campus_health`;
  8. -- ========================================
  9. -- 1. 插入测试用户
  10. -- ========================================
  11. INSERT INTO `users` (`id`, `phone`, `nickname`, `school_id`, `grade`, `is_under_14`, `parent_phone`) VALUES
  12. ('test-user-001', '13800138001', '张三', 'school-001', '大一', FALSE, NULL),
  13. ('test-user-002', '13800138002', '李四', 'school-001', '大二', FALSE, NULL),
  14. ('test-user-003', '13800138003', '王五', 'school-001', '高一', TRUE, '13900139001')
  15. ON DUPLICATE KEY UPDATE nickname = VALUES(nickname);
  16. -- ========================================
  17. -- 2. 插入体重记录(90天数据)
  18. -- ========================================
  19. -- 为用户 test-user-001 生成90天的体重数据
  20. DELIMITER //
  21. CREATE PROCEDURE IF NOT EXISTS generate_weight_records()
  22. BEGIN
  23. DECLARE i INT DEFAULT 0;
  24. DECLARE test_date DATE;
  25. DECLARE base_weight DECIMAL(5,2) DEFAULT 70.00;
  26. DECLARE weight_var DECIMAL(5,2);
  27. DECLARE body_fat_var DECIMAL(4,2);
  28. -- 删除已存在的测试数据
  29. DELETE FROM weight_records WHERE user_id = 'test-user-001';
  30. -- 生成90天数据
  31. WHILE i < 90 DO
  32. SET test_date = DATE_SUB(CURDATE(), INTERVAL (90 - i) DAY);
  33. SET weight_var = base_weight - (i * 0.05) + (RAND() * 0.4 - 0.2);
  34. SET body_fat_var = 23.0 - (i * 0.03) + (RAND() * 0.3);
  35. INSERT INTO weight_records (
  36. id,
  37. user_id,
  38. record_date,
  39. measurement_time,
  40. weight,
  41. body_fat,
  42. muscle_mass,
  43. measurement_condition
  44. ) VALUES (
  45. UUID(),
  46. 'test-user-001',
  47. test_date,
  48. '08:00:00',
  49. ROUND(weight_var, 2),
  50. ROUND(body_fat_var, 2),
  51. ROUND(28.0 + (RAND() * 2), 2),
  52. IF(i % 2 = 0, 'fasting', 'after_meal')
  53. );
  54. SET i = i + 1;
  55. END WHILE;
  56. SELECT CONCAT('成功生成 ', i, ' 条体重记录') AS result;
  57. END //
  58. DELIMITER ;
  59. -- 执行存储过程
  60. CALL generate_weight_records();
  61. -- 删除存储过程
  62. DROP PROCEDURE IF EXISTS generate_weight_records;
  63. -- ========================================
  64. -- 3. 插入体重目标
  65. -- ========================================
  66. INSERT INTO `weight_goals` (
  67. `id`,
  68. `user_id`,
  69. `target_weight`,
  70. `target_body_fat`,
  71. `target_date`,
  72. `start_weight`,
  73. `start_body_fat`,
  74. `start_date`,
  75. `weekly_target`,
  76. `status`
  77. ) VALUES (
  78. UUID(),
  79. 'test-user-001',
  80. 65.00,
  81. 18.00,
  82. DATE_ADD(CURDATE(), INTERVAL 60 DAY),
  83. 70.00,
  84. 23.00,
  85. DATE_SUB(CURDATE(), INTERVAL 90 DAY),
  86. 0.50,
  87. 'active'
  88. )
  89. ON DUPLICATE KEY UPDATE target_weight = VALUES(target_weight);
  90. -- ========================================
  91. -- 4. 为部分记录添加标签
  92. -- ========================================
  93. -- 获取系统标签ID并为记录添加标签
  94. INSERT INTO weight_record_tags (id, weight_record_id, tag_id)
  95. SELECT
  96. UUID(),
  97. wr.id,
  98. (SELECT id FROM tags WHERE tag_name = '开始运动' AND user_id IS NULL LIMIT 1)
  99. FROM weight_records wr
  100. WHERE wr.user_id = 'test-user-001'
  101. AND wr.record_date = DATE_SUB(CURDATE(), INTERVAL 76 DAY)
  102. LIMIT 1
  103. ON DUPLICATE KEY UPDATE weight_record_id = VALUES(weight_record_id);
  104. INSERT INTO weight_record_tags (id, weight_record_id, tag_id)
  105. SELECT
  106. UUID(),
  107. wr.id,
  108. (SELECT id FROM tags WHERE tag_name = '目标调整' AND user_id IS NULL LIMIT 1)
  109. FROM weight_records wr
  110. WHERE wr.user_id = 'test-user-001'
  111. AND wr.record_date = DATE_SUB(CURDATE(), INTERVAL 48 DAY)
  112. LIMIT 1
  113. ON DUPLICATE KEY UPDATE weight_record_id = VALUES(weight_record_id);
  114. -- ========================================
  115. -- 5. 插入异常日志示例
  116. -- ========================================
  117. INSERT INTO `anomaly_logs` (
  118. `id`,
  119. `user_id`,
  120. `anomaly_type`,
  121. `severity`,
  122. `message`,
  123. `detected_date`,
  124. `is_read`
  125. ) VALUES (
  126. UUID(),
  127. 'test-user-001',
  128. 'rapid_change',
  129. 'warning',
  130. '近7天体重变化过快(-2.5kg/周),建议放慢减重速度',
  131. DATE_SUB(CURDATE(), INTERVAL 3 DAY),
  132. FALSE
  133. )
  134. ON DUPLICATE KEY UPDATE message = VALUES(message);
  135. -- ========================================
  136. -- 6. 显示测试数据统计
  137. -- ========================================
  138. SELECT '=== 测试数据插入完成 ===' AS status;
  139. SELECT
  140. '用户数量' AS metric,
  141. COUNT(*) AS count
  142. FROM users
  143. WHERE id LIKE 'test-user-%'
  144. UNION ALL
  145. SELECT
  146. '体重记录数量' AS metric,
  147. COUNT(*) AS count
  148. FROM weight_records
  149. WHERE user_id = 'test-user-001'
  150. UNION ALL
  151. SELECT
  152. '目标数量' AS metric,
  153. COUNT(*) AS count
  154. FROM weight_goals
  155. WHERE user_id = 'test-user-001'
  156. UNION ALL
  157. SELECT
  158. '标签数量' AS metric,
  159. COUNT(*) AS count
  160. FROM tags
  161. UNION ALL
  162. SELECT
  163. '异常日志数量' AS metric,
  164. COUNT(*) AS count
  165. FROM anomaly_logs
  166. WHERE user_id = 'test-user-001';
  167. -- 显示最近10条体重记录
  168. SELECT
  169. '=== 最近10条体重记录 ===' AS info;
  170. SELECT
  171. record_date,
  172. weight,
  173. body_fat,
  174. muscle_mass,
  175. measurement_condition
  176. FROM weight_records
  177. WHERE user_id = 'test-user-001'
  178. ORDER BY record_date DESC
  179. LIMIT 10;