schema.sql 129 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498
  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','supplier_admin') 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. mascot VARCHAR(20) DEFAULT NULL COMMENT 'AI助手形象: xibao(浠宝)/fubao(福宝)',
  29. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  30. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  31. INDEX idx_openid (openid),
  32. INDEX idx_family_id (family_id),
  33. INDEX idx_phone (phone)
  34. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  35. -- ============================================================
  36. -- 【已废除】children 表已合并到 family_members
  37. -- 保留此处仅作参考,勿执行
  38. -- ============================================================
  39. -- CREATE TABLE IF NOT EXISTS children (
  40. -- id BIGINT AUTO_INCREMENT PRIMARY KEY,
  41. -- user_id BIGINT NOT NULL,
  42. -- family_id BIGINT NOT NULL,
  43. -- nickname VARCHAR(50) NOT NULL,
  44. -- age TINYINT NOT NULL,
  45. -- birthday DATE,
  46. -- gender ENUM('male','female'),
  47. -- penalty_enabled TINYINT DEFAULT 1 COMMENT '是否开启扣分(0否1是)',
  48. -- theme VARCHAR(32) DEFAULT 'default',
  49. -- total_points INT DEFAULT 0,
  50. -- system_points INT DEFAULT 0 COMMENT '系统积分(测评建档/平台发放)',
  51. -- streak_days INT DEFAULT 0,
  52. -- last_task_date DATE,
  53. -- focus_max_daily TINYINT DEFAULT 3,
  54. -- focus_remaining TINYINT DEFAULT 3,
  55. -- focus_reset_date DATE,
  56. -- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  57. -- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  58. -- INDEX idx_user_id (user_id),
  59. -- INDEX idx_family_id (family_id)
  60. -- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  61. -- 任务表
  62. CREATE TABLE IF NOT EXISTS tasks (
  63. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  64. family_id BIGINT NOT NULL,
  65. creator_id BIGINT NOT NULL,
  66. child_id BIGINT COMMENT '执行者ID(child任务时必填,parent任务时可空)',
  67. executor_type VARCHAR(20) COMMENT '执行者类型: child/parent',
  68. executor_id BIGINT COMMENT '执行者ID',
  69. title VARCHAR(200) NOT NULL,
  70. description TEXT,
  71. points TINYINT DEFAULT 2 COMMENT '任务积分1-10',
  72. deadline DATETIME NOT NULL,
  73. repeat_type ENUM('none', 'daily', 'weekly') DEFAULT 'none',
  74. category VARCHAR(32),
  75. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核',
  76. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核',
  77. status ENUM('pending', 'completed', 'overdue', 'cancelled') DEFAULT 'pending',
  78. completed_at DATETIME,
  79. bonus_rule JSON COMMENT '积分奖励规则',
  80. points_expire_days INT DEFAULT 0 COMMENT '积分有效期天数',
  81. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  82. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  83. INDEX idx_child_id_deadline (child_id, deadline),
  84. INDEX idx_status (status),
  85. INDEX idx_category (category),
  86. INDEX idx_executor (executor_type, executor_id)
  87. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  88. -- 积分流水表
  89. CREATE TABLE IF NOT EXISTS points_log (
  90. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  91. child_id BIGINT NOT NULL,
  92. family_member_id BIGINT COMMENT '家庭成员ID',
  93. task_id BIGINT,
  94. amount INT NOT NULL COMMENT '积分数量正负',
  95. type ENUM('earn', 'spend', 'bonus', 'penalty', 'adjust', 'reset', 'refund') NOT NULL,
  96. category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
  97. description TEXT,
  98. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  99. INDEX idx_child_id_created (child_id, created_at),
  100. INDEX idx_type (type)
  101. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  102. -- 积分清零记录表
  103. CREATE TABLE IF NOT EXISTS points_reset_log (
  104. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  105. child_id BIGINT NOT NULL,
  106. balance_before INT NOT NULL,
  107. balance_after INT DEFAULT 0,
  108. reset_type ENUM('monthly', 'manual') NOT NULL,
  109. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  110. INDEX idx_child_id (child_id)
  111. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  112. -- 奖励表
  113. CREATE TABLE IF NOT EXISTS rewards (
  114. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  115. family_id BIGINT NOT NULL COMMENT '家庭 ID,所有奖励必须关联家庭',
  116. child_id BIGINT NULL COMMENT '孩子 ID,模板奖励为NULL',
  117. title VARCHAR(100) NOT NULL,
  118. points_required INT NOT NULL,
  119. category VARCHAR(32),
  120. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available',
  121. exchange_approved TINYINT COMMENT '是否审批通过',
  122. exchanged_at DATETIME,
  123. is_template TINYINT DEFAULT 0 COMMENT '是否为预设模板',
  124. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  125. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  126. INDEX idx_family_id (family_id),
  127. INDEX idx_child_id_status (child_id, status),
  128. INDEX idx_is_template (is_template)
  129. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖励表,所有奖励必须关联到具体家庭';
  130. -- 奖励分类表
  131. CREATE TABLE IF NOT EXISTS reward_categories (
  132. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  133. family_id BIGINT NOT NULL,
  134. name VARCHAR(32) NOT NULL,
  135. icon VARCHAR(64),
  136. sort_order INT DEFAULT 0,
  137. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  138. INDEX idx_family_id (family_id)
  139. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  140. -- 预设奖励模板数据(child_id为NULL表示模板)
  141. INSERT IGNORE INTO rewards (family_id, child_id, title, points_required, category, is_template) VALUES
  142. (0, NULL, '看动画片30分钟', 30, '精神奖励', 1),
  143. (0, NULL, '玩平板游戏30分钟', 40, '特权奖励', 1),
  144. (0, NULL, '去游乐场', 100, '物质奖励', 1),
  145. (0, NULL, '买玩具', 150, '物质奖励', 1),
  146. (0, NULL, '吃冰淇淋', 20, '物质奖励', 1),
  147. (0, NULL, '选择晚餐', 25, '特权奖励', 1);
  148. -- 默认奖励分类
  149. INSERT IGNORE INTO reward_categories (family_id, name, icon, sort_order) VALUES
  150. (0, '物质奖励', 'gift', 1),
  151. (0, '精神奖励', 'star', 2),
  152. (0, '特权奖励', 'crown', 3);
  153. -- 敏感词表
  154. CREATE TABLE IF NOT EXISTS sensitive_words (
  155. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  156. word VARCHAR(50) NOT NULL,
  157. category VARCHAR(32) NOT NULL,
  158. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  159. INDEX idx_word (word)
  160. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  161. -- 任务审核表
  162. CREATE TABLE IF NOT EXISTS task_reviews (
  163. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  164. task_id BIGINT NOT NULL,
  165. child_id BIGINT NOT NULL,
  166. photo_url VARCHAR(255),
  167. voice_note_url VARCHAR(255),
  168. ai_result ENUM('pass', 'review', 'pending'),
  169. ai_confidence INT COMMENT 'AI置信度(0-100)',
  170. ai_suggestion VARCHAR(255),
  171. ai_threshold ENUM('strict', 'normal', 'loose') DEFAULT 'normal',
  172. parent_result ENUM('pass', 'reject'),
  173. parent_override TINYINT DEFAULT 0,
  174. review_type ENUM('ai', 'manual') NOT NULL,
  175. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  176. reviewed_at DATETIME,
  177. INDEX idx_task_id (task_id),
  178. INDEX idx_ai_result (ai_result)
  179. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  180. -- 打卡里程碑表
  181. CREATE TABLE IF NOT EXISTS streak_milestones (
  182. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  183. days INT NOT NULL,
  184. reward_points INT DEFAULT 0,
  185. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  186. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  187. -- 插入打卡里程碑数据
  188. INSERT IGNORE INTO streak_milestones (days, reward_points) VALUES
  189. (3, 5),
  190. (7, 10),
  191. (30, 30),
  192. (100, 100);
  193. -- 专注训练记录表
  194. CREATE TABLE IF NOT EXISTS focus_sessions (
  195. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  196. child_id BIGINT NOT NULL,
  197. mode ENUM('simple', 'pomodoro') NOT NULL,
  198. duration TINYINT NOT NULL,
  199. stars TINYINT COMMENT '评分1-5',
  200. points_earned INT,
  201. voice_note_url VARCHAR(255),
  202. started_at DATETIME NOT NULL,
  203. completed_at DATETIME,
  204. INDEX idx_child_id_completed (child_id, completed_at)
  205. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  206. -- 专注训练配置表
  207. CREATE TABLE IF NOT EXISTS focus_config (
  208. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  209. family_id BIGINT,
  210. max_daily_count TINYINT DEFAULT 3,
  211. allow_exit TINYINT DEFAULT 1 COMMENT '是否允许退出(0否1是)',
  212. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  213. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  214. -- DAN测评表
  215. CREATE TABLE IF NOT EXISTS dan_assessments (
  216. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  217. child_id BIGINT NOT NULL,
  218. assessment_date DATE NOT NULL,
  219. details JSON,
  220. source ENUM('api', 'manual') DEFAULT 'manual',
  221. photo_url VARCHAR(255),
  222. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  223. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  224. -- 任务模板表
  225. CREATE TABLE IF NOT EXISTS task_templates (
  226. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  227. title VARCHAR(200) NOT NULL,
  228. points TINYINT DEFAULT 2,
  229. duration_minutes TINYINT,
  230. category VARCHAR(32),
  231. is_default TINYINT DEFAULT 1,
  232. family_id BIGINT,
  233. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  234. INDEX idx_is_default (is_default)
  235. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  236. -- 媒体记录表(支持图片、视频、音频、文字)
  237. CREATE TABLE IF NOT EXISTS media_records (
  238. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  239. type ENUM('image', 'video', 'audio', 'text') NOT NULL,
  240. url VARCHAR(500),
  241. description TEXT,
  242. task_id BIGINT NOT NULL,
  243. creator_id BIGINT NOT NULL,
  244. original_filename VARCHAR(255),
  245. file_size BIGINT,
  246. content_type VARCHAR(100),
  247. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  248. INDEX idx_task_id (task_id),
  249. INDEX idx_creator_id (creator_id),
  250. INDEX idx_type (type),
  251. FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
  252. FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE
  253. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  254. -- =============================================
  255. -- 服务商(成长规划师)相关表
  256. -- =============================================
  257. -- 服务商表(统一管理 teacher/planner/activity_provider/product_supplier)
  258. CREATE TABLE IF NOT EXISTS guides (
  259. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  260. user_id BIGINT NOT NULL UNIQUE COMMENT '用户ID(唯一)',
  261. type VARCHAR(32) DEFAULT 'teacher' COMMENT '服务商类型: teacher/planner/activity_provider/product_supplier',
  262. teacher_no VARCHAR(20) COMMENT '服务商编号',
  263. title VARCHAR(50) COMMENT '职称/称号',
  264. specialty VARCHAR(200) COMMENT '专长领域',
  265. bio TEXT COMMENT '简介',
  266. university VARCHAR(200) COMMENT '毕业院校',
  267. education_system VARCHAR(32) COMMENT '教育体系(参考education_systems表)',
  268. experience_years TINYINT DEFAULT 0 COMMENT '从业年限',
  269. rating INT DEFAULT 500 COMMENT '评分(百分位,500=5.00)',
  270. total_appointments INT DEFAULT 0 COMMENT '总服务次数',
  271. level VARCHAR(20) NOT NULL DEFAULT 'junior' COMMENT '等级: junior-初级, intermediate-中级, senior-高级',
  272. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active-活跃, inactive-停用',
  273. service_count INT DEFAULT 0 COMMENT '当前服务家庭数',
  274. package_id BIGINT COMMENT '购买套餐ID',
  275. nickname VARCHAR(100) COMMENT '申请昵称',
  276. phone VARCHAR(20) COMMENT '联系电话',
  277. intro TEXT COMMENT '个人介绍',
  278. avatar VARCHAR(500) COMMENT '头像URL',
  279. commission_rate INT DEFAULT 1000 COMMENT '佣金比例(基点,1000=10%)',
  280. street_id BIGINT COMMENT '街道ID',
  281. province VARCHAR(50) COMMENT '省份',
  282. city VARCHAR(50) COMMENT '城市',
  283. district VARCHAR(50) COMMENT '区县',
  284. street VARCHAR(100) COMMENT '街道',
  285. approved_at DATETIME COMMENT '审核通过时间',
  286. verified_at DATETIME COMMENT '认证通过时间',
  287. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  288. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  289. INDEX idx_user_id (user_id),
  290. INDEX idx_level (level),
  291. INDEX idx_status (status),
  292. INDEX idx_type (type)
  293. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务商表(规划师/活动方/供应商)';
  294. -- 测评预约表
  295. CREATE TABLE IF NOT EXISTS assessment_appointments (
  296. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  297. user_id BIGINT COMMENT '用户ID',
  298. family_id BIGINT NOT NULL,
  299. child_id BIGINT COMMENT '孩子ID',
  300. teacher_id BIGINT COMMENT '教师ID',
  301. guide_id BIGINT COMMENT '规划师ID',
  302. package_id BIGINT COMMENT '套餐ID',
  303. appointment_date VARCHAR(20) COMMENT '预约日期 yyyy-MM-dd',
  304. appointment_time VARCHAR(20) COMMENT '预约时间 HH:mm',
  305. duration_minutes INT COMMENT '测评时长',
  306. status TINYINT DEFAULT 0 COMMENT '0=待确认,1=已确认,2=已完成,3=已取消,4=未到',
  307. appointment_type VARCHAR(20) DEFAULT 'initial' COMMENT '初测/复测/回访',
  308. notes TEXT COMMENT '备注',
  309. remark TEXT COMMENT '补充说明',
  310. contact_phone VARCHAR(20),
  311. meet_link VARCHAR(255) COMMENT '会议链接',
  312. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  313. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  314. INDEX idx_user_id (user_id),
  315. INDEX idx_teacher_id (teacher_id),
  316. INDEX idx_guide_id (guide_id),
  317. INDEX idx_family_id (family_id),
  318. INDEX idx_child_id (child_id),
  319. INDEX idx_status (status)
  320. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  321. -- DAN测评结果表
  322. CREATE TABLE IF NOT EXISTS dan_assessment_results (
  323. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  324. child_id BIGINT NOT NULL,
  325. family_member_id BIGINT COMMENT '家庭成员ID',
  326. family_member_name VARCHAR(50) COMMENT '成员姓名快照',
  327. family_member_birthday DATE COMMENT '成员出生日期快照',
  328. family_member_gender VARCHAR(10) COMMENT '成员性别快照',
  329. family_member_age INT COMMENT '成员年龄快照',
  330. teacher_id BIGINT NOT NULL,
  331. appointment_id BIGINT,
  332. attention_score INT COMMENT '注意力得分',
  333. focus_score INT COMMENT '专注力得分',
  334. memory_score INT COMMENT '记忆力得分',
  335. logic_score INT COMMENT '逻辑思维得分',
  336. perception_score INT COMMENT '感知得分',
  337. spatial_score INT COMMENT '空间思维得分',
  338. processing_speed_score INT COMMENT '加工速度得分',
  339. emotion_score INT COMMENT '情绪商数(EMI)',
  340. resilience_score INT COMMENT '心理韧性(EMI)',
  341. stress_coping_score INT COMMENT '压力应对(EMI)',
  342. self_awareness_score INT COMMENT '自我认知(EMI)',
  343. emotion_management_score INT COMMENT '情绪管理得分(EMI)',
  344. empathy_score INT COMMENT '同理心得分(EMI)',
  345. social_adaptability_score INT COMMENT '社会适应得分(EMI)',
  346. self_motivation_score INT COMMENT '自我激励得分(EMI)',
  347. overall_score INT COMMENT '综合得分',
  348. openness_score INT COMMENT '开放性(大五人格)',
  349. conscientiousness_score INT COMMENT '尽责性(大五人格)',
  350. extraversion_score INT COMMENT '外向性(大五人格)',
  351. agreeableness_score INT COMMENT '宜人性(大五人格)',
  352. neuroticism_score INT COMMENT '神经质(大五人格)',
  353. big_five_overall_score INT COMMENT '大五人格综合分',
  354. assessment_date DATE NOT NULL,
  355. duration_minutes INT COMMENT '测评时长',
  356. game_records JSON COMMENT '游戏记录详情',
  357. analysis_report TEXT COMMENT '分析报告',
  358. growth_suggestions TEXT COMMENT '成长建议',
  359. next_review_date DATE COMMENT '下次复测日期',
  360. status ENUM('draft', 'completed', 'archived') DEFAULT 'draft',
  361. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  362. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  363. -- 孩子快照字段(测评时保存的完整信息)
  364. child_name VARCHAR(50) COMMENT '孩子姓名快照',
  365. child_birthday DATE COMMENT '出生日期快照',
  366. child_gender VARCHAR(10) COMMENT '性别快照',
  367. child_age INT COMMENT '年龄快照',
  368. school VARCHAR(100) COMMENT '学校快照',
  369. grade VARCHAR(20) COMMENT '年级快照',
  370. grade_class VARCHAR(20) COMMENT '班级快照',
  371. height INT COMMENT '身高(CM)快照',
  372. weight INT COMMENT '体重(KG)快照',
  373. family_status VARCHAR(50) COMMENT '家庭状况快照',
  374. parent_degree VARCHAR(50) COMMENT '父母最高学历快照',
  375. nation VARCHAR(20) COMMENT '民族快照',
  376. province VARCHAR(50) COMMENT '省快照',
  377. city VARCHAR(50) COMMENT '市快照',
  378. district VARCHAR(50) COMMENT '区快照',
  379. address VARCHAR(200) COMMENT '详细地址快照',
  380. single_child VARCHAR(10) COMMENT '是否独生子女快照',
  381. school_score VARCHAR(20) COMMENT '在校成绩快照',
  382. urgent_name VARCHAR(50) COMMENT '紧急联系人姓名',
  383. urgent_phone VARCHAR(20) COMMENT '紧急联系人电话',
  384. -- 媒体字段
  385. pics TEXT COMMENT '图片IDs',
  386. videos TEXT COMMENT '视频IDs',
  387. audio VARCHAR(100) COMMENT '音频ID',
  388. audio_url VARCHAR(255) COMMENT '音频URL',
  389. -- 扩展描述字段
  390. process_desc TEXT COMMENT '过程描述',
  391. result_desc TEXT COMMENT '结果简评',
  392. source VARCHAR(20) DEFAULT 'planner_entry' COMMENT '报告来源: planner_entry/parent_upload/auto_fetch',
  393. INDEX idx_child_id (child_id),
  394. INDEX idx_teacher_id (teacher_id),
  395. INDEX idx_assessment_date (assessment_date)
  396. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DAN测评结果表';
  397. -- 成长规划表
  398. CREATE TABLE IF NOT EXISTS growth_plans (
  399. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  400. child_id BIGINT NOT NULL,
  401. teacher_id BIGINT NOT NULL,
  402. assessment_id BIGINT,
  403. plan_title VARCHAR(200) NOT NULL,
  404. plan_content TEXT NOT NULL COMMENT '规划内容',
  405. duration_months TINYINT COMMENT '规划周期(月)',
  406. status ENUM('draft', 'active', 'completed', 'expired') DEFAULT 'draft',
  407. start_date DATE,
  408. end_date DATE,
  409. review_count INT DEFAULT 0 COMMENT '已复盘次数',
  410. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  411. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  412. INDEX idx_child_id (child_id),
  413. INDEX idx_teacher_id (teacher_id),
  414. INDEX idx_status (status)
  415. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  416. -- =============================================
  417. -- 成长档案表
  418. -- =============================================
  419. CREATE TABLE IF NOT EXISTS growth_records (
  420. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  421. child_id BIGINT NOT NULL COMMENT '孩子ID',
  422. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  423. assessment_id BIGINT COMMENT '关联的测评结果ID',
  424. record_title VARCHAR(200) COMMENT '档案标题',
  425. child_age INT COMMENT '孩子当时年龄(月)',
  426. height VARCHAR(20) COMMENT '身高',
  427. weight VARCHAR(20) COMMENT '体重',
  428. assessment_summary TEXT COMMENT '测评摘要',
  429. overall_score INT COMMENT '综合得分',
  430. growth_suggestions TEXT COMMENT '成长建议',
  431. task_recommendations TEXT COMMENT '任务推荐(JSON)',
  432. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/completed',
  433. external_sync TINYINT DEFAULT 0 COMMENT '是否来自外部系统同步',
  434. external_source VARCHAR(100) COMMENT '外部系统来源',
  435. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  436. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  437. INDEX idx_child_id (child_id),
  438. INDEX idx_parent_id (parent_id),
  439. INDEX idx_status (status)
  440. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  441. -- =============================================
  442. -- 数据库迁移(新增字段和表)- 通过Java代码处理
  443. -- =============================================
  444. -- 注意:ALTER TABLE语句已移到 DatabaseInitializer.java 中执行
  445. -- 避免重复执行导致的错误
  446. -- 3. 家长心愿单表(新增)
  447. CREATE TABLE IF NOT EXISTS reward_wishlists (
  448. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  449. user_id BIGINT NOT NULL COMMENT '创建者用户ID',
  450. family_id BIGINT NOT NULL COMMENT '家庭ID',
  451. title VARCHAR(100) NOT NULL COMMENT '心愿名称',
  452. description TEXT COMMENT '心愿描述',
  453. points_required INT NOT NULL COMMENT '所需积分',
  454. category VARCHAR(32) COMMENT '分类',
  455. image_url VARCHAR(255) COMMENT '图片链接',
  456. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available' COMMENT '状态',
  457. exchange_approved TINYINT COMMENT '是否审批通过',
  458. exchanged_at DATETIME COMMENT '兑换时间',
  459. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  460. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  461. INDEX idx_user_id (user_id),
  462. INDEX idx_family_id (family_id),
  463. INDEX idx_status (status)
  464. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  465. -- 4. 更新任务状态枚举(如果需要支持更多状态)
  466. -- ALTER TABLE tasks MODIFY COLUMN status ENUM('pending', 'completed', 'overdue', 'cancelled', 'parent_pending', 'parent_completed') DEFAULT 'pending';
  467. -- ===================== 任务模板套餐功能 =====================
  468. -- 成长规划师-家庭关系表
  469. CREATE TABLE IF NOT EXISTS guide_families (
  470. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  471. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  472. family_id BIGINT NOT NULL COMMENT '家庭ID',
  473. service_type VARCHAR(20) DEFAULT 'consulting' COMMENT '服务类型: monthly/yearly/consulting',
  474. service_price INT DEFAULT 0 COMMENT '服务价格(分)',
  475. status VARCHAR(20) DEFAULT 'binding' COMMENT '状态: binding/paused/cancelled',
  476. bound_at DATETIME COMMENT '绑定时间',
  477. expire_at DATETIME COMMENT '服务到期时间',
  478. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  479. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  480. UNIQUE KEY uk_guide_family (guide_id, family_id),
  481. INDEX idx_guide_id (guide_id),
  482. INDEX idx_family_id (family_id)
  483. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  484. -- 任务模板套餐
  485. CREATE TABLE IF NOT EXISTS task_template_packages (
  486. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  487. creator_id BIGINT NOT NULL COMMENT '创建者成长规划师ID',
  488. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  489. description TEXT COMMENT '详细介绍',
  490. cycle_days INT NOT NULL COMMENT '周期天数',
  491. category VARCHAR(50) COMMENT '分类',
  492. tags JSON COMMENT '标签',
  493. price INT DEFAULT 0 COMMENT '售价(分)',
  494. platform_fee INT DEFAULT 0 COMMENT '平台服务费(基点)',
  495. is_public TINYINT DEFAULT 0 COMMENT '是否公开',
  496. share_code VARCHAR(50) UNIQUE COMMENT '分享码',
  497. cover_image VARCHAR(500) COMMENT '封面图',
  498. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态',
  499. reviewer_id BIGINT COMMENT '审核人',
  500. reviewed_at DATETIME COMMENT '审核时间',
  501. reject_reason TEXT COMMENT '拒绝原因',
  502. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  503. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  504. INDEX idx_creator_id (creator_id),
  505. INDEX idx_status (status),
  506. INDEX idx_is_public (is_public)
  507. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  508. -- 套餐内任务项
  509. CREATE TABLE IF NOT EXISTS task_template_items (
  510. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  511. package_id BIGINT NOT NULL COMMENT '所属套餐ID',
  512. task_name VARCHAR(100) NOT NULL,
  513. description TEXT,
  514. points INT DEFAULT 0,
  515. frequency VARCHAR(20) DEFAULT 'daily',
  516. duration INT COMMENT '预计时长(分钟)',
  517. is_required TINYINT DEFAULT 0,
  518. sort_order INT DEFAULT 0,
  519. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  520. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  521. INDEX idx_package_id (package_id)
  522. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  523. -- 套餐应用实例
  524. CREATE TABLE IF NOT EXISTS task_plan_instances (
  525. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  526. package_id BIGINT NOT NULL,
  527. family_id BIGINT NOT NULL,
  528. child_id BIGINT NOT NULL,
  529. name VARCHAR(100) NOT NULL,
  530. start_date DATE NOT NULL,
  531. end_date DATE NOT NULL,
  532. status VARCHAR(20) DEFAULT 'active',
  533. total_days INT,
  534. completed_days INT DEFAULT 0,
  535. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  536. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  537. INDEX idx_family_id (family_id),
  538. INDEX idx_child_id (child_id),
  539. INDEX idx_status (status)
  540. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  541. -- 实例任务项
  542. CREATE TABLE IF NOT EXISTS task_plan_items (
  543. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  544. instance_id BIGINT NOT NULL,
  545. template_item_id BIGINT,
  546. task_name VARCHAR(100) NOT NULL,
  547. description TEXT,
  548. points INT DEFAULT 0,
  549. frequency VARCHAR(20) DEFAULT 'daily',
  550. duration INT,
  551. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  552. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  553. INDEX idx_instance_id (instance_id)
  554. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  555. -- 套餐购买订单
  556. CREATE TABLE IF NOT EXISTS package_orders (
  557. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  558. order_no VARCHAR(32) UNIQUE NOT NULL,
  559. user_id BIGINT NOT NULL COMMENT '购买者用户ID',
  560. family_id BIGINT NOT NULL COMMENT '家庭ID',
  561. package_id BIGINT NOT NULL COMMENT '套餐ID',
  562. package_name VARCHAR(100) COMMENT '套餐名称',
  563. price INT NOT NULL COMMENT '支付金额(分)',
  564. platform_fee INT DEFAULT 0 COMMENT '平台服务费(分)',
  565. guide_id BIGINT COMMENT '成长规划师ID',
  566. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/cancelled/refunded',
  567. pay_method VARCHAR(20) COMMENT '支付方式',
  568. transaction_id VARCHAR(64) COMMENT '微信支付订单号',
  569. paid_at DATETIME COMMENT '支付时间',
  570. notify_data TEXT COMMENT '支付回调数据',
  571. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  572. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  573. INDEX idx_user_id (user_id),
  574. INDEX idx_family_id (family_id),
  575. INDEX idx_package_id (package_id),
  576. INDEX idx_status (status)
  577. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  578. -- 用户表增加成长规划师相关字段 - 已移到 DatabaseInitializer.java 执行
  579. -- ALTER TABLE users ADD COLUMN teacher_no VARCHAR(50) COMMENT '成长规划师证书号';
  580. -- ALTER TABLE users ADD COLUMN teacher_photo VARCHAR(500) COMMENT '成长规划师照片';
  581. -- ALTER TABLE users ADD COLUMN certificate_image VARCHAR(500) COMMENT '成长规划师证书照片';
  582. -- ALTER TABLE users ADD COLUMN teacher_status VARCHAR(20) DEFAULT 'pending' COMMENT '成长规划师审核状态: pending/approved/rejected';
  583. -- ALTER TABLE users ADD INDEX idx_teacher_status (teacher_status);
  584. -- 成长规划师咨询消息表
  585. CREATE TABLE IF NOT EXISTS teacher_messages (
  586. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  587. family_id BIGINT NOT NULL COMMENT '家庭ID',
  588. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  589. teacher_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  590. content TEXT NOT NULL COMMENT '消息内容',
  591. reply_content TEXT COMMENT '回复内容',
  592. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending/replied',
  593. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  594. replied_at DATETIME COMMENT '回复时间',
  595. INDEX idx_family_id (family_id),
  596. INDEX idx_teacher_id (teacher_id),
  597. INDEX idx_parent_id (parent_id),
  598. INDEX idx_status (status)
  599. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  600. -- 游戏记录表(专注训练模块)
  601. CREATE TABLE IF NOT EXISTS game_records (
  602. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  603. child_id BIGINT NOT NULL COMMENT '孩子ID',
  604. game_code VARCHAR(20) NOT NULL COMMENT '游戏代码',
  605. score INT DEFAULT 0 COMMENT '得分(0-100)',
  606. completion_time INT COMMENT '完成用时(秒)',
  607. difficulty VARCHAR(20) DEFAULT 'medium' COMMENT '难度(easy/medium/hard)',
  608. points_earned INT DEFAULT 0 COMMENT '获得积分',
  609. played_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '游玩时间',
  610. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  611. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  612. INDEX idx_child_id (child_id),
  613. INDEX idx_game_code (game_code),
  614. INDEX idx_played_at (played_at)
  615. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  616. -- 勋章定义表
  617. CREATE TABLE IF NOT EXISTS badge (
  618. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  619. badge_id VARCHAR(50) UNIQUE NOT NULL COMMENT '勋章唯一标识',
  620. name VARCHAR(100) NOT NULL COMMENT '勋章名称',
  621. description TEXT COMMENT '勋章描述',
  622. icon VARCHAR(255) COMMENT '勋章图标',
  623. category VARCHAR(20) COMMENT '分类(学习/运动/家务/阅读/打卡/综合)',
  624. level VARCHAR(20) COMMENT '等级(铜牌/银牌/金牌/钻石)',
  625. rarity VARCHAR(20) COMMENT '稀有度(普通/稀有/史诗/传说)',
  626. trigger_type VARCHAR(20) COMMENT '触发类型(task_count/streak_days/points_total/reward_count/custom)',
  627. threshold INT DEFAULT 0 COMMENT '阈值',
  628. need_approval TINYINT DEFAULT 0 COMMENT '是否需要审批',
  629. expire_days INT DEFAULT -1 COMMENT '有效期天数(-1永久)',
  630. sort_order INT DEFAULT 0 COMMENT '排序',
  631. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  632. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  633. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  634. INDEX idx_category (category),
  635. INDEX idx_is_active (is_active)
  636. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  637. -- 儿童勋章关联表
  638. CREATE TABLE IF NOT EXISTS child_badge (
  639. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  640. child_id BIGINT NOT NULL COMMENT '孩子ID',
  641. badge_id BIGINT NOT NULL COMMENT '勋章ID',
  642. earned_at DATETIME COMMENT '获得时间',
  643. expire_at DATETIME COMMENT '过期时间',
  644. status TINYINT DEFAULT 1 COMMENT '状态:1有效 0过期 -1撤销',
  645. is_favorite TINYINT DEFAULT 0 COMMENT '是否收藏',
  646. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  647. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  648. UNIQUE KEY uk_child_badge (child_id, badge_id),
  649. INDEX idx_child_id (child_id),
  650. INDEX idx_badge_id (badge_id),
  651. INDEX idx_status (status)
  652. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  653. -- =============================================
  654. -- 以下表从 DatabaseInitializer.java 提取
  655. -- 管理后台表
  656. -- =============================================
  657. -- 管理员表
  658. CREATE TABLE IF NOT EXISTS admins (
  659. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  660. username VARCHAR(50) NOT NULL COMMENT '用户名',
  661. password VARCHAR(128) NOT NULL COMMENT '密码(MD5加密)',
  662. nickname VARCHAR(50) COMMENT '昵称',
  663. real_name VARCHAR(50) COMMENT '真实姓名',
  664. phone VARCHAR(11) COMMENT '手机号',
  665. email VARCHAR(100) COMMENT '邮箱',
  666. role VARCHAR(20) DEFAULT 'admin' COMMENT '角色: admin/teacher',
  667. status TINYINT DEFAULT 1 COMMENT '状态:1启用0禁用',
  668. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  669. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  670. INDEX idx_phone (phone),
  671. INDEX idx_username (username)
  672. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
  673. -- 验证码表
  674. CREATE TABLE IF NOT EXISTS verification_codes (
  675. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  676. phone VARCHAR(11) NOT NULL COMMENT '手机号',
  677. code VARCHAR(6) NOT NULL COMMENT '验证码',
  678. type VARCHAR(20) NOT NULL COMMENT '验证码类型',
  679. expires_in INT DEFAULT 300 COMMENT '过期时间(秒)',
  680. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  681. expires_at DATETIME NOT NULL COMMENT '过期时间',
  682. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  683. INDEX idx_phone_type (phone, type),
  684. INDEX idx_expires_at (expires_at)
  685. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='验证码表';
  686. -- 管理后台任务模板表
  687. CREATE TABLE IF NOT EXISTS admin_task_templates (
  688. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  689. title VARCHAR(200) NOT NULL COMMENT '模板标题',
  690. description TEXT COMMENT '模板描述',
  691. points INT DEFAULT 10 COMMENT '默认积分',
  692. category VARCHAR(32) COMMENT '任务分类',
  693. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核:0否1是',
  694. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核:0否1是',
  695. recommended_age INT COMMENT '推荐年龄',
  696. difficulty ENUM('easy', 'medium', 'hard') DEFAULT 'medium' COMMENT '难度: easy/medium/hard',
  697. teacher_id BIGINT COMMENT '成长规划师ID',
  698. complete_types VARCHAR(100) COMMENT '完成方式JSON',
  699. duration INT COMMENT '预计完成时长(分钟)',
  700. review_type VARCHAR(20) COMMENT '审核人类型: creator/parent/teacher/ai',
  701. task_type VARCHAR(20) COMMENT '任务性质: onetime/recurring',
  702. frequency VARCHAR(20) COMMENT '频率: daily/weekly/monthly',
  703. max_frequency INT COMMENT '周期内最多完成次数',
  704. is_active TINYINT DEFAULT 1 COMMENT '是否启用:0禁用1启用',
  705. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  706. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  707. INDEX idx_category (category),
  708. INDEX idx_difficulty (difficulty),
  709. INDEX idx_is_active (is_active)
  710. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理后台任务模板表';
  711. -- =============================================
  712. -- 测评模块表
  713. -- =============================================
  714. -- 测评资料表
  715. -- 数学闯关 - 孩子当前等级
  716. CREATE TABLE IF NOT EXISTS math_child_level (
  717. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  718. child_id BIGINT NOT NULL UNIQUE,
  719. current_level TINYINT NOT NULL DEFAULT 1 COMMENT '1=一位数加减,2=两位数加减,3=一位数四则,4=两位数四则',
  720. total_passed INT DEFAULT 0 COMMENT '累计通关次数',
  721. best_time_ms BIGINT DEFAULT NULL COMMENT '最佳用时(毫秒)',
  722. best_accuracy INT DEFAULT NULL COMMENT '最佳正确率(%)',
  723. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  724. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  725. INDEX idx_child_id (child_id)
  726. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  727. -- 数学闯关 - 通关日志
  728. CREATE TABLE IF NOT EXISTS math_quiz_logs (
  729. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  730. child_id BIGINT NOT NULL,
  731. level TINYINT NOT NULL COMMENT '闯关时等级',
  732. target_n INT NOT NULL COMMENT '目标连续答对数',
  733. correct_count INT NOT NULL COMMENT '实际连续答对数',
  734. total_attempts INT NOT NULL COMMENT '总答题数',
  735. total_time_ms BIGINT NOT NULL COMMENT '总用时(毫秒)',
  736. accuracy INT NOT NULL COMMENT '正确率(%)',
  737. passed TINYINT(1) DEFAULT 0 COMMENT '是否通关',
  738. exprs TEXT COMMENT '本轮表达式列表(JSON)',
  739. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  740. INDEX idx_child_id (child_id),
  741. INDEX idx_level (level)
  742. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  743. CREATE TABLE IF NOT EXISTS assessment_materials (
  744. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  745. title VARCHAR(100) NOT NULL COMMENT '资料标题',
  746. content TEXT COMMENT '测评介绍内容',
  747. cover_image VARCHAR(255) COMMENT '封面图片',
  748. status VARCHAR(20) DEFAULT 'active' COMMENT '状态:active/inactive',
  749. created_at DATETIME COMMENT '创建时间',
  750. updated_at DATETIME COMMENT '更新时间',
  751. INDEX idx_status (status)
  752. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评资料表';
  753. -- 积分配置表
  754. CREATE TABLE IF NOT EXISTS assessment_points_config (
  755. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  756. points_value INT DEFAULT 100 COMMENT '完成测评获得积分',
  757. points_value_yuan INT DEFAULT 1 COMMENT '1积分等于多少分(原元→现分)',
  758. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  759. created_at DATETIME COMMENT '创建时间',
  760. updated_at DATETIME COMMENT '更新时间'
  761. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分配置表';
  762. -- 家庭测评配置表
  763. CREATE TABLE IF NOT EXISTS family_assessment_config (
  764. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  765. family_id BIGINT NOT NULL COMMENT '家庭ID',
  766. material_id BIGINT COMMENT '测评资料ID',
  767. remind_months INT DEFAULT 12 COMMENT '提醒周期(月)',
  768. last_remind_at DATETIME COMMENT '上次提醒时间',
  769. next_remind_at DATETIME COMMENT '下次提醒时间',
  770. is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1启用0关闭',
  771. created_by BIGINT COMMENT '创建人(规划师ID)',
  772. created_at DATETIME COMMENT '创建时间',
  773. updated_at DATETIME COMMENT '更新时间',
  774. UNIQUE KEY uk_family (family_id),
  775. INDEX idx_next_remind (next_remind_at),
  776. INDEX idx_enabled (is_enabled)
  777. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭测评配置表';
  778. -- 测评记录表
  779. CREATE TABLE IF NOT EXISTS assessment_records (
  780. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  781. family_id BIGINT COMMENT '家庭ID',
  782. child_id BIGINT COMMENT '孩子ID',
  783. material_id BIGINT COMMENT '测评资料ID',
  784. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending待完成/completed已完成',
  785. completed_at DATETIME COMMENT '完成时间',
  786. created_at DATETIME COMMENT '创建时间',
  787. INDEX idx_family (family_id),
  788. INDEX idx_status (status)
  789. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评记录表';
  790. -- 评估订单表(测评订单)
  791. CREATE TABLE IF NOT EXISTS assessment_orders (
  792. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  793. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  794. family_id BIGINT NOT NULL COMMENT '家庭ID',
  795. user_id BIGINT NOT NULL COMMENT '用户ID',
  796. child_id BIGINT COMMENT '孩子ID',
  797. guide_id BIGINT NOT NULL COMMENT '成长规划师ID',
  798. package_id BIGINT NOT NULL COMMENT '套餐ID',
  799. appointment_id BIGINT COMMENT '关联预约ID',
  800. guide_name VARCHAR(50) COMMENT '规划师名称',
  801. package_name VARCHAR(100) COMMENT '套餐名称',
  802. total_price BIGINT DEFAULT 0 COMMENT '总价(分)',
  803. discount_amount BIGINT DEFAULT 0 COMMENT '优惠金额(分)',
  804. actual_price BIGINT DEFAULT 0 COMMENT '实付金额(分)',
  805. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  806. pay_time VARCHAR(50) COMMENT '支付时间',
  807. pay_type VARCHAR(20) COMMENT '支付方式',
  808. transaction_id VARCHAR(64) COMMENT '交易流水号',
  809. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  810. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  811. INDEX idx_family (family_id),
  812. INDEX idx_guide (guide_id),
  813. INDEX idx_status (status)
  814. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评估订单表';
  815. -- =============================================
  816. -- 成长规划师相关表
  817. -- =============================================
  818. -- 成长规划师申请表
  819. CREATE TABLE IF NOT EXISTS guide_applications (
  820. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  821. user_id BIGINT NOT NULL COMMENT '申请人用户ID',
  822. type VARCHAR(20) NOT NULL DEFAULT 'new_apply' COMMENT '申请类型: new_apply-新注册, upgrade-升级',
  823. target_level VARCHAR(20) NOT NULL COMMENT '目标等级: junior-初级, intermediate-中级, senior-高级',
  824. current_level VARCHAR(20) DEFAULT NULL COMMENT '当前等级(升级时填写)',
  825. package_id BIGINT COMMENT '申请的套餐ID',
  826. payment_proof VARCHAR(500) COMMENT '付款凭证URL',
  827. payment_amount INT COMMENT '付款金额(分)',
  828. address VARCHAR(500) COMMENT '地址',
  829. bank_card VARCHAR(50) COMMENT '银行卡号',
  830. bank_name VARCHAR(100) COMMENT '开户行',
  831. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待审核, approved-已通过, rejected-已拒绝',
  832. reject_reason TEXT COMMENT '拒绝原因',
  833. reviewed_at DATETIME COMMENT '审核时间',
  834. reviewed_by BIGINT COMMENT '审核人ID',
  835. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  836. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  837. INDEX idx_user_id (user_id),
  838. INDEX idx_status (status),
  839. INDEX idx_type (type)
  840. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请表';
  841. -- 成长规划师申请过程记录表
  842. CREATE TABLE IF NOT EXISTS guide_application_records (
  843. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  844. application_id BIGINT NOT NULL COMMENT '关联申请ID',
  845. user_id BIGINT NOT NULL COMMENT '操作人用户ID',
  846. action VARCHAR(50) NOT NULL COMMENT '操作: submit/approve/reject/withdraw/resubmit',
  847. from_status VARCHAR(20) COMMENT '操作前状态',
  848. to_status VARCHAR(20) NOT NULL COMMENT '操作后状态',
  849. remark TEXT COMMENT '备注/原因',
  850. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  851. INDEX idx_application_id (application_id),
  852. INDEX idx_user_id (user_id),
  853. INDEX idx_action (action)
  854. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请过程记录表';
  855. -- =============================================
  856. -- 小游戏表
  857. -- =============================================
  858. -- 小游戏表
  859. CREATE TABLE IF NOT EXISTS mini_games (
  860. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  861. game_code VARCHAR(20) NOT NULL UNIQUE COMMENT '游戏代码',
  862. game_name VARCHAR(50) NOT NULL COMMENT '游戏名称',
  863. description TEXT COMMENT '游戏描述',
  864. icon VARCHAR(50) COMMENT '图标emoji',
  865. default_duration INT DEFAULT 5 COMMENT '默认时长(分钟)',
  866. default_points INT DEFAULT 5 COMMENT '默认奖励积分',
  867. game_url VARCHAR(255) COMMENT '游戏H5页面URL',
  868. sort_order INT DEFAULT 0 COMMENT '排序',
  869. status TINYINT DEFAULT 1 COMMENT '状态:0禁用1启用',
  870. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  871. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  872. INDEX idx_game_code (game_code),
  873. INDEX idx_status (status)
  874. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小游戏表';
  875. -- =============================================
  876. -- 地址维度表
  877. -- =============================================
  878. -- 街道地址维度表
  879. CREATE TABLE IF NOT EXISTS streets (
  880. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  881. province VARCHAR(50) COMMENT '省份',
  882. province_code VARCHAR(20) COMMENT '省份编码',
  883. city VARCHAR(50) COMMENT '城市',
  884. city_code VARCHAR(20) COMMENT '城市编码',
  885. district VARCHAR(50) COMMENT '区县',
  886. district_code VARCHAR(20) COMMENT '区县编码',
  887. street VARCHAR(100) COMMENT '街道',
  888. street_code VARCHAR(20) COMMENT '街道编码',
  889. full_name VARCHAR(200) COMMENT '完整地址',
  890. level INT COMMENT '层级:1省2市3区4街道',
  891. parent_id BIGINT COMMENT '父级ID',
  892. sort_order INT DEFAULT 0 COMMENT '排序',
  893. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  894. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  895. INDEX idx_level (level),
  896. INDEX idx_parent_id (parent_id),
  897. INDEX idx_street_code (street_code),
  898. INDEX idx_full_name (full_name(50))
  899. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='街道地址维度表';
  900. -- =============================================
  901. -- 系统日志表
  902. -- =============================================
  903. -- 用户操作日志表
  904. CREATE TABLE IF NOT EXISTS user_operation_logs (
  905. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  906. user_id BIGINT COMMENT '用户ID',
  907. nickname VARCHAR(50) COMMENT '用户昵称',
  908. operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: login/logout/create/update/delete/query等',
  909. description TEXT COMMENT '操作描述',
  910. request_path VARCHAR(200) COMMENT '请求路径',
  911. request_method VARCHAR(10) COMMENT '请求方法',
  912. request_params TEXT COMMENT '请求参数(脱敏)',
  913. response_status INT COMMENT '响应状态码',
  914. client_ip VARCHAR(50) COMMENT '客户端IP',
  915. user_agent VARCHAR(500) COMMENT 'User-Agent',
  916. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  917. INDEX idx_user_id (user_id),
  918. INDEX idx_operation_type (operation_type),
  919. INDEX idx_created_at (created_at)
  920. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户操作日志表';
  921. -- =============================================
  922. -- 邀请与心愿表
  923. -- =============================================
  924. -- 邀请卡片表
  925. CREATE TABLE IF NOT EXISTS invite_card (
  926. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  927. type VARCHAR(20) NOT NULL COMMENT '类型: child/family/guide',
  928. code VARCHAR(64) NOT NULL UNIQUE COMMENT '邀请码',
  929. ref_id BIGINT NOT NULL COMMENT '关联ID(childId/familyId)',
  930. creator_id BIGINT NOT NULL COMMENT '创建人',
  931. expires_at DATETIME NOT NULL COMMENT '过期时间',
  932. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  933. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  934. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  935. INDEX idx_code (code),
  936. INDEX idx_ref_type (ref_id, type)
  937. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请卡片表';
  938. -- 心愿单表
  939. CREATE TABLE IF NOT EXISTS wishes (
  940. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  941. family_id BIGINT COMMENT '家庭ID',
  942. child_id BIGINT COMMENT '目标孩子ID',
  943. created_by BIGINT COMMENT '创建者用户ID',
  944. creator_type VARCHAR(20) COMMENT '创建者类型: child/parent',
  945. title VARCHAR(200) NOT NULL COMMENT '心愿标题',
  946. description TEXT COMMENT '心愿描述',
  947. category VARCHAR(32) COMMENT '心愿分类',
  948. points_required INT COMMENT '所需积分',
  949. points_set_by BIGINT COMMENT '定价者ID',
  950. points_set_at DATETIME COMMENT '定价时间',
  951. status VARCHAR(32) DEFAULT 'active' COMMENT '状态: draft/active/pending_exchange/approved/exchanging/fulfilled/cancelled/rejected',
  952. exchange_requested_at DATETIME COMMENT '申请兑换时间',
  953. exchange_approved_by BIGINT COMMENT '批准者ID',
  954. exchange_approved_at DATETIME COMMENT '批准时间',
  955. points_deducted_at DATETIME COMMENT '扣积分时间',
  956. fulfilled_by BIGINT COMMENT '兑现者ID',
  957. fulfilled_at DATETIME COMMENT '兑现时间',
  958. child_confirmed_at DATETIME COMMENT '孩子确认收货时间',
  959. rejected_by BIGINT COMMENT '拒绝者ID',
  960. rejected_at DATETIME COMMENT '拒绝时间',
  961. reject_reason TEXT COMMENT '拒绝原因',
  962. reject_count INT DEFAULT 0 COMMENT '被拒绝次数',
  963. cancelled_by BIGINT COMMENT '取消者ID',
  964. cancelled_at DATETIME COMMENT '取消时间',
  965. cancel_reason TEXT COMMENT '取消原因',
  966. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  967. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  968. INDEX idx_family_id (family_id),
  969. INDEX idx_child_id (child_id),
  970. INDEX idx_status (status)
  971. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心愿单表';
  972. -- =============================================
  973. -- 商品与订单表
  974. -- =============================================
  975. -- 商品表
  976. CREATE TABLE IF NOT EXISTS products (
  977. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  978. name VARCHAR(200) NOT NULL COMMENT '商品名称',
  979. description TEXT COMMENT '商品描述',
  980. intro TEXT COMMENT '详细介绍',
  981. cover_image VARCHAR(500) COMMENT '封面图片',
  982. images TEXT COMMENT '多张图片JSON',
  983. price INT NOT NULL DEFAULT 0 COMMENT '价格(分)',
  984. stock INT NOT NULL DEFAULT 0 COMMENT '库存',
  985. sales_count INT NOT NULL DEFAULT 0 COMMENT '销量',
  986. product_type VARCHAR(32) NOT NULL COMMENT '商品类型: activity/course/physical/digital/service',
  987. vendor_id BIGINT COMMENT '供应商ID',
  988. vendor_name VARCHAR(100) COMMENT '供应商名称',
  989. status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft/pending/approved/rejected/on_shelf/off_shelf',
  990. reject_reason TEXT COMMENT '审核拒绝原因',
  991. member_price INT COMMENT '会员价(分)',
  992. member_eligible VARCHAR(32) DEFAULT 'none' COMMENT '会员资格: all/budget/none',
  993. domain VARCHAR(32) COMMENT '五维领域: action/mind/body/wisdom/wealth',
  994. profit_rate INT DEFAULT 0 COMMENT '平台利润率(千分比)',
  995. delivery_method TINYINT DEFAULT 1 COMMENT '配送方式: 1=快递 2=自提 3=两者皆可',
  996. category_id BIGINT COMMENT '商品类目ID',
  997. distribution_system_id BIGINT COMMENT '分销体系ID',
  998. external_source VARCHAR(64) COMMENT '外部来源系统',
  999. external_id VARCHAR(128) COMMENT '外部来源ID',
  1000. external_data TEXT COMMENT '外部来源数据JSON',
  1001. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1002. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1003. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
  1004. -- 商品订单表
  1005. CREATE TABLE IF NOT EXISTS product_orders (
  1006. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1007. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  1008. product_id BIGINT NOT NULL COMMENT '商品ID',
  1009. product_name VARCHAR(200) COMMENT '商品名称',
  1010. product_type VARCHAR(32) COMMENT '商品类型',
  1011. buyer_id BIGINT NOT NULL COMMENT '购买者ID',
  1012. family_id BIGINT COMMENT '家庭ID',
  1013. quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
  1014. unit_price INT NOT NULL COMMENT '单价(分)',
  1015. total_amount INT NOT NULL COMMENT '总金额(分)',
  1016. status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  1017. payment_method VARCHAR(32) COMMENT '支付方式: wechat/points/membership',
  1018. remark TEXT COMMENT '备注',
  1019. paid_at DATETIME COMMENT '支付时间',
  1020. supply_system_id BIGINT COMMENT '所属供应商体系ID',
  1021. supplier_id BIGINT COMMENT '收款供应商用户ID',
  1022. supply_commission INT COMMENT '分销佣金(分)',
  1023. points_used INT DEFAULT 0 COMMENT '使用的积分数量',
  1024. points_cost INT DEFAULT 0 COMMENT '积分抵扣金额(分)',
  1025. money_amount INT DEFAULT 0 COMMENT '现金支付金额(分)',
  1026. consignee_id BIGINT COMMENT '收货人ID',
  1027. purchase_info TEXT COMMENT '购买信息JSON: {id_card, hand_signature, ...}',
  1028. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1029. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1030. INDEX idx_user_id (user_id),
  1031. INDEX idx_family_id (family_id),
  1032. INDEX idx_product_id (product_id),
  1033. INDEX idx_status (status),
  1034. INDEX idx_supply_system_id (supply_system_id)
  1035. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单表';
  1036. -- =============================================
  1037. -- 系统配置与内容表
  1038. -- =============================================
  1039. -- 系统配置表
  1040. CREATE TABLE IF NOT EXISTS sys_config (
  1041. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1042. config_key VARCHAR(64) NOT NULL UNIQUE COMMENT '配置键',
  1043. config_value TEXT COMMENT '配置值',
  1044. description TEXT COMMENT '配置说明',
  1045. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1046. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  1047. -- 内容区块配置表
  1048. CREATE TABLE IF NOT EXISTS content_sections (
  1049. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1050. page_key VARCHAR(50) NOT NULL COMMENT '页面标识',
  1051. section_key VARCHAR(50) NOT NULL COMMENT '区块标识',
  1052. title VARCHAR(100) COMMENT '区块标题',
  1053. allowed_roles VARCHAR(255) DEFAULT '["anonymous"]' COMMENT '允许查看的角色JSON数组',
  1054. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  1055. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/inactive',
  1056. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1057. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1058. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='内容区块配置表';
  1059. -- 文章分类表
  1060. CREATE TABLE IF NOT EXISTS article_categories (
  1061. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1062. name VARCHAR(50) NOT NULL COMMENT '分类名',
  1063. icon VARCHAR(20) DEFAULT '' COMMENT '图标emoji',
  1064. color VARCHAR(20) DEFAULT '#5B9BD5' COMMENT '标识色',
  1065. sort_order INT DEFAULT 0 COMMENT '排序',
  1066. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用'
  1067. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章分类表';
  1068. -- 文章表
  1069. CREATE TABLE IF NOT EXISTS articles (
  1070. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键 ID',
  1071. category_id BIGINT DEFAULT 0 COMMENT '所属分类 ID',
  1072. title VARCHAR(200) NOT NULL COMMENT '标题',
  1073. summary TEXT DEFAULT '' COMMENT '摘要',
  1074. cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图 URL',
  1075. content LONGTEXT COMMENT '富文本内容',
  1076. tags VARCHAR(200) DEFAULT '' COMMENT '标签 JSON 数组',
  1077. author VARCHAR(100) DEFAULT '浠艾福' COMMENT '作者',
  1078. read_time INT DEFAULT 0 COMMENT '预计阅读分钟数',
  1079. article_type VARCHAR(20) DEFAULT 'normal' COMMENT '文章类型:normal(普通)/premium(优质)/original(原创)',
  1080. word_count INT DEFAULT 0 COMMENT '文章字数',
  1081. related_dimensions VARCHAR(100) DEFAULT '' COMMENT '关联五维 JSON 数组',
  1082. visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限:public/login/private',
  1083. visible_to TEXT COMMENT '私密指定人群 JSON',
  1084. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态:draft/published/archived',
  1085. is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1 精选/0 普通',
  1086. published_at DATETIME DEFAULT NULL COMMENT '发布时间',
  1087. view_count INT DEFAULT 0 COMMENT '浏览次数',
  1088. created_by BIGINT DEFAULT 0 COMMENT '发布人 adminID',
  1089. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1090. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1091. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
  1092. -- Article audit fields (for user-generated content)
  1093. ALTER TABLE articles
  1094. ADD COLUMN author_type VARCHAR(20) DEFAULT 'admin' COMMENT '作者类型:admin/parent/child' AFTER created_by,
  1095. ADD COLUMN audit_status VARCHAR(20) DEFAULT 'approved' COMMENT '审核状态:approved/pending/rejected' AFTER status,
  1096. ADD COLUMN audit_reason TEXT COMMENT '驳回原因' AFTER audit_status,
  1097. ADD COLUMN auditor_id BIGINT DEFAULT 0 COMMENT '审核人 ID' AFTER audit_reason,
  1098. ADD COLUMN audited_at DATETIME COMMENT '审核时间' AFTER auditor_id;
  1099. -- =============================================
  1100. -- 五维能量系统表
  1101. -- =============================================
  1102. -- 能量维度定义表
  1103. CREATE TABLE IF NOT EXISTS energy_dimension (
  1104. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1105. code VARCHAR(16) NOT NULL UNIQUE COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1106. name VARCHAR(20) NOT NULL COMMENT '维度名称: 身/心/智/行/富',
  1107. icon VARCHAR(16) COMMENT '图标emoji',
  1108. element VARCHAR(10) COMMENT '五行元素: 土/火/金/木/水',
  1109. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  1110. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用',
  1111. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1112. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量维度定义表';
  1113. -- 服务-维度比例配置表
  1114. CREATE TABLE IF NOT EXISTS energy_source_config (
  1115. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1116. source_type VARCHAR(32) NOT NULL COMMENT '来源类型: task/activity/course/product/consultation',
  1117. source_id BIGINT NOT NULL COMMENT '来源业务表ID',
  1118. source_name VARCHAR(200) COMMENT '冗余名称',
  1119. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1120. ratio INT NOT NULL COMMENT '占比(基点,6000=60%)',
  1121. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1122. INDEX idx_source (source_type, source_id)
  1123. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务-维度比例配置表';
  1124. -- 能量流水表
  1125. CREATE TABLE IF NOT EXISTS energy_log (
  1126. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1127. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1128. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1129. amount INT NOT NULL COMMENT '变动量(正=获得,负=消耗)',
  1130. balance_after INT NOT NULL COMMENT '变动后余额',
  1131. source_type VARCHAR(32) COMMENT '来源类型: task/product/medical_report/daily_record',
  1132. source_id BIGINT COMMENT '来源ID',
  1133. ref_id BIGINT COMMENT '关联旧流水ID(覆盖时标记)',
  1134. expires_at DATETIME COMMENT '过期时间(空=永不过期)',
  1135. description TEXT COMMENT '描述',
  1136. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1137. INDEX idx_child_dim (child_id, dimension_id),
  1138. INDEX idx_created (created_at),
  1139. INDEX idx_source (source_type, source_id)
  1140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量流水表';
  1141. -- 维度余额表
  1142. CREATE TABLE IF NOT EXISTS energy_balance (
  1143. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1144. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1145. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1146. balance INT DEFAULT 0 COMMENT '当前能量值(可为负)',
  1147. total_earned INT DEFAULT 0 COMMENT '累计获得',
  1148. total_spent INT DEFAULT 0 COMMENT '累计消耗',
  1149. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1150. UNIQUE KEY uk_child_dim (child_id, dimension_id)
  1151. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维度余额表';
  1152. -- =============================================
  1153. -- 分佣裂变系统表
  1154. -- =============================================
  1155. -- 佣金记录表
  1156. CREATE TABLE IF NOT EXISTS commission_records (
  1157. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1158. order_id BIGINT NOT NULL COMMENT '订单ID',
  1159. order_type VARCHAR(32) NOT NULL COMMENT '订单类型: membership/product/assessment/package',
  1160. referrer_id BIGINT NOT NULL COMMENT '推荐人ID',
  1161. buyer_id BIGINT NOT NULL COMMENT '购买人ID',
  1162. commission_type VARCHAR(16) NOT NULL COMMENT '佣金类型: member/profit',
  1163. level INT DEFAULT 1 COMMENT '佣金层级: 1=直接推荐, 2=间接推荐',
  1164. order_amount INT NOT NULL COMMENT '订单金额(分)',
  1165. profit_rate INT DEFAULT 0 COMMENT '利润率(千分比,如235=23.5%)',
  1166. commission_amount INT NOT NULL COMMENT '佣金金额(分)',
  1167. status VARCHAR(16) NOT NULL DEFAULT 'settled' COMMENT '状态: pending/settled',
  1168. remark TEXT DEFAULT NULL COMMENT '备注',
  1169. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1170. settled_at DATETIME DEFAULT NULL COMMENT '结算时间',
  1171. withdrawn_at DATETIME DEFAULT NULL COMMENT '提现时间',
  1172. INDEX idx_referrer (referrer_id),
  1173. INDEX idx_buyer (buyer_id),
  1174. INDEX idx_order (order_id, order_type)
  1175. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金记录表';
  1176. -- 提现申请表
  1177. CREATE TABLE IF NOT EXISTS withdrawal_requests (
  1178. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1179. user_id BIGINT NOT NULL COMMENT '用户ID',
  1180. amount INT NOT NULL COMMENT '提现金额(分)',
  1181. account_info TEXT COMMENT '账户信息(JSON)',
  1182. status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
  1183. audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
  1184. audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
  1185. remark TEXT DEFAULT NULL COMMENT '审核备注',
  1186. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1187. INDEX idx_user (user_id),
  1188. INDEX idx_status (status)
  1189. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现申请表';
  1190. -- 会员升级记录表
  1191. CREATE TABLE IF NOT EXISTS member_upgrade_records (
  1192. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1193. user_id BIGINT NOT NULL COMMENT '用户ID',
  1194. from_level VARCHAR(20) NOT NULL COMMENT '升级前等级',
  1195. to_level VARCHAR(20) NOT NULL COMMENT '升级后等级',
  1196. upgrade_type VARCHAR(20) NOT NULL COMMENT '升级类型: pay/consumption/admin',
  1197. order_id BIGINT DEFAULT NULL COMMENT '关联支付订单ID',
  1198. consumption_amount BIGINT DEFAULT NULL COMMENT '触发升级的累计消费金额',
  1199. expire_time DATETIME DEFAULT NULL COMMENT '家庭会员到期时间',
  1200. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1201. INDEX idx_user (user_id),
  1202. INDEX idx_order (order_id)
  1203. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员升级记录表';
  1204. -- =============================================
  1205. -- 规划师服务模块表
  1206. -- =============================================
  1207. -- 服务类型表
  1208. CREATE TABLE IF NOT EXISTS service_types (
  1209. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1210. name VARCHAR(100) NOT NULL COMMENT '类型名称',
  1211. icon VARCHAR(50) COMMENT '图标',
  1212. description TEXT COMMENT '描述',
  1213. sort_order INT DEFAULT 0 COMMENT '排序',
  1214. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  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 service_contents (
  1220. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1221. type_id BIGINT NOT NULL COMMENT '关联服务类型',
  1222. title VARCHAR(200) NOT NULL COMMENT '内容标题',
  1223. content TEXT COMMENT '富文本内容',
  1224. duration INT COMMENT '建议时长(分钟)',
  1225. age_range VARCHAR(50) COMMENT '适用年龄',
  1226. price INT COMMENT '参考价格(分)',
  1227. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/ACTIVE',
  1228. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1229. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1230. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务内容表';
  1231. -- 套餐模板表
  1232. CREATE TABLE IF NOT EXISTS guide_package_templates (
  1233. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1234. name VARCHAR(100) NOT NULL COMMENT '模板名称',
  1235. validity_months INT COMMENT '有效期(月)',
  1236. reference_price INT COMMENT '参考价格(分)',
  1237. min_price INT COMMENT '最低售价(分)',
  1238. description TEXT COMMENT '说明',
  1239. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1240. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1241. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1242. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板表';
  1243. -- 套餐模板服务项表
  1244. CREATE TABLE IF NOT EXISTS package_template_services (
  1245. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1246. template_id BIGINT NOT NULL COMMENT '关联模板',
  1247. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1248. quantity INT DEFAULT 1 COMMENT '数量',
  1249. unit VARCHAR(20) COMMENT '单位'
  1250. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板服务项表';
  1251. -- 成长规划师套餐表
  1252. CREATE TABLE IF NOT EXISTS guide_packages (
  1253. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1254. guide_id BIGINT COMMENT '成长规划师ID',
  1255. package_id BIGINT COMMENT '关联模板',
  1256. commission_rate INT COMMENT '佣金比例(基点,1000=10%)',
  1257. teacher_id BIGINT COMMENT '成长规划师ID(旧字段)',
  1258. template_id BIGINT COMMENT '关联模板(旧字段)',
  1259. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  1260. level VARCHAR(20) COMMENT '套餐等级',
  1261. price INT NOT NULL COMMENT '销售价格(分)',
  1262. validity_months INT COMMENT '有效期(月)',
  1263. validity_days INT DEFAULT 0 COMMENT '有效期天数',
  1264. description TEXT COMMENT '套餐说明',
  1265. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/PUBLISHED/PAUSED',
  1266. sort_order INT DEFAULT 0 COMMENT '排序',
  1267. sales_count INT DEFAULT 0 COMMENT '销量',
  1268. share_code VARCHAR(50) COMMENT '分享码',
  1269. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1270. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1271. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐表';
  1272. -- 成长规划师套餐服务项表
  1273. CREATE TABLE IF NOT EXISTS guide_package_services (
  1274. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1275. package_id BIGINT NOT NULL COMMENT '关联套餐',
  1276. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1277. quantity INT DEFAULT 1 COMMENT '数量',
  1278. unit VARCHAR(20) COMMENT '单位'
  1279. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐服务项表';
  1280. -- 成长规划师订单表
  1281. CREATE TABLE IF NOT EXISTS guide_orders (
  1282. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1283. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  1284. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1285. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1286. package_id BIGINT NOT NULL COMMENT '套餐ID',
  1287. amount INT NOT NULL COMMENT '金额(分)',
  1288. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/PAID/COMPLETED/REFUNDED',
  1289. pay_time DATETIME COMMENT '支付时间',
  1290. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1291. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1292. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师订单表';
  1293. -- 佣金明细表
  1294. CREATE TABLE IF NOT EXISTS guide_commissions (
  1295. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1296. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1297. order_id BIGINT NOT NULL COMMENT '订单ID',
  1298. amount INT NOT NULL COMMENT '佣金金额(分)',
  1299. rate INT COMMENT '佣金比例(基点)',
  1300. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/COMPLETED',
  1301. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1302. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金明细表';
  1303. -- 服务记录表
  1304. CREATE TABLE IF NOT EXISTS guide_service_logs (
  1305. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1306. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1307. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1308. order_id BIGINT COMMENT '订单ID',
  1309. service_content_id BIGINT NOT NULL COMMENT '服务内容ID',
  1310. notes TEXT COMMENT '服务记录',
  1311. duration INT COMMENT '服务时长(分钟)',
  1312. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1313. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务记录表';
  1314. -- 成长规划师邀请码表
  1315. CREATE TABLE IF NOT EXISTS guide_invite_codes (
  1316. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1317. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  1318. code VARCHAR(50) NOT NULL UNIQUE COMMENT '邀请码',
  1319. status VARCHAR(20) DEFAULT 'active' COMMENT '状态',
  1320. used_by_user_id BIGINT COMMENT '使用该邀请码的用户ID',
  1321. used_at DATETIME COMMENT '使用时间',
  1322. expire_at DATETIME COMMENT '过期时间',
  1323. use_count INT DEFAULT 0 COMMENT '使用次数',
  1324. max_use_count INT COMMENT '最大使用次数',
  1325. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1326. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1327. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师邀请码表';
  1328. -- =============================================
  1329. -- 财富维度表
  1330. -- =============================================
  1331. -- 财商打卡记录表
  1332. CREATE TABLE IF NOT EXISTS finance_checkins (
  1333. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1334. user_id BIGINT NOT NULL COMMENT '用户ID',
  1335. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1336. checkin_type VARCHAR(20) NOT NULL COMMENT '打卡类型: daily_plan/saving/expense/review',
  1337. checkin_date DATE NOT NULL COMMENT '打卡日期',
  1338. amount INT COMMENT '金额(分,收支记录)',
  1339. category VARCHAR(50) COMMENT '收支分类',
  1340. note TEXT COMMENT '备注',
  1341. mood VARCHAR(20) COMMENT '心情',
  1342. earned_energy INT DEFAULT 0 COMMENT '获得的能量值',
  1343. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1344. INDEX idx_user_date (user_id, checkin_date),
  1345. INDEX idx_child (child_id)
  1346. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财商打卡记录表';
  1347. -- 保单管理表
  1348. CREATE TABLE IF NOT EXISTS insurance_policies (
  1349. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1350. user_id BIGINT NOT NULL COMMENT '用户ID',
  1351. child_id BIGINT COMMENT '关联孩子ID',
  1352. policy_name VARCHAR(100) NOT NULL COMMENT '保单名称',
  1353. insurance_company VARCHAR(100) COMMENT '保险公司',
  1354. policy_type VARCHAR(50) COMMENT '保单类型: medical/life/accident/education/endowment',
  1355. insured_person VARCHAR(50) NOT NULL COMMENT '被保人姓名',
  1356. premium INT COMMENT '保费(分)',
  1357. sum_insured INT COMMENT '保额(分)',
  1358. start_date DATE COMMENT '生效日期',
  1359. end_date DATE COMMENT '到期日期',
  1360. renewal_type VARCHAR(20) DEFAULT 'annual' COMMENT '续费类型: annual/monthly/single',
  1361. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/expired/cancelled',
  1362. policy_no VARCHAR(100) COMMENT '保单号',
  1363. remark TEXT COMMENT '备注',
  1364. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1365. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1366. INDEX idx_user (user_id),
  1367. INDEX idx_child (child_id),
  1368. INDEX idx_status (status)
  1369. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保单管理表';
  1370. -- =============================================
  1371. -- 健康检测报告模块表
  1372. -- =============================================
  1373. -- 健康检测报告表
  1374. CREATE TABLE IF NOT EXISTS health_reports (
  1375. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1376. user_id BIGINT NOT NULL COMMENT '上传者用户ID(关联users表)',
  1377. subject_id BIGINT COMMENT '报告主体用户ID(关联users表,为null表示未绑定)',
  1378. family_id BIGINT COMMENT '家庭ID',
  1379. report_type VARCHAR(32) NOT NULL COMMENT '报告类型: physical_exam(体检)/gut_flora(菌群检测)',
  1380. report_date DATE COMMENT '报告日期',
  1381. overall_score INT COMMENT '健康总分(0-100)',
  1382. gut_health_score INT COMMENT '菌群健康分',
  1383. chronic_disease_score INT COMMENT '慢病控制分',
  1384. nutrition_score INT COMMENT '营养均衡分',
  1385. gut_age VARCHAR(32) COMMENT '肠道预测年龄',
  1386. gut_type VARCHAR(50) COMMENT '肠型',
  1387. file_url VARCHAR(500) COMMENT '报告文件URL',
  1388. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/archived',
  1389. remark TEXT COMMENT '备注',
  1390. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1391. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1392. INDEX idx_user_id (user_id),
  1393. INDEX idx_subject_id (subject_id),
  1394. INDEX idx_family_id (family_id),
  1395. INDEX idx_report_type (report_type)
  1396. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康检测报告表';
  1397. -- 健康报告查看权限表
  1398. CREATE TABLE IF NOT EXISTS health_report_permissions (
  1399. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1400. report_id BIGINT NOT NULL COMMENT '报告ID',
  1401. user_id BIGINT NOT NULL COMMENT '有查看权限的用户ID',
  1402. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1403. UNIQUE KEY uk_report_user (report_id, user_id),
  1404. INDEX idx_report_id (report_id),
  1405. INDEX idx_user_id (user_id)
  1406. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康报告查看权限表';
  1407. -- 健康指标明细表
  1408. CREATE TABLE IF NOT EXISTS health_indicators (
  1409. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1410. report_id BIGINT NOT NULL COMMENT '关联报告ID',
  1411. category VARCHAR(50) COMMENT '指标分类: 营养状况/疾病风险/肠道屏障/神经递质/...',
  1412. indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称',
  1413. indicator_value VARCHAR(100) COMMENT '检测值',
  1414. unit VARCHAR(50) COMMENT '单位',
  1415. ref_range VARCHAR(200) COMMENT '参考范围',
  1416. status VARCHAR(50) COMMENT '评估状态: 正常/偏低/偏高/过多/注意/低风险/未检出',
  1417. sort_order INT DEFAULT 0 COMMENT '显示排序',
  1418. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1419. INDEX idx_report_id (report_id),
  1420. INDEX idx_category (category)
  1421. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康指标明细表';
  1422. -- 健康报告上传草稿表(两阶段入库的中间态)
  1423. CREATE TABLE IF NOT EXISTS health_report_drafts (
  1424. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1425. user_id BIGINT NOT NULL COMMENT '上传人用户ID',
  1426. family_id BIGINT COMMENT '家庭ID',
  1427. report_type VARCHAR(32) NOT NULL COMMENT '报告类型: physical_exam/gut_flora',
  1428. file_url VARCHAR(500) COMMENT '上传的文件URL',
  1429. original_filename VARCHAR(255) COMMENT '原始文件名',
  1430. payload_json MEDIUMTEXT NOT NULL COMMENT '草稿载荷JSON(含解析/手动录入的所有指标)',
  1431. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/confirmed/discarded',
  1432. expire_at DATETIME COMMENT '草稿过期时间',
  1433. confirmed_report_id BIGINT COMMENT 'confirm阶段入库后的健康报告ID',
  1434. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1435. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1436. INDEX idx_user_id (user_id),
  1437. INDEX idx_status_expire (status, expire_at)
  1438. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康报告上传草稿表(两阶段入库中间态)';
  1439. -- 教育体系配置表
  1440. CREATE TABLE IF NOT EXISTS education_systems (
  1441. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1442. name VARCHAR(32) NOT NULL UNIQUE COMMENT '编码(key)',
  1443. label VARCHAR(50) NOT NULL COMMENT '显示名称',
  1444. description TEXT COMMENT '描述说明',
  1445. sort_order INT DEFAULT 0 COMMENT '排序',
  1446. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1447. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1448. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1449. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教育体系配置表';
  1450. INSERT INTO education_systems (name, label, description, sort_order) VALUES
  1451. ('high_school', '中专/高中', '中等教育学历', 1),
  1452. ('associate', '大专', '高等专科学历', 2),
  1453. ('bachelor', '本科', '大学本科学历', 3),
  1454. ('master', '硕士', '硕士研究生学历', 4),
  1455. ('doctor', '博士', '博士研究生学历', 5);
  1456. -- ===== v1.2 先天属性体系 =====
  1457. -- 家庭成员先天属性表
  1458. CREATE TABLE IF NOT EXISTS family_member_attributes (
  1459. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1460. member_id BIGINT NOT NULL COMMENT '家庭成员ID(children表或users表)',
  1461. member_type VARCHAR(10) NOT NULL COMMENT '成员类型: child/parent',
  1462. birth_datetime DATETIME COMMENT '出生日期(精确到分钟,用于八字排盘)',
  1463. eight_characters JSON COMMENT '八字四柱JSON',
  1464. wuxing_elements JSON COMMENT '五行星盘元素JSON',
  1465. zodiac VARCHAR(16) COMMENT '生肖: rat/ox/tiger/rabbit/dragon/snake/horse/sheep/monkey/rooster/dog/pig',
  1466. blood_type VARCHAR(5) COMMENT '血型: A/B/AB/O',
  1467. mind_base_score INT DEFAULT 0 COMMENT '心维度基础分(百分位)',
  1468. wisdom_base_score INT DEFAULT 0 COMMENT '智维度基础分(百分位)',
  1469. behavior_modifier JSON COMMENT '行为修正因子JSON',
  1470. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1471. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1472. UNIQUE KEY uk_member (member_id, member_type)
  1473. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员先天属性表';
  1474. -- 星座配置表
  1475. CREATE TABLE IF NOT EXISTS zodiac_config (
  1476. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1477. zodiac_code VARCHAR(20) NOT NULL UNIQUE COMMENT '星座代码',
  1478. zodiac_name VARCHAR(10) NOT NULL COMMENT '星座名称',
  1479. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1480. start_month INT NOT NULL COMMENT '起始月',
  1481. start_day INT NOT NULL COMMENT '起始日',
  1482. end_month INT NOT NULL COMMENT '结束月',
  1483. end_day INT NOT NULL COMMENT '结束日',
  1484. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1485. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1486. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1487. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1488. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1489. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1490. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='星座配置表';
  1491. -- 八字配置表
  1492. CREATE TABLE IF NOT EXISTS bazi_config (
  1493. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1494. stem_or_branch VARCHAR(10) NOT NULL COMMENT '天干或地支',
  1495. type VARCHAR(10) NOT NULL COMMENT '类型: stem/branch',
  1496. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1497. yin_yang VARCHAR(5) COMMENT '阴阳: yin/yang',
  1498. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1499. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1500. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1501. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1502. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1503. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1504. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='八字配置表(天干地支五行)';
  1505. -- 血型配置表
  1506. CREATE TABLE IF NOT EXISTS blood_type_config (
  1507. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1508. blood_type VARCHAR(5) NOT NULL UNIQUE COMMENT '血型: A/B/AB/O',
  1509. description TEXT COMMENT '性格描述',
  1510. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1511. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1512. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1513. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1514. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1515. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1516. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配置表';
  1517. -- =============================================
  1518. -- 活动报名 与 能量规则引擎表(v1.4)
  1519. -- =============================================
  1520. -- 活动报名表
  1521. CREATE TABLE IF NOT EXISTS activity_registrations (
  1522. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1523. activity_id BIGINT NOT NULL COMMENT '活动ID',
  1524. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1525. user_id BIGINT NOT NULL COMMENT '报名人用户ID(家长)',
  1526. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/approved/rejected/cancelled',
  1527. registered_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间',
  1528. approved_at DATETIME COMMENT '审核通过时间',
  1529. approved_by BIGINT COMMENT '审核人用户ID',
  1530. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1531. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1532. UNIQUE KEY uk_activity_child (activity_id, child_id),
  1533. INDEX idx_activity_id (activity_id),
  1534. INDEX idx_child_id (child_id),
  1535. INDEX idx_user_id (user_id),
  1536. INDEX idx_status (status)
  1537. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动报名表';
  1538. -- 能量规则表(规则引擎)
  1539. CREATE TABLE IF NOT EXISTS energy_rule (
  1540. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1541. rule_code VARCHAR(64) NOT NULL UNIQUE COMMENT '规则编码(唯一)',
  1542. rule_name VARCHAR(200) NOT NULL COMMENT '规则名称',
  1543. event_type VARCHAR(32) NOT NULL COMMENT '事件类型: checkin/register/complete/cancel/overdue',
  1544. action VARCHAR(16) NOT NULL COMMENT '动作: increase/decrease',
  1545. dimension_code VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth(NULL=五维均衡)',
  1546. amount INT COMMENT '固定变动量(基点)',
  1547. amount_formula VARCHAR(255) COMMENT '动态公式(如: balance*0.1)',
  1548. priority INT DEFAULT 0 COMMENT '优先级(数字越大越优先匹配)',
  1549. conditions JSON COMMENT '触发条件(JSON表达式)',
  1550. status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
  1551. description TEXT COMMENT '规则描述',
  1552. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1553. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1554. INDEX idx_event_type (event_type),
  1555. INDEX idx_status (status),
  1556. INDEX idx_priority (priority)
  1557. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量规则表(规则引擎)';
  1558. CREATE TABLE IF NOT EXISTS activities (
  1559. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1560. title VARCHAR(100) NOT NULL COMMENT '活动标题',
  1561. description TEXT COMMENT '活动描述',
  1562. cover_image VARCHAR(500) COMMENT '封面图片URL',
  1563. dimension_code VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1564. activity_type VARCHAR(20) DEFAULT 'offline' COMMENT '活动类型: offline/online/campaign',
  1565. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft/published/ended',
  1566. start_time DATETIME COMMENT '开始时间',
  1567. end_time DATETIME COMMENT '结束时间',
  1568. location VARCHAR(200) COMMENT '活动地点',
  1569. max_participants INT DEFAULT 0 COMMENT '最大参与人数',
  1570. current_participants INT DEFAULT 0 COMMENT '当前参与人数',
  1571. price INT DEFAULT 0 COMMENT '活动价格(分)',
  1572. vendor_id BIGINT COMMENT '服务商ID',
  1573. vendor_name VARCHAR(100) COMMENT '服务商名称',
  1574. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1575. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1576. INDEX idx_dimension (dimension_code),
  1577. INDEX idx_status (status),
  1578. INDEX idx_start_time (start_time)
  1579. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';
  1580. -- v1.x: 活动工作流状态扩展
  1581. ALTER TABLE activities
  1582. MODIFY COLUMN status VARCHAR(20) DEFAULT 'draft'
  1583. COMMENT '状态:draft(草稿)/pending(待审核)/rejected(已驳回)/published(发布中)/withdrawn(已撤回)',
  1584. ADD COLUMN audit_status VARCHAR(20) DEFAULT NULL
  1585. COMMENT '审核状态:approved/pending/rejected',
  1586. ADD COLUMN audit_reason TEXT DEFAULT NULL
  1587. COMMENT '驳回原因',
  1588. ADD COLUMN auditor_id BIGINT DEFAULT NULL
  1589. COMMENT '审核人 ID',
  1590. ADD COLUMN audited_at DATETIME DEFAULT NULL
  1591. COMMENT '审核时间';
  1592. -- ===== v1.3 家庭成员体系 =====
  1593. -- 手动添加的家庭成员表(替代children表用于新成员)
  1594. CREATE TABLE IF NOT EXISTS family_members (
  1595. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1596. family_id BIGINT NOT NULL COMMENT '所属家庭ID',
  1597. user_id BIGINT COMMENT '关联的用户ID(手机号匹配到已有用户时)',
  1598. nickname VARCHAR(100) NOT NULL COMMENT '昵称',
  1599. phone VARCHAR(20) COMMENT '手机号',
  1600. avatar VARCHAR(500) COMMENT '头像',
  1601. gender VARCHAR(10) COMMENT '性别: male/female',
  1602. birthday DATE COMMENT '出生日期',
  1603. relationship_type VARCHAR(50) NOT NULL COMMENT '关系类型key',
  1604. role_override VARCHAR(20) DEFAULT 'auto' COMMENT '角色覆盖: auto/parent/child/elderly,空=auto',
  1605. show_to_family INT DEFAULT 1 COMMENT '对家庭成员可见: 1=可见, 0=不可见',
  1606. total_points INT DEFAULT 0 COMMENT '总积分',
  1607. -- 孩子专属字段(原children表合并)
  1608. id_card VARCHAR(18) DEFAULT NULL COMMENT '身份证号(孩子)',
  1609. penalty_enabled TINYINT DEFAULT 1 COMMENT '是否扣减积分(0否1是)',
  1610. theme VARCHAR(32) DEFAULT 'default' COMMENT '主题',
  1611. system_points INT DEFAULT 0 COMMENT '系统积分(干预/平台奖励)',
  1612. streak_days INT DEFAULT 0 COMMENT '连续打卡天数',
  1613. last_task_date DATE COMMENT '上次任务日期',
  1614. focus_max_daily TINYINT DEFAULT 3 COMMENT '每日专注上限',
  1615. focus_remaining TINYINT DEFAULT 3 COMMENT '今日剩余专注次数',
  1616. focus_reset_date DATE COMMENT '专注次数重置日期',
  1617. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1618. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1619. INDEX idx_family_id (family_id),
  1620. INDEX idx_phone (phone)
  1621. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员表(手动添加)';
  1622. -- 家庭成员双向关系表(v2: 替代relationship_type/role_override)
  1623. CREATE TABLE IF NOT EXISTS family_relationships (
  1624. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1625. family_id BIGINT NOT NULL COMMENT '所属家庭ID',
  1626. from_member_id BIGINT NOT NULL COMMENT '关系起点成员ID',
  1627. to_member_id BIGINT NOT NULL COMMENT '关系终点成员ID',
  1628. generation_value INT NOT NULL COMMENT '辈分值: -1=子女, 0=同辈, 1=父母, 2=祖父母, 3=曾祖父母',
  1629. relationship_key VARCHAR(50) COMMENT '关系标签key(冗余用于显示, 如father/mother/son/daughter/spouse/sibling)',
  1630. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1631. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1632. UNIQUE KEY uk_from_to (from_member_id, to_member_id),
  1633. INDEX idx_family_id (family_id),
  1634. INDEX idx_from (from_member_id),
  1635. INDEX idx_to (to_member_id)
  1636. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员双向关系表';
  1637. -- 关系类型配置表(管理端可配置)
  1638. CREATE TABLE IF NOT EXISTS relationship_types (
  1639. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1640. type_key VARCHAR(50) NOT NULL UNIQUE COMMENT '类型标识: spouse/parent/child/sibling',
  1641. type_name VARCHAR(100) NOT NULL COMMENT '类型显示名: 配偶/父母/子女/兄弟姐妹',
  1642. capability_role VARCHAR(20) NOT NULL DEFAULT 'parent' COMMENT '能力角色: parent/child',
  1643. default_role VARCHAR(20) DEFAULT NULL COMMENT '默认角色模板: parent/child(已废弃, 兼容保留)',
  1644. sort_order INT DEFAULT 0 COMMENT '排序序号',
  1645. enabled INT DEFAULT 1 COMMENT '是否启用: 1=启用, 0=禁用',
  1646. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1647. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系类型配置表';
  1648. -- 默认关系类型数据(default_role: parent/child 为该关系类型的默认角色模板)
  1649. INSERT IGNORE INTO relationship_types (type_key, type_name, default_role, sort_order, enabled) VALUES
  1650. ('spouse', '配偶', 'parent', 1, 1),
  1651. ('parent', '父母', 'parent', 2, 1),
  1652. ('child', '子女', 'child', 3, 1),
  1653. ('sibling', '兄弟姐妹', 'child', 4, 1);
  1654. -- 用户收货地址表
  1655. CREATE TABLE IF NOT EXISTS user_address (
  1656. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1657. user_id BIGINT NOT NULL COMMENT '用户ID',
  1658. receiver_name VARCHAR(50) NOT NULL COMMENT '收货人姓名',
  1659. phone VARCHAR(20) NOT NULL COMMENT '收货人电话',
  1660. province VARCHAR(50) COMMENT '省',
  1661. city VARCHAR(50) COMMENT '市',
  1662. district VARCHAR(50) COMMENT '区',
  1663. street VARCHAR(200) COMMENT '详细地址',
  1664. is_default TINYINT DEFAULT 0 COMMENT '是否默认地址 1=是 0=否',
  1665. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1666. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1667. INDEX idx_user_id (user_id),
  1668. INDEX idx_is_default (is_default)
  1669. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户收货地址表';
  1670. -- =============================================
  1671. -- 新手引导奖励表
  1672. -- =============================================
  1673. CREATE TABLE IF NOT EXISTS onboarding_task (
  1674. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1675. user_id BIGINT NOT NULL,
  1676. task_type VARCHAR(32) NOT NULL,
  1677. reward_points INT DEFAULT 0,
  1678. reward_energy INT DEFAULT 0,
  1679. status VARCHAR(16) DEFAULT 'PENDING',
  1680. completed_at DATETIME,
  1681. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1682. INDEX idx_user_id (user_id)
  1683. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1684. -- =============================================
  1685. -- 成长任务配置表
  1686. -- =============================================
  1687. CREATE TABLE IF NOT EXISTS growth_task (
  1688. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1689. type VARCHAR(16) NOT NULL COMMENT 'DAILY/NEWBIE',
  1690. title VARCHAR(100) NOT NULL,
  1691. description TEXT,
  1692. reward_points INT DEFAULT 0,
  1693. reward_energy INT DEFAULT 0,
  1694. target_value INT DEFAULT 1,
  1695. task_key VARCHAR(32) UNIQUE NOT NULL,
  1696. enabled TINYINT DEFAULT 1,
  1697. sort_order INT DEFAULT 0,
  1698. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1699. INDEX idx_type (type)
  1700. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务配置表';
  1701. CREATE TABLE IF NOT EXISTS growth_task_log (
  1702. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1703. user_id BIGINT NOT NULL,
  1704. task_id BIGINT NOT NULL,
  1705. progress INT DEFAULT 0,
  1706. completed TINYINT DEFAULT 0,
  1707. claimed TINYINT DEFAULT 0,
  1708. date VARCHAR(10) COMMENT 'YYYY-MM-DD for daily, empty for newbie',
  1709. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1710. INDEX idx_user_date (user_id, date),
  1711. INDEX idx_task_id (task_id)
  1712. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务用户进度表';
  1713. -- =============================================
  1714. -- 优惠券配置表
  1715. -- =============================================
  1716. CREATE TABLE IF NOT EXISTS coupon (
  1717. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1718. name VARCHAR(64) NOT NULL,
  1719. type VARCHAR(16) DEFAULT 'FIXED',
  1720. value INT DEFAULT 0 COMMENT '金额 单位:分',
  1721. min_spend INT DEFAULT 0 COMMENT '最低消费 单位:分',
  1722. applicable_to VARCHAR(32) DEFAULT 'ALL',
  1723. valid_from DATETIME,
  1724. valid_until DATETIME,
  1725. total_count INT DEFAULT 0,
  1726. used_count INT DEFAULT 0,
  1727. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1728. INDEX idx_valid_period (valid_from, valid_until)
  1729. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券配置表';
  1730. CREATE TABLE IF NOT EXISTS user_coupon (
  1731. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1732. user_id BIGINT NOT NULL,
  1733. coupon_id BIGINT NOT NULL,
  1734. status VARCHAR(16) DEFAULT 'AVAILABLE',
  1735. received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1736. used_at DATETIME,
  1737. order_id BIGINT,
  1738. INDEX idx_user_coupon (user_id, coupon_id),
  1739. INDEX idx_status (status),
  1740. INDEX idx_order_id (order_id)
  1741. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户优惠券表';
  1742. -- =============================================
  1743. -- 邀请里程碑表
  1744. -- =============================================
  1745. CREATE TABLE IF NOT EXISTS invite_milestone (
  1746. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1747. user_id BIGINT NOT NULL,
  1748. milestone VARCHAR(32) NOT NULL,
  1749. reward_points INT DEFAULT 0,
  1750. reward_energy INT DEFAULT 0,
  1751. status VARCHAR(16) DEFAULT 'PENDING',
  1752. achieved_at DATETIME,
  1753. claimed_at DATETIME,
  1754. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1755. INDEX idx_user_milestone (user_id, milestone)
  1756. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请里程碑表';
  1757. -- =============================================
  1758. -- 推广排行榜周记录表
  1759. -- =============================================
  1760. CREATE TABLE IF NOT EXISTS referral_leaderboard (
  1761. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1762. user_id BIGINT NOT NULL,
  1763. week_start VARCHAR(10) NOT NULL COMMENT '周一日期 YYYY-MM-DD',
  1764. referral_count INT DEFAULT 0,
  1765. `rank` INT,
  1766. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1767. UNIQUE INDEX idx_user_week (user_id, week_start),
  1768. INDEX idx_week_rank (week_start, referral_count DESC)
  1769. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广排行榜周记录';
  1770. -- =============================================
  1771. -- 虚拟服务商团队(分销体系)
  1772. -- =============================================
  1773. CREATE TABLE IF NOT EXISTS `distribution_systems` (
  1774. `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  1775. `name` VARCHAR(100) NOT NULL COMMENT '团队名称',
  1776. `description` TEXT COMMENT '团队描述',
  1777. `owner_id` BIGINT COMMENT '创建人(服务商用户ID)',
  1778. `profit_rate` INT DEFAULT 0 COMMENT '利润分成比例(bps, 如2000=20%)',
  1779. `enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
  1780. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  1781. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1782. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='虚拟服务商团队(分销体系)';
  1783. CREATE TABLE IF NOT EXISTS `distribution_relations` (
  1784. `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  1785. `system_id` BIGINT NOT NULL COMMENT '所属团队ID',
  1786. `user_id` BIGINT NOT NULL COMMENT '服务商用户ID',
  1787. `parent_id` BIGINT COMMENT '上级服务商用户ID',
  1788. `depth` INT DEFAULT 0 COMMENT '层级深度(0=root)',
  1789. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  1790. INDEX idx_system (system_id),
  1791. INDEX idx_user (user_id),
  1792. INDEX idx_parent (parent_id)
  1793. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团队-服务商关系(同一人在不同团队可处于不同位置)';
  1794. -- =============================================
  1795. -- 成长任务种子数据
  1796. -- =============================================
  1797. INSERT IGNORE INTO growth_task (type, title, description, reward_points, reward_energy, target_value, task_key, sort_order) VALUES
  1798. ('DAILY', '每日签到', '完成每日签到', 20, 3, 1, 'DAILY_CHECKIN', 1),
  1799. ('DAILY', '完成任务', '完成一个任务', 30, 5, 1, 'DAILY_TASK', 2),
  1800. ('DAILY', '分享文章', '分享一篇好文给好友', 10, 2, 1, 'DAILY_SHARE', 3),
  1801. ('DAILY', 'AI对话', '与AI助手进行一次对话', 15, 3, 1, 'DAILY_AI', 4);
  1802. -- ========== 全域指标定义表 ==========
  1803. -- ===== v1.5 家庭文化镜:关系兼容性配置 =====
  1804. -- 生肖配对规则表
  1805. CREATE TABLE IF NOT EXISTS zodiac_pairing (
  1806. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1807. zodiac_code_1 VARCHAR(20) NOT NULL COMMENT '生肖代码1',
  1808. zodiac_code_2 VARCHAR(20) NOT NULL COMMENT '生肖代码2',
  1809. pairing_type VARCHAR(20) NOT NULL COMMENT '配对类型: liuhe/sanhe/banhe/liuchong/xianghai/xiangxing/ping',
  1810. compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
  1811. description TEXT COMMENT '配对解读',
  1812. advice TEXT COMMENT '相处建议',
  1813. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1814. UNIQUE KEY uk_zodiac_pair (zodiac_code_1, zodiac_code_2)
  1815. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生肖配对规则表';
  1816. -- 十二生肖六合/三合/六冲种子数据
  1817. INSERT IGNORE INTO zodiac_pairing (zodiac_code_1, zodiac_code_2, pairing_type, compatibility_score, description, advice) VALUES
  1818. ('rat', 'ox', 'liuhe', 100, '子丑六合,天生一对', '你们是最佳拍档,互相补充,默契十足'),
  1819. ('rat', 'monkey', 'sanhe', 85, '申子半合水局,默契度高', '智慧结合,创意无限,适合一起做规划'),
  1820. ('rat', 'dragon', 'sanhe', 85, '子辰半合水局,相辅相成', '一个机灵一个大气,共同成就大事'),
  1821. ('rat', 'horse', 'liuchong', 20, '子午相冲,水火不容', '价值观差异大,需要多包容理解'),
  1822. ('rat', 'tiger', 'xiangxing', 30, '寅子相刑,容易误会', '沟通方式不同,建议用行动代替言语'),
  1823. ('rat', 'rabbit', 'xiangxing', 30, '卯子相刑,互不相让', '各执己见时先冷静再沟通'),
  1824. ('rat', 'sheep', 'xianghai', 35, '子未相害,暗中较劲', '表面和谐但内心可能有竞争意识'),
  1825. ('ox', 'tiger', 'ping', 55, '牛虎平平,互敬互重', '踏实遇上冒险,可以互相学习'),
  1826. ('ox', 'rabbit', 'xianghai', 35, '丑卯相害,各怀心思', '建议开诚布公,减少猜测'),
  1827. ('ox', 'dragon', 'ping', 55, '牛龙平平,求同存异', '务实和理想主义的碰撞'),
  1828. ('ox', 'snake', 'sanhe', 85, '巳酉丑三合金局,配合默契', '务实加智慧,黄金搭档'),
  1829. ('ox', 'horse', 'xianghai', 35, '丑午相害,相处需技巧', '步调不同,需要彼此迁就'),
  1830. ('ox', 'sheep', 'liuchong', 20, '丑未相冲,针锋相对', '一个固执一个犟,需要第三方调和'),
  1831. ('tiger', 'rabbit', 'ping', 55, '虎兔平平,各有所长', '虎的魄力配兔的细腻,互补型'),
  1832. ('tiger', 'dragon', 'ping', 55, '虎龙平平,互相欣赏', '都有王者风范,但要注意谁说了算'),
  1833. ('tiger', 'snake', 'xianghai', 35, '寅巳相害,互相防备', '一个直率一个深沉,需要更多信任'),
  1834. ('tiger', 'horse', 'sanhe', 85, '寅午半合火局,一拍即合', '热情似火,志同道合的行动派'),
  1835. ('tiger', 'sheep', 'ping', 55, '虎羊平平,温柔与力量', '虎保护羊,羊温暖虎'),
  1836. ('tiger', 'monkey', 'liuchong', 20, '寅申相冲,竞争关系', '针尖对麦芒,需要在竞争中找合作'),
  1837. ('tiger', 'pig', 'liuhe', 100, '寅亥六合,情投意合', '虎猪相合,真诚相待的最佳组合'),
  1838. ('rabbit', 'dragon', 'xianghai', 35, '卯辰相害,表面和谐', '温和遇到强势,需要找到平衡'),
  1839. ('rabbit', 'snake', 'ping', 55, '兔蛇平平,温和相处', '都是内敛型,适合安静的陪伴'),
  1840. ('rabbit', 'horse', 'ping', 55, '兔马平平,一动一静', '一个爱静一个爱动,互相调剂'),
  1841. ('rabbit', 'sheep', 'sanhe', 85, '卯未半合木局,志趣相投', '文艺组合,品味相投'),
  1842. ('rabbit', 'monkey', 'xiangxing', 30, '卯申相刑,互不买账', '思维方式差异大,需要耐心'),
  1843. ('rabbit', 'rooster', 'liuchong', 20, '卯酉相冲,水火难容', '生活节奏完全不同,需要大包容'),
  1844. ('rabbit', 'dog', 'liuhe', 100, '卯戌六合,忠诚相伴', '兔狗相合,彼此忠诚的最佳关系'),
  1845. ('dragon', 'snake', 'ping', 55, '龙蛇平平,同源相惜', '都有神秘气质,惺惺相惜'),
  1846. ('dragon', 'horse', 'ping', 55, '龙马平平,各有天地', '一个在天一个在地,互不干涉'),
  1847. ('dragon', 'sheep', 'xiangxing', 30, '辰未相刑,暗中别扭', '看似无事却有暗流,多交流可化解'),
  1848. ('dragon', 'monkey', 'sanhe', 85, '申子辰三合水局,天生队友', '最佳事业组合,互相成就'),
  1849. ('dragon', 'rooster', 'liuhe', 100, '辰酉六合,珠联璧合', '龙凤配,传统的最佳搭档'),
  1850. ('dragon', 'dog', 'liuchong', 20, '辰戌相冲,正面冲突', '硬碰硬的关系,需要智慧化解'),
  1851. ('snake', 'horse', 'xiangxing', 30, '巳午相刑,热度不同', '蛇冷静马热情,温度要调和'),
  1852. ('snake', 'sheep', 'sanhe', 85, '巳酉丑三合金局,智慧搭档', '沉稳加温柔,互相信任的深层关系'),
  1853. ('snake', 'monkey', 'liuhe', 100, '巳申六合,智谋相投', '聪明人之间的默契'),
  1854. ('snake', 'rooster', 'sanhe', 85, '巳酉丑三合金局,配合无间', '细节控和完美主义者的理想组合'),
  1855. ('snake', 'pig', 'liuchong', 20, '巳亥相冲,南辕北辙', '一个深沉一个随性,需要大幅磨合'),
  1856. ('horse', 'sheep', 'liuhe', 100, '午未六合,温情相依', '马羊相合,温暖体贴的最佳关系'),
  1857. ('horse', 'monkey', 'xiangxing', 30, '午申相刑,互不理解', '行动派和思考派的碰撞'),
  1858. ('horse', 'rooster', 'xiangxing', 30, '午酉相刑,意气用事', '都容易冲动,需要一个冷静者调和'),
  1859. ('horse', 'dog', 'sanhe', 85, '寅午戌三合火局,行动搭档', '热情忠诚组合,一起行动效率高'),
  1860. ('horse', 'pig', 'liuhe', 100, '亥午暗合,心有灵犀', '一静一动却暗合,出人意料的默契'),
  1861. ('sheep', 'monkey', 'xiangxing', 30, '未申相刑,互挑毛病', '容易在小事上相互挑剔'),
  1862. ('sheep', 'rooster', 'ping', 55, '羊鸡平平,互相欣赏', '羊的细腻欣赏鸡的精致'),
  1863. ('sheep', 'dog', 'xiangxing', 30, '未戌相刑,各怀心事', '需要建立更深层的信任'),
  1864. ('sheep', 'pig', 'sanhe', 85, '亥卯未三合木局,温柔组合', '温和的三合组,舒适无压力的关系'),
  1865. ('monkey', 'rooster', 'ping', 55, '猴鸡平平,互相启发', '聪明人的相遇,火花四射'),
  1866. ('monkey', 'dog', 'xiangxing', 30, '申戌相刑,互不信任', '需要时间证明真心'),
  1867. ('monkey', 'pig', 'liuhe', 100, '申亥六合,智勇双全', '猴子机智猪包容,最佳朋友组合'),
  1868. ('rooster', 'dog', 'xiangxing', 30, '酉戌相刑,互相挑剔', '完美主义遇见忠诚卫士,互相看不惯'),
  1869. ('rooster', 'pig', 'ping', 55, '鸡猪平平,各取所需', '鸡的精明和猪的豁达互相补充'),
  1870. ('dog', 'pig', 'sanhe', 85, '寅午戌三合火局,忠诚相伴', '忠诚的守护组合,互相支持');
  1871. -- 血型配对表
  1872. CREATE TABLE IF NOT EXISTS blood_type_pairing (
  1873. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1874. blood_type_1 VARCHAR(5) NOT NULL COMMENT '血型1',
  1875. blood_type_2 VARCHAR(5) NOT NULL COMMENT '血型2',
  1876. compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
  1877. description TEXT COMMENT '配对描述',
  1878. advice TEXT COMMENT '相处建议',
  1879. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1880. UNIQUE KEY uk_blood_pair (blood_type_1, blood_type_2)
  1881. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配对表';
  1882. INSERT IGNORE INTO blood_type_pairing (blood_type_1, blood_type_2, compatibility_score, description, advice) VALUES
  1883. ('A', 'A', 80, '同型相吸,稳重默契', '都能理解对方的细腻敏感,但注意不要一起钻牛角尖'),
  1884. ('A', 'B', 50, '互补型,有吸引力也有摩擦', 'B型的自由奔放吸引A型,但A型的严谨可能让B型感到压力'),
  1885. ('A', 'O', 75, 'A主内O主外,搭配和谐', 'O型的大气包容A型的细致,是最常见的和谐组合'),
  1886. ('A', 'AB', 70, 'AB型善解人意,A型感到被理解', 'AB型的理性刚好平衡A型的感性'),
  1887. ('B', 'B', 75, '同型相投,自由自在', '都给彼此空间,但可能缺乏规划'),
  1888. ('B', 'O', 70, 'O型包容B型,相处轻松', 'O型的稳定给了B型安全感'),
  1889. ('B', 'AB', 65, '互相欣赏,各有天地', 'B型的创意和AB型的分析能力互补'),
  1890. ('O', 'O', 85, '强强联合,行动力爆棚', '都是行动派,但要注意不要都太强势'),
  1891. ('O', 'AB', 75, 'O型领导,AB型军师', 'O型的大方向加AB型的精细思维,无敌组合'),
  1892. ('AB', 'AB', 60, '互相理解但可能过度理性', '两个理性派,别忘了情感交流');
  1893. -- 生命灵数关系解读表
  1894. CREATE TABLE IF NOT EXISTS life_number_relationship (
  1895. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1896. relationship_number INT NOT NULL COMMENT '关系数字 1-9',
  1897. title VARCHAR(100) COMMENT '关系主题',
  1898. description TEXT COMMENT '关系解读',
  1899. advice TEXT COMMENT '相处建议',
  1900. color_hex VARCHAR(10) COMMENT '代表色',
  1901. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1902. UNIQUE KEY uk_relationship_num (relationship_number)
  1903. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生命灵数关系解读表';
  1904. INSERT IGNORE INTO life_number_relationship (relationship_number, title, description, advice, color_hex) VALUES
  1905. (1, '开创者关系', '你们在一起充满创造力和领导力,彼此激励去实现目标', '注意不要互相竞争谁说了算,明确分工才能发挥最大能量', '#FF4444'),
  1906. (2, '合作伙伴关系', '你们是天生的搭档,善于倾听和配合,营造和谐氛围', '过于迁就对方可能会失去自我,保持适度独立才能长久', '#FF8C42'),
  1907. (3, '创意火花关系', '在一起充满欢乐和创造力,社交圈会因为你们而扩大', '注意不要太表面化,偶尔需要深度的对话来维系情感', '#FFD700'),
  1908. (4, '建设者关系', '你们是务实稳健的组合,能一起把想法变成现实', '生活不能只有工作和责任,记得给彼此创造惊喜和浪漫', '#10B981'),
  1909. (5, '探险者关系', '在一起充满变化和新鲜感,喜欢一起探索未知', '变化太多可能会让关系缺乏安全感,寻找一些共同的固定仪式', '#3B82F6'),
  1910. (6, '守护者关系', '你们的关系以关爱和责任为基础,彼此是最坚实的后盾', '付出太多可能会感到疲惫,学会接受对方的爱和照顾', '#6366F1'),
  1911. (7, '智者关系', '在一起有深度的精神交流和思想碰撞,追求真理', '不要沉浸在各自的世界里,记得用简单的方式表达爱', '#8B5CF6'),
  1912. (8, '成就者关系', '你们是强强联合,追求物质和事业上的共同成就', '在追求成功的同时不要忽视感情的温度,平衡事业和生活', '#F59E0B'),
  1913. (9, '圆满者关系', '在一起有强烈的宿命感,彼此理解和支持,是灵魂伴侣', '太理想化可能会失望,接受对方的不完美才能走得更远', '#FF6B9D');
  1914. CREATE TABLE IF NOT EXISTS indicator_definitions (
  1915. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1916. domain VARCHAR(50) NOT NULL COMMENT '领域: physical/mental/nutrition/behavior/social',
  1917. category VARCHAR(50) NOT NULL COMMENT '分类: 舌色/苔色/情绪/...',
  1918. code VARCHAR(50) NOT NULL UNIQUE COMMENT '编码: tongue_color/coating_color/...',
  1919. name VARCHAR(100) NOT NULL COMMENT '显示名: 舌体颜色/苔色/...',
  1920. data_type VARCHAR(20) NOT NULL DEFAULT 'enum' COMMENT '数据类型: enum/number/string',
  1921. options JSON COMMENT '枚举值列表: ["淡红","红","绛","青紫"] 或 null',
  1922. unit VARCHAR(50) COMMENT '单位',
  1923. ref_range VARCHAR(200) COMMENT '参考范围',
  1924. sort_order INT DEFAULT 0 COMMENT '排序',
  1925. status TINYINT DEFAULT 1 COMMENT '0=禁用 1=启用',
  1926. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1927. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1928. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全域指标定义';
  1929. -- ========== 全域指标值表 ==========
  1930. CREATE TABLE IF NOT EXISTS indicator_values (
  1931. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1932. source_type VARCHAR(50) NOT NULL COMMENT '来源: tongue_record/health_report/assessment',
  1933. source_id BIGINT NOT NULL COMMENT '来源记录ID',
  1934. definition_id BIGINT NOT NULL COMMENT 'FK→indicator_definitions.id',
  1935. value VARCHAR(200) COMMENT '值',
  1936. numeric_value DECIMAL(10,2) COMMENT '数值(number类型时用)',
  1937. remark TEXT COMMENT '备注',
  1938. recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1939. INDEX idx_source (source_type, source_id),
  1940. INDEX idx_definition (definition_id)
  1941. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全域指标值';
  1942. -- ========== 舌诊主记录表 ==========
  1943. CREATE TABLE IF NOT EXISTS tongue_records (
  1944. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1945. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  1946. child_id BIGINT COMMENT '孩子ID',
  1947. image_url VARCHAR(500) COMMENT '舌象图片URL',
  1948. overall_assessment TEXT COMMENT '总体评估',
  1949. status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/confirmed',
  1950. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1951. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1952. INDEX idx_member (member_id, child_id),
  1953. INDEX idx_status (status)
  1954. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='舌诊主记录';
  1955. -- ========== 种子数据:舌诊7项指标定义 ==========
  1956. INSERT IGNORE INTO indicator_definitions (domain, category, code, name, data_type, options, sort_order, status) VALUES
  1957. ('physical', '舌色', 'tongue_color', '舌体颜色', 'enum', '["淡红","红","绛","青紫"]', 1, 1),
  1958. ('physical', '苔色', 'coating_color', '苔色', 'enum', '["薄白","白","黄","灰黑"]', 2, 1),
  1959. ('physical', '苔质', 'coating_texture', '苔质', 'enum', '["润","燥","滑","涩","腻"]', 3, 1),
  1960. ('physical', '裂纹', 'fissure', '裂纹程度', 'enum', '["无","轻","中","重"]', 4, 1),
  1961. ('physical', '齿痕', 'teeth_mark', '齿痕程度', 'enum', '["无","轻","中","重"]', 5, 1),
  1962. ('physical', '舌下络脉', 'sublingual_vein', '舌下络脉', 'enum', '["正常","轻","中","重"]', 6, 1),
  1963. ('physical', '体质', 'constitution', '体质辨识', 'enum', '["平和质","气虚质","阳虚质","阴虚质","湿热质","痰湿质","血瘀质","气郁质","特禀质"]', 7, 1);
  1964. -- =============================================
  1965. -- 活动报名 & 能量规则引擎 v1.4 - 字段扩展
  1966. -- 通过 DatabaseInitializer.java 在 ALTER 阶段执行
  1967. -- =============================================
  1968. -- 活动表扩展字段
  1969. ALTER TABLE activities ADD COLUMN require_registration TINYINT DEFAULT 1 COMMENT '是否需要报名: 1=需要, 0=直接参与';
  1970. ALTER TABLE activities ADD COLUMN require_checkin_review TINYINT DEFAULT 1 COMMENT '打卡是否需要审核: 1=需要, 0=直接通过';
  1971. ALTER TABLE activities ADD COLUMN energy_penalty_unregistered INT DEFAULT 5 COMMENT '未报名打卡的行能量扣减值';
  1972. -- ============================================================
  1973. -- 新增:系统配置表(角色年龄阈值等)
  1974. -- ============================================================
  1975. CREATE TABLE IF NOT EXISTS system_config (
  1976. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1977. config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
  1978. config_value TEXT COMMENT '配置值',
  1979. description TEXT COMMENT '说明',
  1980. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1981. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1982. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  1983. -- ============================================================
  1984. -- 数据迁移: children → family_members + roleOverride 变更
  1985. -- 执行时机: Phase 9(所有代码变更完成后、上线前)
  1986. -- ============================================================
  1987. -- 1. family_members.capability_role → role_override (已在 DDL 中 ALTER)
  1988. -- 2. relationship_types.capability_role → default_role (已在 DDL 中 ALTER)
  1989. -- ============================================================
  1990. -- 数据迁移: children → family_members + roleOverride 变更
  1991. -- 执行时机: Phase 9(所有代码变更完成后、上线前)
  1992. -- ============================================================
  1993. -- 1. family_members 已包含所有必要字段(role_override, 孩子专属字段已在 DDL 中)
  1994. -- relationship_types.capability_role → default_role 已在 DDL 中 ALTER
  1995. -- 2. 迁移 children 数据到 family_members(匹配更新:family_members 已存在该成员记录时更新)
  1996. UPDATE family_members fm
  1997. INNER JOIN children c ON fm.family_id = c.family_id AND fm.nickname = c.nickname AND fm.user_id = c.user_id
  1998. SET
  1999. fm.id_card = c.id_card,
  2000. fm.penalty_enabled = c.penalty_enabled,
  2001. fm.theme = c.theme,
  2002. fm.system_points = c.system_points,
  2003. fm.streak_days = c.streak_days,
  2004. fm.last_task_date = c.last_task_date,
  2005. fm.focus_max_daily = c.focus_max_daily,
  2006. fm.focus_remaining = c.focus_remaining,
  2007. fm.focus_reset_date = c.focus_reset_date,
  2008. fm.total_points = c.total_points,
  2009. fm.show_to_family = c.show_to_family,
  2010. fm.birthday = c.birthday,
  2011. fm.gender = c.gender,
  2012. fm.phone = c.phone,
  2013. fm.role_override = 'child';
  2014. -- 3. 迁移 children 数据到 family_members(不匹配则插入新记录)
  2015. INSERT INTO family_members (family_id, user_id, nickname, birthday, gender, phone,
  2016. id_card, penalty_enabled, theme, system_points, streak_days, last_task_date,
  2017. focus_max_daily, focus_remaining, focus_reset_date, show_to_family, total_points,
  2018. role_override, created_at, updated_at)
  2019. SELECT family_id, user_id, nickname, birthday, gender, phone,
  2020. id_card, penalty_enabled, theme, system_points, streak_days, last_task_date,
  2021. focus_max_daily, focus_remaining, focus_reset_date, show_to_family, total_points,
  2022. 'child', created_at, updated_at
  2023. FROM children
  2024. WHERE NOT EXISTS (
  2025. SELECT 1 FROM family_members fm2
  2026. WHERE fm2.family_id = children.family_id
  2027. AND fm2.nickname = children.nickname
  2028. AND fm2.user_id = children.user_id
  2029. );
  2030. -- 4. 插入 system_config 初始数据
  2031. INSERT INTO system_config (config_key, config_value, description) VALUES
  2032. ('child_age_threshold', '18', '未成年年龄分界线(岁)'),
  2033. ('elderly_age_threshold', '65', '老年年龄分界线(岁)')
  2034. ON DUPLICATE KEY UPDATE config_value = VALUES(config_value);
  2035. -- 5. 删除 children 表(最后执行,确认迁移完成后再执行此步)
  2036. -- DROP TABLE IF EXISTS children;
  2037. -- ============================================================
  2038. -- 购物车表
  2039. -- ============================================================
  2040. CREATE TABLE IF NOT EXISTS cart (
  2041. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2042. user_id BIGINT NOT NULL COMMENT '用户ID',
  2043. product_id BIGINT NOT NULL COMMENT '商品ID',
  2044. quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
  2045. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2046. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2047. INDEX idx_user_product (user_id, product_id)
  2048. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
  2049. -- ============================================================
  2050. -- 供应商分销体系
  2051. -- ============================================================
  2052. CREATE TABLE IF NOT EXISTS supply_system (
  2053. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2054. name VARCHAR(100) NOT NULL COMMENT '体系名称',
  2055. admin_id BIGINT NOT NULL COMMENT '管理员用户ID',
  2056. settlement_period_days INT NOT NULL DEFAULT 30 COMMENT '账期(天)',
  2057. platform_profit_rate DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)',
  2058. description TEXT COMMENT '描述',
  2059. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled',
  2060. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2061. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2062. KEY idx_admin_id (admin_id)
  2063. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商体系';
  2064. CREATE TABLE IF NOT EXISTS supply_system_member (
  2065. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2066. system_id BIGINT NOT NULL COMMENT '体系ID',
  2067. user_id BIGINT NOT NULL COMMENT '用户ID',
  2068. role VARCHAR(20) NOT NULL DEFAULT 'member' COMMENT '角色: admin/member',
  2069. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive',
  2070. joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2071. UNIQUE KEY uk_system_user (system_id, user_id),
  2072. KEY idx_user_id (user_id)
  2073. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体系成员';
  2074. CREATE TABLE IF NOT EXISTS supply_settlement (
  2075. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2076. system_id BIGINT NOT NULL COMMENT '体系ID',
  2077. period_start DATE NOT NULL COMMENT '结算周期开始',
  2078. period_end DATE NOT NULL COMMENT '结算周期结束',
  2079. total_sales INT NOT NULL DEFAULT 0 COMMENT '销售总额(分)',
  2080. platform_profit INT NOT NULL DEFAULT 0 COMMENT '平台留利金额(分)',
  2081. supplier_payout INT NOT NULL DEFAULT 0 COMMENT '供应商实付(分)',
  2082. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled',
  2083. settled_at DATETIME COMMENT '结算时间',
  2084. remark TEXT COMMENT '备注',
  2085. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2086. KEY idx_system_id (system_id),
  2087. KEY idx_period (period_start, period_end)
  2088. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算记录';
  2089. CREATE TABLE IF NOT EXISTS supply_settlement_detail (
  2090. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2091. settlement_id BIGINT NOT NULL COMMENT '结算ID',
  2092. order_id BIGINT NOT NULL COMMENT '订单ID',
  2093. order_no VARCHAR(64) NOT NULL COMMENT '订单号',
  2094. product_name VARCHAR(200) NOT NULL COMMENT '商品名称',
  2095. amount INT NOT NULL COMMENT '订单金额(分)',
  2096. platform_fee INT NOT NULL COMMENT '平台留利(分)',
  2097. supplier_id BIGINT COMMENT '收款供应商用户ID',
  2098. supplier_name VARCHAR(100) COMMENT '收款供应商名称',
  2099. payout INT NOT NULL COMMENT '供应商实付(分)',
  2100. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2101. KEY idx_settlement_id (settlement_id),
  2102. KEY idx_order_id (order_id)
  2103. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算明细';
  2104. -- =============================================
  2105. -- 收货人与购买信息采集
  2106. -- =============================================
  2107. CREATE TABLE IF NOT EXISTS consignees (
  2108. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  2109. user_id BIGINT NOT NULL COMMENT '所属用户ID',
  2110. name VARCHAR(100) NOT NULL COMMENT '收货人姓名',
  2111. phone VARCHAR(20) COMMENT '手机号',
  2112. id_card VARCHAR(20) COMMENT '身份证号',
  2113. hand_signature TEXT COMMENT '手签名(base64图片或URL)',
  2114. ethnicity VARCHAR(20) COMMENT '民族',
  2115. blood_type VARCHAR(20) COMMENT '血型',
  2116. address VARCHAR(500) COMMENT '收货地址',
  2117. is_default TINYINT(1) DEFAULT 0 COMMENT '是否默认收货人',
  2118. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2119. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  2120. INDEX idx_user_id (user_id)
  2121. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收货人信息(含购买所需特殊信息)';
  2122. CREATE TABLE IF NOT EXISTS product_purchase_fields (
  2123. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  2124. product_id BIGINT NOT NULL COMMENT '商品ID',
  2125. field_key VARCHAR(50) NOT NULL COMMENT '字段标识: name/phone/id_card/hand_signature/ethnicity/blood_type',
  2126. field_name VARCHAR(100) NOT NULL COMMENT '显示名: 收货人姓名/手机号/身份证号/手签名/民族/血型',
  2127. is_required TINYINT(1) DEFAULT 1 COMMENT '是否必填 1=是 0=否',
  2128. sort_order INT DEFAULT 0 COMMENT '排序',
  2129. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2130. INDEX idx_product_id (product_id),
  2131. UNIQUE KEY uk_product_field (product_id, field_key)
  2132. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品购买信息字段配置';
  2133. -- AI管家会话表
  2134. CREATE TABLE IF NOT EXISTS butler_sessions (
  2135. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2136. user_id BIGINT NOT NULL COMMENT '用户ID',
  2137. title VARCHAR(200) DEFAULT '新会话' COMMENT '会话标题',
  2138. conversation_id VARCHAR(100) COMMENT 'Dify对话ID',
  2139. context TEXT COMMENT '上下文信息(JSON)',
  2140. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active(进行中)/archived(已归档)',
  2141. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2142. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2143. INDEX idx_user_id (user_id),
  2144. INDEX idx_status (status),
  2145. INDEX idx_user_status (user_id, status)
  2146. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI管家会话表';
  2147. -- 家庭订阅记录
  2148. CREATE TABLE IF NOT EXISTS member_subscription (
  2149. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2150. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2151. `level` VARCHAR(10) NOT NULL DEFAULT 'L1' COMMENT 'L1=一生一世, L2=久久一生',
  2152. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active/expired/cancelled',
  2153. start_time DATETIME DEFAULT NULL COMMENT '开始时间',
  2154. expire_time DATETIME DEFAULT NULL COMMENT '到期时间',
  2155. payment_id BIGINT DEFAULT NULL COMMENT '关联订单ID',
  2156. auto_renew TINYINT(1) DEFAULT 0 COMMENT '自动续费(L2)',
  2157. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2158. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2159. INDEX idx_family_id (family_id),
  2160. INDEX idx_status (status),
  2161. INDEX idx_expire_time (expire_time)
  2162. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭订阅记录';
  2163. -- 订阅订单
  2164. CREATE TABLE IF NOT EXISTS member_subscription_order (
  2165. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2166. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2167. `level` VARCHAR(10) NOT NULL COMMENT 'L1/L2',
  2168. amount INT NOT NULL COMMENT '金额(分)',
  2169. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/paid/cancelled/refunded',
  2170. payment_type VARCHAR(20) DEFAULT NULL COMMENT '支付方式 wechat/alipay',
  2171. transaction_id VARCHAR(64) DEFAULT NULL COMMENT '微信支付订单号',
  2172. order_no VARCHAR(64) NOT NULL COMMENT '订单号',
  2173. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2174. paid_at DATETIME DEFAULT NULL,
  2175. UNIQUE KEY uk_order_no (order_no),
  2176. INDEX idx_family_id (family_id),
  2177. INDEX idx_status (status)
  2178. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订阅订单';
  2179. -- 权益使用日志
  2180. CREATE TABLE IF NOT EXISTS subscription_benefit_log (
  2181. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2182. subscription_id BIGINT NOT NULL COMMENT '订阅ID',
  2183. benefit_code VARCHAR(50) NOT NULL COMMENT '权益代码',
  2184. used_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2185. detail TEXT COMMENT '使用详情(JSON)',
  2186. INDEX idx_subscription_id (subscription_id)
  2187. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权益使用日志';
  2188. -- 推广等级 R0-R4
  2189. CREATE TABLE IF NOT EXISTS promotion_tier (
  2190. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2191. user_id BIGINT NOT NULL COMMENT '用户ID',
  2192. tier VARCHAR(20) NOT NULL DEFAULT 'R0' COMMENT 'R0利他者/R1传福人/R2聚能师/R3启慧者/R4传承者',
  2193. team_size_1st INT DEFAULT 0 COMMENT '一层团队人数',
  2194. team_size_2nd INT DEFAULT 0 COMMENT '二层团队人数',
  2195. team_size_3rd INT DEFAULT 0 COMMENT '三层团队人数',
  2196. total_team_size INT DEFAULT 0 COMMENT '三层累计总人数',
  2197. total_referral_earnings INT DEFAULT 0 COMMENT '累计推荐佣金(分)',
  2198. total_share_earnings INT DEFAULT 0 COMMENT '累计消费分润(分)',
  2199. promoted_at DATETIME DEFAULT NULL COMMENT '最近晋级时间',
  2200. last_change_at DATETIME DEFAULT NULL COMMENT '最后变更时间',
  2201. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2202. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2203. UNIQUE KEY uk_user_id (user_id),
  2204. INDEX idx_tier (tier)
  2205. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广等级';
  2206. -- 推广等级变更记录
  2207. CREATE TABLE IF NOT EXISTS promotion_tier_change_log (
  2208. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2209. user_id BIGINT NOT NULL COMMENT '用户ID',
  2210. old_tier VARCHAR(20) DEFAULT NULL COMMENT '变更前等级',
  2211. new_tier VARCHAR(20) NOT NULL COMMENT '变更后等级',
  2212. reason VARCHAR(50) DEFAULT NULL COMMENT 'qualify升级/demote降级/admin管理员调整',
  2213. changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2214. INDEX idx_user_id (user_id)
  2215. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广等级变更记录';
  2216. -- 推荐关系树(三层)
  2217. CREATE TABLE IF NOT EXISTS referral_tree (
  2218. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2219. parent_id BIGINT NOT NULL COMMENT '推荐人ID',
  2220. child_id BIGINT NOT NULL COMMENT '被推荐人ID',
  2221. level INT NOT NULL COMMENT '层级深度(1/2/3)',
  2222. path VARCHAR(255) DEFAULT NULL COMMENT 'materialized path如/1/2/3/',
  2223. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2224. UNIQUE KEY uk_child_id (child_id),
  2225. INDEX idx_parent_id (parent_id),
  2226. INDEX idx_level (level)
  2227. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推荐关系树';
  2228. -- 产品P点配置
  2229. CREATE TABLE IF NOT EXISTS product_ppoint (
  2230. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2231. product_id BIGINT NOT NULL COMMENT '产品ID',
  2232. ppoint INT NOT NULL DEFAULT 0 COMMENT 'P点值(平台利润分)',
  2233. start_date DATE DEFAULT NULL COMMENT '生效日期',
  2234. end_date DATE DEFAULT NULL COMMENT '失效日期',
  2235. created_by BIGINT DEFAULT NULL COMMENT '创建人',
  2236. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2237. INDEX idx_product_id (product_id),
  2238. INDEX idx_dates (start_date, end_date)
  2239. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品P点配置';
  2240. -- 测评商品扩展信息
  2241. CREATE TABLE IF NOT EXISTS assessment_products (
  2242. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2243. product_id BIGINT NOT NULL COMMENT '关联products表',
  2244. assessment_type VARCHAR(20) NOT NULL COMMENT 'single=单包, bundle=套餐',
  2245. total_sessions INT NOT NULL DEFAULT 1 COMMENT '包含测评次数',
  2246. validity_days INT NOT NULL DEFAULT 365 COMMENT '有效期(天)',
  2247. guide_scope VARCHAR(50) DEFAULT 'all' COMMENT '规划师范围: all/assigned/auto',
  2248. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2249. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2250. INDEX idx_product_id (product_id)
  2251. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评商品扩展信息';
  2252. -- 测评额度表
  2253. CREATE TABLE IF NOT EXISTS assessment_quotas (
  2254. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2255. quota_no VARCHAR(32) NOT NULL COMMENT '额度编号',
  2256. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2257. child_id BIGINT COMMENT '指定孩子ID(NULL=不限)',
  2258. product_order_id BIGINT NOT NULL COMMENT '来源订单ID',
  2259. product_id BIGINT NOT NULL COMMENT '商品ID',
  2260. product_name VARCHAR(100) NOT NULL COMMENT '商品名快照',
  2261. total_sessions INT NOT NULL DEFAULT 1 COMMENT '总次数',
  2262. remaining_sessions INT NOT NULL DEFAULT 1 COMMENT '剩余次数',
  2263. validity_start DATETIME NOT NULL COMMENT '有效期开始',
  2264. validity_end DATETIME NOT NULL COMMENT '有效期截止',
  2265. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active/expired/used_all/cancelled',
  2266. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2267. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2268. INDEX idx_family (family_id),
  2269. INDEX idx_order (product_order_id),
  2270. UNIQUE KEY uk_quota_no (quota_no)
  2271. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评额度表';
  2272. -- 测评执行记录表
  2273. CREATE TABLE IF NOT EXISTS assessment_executions (
  2274. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2275. quota_id BIGINT NOT NULL COMMENT '关联额度ID',
  2276. child_id BIGINT NOT NULL COMMENT '被测评孩子',
  2277. guide_id BIGINT COMMENT '执行规划师ID',
  2278. assessment_type VARCHAR(30) COMMENT '本次具体测评类型',
  2279. appointment_id BIGINT COMMENT '关联预约ID',
  2280. result_id BIGINT COMMENT '关联测评结果ID',
  2281. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/in_progress/completed/cancelled',
  2282. scheduled_date DATETIME COMMENT '预约执行时间',
  2283. completed_at DATETIME COMMENT '实际完成时间',
  2284. notes VARCHAR(500) COMMENT '备注',
  2285. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2286. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2287. INDEX idx_quota (quota_id),
  2288. INDEX idx_child (child_id),
  2289. INDEX idx_appointment (appointment_id)
  2290. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评执行记录表';
  2291. -- 测评指导意见表(结构化存储)
  2292. CREATE TABLE IF NOT EXISTS growth_guidances (
  2293. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2294. result_id BIGINT NOT NULL COMMENT '关联测评结果ID',
  2295. dimension VARCHAR(30) NOT NULL COMMENT '维度: attention/focus/memory/logic/emotion/general',
  2296. score INT COMMENT '该维度得分(0-100)',
  2297. suggestion TEXT NOT NULL COMMENT '建议内容',
  2298. priority INT DEFAULT 0 COMMENT '优先级(0=普通, 1=重要, 2=紧急)',
  2299. sort_order INT DEFAULT 0 COMMENT '排序',
  2300. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2301. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2302. INDEX idx_result (result_id)
  2303. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评指导意见(结构化)';
  2304. -- 方案生成规则表
  2305. CREATE TABLE IF NOT EXISTS assessment_plan_rules (
  2306. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2307. dimension VARCHAR(30) NOT NULL COMMENT '测评维度: attention/focus/memory/logic/emotion',
  2308. score_min INT NOT NULL COMMENT '分数下限(含)',
  2309. score_max INT NOT NULL COMMENT '分数上限(含)',
  2310. template_id BIGINT NOT NULL COMMENT '关联TaskTemplatePackage ID',
  2311. priority INT DEFAULT 0 COMMENT '优先级',
  2312. is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用',
  2313. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2314. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2315. INDEX idx_dimension (dimension),
  2316. INDEX idx_score (score_min, score_max)
  2317. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='方案生成规则';