schema.sql 83 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733
  1. -- 浠艾福数据库初始化脚本
  2. -- 自动创建表
  3. -- 家庭表
  4. CREATE TABLE IF NOT EXISTS families (
  5. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  6. name VARCHAR(100),
  7. invite_code VARCHAR(8) UNIQUE,
  8. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  9. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  10. INDEX idx_invite_code (invite_code)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  12. -- 用户表
  13. CREATE TABLE IF NOT EXISTS users (
  14. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  15. openid VARCHAR(64) NOT NULL,
  16. unionid VARCHAR(64),
  17. family_id BIGINT NOT NULL,
  18. role ENUM('parent','child','teacher') NOT NULL,
  19. nickname VARCHAR(50),
  20. avatar VARCHAR(255),
  21. password VARCHAR(128),
  22. id_card VARCHAR(18),
  23. real_name VARCHAR(50),
  24. phone VARCHAR(11),
  25. birthday DATE,
  26. gender ENUM('male','female'),
  27. birth_hour VARCHAR(10) COMMENT '出生时辰: 子丑寅卯辰巳午未申酉戌亥',
  28. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  29. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  30. INDEX idx_openid (openid),
  31. INDEX idx_family_id (family_id),
  32. INDEX idx_phone (phone)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  34. -- 孩子详情表
  35. CREATE TABLE IF NOT EXISTS children (
  36. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  37. user_id BIGINT NOT NULL,
  38. family_id BIGINT NOT NULL,
  39. nickname VARCHAR(50) NOT NULL,
  40. age TINYINT NOT NULL,
  41. birthday DATE,
  42. gender ENUM('male','female'),
  43. penalty_enabled TINYINT DEFAULT 1 COMMENT '是否开启扣分(0否1是)',
  44. theme VARCHAR(32) DEFAULT 'default',
  45. total_points INT DEFAULT 0,
  46. system_points INT DEFAULT 0 COMMENT '系统积分(测评建档/平台发放)',
  47. streak_days INT DEFAULT 0,
  48. last_task_date DATE,
  49. focus_max_daily TINYINT DEFAULT 3,
  50. focus_remaining TINYINT DEFAULT 3,
  51. focus_reset_date DATE,
  52. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  53. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  54. INDEX idx_user_id (user_id),
  55. INDEX idx_family_id (family_id)
  56. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  57. -- 任务表
  58. CREATE TABLE IF NOT EXISTS tasks (
  59. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  60. family_id BIGINT NOT NULL,
  61. creator_id BIGINT NOT NULL,
  62. child_id BIGINT COMMENT '执行者ID(child任务时必填,parent任务时可空)',
  63. executor_type VARCHAR(20) COMMENT '执行者类型: child/parent',
  64. executor_id BIGINT COMMENT '执行者ID',
  65. title VARCHAR(200) NOT NULL,
  66. description VARCHAR(500),
  67. points TINYINT DEFAULT 2 COMMENT '任务积分1-10',
  68. deadline DATETIME NOT NULL,
  69. repeat_type ENUM('none', 'daily', 'weekly') DEFAULT 'none',
  70. category VARCHAR(32),
  71. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核',
  72. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核',
  73. status ENUM('pending', 'completed', 'overdue', 'cancelled') DEFAULT 'pending',
  74. completed_at DATETIME,
  75. bonus_rule JSON COMMENT '积分奖励规则',
  76. points_expire_days INT DEFAULT 0 COMMENT '积分有效期天数',
  77. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  78. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  79. INDEX idx_child_id_deadline (child_id, deadline),
  80. INDEX idx_status (status),
  81. INDEX idx_category (category),
  82. INDEX idx_executor (executor_type, executor_id)
  83. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  84. -- 积分流水表
  85. CREATE TABLE IF NOT EXISTS points_log (
  86. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  87. child_id BIGINT NOT NULL,
  88. task_id BIGINT,
  89. amount INT NOT NULL COMMENT '积分数量正负',
  90. type ENUM('earn', 'spend', 'bonus', 'penalty', 'adjust', 'reset', 'refund') NOT NULL,
  91. category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
  92. description VARCHAR(255),
  93. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  94. INDEX idx_child_id_created (child_id, created_at),
  95. INDEX idx_type (type)
  96. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  97. -- 积分清零记录表
  98. CREATE TABLE IF NOT EXISTS points_reset_log (
  99. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  100. child_id BIGINT NOT NULL,
  101. balance_before INT NOT NULL,
  102. balance_after INT DEFAULT 0,
  103. reset_type ENUM('monthly', 'manual') NOT NULL,
  104. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  105. INDEX idx_child_id (child_id)
  106. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  107. -- 奖励表
  108. CREATE TABLE IF NOT EXISTS rewards (
  109. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  110. family_id BIGINT NOT NULL COMMENT '家庭 ID,所有奖励必须关联家庭',
  111. child_id BIGINT NULL COMMENT '孩子 ID,模板奖励为NULL',
  112. title VARCHAR(100) NOT NULL,
  113. points_required INT NOT NULL,
  114. category VARCHAR(32),
  115. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available',
  116. exchange_approved TINYINT COMMENT '是否审批通过',
  117. exchanged_at DATETIME,
  118. is_template TINYINT DEFAULT 0 COMMENT '是否为预设模板',
  119. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  120. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  121. INDEX idx_family_id (family_id),
  122. INDEX idx_child_id_status (child_id, status),
  123. INDEX idx_is_template (is_template)
  124. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖励表,所有奖励必须关联到具体家庭';
  125. -- 奖励分类表
  126. CREATE TABLE IF NOT EXISTS reward_categories (
  127. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  128. family_id BIGINT NOT NULL,
  129. name VARCHAR(32) NOT NULL,
  130. icon VARCHAR(64),
  131. sort_order INT DEFAULT 0,
  132. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  133. INDEX idx_family_id (family_id)
  134. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  135. -- 预设奖励模板数据(child_id为NULL表示模板)
  136. INSERT IGNORE INTO rewards (family_id, child_id, title, points_required, category, is_template) VALUES
  137. (0, NULL, '看动画片30分钟', 30, '精神奖励', 1),
  138. (0, NULL, '玩平板游戏30分钟', 40, '特权奖励', 1),
  139. (0, NULL, '去游乐场', 100, '物质奖励', 1),
  140. (0, NULL, '买玩具', 150, '物质奖励', 1),
  141. (0, NULL, '吃冰淇淋', 20, '物质奖励', 1),
  142. (0, NULL, '选择晚餐', 25, '特权奖励', 1);
  143. -- 默认奖励分类
  144. INSERT IGNORE INTO reward_categories (family_id, name, icon, sort_order) VALUES
  145. (0, '物质奖励', 'gift', 1),
  146. (0, '精神奖励', 'star', 2),
  147. (0, '特权奖励', 'crown', 3);
  148. -- 敏感词表
  149. CREATE TABLE IF NOT EXISTS sensitive_words (
  150. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  151. word VARCHAR(50) NOT NULL,
  152. category VARCHAR(32) NOT NULL,
  153. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  154. INDEX idx_word (word)
  155. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  156. -- 任务审核表
  157. CREATE TABLE IF NOT EXISTS task_reviews (
  158. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  159. task_id BIGINT NOT NULL,
  160. child_id BIGINT NOT NULL,
  161. photo_url VARCHAR(255),
  162. voice_note_url VARCHAR(255),
  163. ai_result ENUM('pass', 'review', 'pending'),
  164. ai_confidence INT COMMENT 'AI置信度(0-100)',
  165. ai_suggestion VARCHAR(255),
  166. ai_threshold ENUM('strict', 'normal', 'loose') DEFAULT 'normal',
  167. parent_result ENUM('pass', 'reject'),
  168. parent_override TINYINT DEFAULT 0,
  169. review_type ENUM('ai', 'manual') NOT NULL,
  170. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  171. reviewed_at DATETIME,
  172. INDEX idx_task_id (task_id),
  173. INDEX idx_ai_result (ai_result)
  174. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  175. -- 打卡里程碑表
  176. CREATE TABLE IF NOT EXISTS streak_milestones (
  177. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  178. days INT NOT NULL,
  179. reward_points INT DEFAULT 0,
  180. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  181. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  182. -- 插入打卡里程碑数据
  183. INSERT IGNORE INTO streak_milestones (days, reward_points) VALUES
  184. (3, 5),
  185. (7, 10),
  186. (30, 30),
  187. (100, 100);
  188. -- 专注训练记录表
  189. CREATE TABLE IF NOT EXISTS focus_sessions (
  190. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  191. child_id BIGINT NOT NULL,
  192. mode ENUM('simple', 'pomodoro') NOT NULL,
  193. duration TINYINT NOT NULL,
  194. stars TINYINT COMMENT '评分1-5',
  195. points_earned INT,
  196. voice_note_url VARCHAR(255),
  197. started_at DATETIME NOT NULL,
  198. completed_at DATETIME,
  199. INDEX idx_child_id_completed (child_id, completed_at)
  200. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  201. -- 专注训练配置表
  202. CREATE TABLE IF NOT EXISTS focus_config (
  203. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  204. family_id BIGINT,
  205. max_daily_count TINYINT DEFAULT 3,
  206. allow_exit TINYINT DEFAULT 1 COMMENT '是否允许退出(0否1是)',
  207. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  208. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  209. -- DAN测评表
  210. CREATE TABLE IF NOT EXISTS dan_assessments (
  211. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  212. child_id BIGINT NOT NULL,
  213. assessment_date DATE NOT NULL,
  214. details JSON,
  215. source ENUM('api', 'manual') DEFAULT 'manual',
  216. photo_url VARCHAR(255),
  217. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  218. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  219. -- 任务模板表
  220. CREATE TABLE IF NOT EXISTS task_templates (
  221. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  222. title VARCHAR(200) NOT NULL,
  223. points TINYINT DEFAULT 2,
  224. duration_minutes TINYINT,
  225. category VARCHAR(32),
  226. is_default TINYINT DEFAULT 1,
  227. family_id BIGINT,
  228. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  229. INDEX idx_is_default (is_default)
  230. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  231. -- 媒体记录表(支持图片、视频、音频、文字)
  232. CREATE TABLE IF NOT EXISTS media_records (
  233. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  234. type ENUM('image', 'video', 'audio', 'text') NOT NULL,
  235. url VARCHAR(500),
  236. description TEXT,
  237. task_id BIGINT NOT NULL,
  238. creator_id BIGINT NOT NULL,
  239. original_filename VARCHAR(255),
  240. file_size BIGINT,
  241. content_type VARCHAR(100),
  242. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  243. INDEX idx_task_id (task_id),
  244. INDEX idx_creator_id (creator_id),
  245. INDEX idx_type (type),
  246. FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
  247. FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE
  248. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  249. -- =============================================
  250. -- 服务商(成长规划师)相关表
  251. -- =============================================
  252. -- 服务商表(统一管理 teacher/planner/activity_provider/product_supplier)
  253. CREATE TABLE IF NOT EXISTS guides (
  254. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  255. user_id BIGINT NOT NULL UNIQUE COMMENT '用户ID(唯一)',
  256. type VARCHAR(32) DEFAULT 'teacher' COMMENT '服务商类型: teacher/planner/activity_provider/product_supplier',
  257. teacher_no VARCHAR(20) COMMENT '服务商编号',
  258. title VARCHAR(50) COMMENT '职称/称号',
  259. specialty VARCHAR(200) COMMENT '专长领域',
  260. bio TEXT COMMENT '简介',
  261. university VARCHAR(200) COMMENT '毕业院校',
  262. education_system VARCHAR(32) COMMENT '教育体系(参考education_systems表)',
  263. experience_years TINYINT DEFAULT 0 COMMENT '从业年限',
  264. rating INT DEFAULT 500 COMMENT '评分(百分位,500=5.00)',
  265. total_appointments INT DEFAULT 0 COMMENT '总服务次数',
  266. level VARCHAR(20) NOT NULL DEFAULT 'junior' COMMENT '等级: junior-初级, intermediate-中级, senior-高级',
  267. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active-活跃, inactive-停用',
  268. service_count INT DEFAULT 0 COMMENT '当前服务家庭数',
  269. package_id BIGINT COMMENT '购买套餐ID',
  270. nickname VARCHAR(100) COMMENT '申请昵称',
  271. phone VARCHAR(20) COMMENT '联系电话',
  272. intro TEXT COMMENT '个人介绍',
  273. avatar VARCHAR(500) COMMENT '头像URL',
  274. commission_rate INT DEFAULT 1000 COMMENT '佣金比例(基点,1000=10%)',
  275. street_id BIGINT COMMENT '街道ID',
  276. province VARCHAR(50) COMMENT '省份',
  277. city VARCHAR(50) COMMENT '城市',
  278. district VARCHAR(50) COMMENT '区县',
  279. street VARCHAR(100) COMMENT '街道',
  280. approved_at DATETIME COMMENT '审核通过时间',
  281. verified_at DATETIME COMMENT '认证通过时间',
  282. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  283. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  284. INDEX idx_user_id (user_id),
  285. INDEX idx_level (level),
  286. INDEX idx_status (status),
  287. INDEX idx_type (type)
  288. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务商表(规划师/活动方/供应商)';
  289. -- 测评预约表
  290. CREATE TABLE IF NOT EXISTS assessment_appointments (
  291. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  292. user_id BIGINT COMMENT '用户ID',
  293. family_id BIGINT NOT NULL,
  294. child_id BIGINT COMMENT '孩子ID',
  295. teacher_id BIGINT COMMENT '教师ID',
  296. guide_id BIGINT COMMENT '规划师ID',
  297. package_id BIGINT COMMENT '套餐ID',
  298. appointment_date VARCHAR(20) COMMENT '预约日期 yyyy-MM-dd',
  299. appointment_time VARCHAR(20) COMMENT '预约时间 HH:mm',
  300. duration_minutes INT COMMENT '测评时长',
  301. status TINYINT DEFAULT 0 COMMENT '0=待确认,1=已确认,2=已完成,3=已取消,4=未到',
  302. appointment_type VARCHAR(20) DEFAULT 'initial' COMMENT '初测/复测/回访',
  303. notes TEXT COMMENT '备注',
  304. remark TEXT COMMENT '补充说明',
  305. contact_phone VARCHAR(20),
  306. meet_link VARCHAR(255) COMMENT '会议链接',
  307. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  308. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  309. INDEX idx_user_id (user_id),
  310. INDEX idx_teacher_id (teacher_id),
  311. INDEX idx_guide_id (guide_id),
  312. INDEX idx_family_id (family_id),
  313. INDEX idx_child_id (child_id),
  314. INDEX idx_status (status)
  315. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  316. -- DAN测评结果表
  317. CREATE TABLE IF NOT EXISTS dan_assessment_results (
  318. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  319. child_id BIGINT NOT NULL,
  320. teacher_id BIGINT NOT NULL,
  321. appointment_id BIGINT,
  322. attention_score INT COMMENT '注意力得分',
  323. focus_score INT COMMENT '专注力得分',
  324. memory_score INT COMMENT '记忆力得分',
  325. logic_score INT COMMENT '逻辑思维得分',
  326. perception_score INT COMMENT '感知得分',
  327. spatial_score INT COMMENT '空间思维得分',
  328. processing_speed_score INT COMMENT '加工速度得分',
  329. emotion_management_score INT COMMENT '情绪管理得分(EMI)',
  330. empathy_score INT COMMENT '同理心得分(EMI)',
  331. social_adaptability_score INT COMMENT '社会适应得分(EMI)',
  332. self_motivation_score INT COMMENT '自我激励得分(EMI)',
  333. overall_score INT COMMENT '综合得分',
  334. assessment_date DATE NOT NULL,
  335. duration_minutes INT COMMENT '测评时长',
  336. game_records JSON COMMENT '游戏记录详情',
  337. analysis_report TEXT COMMENT '分析报告',
  338. growth_suggestions TEXT COMMENT '成长建议',
  339. next_review_date DATE COMMENT '下次复测日期',
  340. status ENUM('draft', 'completed', 'archived') DEFAULT 'draft',
  341. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  342. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  343. INDEX idx_child_id (child_id),
  344. INDEX idx_teacher_id (teacher_id),
  345. INDEX idx_assessment_date (assessment_date)
  346. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  347. -- 成长规划表
  348. CREATE TABLE IF NOT EXISTS growth_plans (
  349. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  350. child_id BIGINT NOT NULL,
  351. teacher_id BIGINT NOT NULL,
  352. assessment_id BIGINT,
  353. plan_title VARCHAR(200) NOT NULL,
  354. plan_content TEXT NOT NULL COMMENT '规划内容',
  355. duration_months TINYINT COMMENT '规划周期(月)',
  356. status ENUM('draft', 'active', 'completed', 'expired') DEFAULT 'draft',
  357. start_date DATE,
  358. end_date DATE,
  359. review_count INT DEFAULT 0 COMMENT '已复盘次数',
  360. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  361. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  362. INDEX idx_child_id (child_id),
  363. INDEX idx_teacher_id (teacher_id),
  364. INDEX idx_status (status)
  365. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  366. -- =============================================
  367. -- 成长档案表
  368. -- =============================================
  369. CREATE TABLE IF NOT EXISTS growth_records (
  370. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  371. child_id BIGINT NOT NULL COMMENT '孩子ID',
  372. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  373. assessment_id BIGINT COMMENT '关联的测评结果ID',
  374. record_title VARCHAR(200) COMMENT '档案标题',
  375. child_age INT COMMENT '孩子当时年龄(月)',
  376. height VARCHAR(20) COMMENT '身高',
  377. weight VARCHAR(20) COMMENT '体重',
  378. assessment_summary TEXT COMMENT '测评摘要',
  379. overall_score INT COMMENT '综合得分',
  380. growth_suggestions TEXT COMMENT '成长建议',
  381. task_recommendations TEXT COMMENT '任务推荐(JSON)',
  382. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/completed',
  383. external_sync TINYINT DEFAULT 0 COMMENT '是否来自外部系统同步',
  384. external_source VARCHAR(100) COMMENT '外部系统来源',
  385. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  386. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  387. INDEX idx_child_id (child_id),
  388. INDEX idx_parent_id (parent_id),
  389. INDEX idx_status (status)
  390. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  391. -- =============================================
  392. -- 数据库迁移(新增字段和表)- 通过Java代码处理
  393. -- =============================================
  394. -- 注意:ALTER TABLE语句已移到 DatabaseInitializer.java 中执行
  395. -- 避免重复执行导致的错误
  396. -- 3. 家长心愿单表(新增)
  397. CREATE TABLE IF NOT EXISTS reward_wishlists (
  398. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  399. user_id BIGINT NOT NULL COMMENT '创建者用户ID',
  400. family_id BIGINT NOT NULL COMMENT '家庭ID',
  401. title VARCHAR(100) NOT NULL COMMENT '心愿名称',
  402. description VARCHAR(500) COMMENT '心愿描述',
  403. points_required INT NOT NULL COMMENT '所需积分',
  404. category VARCHAR(32) COMMENT '分类',
  405. image_url VARCHAR(255) COMMENT '图片链接',
  406. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available' COMMENT '状态',
  407. exchange_approved TINYINT COMMENT '是否审批通过',
  408. exchanged_at DATETIME COMMENT '兑换时间',
  409. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  410. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  411. INDEX idx_user_id (user_id),
  412. INDEX idx_family_id (family_id),
  413. INDEX idx_status (status)
  414. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  415. -- 4. 更新任务状态枚举(如果需要支持更多状态)
  416. -- ALTER TABLE tasks MODIFY COLUMN status ENUM('pending', 'completed', 'overdue', 'cancelled', 'parent_pending', 'parent_completed') DEFAULT 'pending';
  417. -- ===================== 任务模板套餐功能 =====================
  418. -- 成长规划师-家庭关系表
  419. CREATE TABLE IF NOT EXISTS guide_families (
  420. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  421. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  422. family_id BIGINT NOT NULL COMMENT '家庭ID',
  423. service_type VARCHAR(20) DEFAULT 'consulting' COMMENT '服务类型: monthly/yearly/consulting',
  424. service_price INT DEFAULT 0 COMMENT '服务价格(分)',
  425. status VARCHAR(20) DEFAULT 'binding' COMMENT '状态: binding/paused/cancelled',
  426. bound_at DATETIME COMMENT '绑定时间',
  427. expire_at DATETIME COMMENT '服务到期时间',
  428. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  429. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  430. UNIQUE KEY uk_guide_family (guide_id, family_id),
  431. INDEX idx_guide_id (guide_id),
  432. INDEX idx_family_id (family_id)
  433. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  434. -- 任务模板套餐
  435. CREATE TABLE IF NOT EXISTS task_template_packages (
  436. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  437. creator_id BIGINT NOT NULL COMMENT '创建者成长规划师ID',
  438. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  439. description TEXT COMMENT '详细介绍',
  440. cycle_days INT NOT NULL COMMENT '周期天数',
  441. category VARCHAR(50) COMMENT '分类',
  442. tags JSON COMMENT '标签',
  443. price INT DEFAULT 0 COMMENT '售价(分)',
  444. platform_fee INT DEFAULT 0 COMMENT '平台服务费(基点)',
  445. is_public TINYINT DEFAULT 0 COMMENT '是否公开',
  446. share_code VARCHAR(50) UNIQUE COMMENT '分享码',
  447. cover_image VARCHAR(500) COMMENT '封面图',
  448. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态',
  449. reviewer_id BIGINT COMMENT '审核人',
  450. reviewed_at DATETIME COMMENT '审核时间',
  451. reject_reason TEXT COMMENT '拒绝原因',
  452. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  453. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  454. INDEX idx_creator_id (creator_id),
  455. INDEX idx_status (status),
  456. INDEX idx_is_public (is_public)
  457. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  458. -- 套餐内任务项
  459. CREATE TABLE IF NOT EXISTS task_template_items (
  460. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  461. package_id BIGINT NOT NULL COMMENT '所属套餐ID',
  462. task_name VARCHAR(100) NOT NULL,
  463. description TEXT,
  464. points INT DEFAULT 0,
  465. frequency VARCHAR(20) DEFAULT 'daily',
  466. duration INT COMMENT '预计时长(分钟)',
  467. is_required TINYINT DEFAULT 0,
  468. sort_order INT DEFAULT 0,
  469. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  470. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  471. INDEX idx_package_id (package_id)
  472. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  473. -- 套餐应用实例
  474. CREATE TABLE IF NOT EXISTS task_plan_instances (
  475. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  476. package_id BIGINT NOT NULL,
  477. family_id BIGINT NOT NULL,
  478. child_id BIGINT NOT NULL,
  479. name VARCHAR(100) NOT NULL,
  480. start_date DATE NOT NULL,
  481. end_date DATE NOT NULL,
  482. status VARCHAR(20) DEFAULT 'active',
  483. total_days INT,
  484. completed_days INT DEFAULT 0,
  485. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  486. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  487. INDEX idx_family_id (family_id),
  488. INDEX idx_child_id (child_id),
  489. INDEX idx_status (status)
  490. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  491. -- 实例任务项
  492. CREATE TABLE IF NOT EXISTS task_plan_items (
  493. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  494. instance_id BIGINT NOT NULL,
  495. template_item_id BIGINT,
  496. task_name VARCHAR(100) NOT NULL,
  497. description TEXT,
  498. points INT DEFAULT 0,
  499. frequency VARCHAR(20) DEFAULT 'daily',
  500. duration INT,
  501. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  502. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  503. INDEX idx_instance_id (instance_id)
  504. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  505. -- 套餐购买订单
  506. CREATE TABLE IF NOT EXISTS package_orders (
  507. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  508. order_no VARCHAR(32) UNIQUE NOT NULL,
  509. user_id BIGINT NOT NULL COMMENT '购买者用户ID',
  510. family_id BIGINT NOT NULL COMMENT '家庭ID',
  511. package_id BIGINT NOT NULL COMMENT '套餐ID',
  512. package_name VARCHAR(100) COMMENT '套餐名称',
  513. price INT NOT NULL COMMENT '支付金额(分)',
  514. platform_fee INT DEFAULT 0 COMMENT '平台服务费(分)',
  515. guide_id BIGINT COMMENT '成长规划师ID',
  516. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/cancelled/refunded',
  517. pay_method VARCHAR(20) COMMENT '支付方式',
  518. transaction_id VARCHAR(64) COMMENT '微信支付订单号',
  519. paid_at DATETIME COMMENT '支付时间',
  520. notify_data TEXT COMMENT '支付回调数据',
  521. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  522. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  523. INDEX idx_user_id (user_id),
  524. INDEX idx_family_id (family_id),
  525. INDEX idx_package_id (package_id),
  526. INDEX idx_status (status)
  527. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  528. -- 用户表增加成长规划师相关字段 - 已移到 DatabaseInitializer.java 执行
  529. -- ALTER TABLE users ADD COLUMN teacher_no VARCHAR(50) COMMENT '成长规划师证书号';
  530. -- ALTER TABLE users ADD COLUMN teacher_photo VARCHAR(500) COMMENT '成长规划师照片';
  531. -- ALTER TABLE users ADD COLUMN certificate_image VARCHAR(500) COMMENT '成长规划师证书照片';
  532. -- ALTER TABLE users ADD COLUMN teacher_status VARCHAR(20) DEFAULT 'pending' COMMENT '成长规划师审核状态: pending/approved/rejected';
  533. -- ALTER TABLE users ADD INDEX idx_teacher_status (teacher_status);
  534. -- 成长规划师咨询消息表
  535. CREATE TABLE IF NOT EXISTS teacher_messages (
  536. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  537. family_id BIGINT NOT NULL COMMENT '家庭ID',
  538. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  539. teacher_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  540. content TEXT NOT NULL COMMENT '消息内容',
  541. reply_content TEXT COMMENT '回复内容',
  542. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending/replied',
  543. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  544. replied_at DATETIME COMMENT '回复时间',
  545. INDEX idx_family_id (family_id),
  546. INDEX idx_teacher_id (teacher_id),
  547. INDEX idx_parent_id (parent_id),
  548. INDEX idx_status (status)
  549. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  550. -- 游戏记录表(专注训练模块)
  551. CREATE TABLE IF NOT EXISTS game_records (
  552. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  553. child_id BIGINT NOT NULL COMMENT '孩子ID',
  554. game_code VARCHAR(20) NOT NULL COMMENT '游戏代码',
  555. score INT DEFAULT 0 COMMENT '得分(0-100)',
  556. completion_time INT COMMENT '完成用时(秒)',
  557. difficulty VARCHAR(20) DEFAULT 'medium' COMMENT '难度(easy/medium/hard)',
  558. points_earned INT DEFAULT 0 COMMENT '获得积分',
  559. played_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '游玩时间',
  560. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  561. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  562. INDEX idx_child_id (child_id),
  563. INDEX idx_game_code (game_code),
  564. INDEX idx_played_at (played_at)
  565. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  566. -- 勋章定义表
  567. CREATE TABLE IF NOT EXISTS badge (
  568. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  569. badge_id VARCHAR(50) UNIQUE NOT NULL COMMENT '勋章唯一标识',
  570. name VARCHAR(100) NOT NULL COMMENT '勋章名称',
  571. description TEXT COMMENT '勋章描述',
  572. icon VARCHAR(255) COMMENT '勋章图标',
  573. category VARCHAR(20) COMMENT '分类(学习/运动/家务/阅读/打卡/综合)',
  574. level VARCHAR(20) COMMENT '等级(铜牌/银牌/金牌/钻石)',
  575. rarity VARCHAR(20) COMMENT '稀有度(普通/稀有/史诗/传说)',
  576. trigger_type VARCHAR(20) COMMENT '触发类型(task_count/streak_days/points_total/reward_count/custom)',
  577. threshold INT DEFAULT 0 COMMENT '阈值',
  578. need_approval TINYINT DEFAULT 0 COMMENT '是否需要审批',
  579. expire_days INT DEFAULT -1 COMMENT '有效期天数(-1永久)',
  580. sort_order INT DEFAULT 0 COMMENT '排序',
  581. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  582. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  583. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  584. INDEX idx_category (category),
  585. INDEX idx_is_active (is_active)
  586. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  587. -- 儿童勋章关联表
  588. CREATE TABLE IF NOT EXISTS child_badge (
  589. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  590. child_id BIGINT NOT NULL COMMENT '孩子ID',
  591. badge_id BIGINT NOT NULL COMMENT '勋章ID',
  592. earned_at DATETIME COMMENT '获得时间',
  593. expire_at DATETIME COMMENT '过期时间',
  594. status TINYINT DEFAULT 1 COMMENT '状态:1有效 0过期 -1撤销',
  595. is_favorite TINYINT DEFAULT 0 COMMENT '是否收藏',
  596. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  597. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  598. UNIQUE KEY uk_child_badge (child_id, badge_id),
  599. INDEX idx_child_id (child_id),
  600. INDEX idx_badge_id (badge_id),
  601. INDEX idx_status (status)
  602. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  603. -- =============================================
  604. -- 以下表从 DatabaseInitializer.java 提取
  605. -- 管理后台表
  606. -- =============================================
  607. -- 管理员表
  608. CREATE TABLE IF NOT EXISTS admins (
  609. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  610. username VARCHAR(50) NOT NULL COMMENT '用户名',
  611. password VARCHAR(128) NOT NULL COMMENT '密码(MD5加密)',
  612. nickname VARCHAR(50) COMMENT '昵称',
  613. real_name VARCHAR(50) COMMENT '真实姓名',
  614. phone VARCHAR(11) COMMENT '手机号',
  615. email VARCHAR(100) COMMENT '邮箱',
  616. role VARCHAR(20) DEFAULT 'admin' COMMENT '角色: admin/teacher',
  617. status TINYINT DEFAULT 1 COMMENT '状态:1启用0禁用',
  618. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  619. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  620. INDEX idx_phone (phone),
  621. INDEX idx_username (username)
  622. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
  623. -- 验证码表
  624. CREATE TABLE IF NOT EXISTS verification_codes (
  625. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  626. phone VARCHAR(11) NOT NULL COMMENT '手机号',
  627. code VARCHAR(6) NOT NULL COMMENT '验证码',
  628. type VARCHAR(20) NOT NULL COMMENT '验证码类型',
  629. expires_in INT DEFAULT 300 COMMENT '过期时间(秒)',
  630. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  631. expires_at DATETIME NOT NULL COMMENT '过期时间',
  632. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  633. INDEX idx_phone_type (phone, type),
  634. INDEX idx_expires_at (expires_at)
  635. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='验证码表';
  636. -- 管理后台任务模板表
  637. CREATE TABLE IF NOT EXISTS admin_task_templates (
  638. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  639. title VARCHAR(200) NOT NULL COMMENT '模板标题',
  640. description TEXT COMMENT '模板描述',
  641. points INT DEFAULT 10 COMMENT '默认积分',
  642. category VARCHAR(32) COMMENT '任务分类',
  643. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核:0否1是',
  644. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核:0否1是',
  645. recommended_age INT COMMENT '推荐年龄',
  646. difficulty ENUM('easy', 'medium', 'hard') DEFAULT 'medium' COMMENT '难度: easy/medium/hard',
  647. teacher_id BIGINT COMMENT '成长规划师ID',
  648. complete_types VARCHAR(100) COMMENT '完成方式JSON',
  649. duration INT COMMENT '预计完成时长(分钟)',
  650. review_type VARCHAR(20) COMMENT '审核人类型: creator/parent/teacher/ai',
  651. task_type VARCHAR(20) COMMENT '任务性质: onetime/recurring',
  652. frequency VARCHAR(20) COMMENT '频率: daily/weekly/monthly',
  653. max_frequency INT COMMENT '周期内最多完成次数',
  654. is_active TINYINT DEFAULT 1 COMMENT '是否启用:0禁用1启用',
  655. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  656. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  657. INDEX idx_category (category),
  658. INDEX idx_difficulty (difficulty),
  659. INDEX idx_is_active (is_active)
  660. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理后台任务模板表';
  661. -- =============================================
  662. -- 测评模块表
  663. -- =============================================
  664. -- 测评资料表
  665. -- 数学闯关 - 孩子当前等级
  666. CREATE TABLE IF NOT EXISTS math_child_level (
  667. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  668. child_id BIGINT NOT NULL UNIQUE,
  669. current_level TINYINT NOT NULL DEFAULT 1 COMMENT '1=一位数加减,2=两位数加减,3=一位数四则,4=两位数四则',
  670. total_passed INT DEFAULT 0 COMMENT '累计通关次数',
  671. best_time_ms BIGINT DEFAULT NULL COMMENT '最佳用时(毫秒)',
  672. best_accuracy INT DEFAULT NULL COMMENT '最佳正确率(%)',
  673. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  674. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  675. INDEX idx_child_id (child_id)
  676. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  677. -- 数学闯关 - 通关日志
  678. CREATE TABLE IF NOT EXISTS math_quiz_logs (
  679. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  680. child_id BIGINT NOT NULL,
  681. level TINYINT NOT NULL COMMENT '闯关时等级',
  682. target_n INT NOT NULL COMMENT '目标连续答对数',
  683. correct_count INT NOT NULL COMMENT '实际连续答对数',
  684. total_attempts INT NOT NULL COMMENT '总答题数',
  685. total_time_ms BIGINT NOT NULL COMMENT '总用时(毫秒)',
  686. accuracy INT NOT NULL COMMENT '正确率(%)',
  687. passed TINYINT(1) DEFAULT 0 COMMENT '是否通关',
  688. exprs TEXT COMMENT '本轮表达式列表(JSON)',
  689. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  690. INDEX idx_child_id (child_id),
  691. INDEX idx_level (level)
  692. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  693. CREATE TABLE IF NOT EXISTS assessment_materials (
  694. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  695. title VARCHAR(100) NOT NULL COMMENT '资料标题',
  696. content TEXT COMMENT '测评介绍内容',
  697. cover_image VARCHAR(255) COMMENT '封面图片',
  698. status VARCHAR(20) DEFAULT 'active' COMMENT '状态:active/inactive',
  699. created_at DATETIME COMMENT '创建时间',
  700. updated_at DATETIME COMMENT '更新时间',
  701. INDEX idx_status (status)
  702. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评资料表';
  703. -- 积分配置表
  704. CREATE TABLE IF NOT EXISTS assessment_points_config (
  705. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  706. points_value INT DEFAULT 100 COMMENT '完成测评获得积分',
  707. points_value_yuan INT DEFAULT 1 COMMENT '1积分等于多少分(原元→现分)',
  708. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  709. created_at DATETIME COMMENT '创建时间',
  710. updated_at DATETIME COMMENT '更新时间'
  711. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分配置表';
  712. -- 家庭测评配置表
  713. CREATE TABLE IF NOT EXISTS family_assessment_config (
  714. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  715. family_id BIGINT NOT NULL COMMENT '家庭ID',
  716. material_id BIGINT COMMENT '测评资料ID',
  717. remind_months INT DEFAULT 12 COMMENT '提醒周期(月)',
  718. last_remind_at DATETIME COMMENT '上次提醒时间',
  719. next_remind_at DATETIME COMMENT '下次提醒时间',
  720. is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1启用0关闭',
  721. created_by BIGINT COMMENT '创建人(规划师ID)',
  722. created_at DATETIME COMMENT '创建时间',
  723. updated_at DATETIME COMMENT '更新时间',
  724. UNIQUE KEY uk_family (family_id),
  725. INDEX idx_next_remind (next_remind_at),
  726. INDEX idx_enabled (is_enabled)
  727. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭测评配置表';
  728. -- 测评记录表
  729. CREATE TABLE IF NOT EXISTS assessment_records (
  730. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  731. family_id BIGINT COMMENT '家庭ID',
  732. child_id BIGINT COMMENT '孩子ID',
  733. material_id BIGINT COMMENT '测评资料ID',
  734. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending待完成/completed已完成',
  735. completed_at DATETIME COMMENT '完成时间',
  736. created_at DATETIME COMMENT '创建时间',
  737. INDEX idx_family (family_id),
  738. INDEX idx_status (status)
  739. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评记录表';
  740. -- 评估订单表(测评订单)
  741. CREATE TABLE IF NOT EXISTS assessment_orders (
  742. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  743. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  744. family_id BIGINT NOT NULL COMMENT '家庭ID',
  745. user_id BIGINT NOT NULL COMMENT '用户ID',
  746. child_id BIGINT COMMENT '孩子ID',
  747. guide_id BIGINT NOT NULL COMMENT '成长规划师ID',
  748. package_id BIGINT NOT NULL COMMENT '套餐ID',
  749. appointment_id BIGINT COMMENT '关联预约ID',
  750. guide_name VARCHAR(50) COMMENT '规划师名称',
  751. package_name VARCHAR(100) COMMENT '套餐名称',
  752. total_price BIGINT DEFAULT 0 COMMENT '总价(分)',
  753. discount_amount BIGINT DEFAULT 0 COMMENT '优惠金额(分)',
  754. actual_price BIGINT DEFAULT 0 COMMENT '实付金额(分)',
  755. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  756. pay_time VARCHAR(50) COMMENT '支付时间',
  757. pay_type VARCHAR(20) COMMENT '支付方式',
  758. transaction_id VARCHAR(64) COMMENT '交易流水号',
  759. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  760. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  761. INDEX idx_family (family_id),
  762. INDEX idx_guide (guide_id),
  763. INDEX idx_status (status)
  764. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评估订单表';
  765. -- =============================================
  766. -- 成长规划师相关表
  767. -- =============================================
  768. -- 成长规划师申请表
  769. CREATE TABLE IF NOT EXISTS guide_applications (
  770. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  771. user_id BIGINT NOT NULL COMMENT '申请人用户ID',
  772. type VARCHAR(20) NOT NULL DEFAULT 'new_apply' COMMENT '申请类型: new_apply-新注册, upgrade-升级',
  773. target_level VARCHAR(20) NOT NULL COMMENT '目标等级: junior-初级, intermediate-中级, senior-高级',
  774. current_level VARCHAR(20) DEFAULT NULL COMMENT '当前等级(升级时填写)',
  775. package_id BIGINT COMMENT '申请的套餐ID',
  776. payment_proof VARCHAR(500) COMMENT '付款凭证URL',
  777. payment_amount INT COMMENT '付款金额(分)',
  778. address VARCHAR(500) COMMENT '地址',
  779. bank_card VARCHAR(50) COMMENT '银行卡号',
  780. bank_name VARCHAR(100) COMMENT '开户行',
  781. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待审核, approved-已通过, rejected-已拒绝',
  782. reject_reason VARCHAR(500) COMMENT '拒绝原因',
  783. reviewed_at DATETIME COMMENT '审核时间',
  784. reviewed_by BIGINT COMMENT '审核人ID',
  785. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  786. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  787. INDEX idx_user_id (user_id),
  788. INDEX idx_status (status),
  789. INDEX idx_type (type)
  790. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请表';
  791. -- 成长规划师申请过程记录表
  792. CREATE TABLE IF NOT EXISTS guide_application_records (
  793. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  794. application_id BIGINT NOT NULL COMMENT '关联申请ID',
  795. user_id BIGINT NOT NULL COMMENT '操作人用户ID',
  796. action VARCHAR(50) NOT NULL COMMENT '操作: submit/approve/reject/withdraw/resubmit',
  797. from_status VARCHAR(20) COMMENT '操作前状态',
  798. to_status VARCHAR(20) NOT NULL COMMENT '操作后状态',
  799. remark VARCHAR(500) COMMENT '备注/原因',
  800. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  801. INDEX idx_application_id (application_id),
  802. INDEX idx_user_id (user_id),
  803. INDEX idx_action (action)
  804. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请过程记录表';
  805. -- =============================================
  806. -- 小游戏表
  807. -- =============================================
  808. -- 小游戏表
  809. CREATE TABLE IF NOT EXISTS mini_games (
  810. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  811. game_code VARCHAR(20) NOT NULL UNIQUE COMMENT '游戏代码',
  812. game_name VARCHAR(50) NOT NULL COMMENT '游戏名称',
  813. description VARCHAR(255) COMMENT '游戏描述',
  814. icon VARCHAR(50) COMMENT '图标emoji',
  815. default_duration INT DEFAULT 5 COMMENT '默认时长(分钟)',
  816. default_points INT DEFAULT 5 COMMENT '默认奖励积分',
  817. game_url VARCHAR(255) COMMENT '游戏H5页面URL',
  818. sort_order INT DEFAULT 0 COMMENT '排序',
  819. status TINYINT DEFAULT 1 COMMENT '状态:0禁用1启用',
  820. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  821. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  822. INDEX idx_game_code (game_code),
  823. INDEX idx_status (status)
  824. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小游戏表';
  825. -- =============================================
  826. -- 地址维度表
  827. -- =============================================
  828. -- 街道地址维度表
  829. CREATE TABLE IF NOT EXISTS streets (
  830. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  831. province VARCHAR(50) COMMENT '省份',
  832. province_code VARCHAR(20) COMMENT '省份编码',
  833. city VARCHAR(50) COMMENT '城市',
  834. city_code VARCHAR(20) COMMENT '城市编码',
  835. district VARCHAR(50) COMMENT '区县',
  836. district_code VARCHAR(20) COMMENT '区县编码',
  837. street VARCHAR(100) COMMENT '街道',
  838. street_code VARCHAR(20) COMMENT '街道编码',
  839. full_name VARCHAR(200) COMMENT '完整地址',
  840. level INT COMMENT '层级:1省2市3区4街道',
  841. parent_id BIGINT COMMENT '父级ID',
  842. sort_order INT DEFAULT 0 COMMENT '排序',
  843. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  844. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  845. INDEX idx_level (level),
  846. INDEX idx_parent_id (parent_id),
  847. INDEX idx_street_code (street_code),
  848. INDEX idx_full_name (full_name(50))
  849. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='街道地址维度表';
  850. -- =============================================
  851. -- 系统日志表
  852. -- =============================================
  853. -- 用户操作日志表
  854. CREATE TABLE IF NOT EXISTS user_operation_logs (
  855. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  856. user_id BIGINT COMMENT '用户ID',
  857. nickname VARCHAR(50) COMMENT '用户昵称',
  858. operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: login/logout/create/update/delete/query等',
  859. description VARCHAR(500) COMMENT '操作描述',
  860. request_path VARCHAR(200) COMMENT '请求路径',
  861. request_method VARCHAR(10) COMMENT '请求方法',
  862. request_params TEXT COMMENT '请求参数(脱敏)',
  863. response_status INT COMMENT '响应状态码',
  864. client_ip VARCHAR(50) COMMENT '客户端IP',
  865. user_agent VARCHAR(500) COMMENT 'User-Agent',
  866. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  867. INDEX idx_user_id (user_id),
  868. INDEX idx_operation_type (operation_type),
  869. INDEX idx_created_at (created_at)
  870. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户操作日志表';
  871. -- =============================================
  872. -- 邀请与心愿表
  873. -- =============================================
  874. -- 邀请卡片表
  875. CREATE TABLE IF NOT EXISTS invite_card (
  876. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  877. type VARCHAR(20) NOT NULL COMMENT '类型: child/family/guide',
  878. code VARCHAR(64) NOT NULL UNIQUE COMMENT '邀请码',
  879. ref_id BIGINT NOT NULL COMMENT '关联ID(childId/familyId)',
  880. creator_id BIGINT NOT NULL COMMENT '创建人',
  881. expires_at DATETIME NOT NULL COMMENT '过期时间',
  882. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  883. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  884. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  885. INDEX idx_code (code),
  886. INDEX idx_ref_type (ref_id, type)
  887. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请卡片表';
  888. -- 心愿单表
  889. CREATE TABLE IF NOT EXISTS wishes (
  890. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  891. family_id BIGINT COMMENT '家庭ID',
  892. child_id BIGINT COMMENT '目标孩子ID',
  893. created_by BIGINT COMMENT '创建者用户ID',
  894. creator_type VARCHAR(20) COMMENT '创建者类型: child/parent',
  895. title VARCHAR(200) NOT NULL COMMENT '心愿标题',
  896. description VARCHAR(500) COMMENT '心愿描述',
  897. category VARCHAR(32) COMMENT '心愿分类',
  898. points_required INT COMMENT '所需积分',
  899. points_set_by BIGINT COMMENT '定价者ID',
  900. points_set_at DATETIME COMMENT '定价时间',
  901. status VARCHAR(32) DEFAULT 'active' COMMENT '状态: draft/active/pending_exchange/approved/exchanging/fulfilled/cancelled/rejected',
  902. exchange_requested_at DATETIME COMMENT '申请兑换时间',
  903. exchange_approved_by BIGINT COMMENT '批准者ID',
  904. exchange_approved_at DATETIME COMMENT '批准时间',
  905. points_deducted_at DATETIME COMMENT '扣积分时间',
  906. fulfilled_by BIGINT COMMENT '兑现者ID',
  907. fulfilled_at DATETIME COMMENT '兑现时间',
  908. child_confirmed_at DATETIME COMMENT '孩子确认收货时间',
  909. rejected_by BIGINT COMMENT '拒绝者ID',
  910. rejected_at DATETIME COMMENT '拒绝时间',
  911. reject_reason VARCHAR(500) COMMENT '拒绝原因',
  912. reject_count INT DEFAULT 0 COMMENT '被拒绝次数',
  913. cancelled_by BIGINT COMMENT '取消者ID',
  914. cancelled_at DATETIME COMMENT '取消时间',
  915. cancel_reason VARCHAR(500) COMMENT '取消原因',
  916. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  917. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  918. INDEX idx_family_id (family_id),
  919. INDEX idx_child_id (child_id),
  920. INDEX idx_status (status)
  921. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心愿单表';
  922. -- =============================================
  923. -- 商品与订单表
  924. -- =============================================
  925. -- 商品表
  926. CREATE TABLE IF NOT EXISTS products (
  927. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  928. name VARCHAR(200) NOT NULL COMMENT '商品名称',
  929. description VARCHAR(1000) COMMENT '商品描述',
  930. intro TEXT COMMENT '详细介绍',
  931. cover_image VARCHAR(500) COMMENT '封面图片',
  932. images TEXT COMMENT '多张图片JSON',
  933. price INT NOT NULL DEFAULT 0 COMMENT '价格(分)',
  934. stock INT NOT NULL DEFAULT 0 COMMENT '库存',
  935. sales_count INT NOT NULL DEFAULT 0 COMMENT '销量',
  936. product_type VARCHAR(32) NOT NULL COMMENT '商品类型: activity/course/physical/digital/service',
  937. vendor_id BIGINT COMMENT '供应商ID',
  938. vendor_name VARCHAR(100) COMMENT '供应商名称',
  939. status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft/pending/approved/rejected/on_shelf/off_shelf',
  940. reject_reason VARCHAR(500) COMMENT '审核拒绝原因',
  941. member_price INT COMMENT '会员价(分)',
  942. member_eligible VARCHAR(32) DEFAULT 'none' COMMENT '会员资格: all/budget/none',
  943. domain VARCHAR(32) COMMENT '五维领域: action/mind/body/wisdom/wealth',
  944. profit_rate INT DEFAULT 0 COMMENT '平台利润率(千分比)',
  945. external_source VARCHAR(64) COMMENT '外部来源系统',
  946. external_id VARCHAR(128) COMMENT '外部来源ID',
  947. external_data TEXT COMMENT '外部来源数据JSON',
  948. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  949. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  950. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
  951. -- 商品订单表
  952. CREATE TABLE IF NOT EXISTS product_orders (
  953. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  954. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  955. product_id BIGINT NOT NULL COMMENT '商品ID',
  956. product_name VARCHAR(200) COMMENT '商品名称',
  957. product_type VARCHAR(32) COMMENT '商品类型',
  958. buyer_id BIGINT NOT NULL COMMENT '购买者ID',
  959. family_id BIGINT COMMENT '家庭ID',
  960. quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
  961. unit_price INT NOT NULL COMMENT '单价(分)',
  962. total_amount INT NOT NULL COMMENT '总金额(分)',
  963. status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  964. payment_method VARCHAR(32) COMMENT '支付方式: wechat/points/membership',
  965. remark VARCHAR(500) COMMENT '备注',
  966. paid_at DATETIME COMMENT '支付时间',
  967. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  968. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  969. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单表';
  970. -- =============================================
  971. -- 系统配置与内容表
  972. -- =============================================
  973. -- 系统配置表
  974. CREATE TABLE IF NOT EXISTS sys_config (
  975. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  976. config_key VARCHAR(64) NOT NULL UNIQUE COMMENT '配置键',
  977. config_value TEXT COMMENT '配置值',
  978. description VARCHAR(500) COMMENT '配置说明',
  979. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  980. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  981. -- 内容区块配置表
  982. CREATE TABLE IF NOT EXISTS content_sections (
  983. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  984. page_key VARCHAR(50) NOT NULL COMMENT '页面标识',
  985. section_key VARCHAR(50) NOT NULL COMMENT '区块标识',
  986. title VARCHAR(100) COMMENT '区块标题',
  987. allowed_roles VARCHAR(255) DEFAULT '["anonymous"]' COMMENT '允许查看的角色JSON数组',
  988. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  989. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/inactive',
  990. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  991. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  992. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='内容区块配置表';
  993. -- 文章分类表
  994. CREATE TABLE IF NOT EXISTS article_categories (
  995. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  996. name VARCHAR(50) NOT NULL COMMENT '分类名',
  997. icon VARCHAR(20) DEFAULT '' COMMENT '图标emoji',
  998. color VARCHAR(20) DEFAULT '#5B9BD5' COMMENT '标识色',
  999. sort_order INT DEFAULT 0 COMMENT '排序',
  1000. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用'
  1001. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章分类表';
  1002. -- 文章表
  1003. CREATE TABLE IF NOT EXISTS articles (
  1004. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1005. category_id BIGINT DEFAULT 0 COMMENT '所属分类ID',
  1006. title VARCHAR(200) NOT NULL COMMENT '标题',
  1007. summary VARCHAR(500) DEFAULT '' COMMENT '摘要',
  1008. cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图URL',
  1009. content LONGTEXT COMMENT '富文本内容',
  1010. tags VARCHAR(200) DEFAULT '' COMMENT '标签JSON数组',
  1011. author VARCHAR(100) DEFAULT '浠艾福' COMMENT '作者',
  1012. read_time INT DEFAULT 0 COMMENT '预计阅读分钟数',
  1013. related_dimensions VARCHAR(100) DEFAULT '' COMMENT '关联五维JSON数组',
  1014. visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限: public/login/private',
  1015. visible_to TEXT COMMENT '私密指定人群JSON',
  1016. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft/published/archived',
  1017. is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1精选/0普通',
  1018. published_at DATETIME DEFAULT NULL COMMENT '发布时间',
  1019. view_count INT DEFAULT 0 COMMENT '浏览次数',
  1020. created_by BIGINT DEFAULT 0 COMMENT '发布人adminID',
  1021. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1022. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1023. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
  1024. -- =============================================
  1025. -- 五维能量系统表
  1026. -- =============================================
  1027. -- 能量维度定义表
  1028. CREATE TABLE IF NOT EXISTS energy_dimension (
  1029. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1030. code VARCHAR(16) NOT NULL UNIQUE COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1031. name VARCHAR(20) NOT NULL COMMENT '维度名称: 身/心/智/行/富',
  1032. icon VARCHAR(16) COMMENT '图标emoji',
  1033. element VARCHAR(10) COMMENT '五行元素: 土/火/金/木/水',
  1034. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  1035. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用',
  1036. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1037. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量维度定义表';
  1038. -- 服务-维度比例配置表
  1039. CREATE TABLE IF NOT EXISTS energy_source_config (
  1040. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1041. source_type VARCHAR(32) NOT NULL COMMENT '来源类型: task/activity/course/product/consultation',
  1042. source_id BIGINT NOT NULL COMMENT '来源业务表ID',
  1043. source_name VARCHAR(200) COMMENT '冗余名称',
  1044. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1045. ratio INT NOT NULL COMMENT '占比(基点,6000=60%)',
  1046. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1047. INDEX idx_source (source_type, source_id)
  1048. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务-维度比例配置表';
  1049. -- 能量流水表
  1050. CREATE TABLE IF NOT EXISTS energy_log (
  1051. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1052. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1053. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1054. amount INT NOT NULL COMMENT '变动量(正=获得,负=消耗)',
  1055. balance_after INT NOT NULL COMMENT '变动后余额',
  1056. source_type VARCHAR(32) COMMENT '来源类型: task/product/medical_report/daily_record',
  1057. source_id BIGINT COMMENT '来源ID',
  1058. ref_id BIGINT COMMENT '关联旧流水ID(覆盖时标记)',
  1059. expires_at DATETIME COMMENT '过期时间(空=永不过期)',
  1060. description VARCHAR(500) COMMENT '描述',
  1061. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1062. INDEX idx_child_dim (child_id, dimension_id),
  1063. INDEX idx_created (created_at),
  1064. INDEX idx_source (source_type, source_id)
  1065. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量流水表';
  1066. -- 维度余额表
  1067. CREATE TABLE IF NOT EXISTS energy_balance (
  1068. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1069. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1070. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1071. balance INT DEFAULT 0 COMMENT '当前能量值(可为负)',
  1072. total_earned INT DEFAULT 0 COMMENT '累计获得',
  1073. total_spent INT DEFAULT 0 COMMENT '累计消耗',
  1074. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1075. UNIQUE KEY uk_child_dim (child_id, dimension_id)
  1076. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维度余额表';
  1077. -- =============================================
  1078. -- 分佣裂变系统表
  1079. -- =============================================
  1080. -- 佣金记录表
  1081. CREATE TABLE IF NOT EXISTS commission_records (
  1082. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1083. order_id BIGINT NOT NULL COMMENT '订单ID',
  1084. order_type VARCHAR(32) NOT NULL COMMENT '订单类型: membership/product/assessment/package',
  1085. referrer_id BIGINT NOT NULL COMMENT '推荐人ID',
  1086. buyer_id BIGINT NOT NULL COMMENT '购买人ID',
  1087. commission_type VARCHAR(16) NOT NULL COMMENT '佣金类型: member/profit',
  1088. level INT DEFAULT 1 COMMENT '佣金层级: 1=直接推荐, 2=间接推荐',
  1089. order_amount INT NOT NULL COMMENT '订单金额(分)',
  1090. profit_rate INT DEFAULT 0 COMMENT '利润率(千分比,如235=23.5%)',
  1091. commission_amount INT NOT NULL COMMENT '佣金金额(分)',
  1092. status VARCHAR(16) NOT NULL DEFAULT 'settled' COMMENT '状态: pending/settled',
  1093. remark VARCHAR(255) DEFAULT NULL COMMENT '备注',
  1094. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1095. settled_at DATETIME DEFAULT NULL COMMENT '结算时间',
  1096. withdrawn_at DATETIME DEFAULT NULL COMMENT '提现时间',
  1097. INDEX idx_referrer (referrer_id),
  1098. INDEX idx_buyer (buyer_id),
  1099. INDEX idx_order (order_id, order_type)
  1100. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金记录表';
  1101. -- 提现申请表
  1102. CREATE TABLE IF NOT EXISTS withdrawal_requests (
  1103. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1104. user_id BIGINT NOT NULL COMMENT '用户ID',
  1105. amount INT NOT NULL COMMENT '提现金额(分)',
  1106. account_info TEXT COMMENT '账户信息(JSON)',
  1107. status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
  1108. audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
  1109. audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
  1110. remark VARCHAR(255) DEFAULT NULL COMMENT '审核备注',
  1111. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1112. INDEX idx_user (user_id),
  1113. INDEX idx_status (status)
  1114. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现申请表';
  1115. -- 会员升级记录表
  1116. CREATE TABLE IF NOT EXISTS member_upgrade_records (
  1117. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1118. user_id BIGINT NOT NULL COMMENT '用户ID',
  1119. from_level VARCHAR(20) NOT NULL COMMENT '升级前等级',
  1120. to_level VARCHAR(20) NOT NULL COMMENT '升级后等级',
  1121. upgrade_type VARCHAR(20) NOT NULL COMMENT '升级类型: pay/consumption/admin',
  1122. order_id BIGINT DEFAULT NULL COMMENT '关联支付订单ID',
  1123. consumption_amount BIGINT DEFAULT NULL COMMENT '触发升级的累计消费金额',
  1124. expire_time DATETIME DEFAULT NULL COMMENT '家庭会员到期时间',
  1125. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1126. INDEX idx_user (user_id),
  1127. INDEX idx_order (order_id)
  1128. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员升级记录表';
  1129. -- =============================================
  1130. -- 规划师服务模块表
  1131. -- =============================================
  1132. -- 服务类型表
  1133. CREATE TABLE IF NOT EXISTS service_types (
  1134. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1135. name VARCHAR(100) NOT NULL COMMENT '类型名称',
  1136. icon VARCHAR(50) COMMENT '图标',
  1137. description VARCHAR(500) COMMENT '描述',
  1138. sort_order INT DEFAULT 0 COMMENT '排序',
  1139. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1140. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1141. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1142. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务类型表';
  1143. -- 服务内容表
  1144. CREATE TABLE IF NOT EXISTS service_contents (
  1145. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1146. type_id BIGINT NOT NULL COMMENT '关联服务类型',
  1147. title VARCHAR(200) NOT NULL COMMENT '内容标题',
  1148. content TEXT COMMENT '富文本内容',
  1149. duration INT COMMENT '建议时长(分钟)',
  1150. age_range VARCHAR(50) COMMENT '适用年龄',
  1151. price INT COMMENT '参考价格(分)',
  1152. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/ACTIVE',
  1153. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1154. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1155. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务内容表';
  1156. -- 套餐模板表
  1157. CREATE TABLE IF NOT EXISTS guide_package_templates (
  1158. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1159. name VARCHAR(100) NOT NULL COMMENT '模板名称',
  1160. validity_months INT COMMENT '有效期(月)',
  1161. reference_price INT COMMENT '参考价格(分)',
  1162. min_price INT COMMENT '最低售价(分)',
  1163. description VARCHAR(500) COMMENT '说明',
  1164. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1165. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1166. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1167. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板表';
  1168. -- 套餐模板服务项表
  1169. CREATE TABLE IF NOT EXISTS package_template_services (
  1170. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1171. template_id BIGINT NOT NULL COMMENT '关联模板',
  1172. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1173. quantity INT DEFAULT 1 COMMENT '数量',
  1174. unit VARCHAR(20) COMMENT '单位'
  1175. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板服务项表';
  1176. -- 成长规划师套餐表
  1177. CREATE TABLE IF NOT EXISTS guide_packages (
  1178. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1179. guide_id BIGINT COMMENT '成长规划师ID',
  1180. package_id BIGINT COMMENT '关联模板',
  1181. commission_rate INT COMMENT '佣金比例(基点,1000=10%)',
  1182. teacher_id BIGINT COMMENT '成长规划师ID(旧字段)',
  1183. template_id BIGINT COMMENT '关联模板(旧字段)',
  1184. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  1185. level VARCHAR(20) COMMENT '套餐等级',
  1186. price INT NOT NULL COMMENT '销售价格(分)',
  1187. validity_months INT COMMENT '有效期(月)',
  1188. validity_days INT DEFAULT 0 COMMENT '有效期天数',
  1189. description VARCHAR(500) COMMENT '套餐说明',
  1190. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/PUBLISHED/PAUSED',
  1191. sort_order INT DEFAULT 0 COMMENT '排序',
  1192. sales_count INT DEFAULT 0 COMMENT '销量',
  1193. share_code VARCHAR(50) COMMENT '分享码',
  1194. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1195. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1196. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐表';
  1197. -- 成长规划师套餐服务项表
  1198. CREATE TABLE IF NOT EXISTS guide_package_services (
  1199. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1200. package_id BIGINT NOT NULL COMMENT '关联套餐',
  1201. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1202. quantity INT DEFAULT 1 COMMENT '数量',
  1203. unit VARCHAR(20) COMMENT '单位'
  1204. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐服务项表';
  1205. -- 成长规划师订单表
  1206. CREATE TABLE IF NOT EXISTS guide_orders (
  1207. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1208. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  1209. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1210. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1211. package_id BIGINT NOT NULL COMMENT '套餐ID',
  1212. amount INT NOT NULL COMMENT '金额(分)',
  1213. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/PAID/COMPLETED/REFUNDED',
  1214. pay_time DATETIME COMMENT '支付时间',
  1215. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1216. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1217. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师订单表';
  1218. -- 佣金明细表
  1219. CREATE TABLE IF NOT EXISTS guide_commissions (
  1220. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1221. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1222. order_id BIGINT NOT NULL COMMENT '订单ID',
  1223. amount INT NOT NULL COMMENT '佣金金额(分)',
  1224. rate INT COMMENT '佣金比例(基点)',
  1225. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/COMPLETED',
  1226. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1227. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金明细表';
  1228. -- 服务记录表
  1229. CREATE TABLE IF NOT EXISTS guide_service_logs (
  1230. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1231. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1232. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1233. order_id BIGINT COMMENT '订单ID',
  1234. service_content_id BIGINT NOT NULL COMMENT '服务内容ID',
  1235. notes VARCHAR(500) COMMENT '服务记录',
  1236. duration INT COMMENT '服务时长(分钟)',
  1237. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1238. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务记录表';
  1239. -- 成长规划师邀请码表
  1240. CREATE TABLE IF NOT EXISTS guide_invite_codes (
  1241. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1242. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  1243. code VARCHAR(50) NOT NULL UNIQUE COMMENT '邀请码',
  1244. status VARCHAR(20) DEFAULT 'active' COMMENT '状态',
  1245. used_by_user_id BIGINT COMMENT '使用该邀请码的用户ID',
  1246. used_at DATETIME COMMENT '使用时间',
  1247. expire_at DATETIME COMMENT '过期时间',
  1248. use_count INT DEFAULT 0 COMMENT '使用次数',
  1249. max_use_count INT COMMENT '最大使用次数',
  1250. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1251. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1252. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师邀请码表';
  1253. -- =============================================
  1254. -- 财富维度表
  1255. -- =============================================
  1256. -- 财商打卡记录表
  1257. CREATE TABLE IF NOT EXISTS finance_checkins (
  1258. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1259. user_id BIGINT NOT NULL COMMENT '用户ID',
  1260. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1261. checkin_type VARCHAR(20) NOT NULL COMMENT '打卡类型: daily_plan/saving/expense/review',
  1262. checkin_date DATE NOT NULL COMMENT '打卡日期',
  1263. amount INT COMMENT '金额(分,收支记录)',
  1264. category VARCHAR(50) COMMENT '收支分类',
  1265. note VARCHAR(200) COMMENT '备注',
  1266. mood VARCHAR(20) COMMENT '心情',
  1267. earned_energy INT DEFAULT 0 COMMENT '获得的能量值',
  1268. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1269. INDEX idx_user_date (user_id, checkin_date),
  1270. INDEX idx_child (child_id)
  1271. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财商打卡记录表';
  1272. -- 保单管理表
  1273. CREATE TABLE IF NOT EXISTS insurance_policies (
  1274. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1275. user_id BIGINT NOT NULL COMMENT '用户ID',
  1276. child_id BIGINT COMMENT '关联孩子ID',
  1277. policy_name VARCHAR(100) NOT NULL COMMENT '保单名称',
  1278. insurance_company VARCHAR(100) COMMENT '保险公司',
  1279. policy_type VARCHAR(50) COMMENT '保单类型: medical/life/accident/education/endowment',
  1280. insured_person VARCHAR(50) NOT NULL COMMENT '被保人姓名',
  1281. premium INT COMMENT '保费(分)',
  1282. sum_insured INT COMMENT '保额(分)',
  1283. start_date DATE COMMENT '生效日期',
  1284. end_date DATE COMMENT '到期日期',
  1285. renewal_type VARCHAR(20) DEFAULT 'annual' COMMENT '续费类型: annual/monthly/single',
  1286. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/expired/cancelled',
  1287. policy_no VARCHAR(100) COMMENT '保单号',
  1288. remark VARCHAR(500) COMMENT '备注',
  1289. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1290. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1291. INDEX idx_user (user_id),
  1292. INDEX idx_child (child_id),
  1293. INDEX idx_status (status)
  1294. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保单管理表';
  1295. -- =============================================
  1296. -- 健康检测报告模块表
  1297. -- =============================================
  1298. -- 健康检测报告表
  1299. CREATE TABLE IF NOT EXISTS health_reports (
  1300. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1301. user_id BIGINT NOT NULL COMMENT '上传者用户ID(关联users表)',
  1302. subject_id BIGINT COMMENT '报告主体用户ID(关联users表,为null表示未绑定)',
  1303. family_id BIGINT COMMENT '家庭ID',
  1304. report_type VARCHAR(32) NOT NULL COMMENT '报告类型: physical_exam(体检)/gut_flora(菌群检测)',
  1305. report_date DATE COMMENT '报告日期',
  1306. overall_score INT COMMENT '健康总分(0-100)',
  1307. gut_health_score INT COMMENT '菌群健康分',
  1308. chronic_disease_score INT COMMENT '慢病控制分',
  1309. nutrition_score INT COMMENT '营养均衡分',
  1310. gut_age VARCHAR(32) COMMENT '肠道预测年龄',
  1311. gut_type VARCHAR(50) COMMENT '肠型',
  1312. file_url VARCHAR(500) COMMENT '报告文件URL',
  1313. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/archived',
  1314. remark VARCHAR(500) COMMENT '备注',
  1315. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1316. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1317. INDEX idx_user_id (user_id),
  1318. INDEX idx_subject_id (subject_id),
  1319. INDEX idx_family_id (family_id),
  1320. INDEX idx_report_type (report_type)
  1321. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康检测报告表';
  1322. -- 健康报告查看权限表
  1323. CREATE TABLE IF NOT EXISTS health_report_permissions (
  1324. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1325. report_id BIGINT NOT NULL COMMENT '报告ID',
  1326. user_id BIGINT NOT NULL COMMENT '有查看权限的用户ID',
  1327. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1328. UNIQUE KEY uk_report_user (report_id, user_id),
  1329. INDEX idx_report_id (report_id),
  1330. INDEX idx_user_id (user_id)
  1331. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康报告查看权限表';
  1332. -- 健康指标明细表
  1333. CREATE TABLE IF NOT EXISTS health_indicators (
  1334. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1335. report_id BIGINT NOT NULL COMMENT '关联报告ID',
  1336. category VARCHAR(50) COMMENT '指标分类: 营养状况/疾病风险/肠道屏障/神经递质/...',
  1337. indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称',
  1338. indicator_value VARCHAR(100) COMMENT '检测值',
  1339. unit VARCHAR(50) COMMENT '单位',
  1340. ref_range VARCHAR(200) COMMENT '参考范围',
  1341. status VARCHAR(50) COMMENT '评估状态: 正常/偏低/偏高/过多/注意/低风险/未检出',
  1342. sort_order INT DEFAULT 0 COMMENT '显示排序',
  1343. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1344. INDEX idx_report_id (report_id),
  1345. INDEX idx_category (category)
  1346. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康指标明细表';
  1347. -- 教育体系配置表
  1348. CREATE TABLE IF NOT EXISTS education_systems (
  1349. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1350. name VARCHAR(32) NOT NULL UNIQUE COMMENT '编码(key)',
  1351. label VARCHAR(50) NOT NULL COMMENT '显示名称',
  1352. description VARCHAR(200) COMMENT '描述说明',
  1353. sort_order INT DEFAULT 0 COMMENT '排序',
  1354. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1355. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1356. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1357. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教育体系配置表';
  1358. INSERT INTO education_systems (name, label, description, sort_order) VALUES
  1359. ('high_school', '中专/高中', '中等教育学历', 1),
  1360. ('associate', '大专', '高等专科学历', 2),
  1361. ('bachelor', '本科', '大学本科学历', 3),
  1362. ('master', '硕士', '硕士研究生学历', 4),
  1363. ('doctor', '博士', '博士研究生学历', 5);
  1364. -- ===== v1.2 先天属性体系 =====
  1365. -- 家庭成员先天属性表
  1366. CREATE TABLE IF NOT EXISTS family_member_attributes (
  1367. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1368. member_id BIGINT NOT NULL COMMENT '家庭成员ID(children表或users表)',
  1369. member_type VARCHAR(10) NOT NULL COMMENT '成员类型: child/parent',
  1370. birth_datetime DATETIME COMMENT '出生日期(精确到分钟,用于八字排盘)',
  1371. eight_characters JSON COMMENT '八字四柱JSON',
  1372. wuxing_elements JSON COMMENT '五行星盘元素JSON',
  1373. zodiac VARCHAR(16) COMMENT '生肖: rat/ox/tiger/rabbit/dragon/snake/horse/sheep/monkey/rooster/dog/pig',
  1374. blood_type VARCHAR(5) COMMENT '血型: A/B/AB/O',
  1375. mind_base_score INT DEFAULT 0 COMMENT '心维度基础分(百分位)',
  1376. wisdom_base_score INT DEFAULT 0 COMMENT '智维度基础分(百分位)',
  1377. behavior_modifier JSON COMMENT '行为修正因子JSON',
  1378. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1379. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1380. UNIQUE KEY uk_member (member_id, member_type)
  1381. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员先天属性表';
  1382. -- 星座配置表
  1383. CREATE TABLE IF NOT EXISTS zodiac_config (
  1384. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1385. zodiac_code VARCHAR(20) NOT NULL UNIQUE COMMENT '星座代码',
  1386. zodiac_name VARCHAR(10) NOT NULL COMMENT '星座名称',
  1387. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1388. start_month INT NOT NULL COMMENT '起始月',
  1389. start_day INT NOT NULL COMMENT '起始日',
  1390. end_month INT NOT NULL COMMENT '结束月',
  1391. end_day INT NOT NULL COMMENT '结束日',
  1392. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1393. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1394. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1395. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1396. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1397. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1398. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='星座配置表';
  1399. -- 八字配置表
  1400. CREATE TABLE IF NOT EXISTS bazi_config (
  1401. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1402. stem_or_branch VARCHAR(10) NOT NULL COMMENT '天干或地支',
  1403. type VARCHAR(10) NOT NULL COMMENT '类型: stem/branch',
  1404. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1405. yin_yang VARCHAR(5) COMMENT '阴阳: yin/yang',
  1406. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1407. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1408. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1409. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1410. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1411. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1412. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='八字配置表(天干地支五行)';
  1413. -- 血型配置表
  1414. CREATE TABLE IF NOT EXISTS blood_type_config (
  1415. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1416. blood_type VARCHAR(5) NOT NULL UNIQUE COMMENT '血型: A/B/AB/O',
  1417. description VARCHAR(200) COMMENT '性格描述',
  1418. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1419. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1420. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1421. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1422. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1423. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1424. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配置表';
  1425. CREATE TABLE IF NOT EXISTS activities (
  1426. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1427. title VARCHAR(100) NOT NULL COMMENT '活动标题',
  1428. description VARCHAR(500) COMMENT '活动描述',
  1429. cover_image VARCHAR(500) COMMENT '封面图片URL',
  1430. dimension_code VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1431. activity_type VARCHAR(20) DEFAULT 'offline' COMMENT '活动类型: offline/online/campaign',
  1432. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft/published/ended',
  1433. start_time DATETIME COMMENT '开始时间',
  1434. end_time DATETIME COMMENT '结束时间',
  1435. location VARCHAR(200) COMMENT '活动地点',
  1436. max_participants INT DEFAULT 0 COMMENT '最大参与人数',
  1437. current_participants INT DEFAULT 0 COMMENT '当前参与人数',
  1438. price INT DEFAULT 0 COMMENT '活动价格(分)',
  1439. vendor_id BIGINT COMMENT '服务商ID',
  1440. vendor_name VARCHAR(100) COMMENT '服务商名称',
  1441. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1442. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1443. INDEX idx_dimension (dimension_code),
  1444. INDEX idx_status (status),
  1445. INDEX idx_start_time (start_time)
  1446. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';
  1447. -- ===== v1.3 家庭成员体系 =====
  1448. -- 手动添加的家庭成员表(替代children表用于新成员)
  1449. CREATE TABLE IF NOT EXISTS family_members (
  1450. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1451. family_id BIGINT NOT NULL COMMENT '所属家庭ID',
  1452. user_id BIGINT COMMENT '关联的用户ID(手机号匹配到已有用户时)',
  1453. nickname VARCHAR(100) NOT NULL COMMENT '昵称',
  1454. phone VARCHAR(20) COMMENT '手机号',
  1455. avatar VARCHAR(500) COMMENT '头像',
  1456. gender VARCHAR(10) COMMENT '性别: male/female',
  1457. birthday DATE COMMENT '出生日期',
  1458. relationship_type VARCHAR(50) NOT NULL COMMENT '关系类型key',
  1459. capability_role VARCHAR(20) NOT NULL COMMENT '能力角色: parent/child(决定界面权限)',
  1460. show_to_family INT DEFAULT 1 COMMENT '对家庭成员可见: 1=可见, 0=不可见',
  1461. total_points INT DEFAULT 0 COMMENT '总积分',
  1462. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1463. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1464. INDEX idx_family_id (family_id),
  1465. INDEX idx_phone (phone)
  1466. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员表(手动添加)';
  1467. -- 关系类型配置表(管理端可配置)
  1468. CREATE TABLE IF NOT EXISTS relationship_types (
  1469. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1470. type_key VARCHAR(50) NOT NULL UNIQUE COMMENT '类型标识: spouse/parent/child/sibling',
  1471. type_name VARCHAR(100) NOT NULL COMMENT '类型显示名: 配偶/父母/子女/兄弟姐妹',
  1472. capability_role VARCHAR(20) NOT NULL COMMENT '能力角色: parent/child',
  1473. sort_order INT DEFAULT 0 COMMENT '排序序号',
  1474. enabled INT DEFAULT 1 COMMENT '是否启用: 1=启用, 0=禁用',
  1475. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1476. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系类型配置表';
  1477. -- 默认关系类型数据
  1478. INSERT IGNORE INTO relationship_types (type_key, type_name, capability_role, sort_order) VALUES
  1479. ('spouse', '配偶', 'parent', 1),
  1480. ('parent', '父母', 'parent', 2),
  1481. ('child', '子女', 'child', 3),
  1482. ('sibling', '兄弟姐妹', 'child', 4);
  1483. -- 用户收货地址表
  1484. CREATE TABLE IF NOT EXISTS user_address (
  1485. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1486. user_id BIGINT NOT NULL COMMENT '用户ID',
  1487. receiver_name VARCHAR(50) NOT NULL COMMENT '收货人姓名',
  1488. phone VARCHAR(20) NOT NULL COMMENT '收货人电话',
  1489. province VARCHAR(50) COMMENT '省',
  1490. city VARCHAR(50) COMMENT '市',
  1491. district VARCHAR(50) COMMENT '区',
  1492. street VARCHAR(200) COMMENT '详细地址',
  1493. is_default TINYINT DEFAULT 0 COMMENT '是否默认地址 1=是 0=否',
  1494. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1495. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1496. INDEX idx_user_id (user_id),
  1497. INDEX idx_is_default (is_default)
  1498. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户收货地址表';
  1499. -- =============================================
  1500. -- 新手引导奖励表
  1501. -- =============================================
  1502. CREATE TABLE IF NOT EXISTS onboarding_task (
  1503. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1504. user_id BIGINT NOT NULL,
  1505. task_type VARCHAR(32) NOT NULL,
  1506. reward_points INT DEFAULT 0,
  1507. reward_energy INT DEFAULT 0,
  1508. status VARCHAR(16) DEFAULT 'PENDING',
  1509. completed_at DATETIME,
  1510. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1511. INDEX idx_user_id (user_id)
  1512. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1513. -- =============================================
  1514. -- 成长任务配置表
  1515. -- =============================================
  1516. CREATE TABLE IF NOT EXISTS growth_task (
  1517. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1518. type VARCHAR(16) NOT NULL COMMENT 'DAILY/NEWBIE',
  1519. title VARCHAR(100) NOT NULL,
  1520. description VARCHAR(255),
  1521. reward_points INT DEFAULT 0,
  1522. reward_energy INT DEFAULT 0,
  1523. target_value INT DEFAULT 1,
  1524. task_key VARCHAR(32) UNIQUE NOT NULL,
  1525. enabled TINYINT DEFAULT 1,
  1526. sort_order INT DEFAULT 0,
  1527. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1528. INDEX idx_type (type)
  1529. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务配置表';
  1530. CREATE TABLE IF NOT EXISTS growth_task_log (
  1531. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1532. user_id BIGINT NOT NULL,
  1533. task_id BIGINT NOT NULL,
  1534. progress INT DEFAULT 0,
  1535. completed TINYINT DEFAULT 0,
  1536. claimed TINYINT DEFAULT 0,
  1537. date VARCHAR(10) COMMENT 'YYYY-MM-DD for daily, empty for newbie',
  1538. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1539. INDEX idx_user_date (user_id, date),
  1540. INDEX idx_task_id (task_id)
  1541. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务用户进度表';
  1542. -- =============================================
  1543. -- 优惠券配置表
  1544. -- =============================================
  1545. CREATE TABLE IF NOT EXISTS coupon (
  1546. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1547. name VARCHAR(64) NOT NULL,
  1548. type VARCHAR(16) DEFAULT 'FIXED',
  1549. value INT DEFAULT 0 COMMENT '金额 单位:分',
  1550. min_spend INT DEFAULT 0 COMMENT '最低消费 单位:分',
  1551. applicable_to VARCHAR(32) DEFAULT 'ALL',
  1552. valid_from DATETIME,
  1553. valid_until DATETIME,
  1554. total_count INT DEFAULT 0,
  1555. used_count INT DEFAULT 0,
  1556. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1557. INDEX idx_valid_period (valid_from, valid_until)
  1558. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券配置表';
  1559. CREATE TABLE IF NOT EXISTS user_coupon (
  1560. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1561. user_id BIGINT NOT NULL,
  1562. coupon_id BIGINT NOT NULL,
  1563. status VARCHAR(16) DEFAULT 'AVAILABLE',
  1564. received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1565. used_at DATETIME,
  1566. order_id BIGINT,
  1567. INDEX idx_user_coupon (user_id, coupon_id),
  1568. INDEX idx_status (status),
  1569. INDEX idx_order_id (order_id)
  1570. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户优惠券表';
  1571. -- =============================================
  1572. -- 邀请里程碑表
  1573. -- =============================================
  1574. CREATE TABLE IF NOT EXISTS invite_milestone (
  1575. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1576. user_id BIGINT NOT NULL,
  1577. milestone VARCHAR(32) NOT NULL,
  1578. reward_points INT DEFAULT 0,
  1579. reward_energy INT DEFAULT 0,
  1580. status VARCHAR(16) DEFAULT 'PENDING',
  1581. achieved_at DATETIME,
  1582. claimed_at DATETIME,
  1583. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1584. INDEX idx_user_milestone (user_id, milestone)
  1585. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请里程碑表';
  1586. -- =============================================
  1587. -- 推广排行榜周记录表
  1588. -- =============================================
  1589. CREATE TABLE IF NOT EXISTS referral_leaderboard (
  1590. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1591. user_id BIGINT NOT NULL,
  1592. week_start VARCHAR(10) NOT NULL COMMENT '周一日期 YYYY-MM-DD',
  1593. referral_count INT DEFAULT 0,
  1594. `rank` INT,
  1595. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1596. UNIQUE INDEX idx_user_week (user_id, week_start),
  1597. INDEX idx_week_rank (week_start, referral_count DESC)
  1598. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广排行榜周记录';
  1599. -- =============================================
  1600. -- 成长任务种子数据
  1601. -- =============================================
  1602. INSERT IGNORE INTO growth_task (type, title, description, reward_points, reward_energy, target_value, task_key, sort_order) VALUES
  1603. ('DAILY', '每日签到', '完成每日签到', 20, 3, 1, 'DAILY_CHECKIN', 1),
  1604. ('DAILY', '完成任务', '完成一个任务', 30, 5, 1, 'DAILY_TASK', 2),
  1605. ('DAILY', '分享文章', '分享一篇好文给好友', 10, 2, 1, 'DAILY_SHARE', 3),
  1606. ('DAILY', 'AI对话', '与AI助手进行一次对话', 15, 3, 1, 'DAILY_AI', 4);