schema.sql 195 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876
  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. butler_status VARCHAR(20) COMMENT '管家状态: null/pending/approved/rejected',
  32. butler_info TEXT COMMENT '管家资质信息(JSON)',
  33. butler_approved_at DATETIME COMMENT '管家认证通过时间',
  34. INDEX idx_openid (openid),
  35. INDEX idx_family_id (family_id),
  36. INDEX idx_phone (phone)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  38. -- ============================================================
  39. -- 【已废除】children 表已合并到 family_members
  40. -- 保留此处仅作参考,勿执行
  41. -- ============================================================
  42. -- CREATE TABLE IF NOT EXISTS children (
  43. -- id BIGINT AUTO_INCREMENT PRIMARY KEY,
  44. -- user_id BIGINT NOT NULL,
  45. -- family_id BIGINT NOT NULL,
  46. -- nickname VARCHAR(50) NOT NULL,
  47. -- age TINYINT NOT NULL,
  48. -- birthday DATE,
  49. -- gender ENUM('male','female'),
  50. -- penalty_enabled TINYINT DEFAULT 1 COMMENT '是否开启扣分(0否1是)',
  51. -- theme VARCHAR(32) DEFAULT 'default',
  52. -- total_points INT DEFAULT 0,
  53. -- system_points INT DEFAULT 0 COMMENT '系统积分(测评建档/平台发放)',
  54. -- streak_days INT DEFAULT 0,
  55. -- last_task_date DATE,
  56. -- focus_max_daily TINYINT DEFAULT 3,
  57. -- focus_remaining TINYINT DEFAULT 3,
  58. -- focus_reset_date DATE,
  59. -- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  60. -- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  61. -- INDEX idx_user_id (user_id),
  62. -- INDEX idx_family_id (family_id)
  63. -- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  64. -- 任务表
  65. CREATE TABLE IF NOT EXISTS tasks (
  66. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  67. family_id BIGINT NOT NULL,
  68. creator_id BIGINT NOT NULL,
  69. child_id BIGINT COMMENT '执行者ID(child任务时必填,parent任务时可空)',
  70. executor_type VARCHAR(20) COMMENT '执行者类型: child/parent',
  71. executor_id BIGINT COMMENT '执行者ID',
  72. title VARCHAR(200) NOT NULL,
  73. description TEXT,
  74. points TINYINT DEFAULT 2 COMMENT '任务积分1-10',
  75. deadline DATETIME NOT NULL,
  76. repeat_type ENUM('none', 'daily', 'weekly') DEFAULT 'none',
  77. category VARCHAR(32),
  78. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核',
  79. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核',
  80. status ENUM('pending', 'completed', 'overdue', 'cancelled') DEFAULT 'pending',
  81. completed_at DATETIME,
  82. bonus_rule JSON COMMENT '积分奖励规则',
  83. points_expire_days INT DEFAULT 0 COMMENT '积分有效期天数',
  84. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  85. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  86. INDEX idx_child_id_deadline (child_id, deadline),
  87. INDEX idx_status (status),
  88. INDEX idx_category (category),
  89. INDEX idx_executor (executor_type, executor_id)
  90. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  91. -- 积分流水表
  92. CREATE TABLE IF NOT EXISTS points_log (
  93. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  94. child_id BIGINT NOT NULL,
  95. family_member_id BIGINT COMMENT '家庭成员ID',
  96. task_id BIGINT,
  97. amount INT NOT NULL COMMENT '积分数量正负',
  98. type ENUM('earn', 'spend', 'bonus', 'penalty', 'adjust', 'reset', 'refund') NOT NULL,
  99. category VARCHAR(20) DEFAULT 'task' COMMENT '积分分类: task-任务积分, system-系统积分',
  100. description TEXT,
  101. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  102. INDEX idx_child_id_created (child_id, created_at),
  103. INDEX idx_type (type)
  104. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  105. -- 积分清零记录表
  106. CREATE TABLE IF NOT EXISTS points_reset_log (
  107. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  108. child_id BIGINT NOT NULL,
  109. balance_before INT NOT NULL,
  110. balance_after INT DEFAULT 0,
  111. reset_type ENUM('monthly', 'manual') NOT NULL,
  112. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  113. INDEX idx_child_id (child_id)
  114. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  115. -- 奖励表
  116. CREATE TABLE IF NOT EXISTS rewards (
  117. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  118. family_id BIGINT NOT NULL COMMENT '家庭 ID,所有奖励必须关联家庭',
  119. child_id BIGINT NULL COMMENT '孩子 ID,模板奖励为NULL',
  120. title VARCHAR(100) NOT NULL,
  121. points_required INT NOT NULL,
  122. category VARCHAR(32),
  123. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available',
  124. exchange_approved TINYINT COMMENT '是否审批通过',
  125. exchanged_at DATETIME,
  126. is_template TINYINT DEFAULT 0 COMMENT '是否为预设模板',
  127. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  128. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  129. INDEX idx_family_id (family_id),
  130. INDEX idx_child_id_status (child_id, status),
  131. INDEX idx_is_template (is_template)
  132. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖励表,所有奖励必须关联到具体家庭';
  133. -- 奖励分类表
  134. CREATE TABLE IF NOT EXISTS reward_categories (
  135. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  136. family_id BIGINT NOT NULL,
  137. name VARCHAR(32) NOT NULL,
  138. icon VARCHAR(64),
  139. sort_order INT DEFAULT 0,
  140. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  141. INDEX idx_family_id (family_id)
  142. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  143. -- 预设奖励模板数据(child_id为NULL表示模板)
  144. INSERT IGNORE INTO rewards (family_id, child_id, title, points_required, category, is_template) VALUES
  145. (0, NULL, '看动画片30分钟', 30, '精神奖励', 1),
  146. (0, NULL, '玩平板游戏30分钟', 40, '特权奖励', 1),
  147. (0, NULL, '去游乐场', 100, '物质奖励', 1),
  148. (0, NULL, '买玩具', 150, '物质奖励', 1),
  149. (0, NULL, '吃冰淇淋', 20, '物质奖励', 1),
  150. (0, NULL, '选择晚餐', 25, '特权奖励', 1);
  151. -- 默认奖励分类
  152. INSERT IGNORE INTO reward_categories (family_id, name, icon, sort_order) VALUES
  153. (0, '物质奖励', 'gift', 1),
  154. (0, '精神奖励', 'star', 2),
  155. (0, '特权奖励', 'crown', 3);
  156. -- 敏感词表
  157. CREATE TABLE IF NOT EXISTS sensitive_words (
  158. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  159. word VARCHAR(50) NOT NULL,
  160. category VARCHAR(32) NOT NULL,
  161. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  162. INDEX idx_word (word)
  163. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  164. -- 任务审核表
  165. CREATE TABLE IF NOT EXISTS task_reviews (
  166. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  167. task_id BIGINT NOT NULL,
  168. child_id BIGINT NOT NULL,
  169. photo_url VARCHAR(255),
  170. voice_note_url VARCHAR(255),
  171. ai_result ENUM('pass', 'review', 'pending'),
  172. ai_confidence INT COMMENT 'AI置信度(0-100)',
  173. ai_suggestion VARCHAR(255),
  174. ai_threshold ENUM('strict', 'normal', 'loose') DEFAULT 'normal',
  175. parent_result ENUM('pass', 'reject'),
  176. parent_override TINYINT DEFAULT 0,
  177. review_type ENUM('ai', 'manual') NOT NULL,
  178. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  179. reviewed_at DATETIME,
  180. INDEX idx_task_id (task_id),
  181. INDEX idx_ai_result (ai_result)
  182. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  183. -- 打卡里程碑表
  184. CREATE TABLE IF NOT EXISTS streak_milestones (
  185. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  186. days INT NOT NULL,
  187. reward_points INT DEFAULT 0,
  188. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  189. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  190. -- 插入打卡里程碑数据
  191. INSERT IGNORE INTO streak_milestones (days, reward_points) VALUES
  192. (3, 5),
  193. (7, 10),
  194. (30, 30),
  195. (100, 100);
  196. -- 专注训练记录表
  197. CREATE TABLE IF NOT EXISTS focus_sessions (
  198. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  199. child_id BIGINT NOT NULL,
  200. mode ENUM('simple', 'pomodoro') NOT NULL,
  201. duration TINYINT NOT NULL,
  202. stars TINYINT COMMENT '评分1-5',
  203. points_earned INT,
  204. voice_note_url VARCHAR(255),
  205. started_at DATETIME NOT NULL,
  206. completed_at DATETIME,
  207. INDEX idx_child_id_completed (child_id, completed_at)
  208. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  209. -- 专注训练配置表
  210. CREATE TABLE IF NOT EXISTS focus_config (
  211. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  212. family_id BIGINT,
  213. max_daily_count TINYINT DEFAULT 3,
  214. allow_exit TINYINT DEFAULT 1 COMMENT '是否允许退出(0否1是)',
  215. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  216. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  217. -- DAN测评表
  218. CREATE TABLE IF NOT EXISTS dan_assessments (
  219. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  220. child_id BIGINT NOT NULL,
  221. assessment_date DATE NOT NULL,
  222. details JSON,
  223. source ENUM('api', 'manual') DEFAULT 'manual',
  224. photo_url VARCHAR(255),
  225. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  226. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  227. -- 任务模板表
  228. CREATE TABLE IF NOT EXISTS task_templates (
  229. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  230. title VARCHAR(200) NOT NULL,
  231. points TINYINT DEFAULT 2,
  232. duration_minutes TINYINT,
  233. category VARCHAR(32),
  234. is_default TINYINT DEFAULT 1,
  235. family_id BIGINT,
  236. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  237. INDEX idx_is_default (is_default)
  238. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  239. -- 媒体记录表(支持图片、视频、音频、文字)
  240. CREATE TABLE IF NOT EXISTS media_records (
  241. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  242. type ENUM('image', 'video', 'audio', 'text') NOT NULL,
  243. url VARCHAR(500),
  244. description TEXT,
  245. task_id BIGINT NOT NULL,
  246. creator_id BIGINT NOT NULL,
  247. original_filename VARCHAR(255),
  248. file_size BIGINT,
  249. content_type VARCHAR(100),
  250. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  251. INDEX idx_task_id (task_id),
  252. INDEX idx_creator_id (creator_id),
  253. INDEX idx_type (type),
  254. FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
  255. FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE
  256. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  257. -- =============================================
  258. -- 服务商(成长规划师)相关表
  259. -- =============================================
  260. -- 服务商表(统一管理 teacher/planner/activity_provider/product_supplier)
  261. CREATE TABLE IF NOT EXISTS guides (
  262. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  263. user_id BIGINT NOT NULL UNIQUE COMMENT '用户ID(唯一)',
  264. type VARCHAR(32) DEFAULT 'teacher' COMMENT '服务商类型: teacher/planner/activity_provider/product_supplier',
  265. teacher_no VARCHAR(20) COMMENT '服务商编号',
  266. title VARCHAR(50) COMMENT '职称/称号',
  267. specialty VARCHAR(200) COMMENT '专长领域',
  268. bio TEXT COMMENT '简介',
  269. experience_years TINYINT DEFAULT 0 COMMENT '从业年限',
  270. rating INT DEFAULT 500 COMMENT '评分(百分位,500=5.00)',
  271. total_appointments INT DEFAULT 0 COMMENT '总服务次数',
  272. level VARCHAR(20) NOT NULL DEFAULT 'junior' COMMENT '等级: junior-初级, intermediate-中级, senior-高级',
  273. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active-活跃, inactive-停用',
  274. service_count INT DEFAULT 0 COMMENT '当前服务家庭数',
  275. package_id BIGINT COMMENT '购买套餐ID',
  276. nickname VARCHAR(100) COMMENT '申请昵称',
  277. phone VARCHAR(20) COMMENT '联系电话',
  278. intro TEXT COMMENT '个人介绍',
  279. avatar VARCHAR(500) COMMENT '头像URL',
  280. commission_rate INT DEFAULT 1000 COMMENT '佣金比例(基点,1000=10%)',
  281. street_id BIGINT COMMENT '街道ID',
  282. province VARCHAR(50) COMMENT '省份',
  283. city VARCHAR(50) COMMENT '城市',
  284. district VARCHAR(50) COMMENT '区县',
  285. street VARCHAR(100) COMMENT '街道',
  286. approved_at DATETIME COMMENT '审核通过时间',
  287. verified_at DATETIME COMMENT '认证通过时间',
  288. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  289. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  290. INDEX idx_user_id (user_id),
  291. INDEX idx_level (level),
  292. INDEX idx_status (status),
  293. INDEX idx_type (type)
  294. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务商表(规划师/活动方/供应商)';
  295. -- 测评预约表
  296. CREATE TABLE IF NOT EXISTS assessment_appointments (
  297. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  298. user_id BIGINT COMMENT '用户ID',
  299. family_id BIGINT NOT NULL,
  300. child_id BIGINT COMMENT '孩子ID',
  301. teacher_id BIGINT COMMENT '教师ID',
  302. guide_id BIGINT COMMENT '规划师ID',
  303. package_id BIGINT COMMENT '套餐ID',
  304. appointment_date VARCHAR(20) COMMENT '预约日期 yyyy-MM-dd',
  305. appointment_time VARCHAR(20) COMMENT '预约时间 HH:mm',
  306. duration_minutes INT COMMENT '测评时长',
  307. status TINYINT DEFAULT 0 COMMENT '0=待确认,1=已确认,2=已完成,3=已取消,4=未到',
  308. appointment_type VARCHAR(20) DEFAULT 'initial' COMMENT '初测/复测/回访',
  309. notes TEXT COMMENT '备注',
  310. remark TEXT COMMENT '补充说明',
  311. contact_phone VARCHAR(20),
  312. meet_link VARCHAR(255) COMMENT '会议链接',
  313. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  314. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  315. INDEX idx_user_id (user_id),
  316. INDEX idx_teacher_id (teacher_id),
  317. INDEX idx_guide_id (guide_id),
  318. INDEX idx_family_id (family_id),
  319. INDEX idx_child_id (child_id),
  320. INDEX idx_status (status)
  321. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  322. -- DAN测评结果表
  323. CREATE TABLE IF NOT EXISTS dan_assessment_results (
  324. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  325. child_id BIGINT NOT NULL,
  326. family_member_id BIGINT COMMENT '家庭成员ID',
  327. family_member_name VARCHAR(50) COMMENT '成员姓名快照',
  328. family_member_birthday DATE COMMENT '成员出生日期快照',
  329. family_member_gender VARCHAR(10) COMMENT '成员性别快照',
  330. family_member_age INT COMMENT '成员年龄快照',
  331. teacher_id BIGINT NOT NULL,
  332. appointment_id BIGINT,
  333. attention_score INT COMMENT '注意力得分',
  334. focus_score INT COMMENT '专注力得分',
  335. memory_score INT COMMENT '记忆力得分',
  336. logic_score INT COMMENT '逻辑思维得分',
  337. perception_score INT COMMENT '感知得分',
  338. spatial_score INT COMMENT '空间思维得分',
  339. processing_speed_score INT COMMENT '加工速度得分',
  340. emotion_score INT COMMENT '情绪商数(EMI)',
  341. resilience_score INT COMMENT '心理韧性(EMI)',
  342. stress_coping_score INT COMMENT '压力应对(EMI)',
  343. self_awareness_score INT COMMENT '自我认知(EMI)',
  344. emotion_management_score INT COMMENT '情绪管理得分(EMI)',
  345. empathy_score INT COMMENT '同理心得分(EMI)',
  346. social_adaptability_score INT COMMENT '社会适应得分(EMI)',
  347. self_motivation_score INT COMMENT '自我激励得分(EMI)',
  348. overall_score INT COMMENT '综合得分',
  349. openness_score INT COMMENT '开放性(大五人格)',
  350. conscientiousness_score INT COMMENT '尽责性(大五人格)',
  351. extraversion_score INT COMMENT '外向性(大五人格)',
  352. agreeableness_score INT COMMENT '宜人性(大五人格)',
  353. neuroticism_score INT COMMENT '神经质(大五人格)',
  354. big_five_overall_score INT COMMENT '大五人格综合分',
  355. assessment_date DATE NOT NULL,
  356. duration_minutes INT COMMENT '测评时长',
  357. game_records JSON COMMENT '游戏记录详情',
  358. analysis_report TEXT COMMENT '分析报告',
  359. growth_suggestions TEXT COMMENT '成长建议',
  360. next_review_date DATE COMMENT '下次复测日期',
  361. status ENUM('draft', 'completed', 'archived') DEFAULT 'draft',
  362. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  363. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  364. -- 孩子快照字段(测评时保存的完整信息)
  365. child_name VARCHAR(50) COMMENT '孩子姓名快照',
  366. child_birthday DATE COMMENT '出生日期快照',
  367. child_gender VARCHAR(10) COMMENT '性别快照',
  368. child_age INT COMMENT '年龄快照',
  369. school VARCHAR(100) COMMENT '学校快照',
  370. grade VARCHAR(20) COMMENT '年级快照',
  371. grade_class VARCHAR(20) COMMENT '班级快照',
  372. height INT COMMENT '身高(CM)快照',
  373. weight INT COMMENT '体重(KG)快照',
  374. family_status VARCHAR(50) COMMENT '家庭状况快照',
  375. parent_degree VARCHAR(50) COMMENT '父母最高学历快照',
  376. nation VARCHAR(20) COMMENT '民族快照',
  377. province VARCHAR(50) COMMENT '省快照',
  378. city VARCHAR(50) COMMENT '市快照',
  379. district VARCHAR(50) COMMENT '区快照',
  380. address VARCHAR(200) COMMENT '详细地址快照',
  381. single_child VARCHAR(10) COMMENT '是否独生子女快照',
  382. school_score VARCHAR(20) COMMENT '在校成绩快照',
  383. urgent_name VARCHAR(50) COMMENT '紧急联系人姓名',
  384. urgent_phone VARCHAR(20) COMMENT '紧急联系人电话',
  385. -- 媒体字段
  386. pics TEXT COMMENT '图片IDs',
  387. videos TEXT COMMENT '视频IDs',
  388. audio VARCHAR(100) COMMENT '音频ID',
  389. audio_url VARCHAR(255) COMMENT '音频URL',
  390. -- 扩展描述字段
  391. process_desc TEXT COMMENT '过程描述',
  392. result_desc TEXT COMMENT '结果简评',
  393. source VARCHAR(20) DEFAULT 'planner_entry' COMMENT '报告来源: planner_entry/parent_upload/auto_fetch',
  394. dimension VARCHAR(10) DEFAULT 'mind' COMMENT '报告维度: mind(心-A2)/wisdom(智-B4)',
  395. report_file_id VARCHAR(100) COMMENT '上传文件媒资ID',
  396. draft_status VARCHAR(10) DEFAULT 'pending' COMMENT '草稿状态: pending(待确认)/confirmed(已确认)',
  397. INDEX idx_child_id (child_id),
  398. INDEX idx_teacher_id (teacher_id),
  399. INDEX idx_assessment_date (assessment_date)
  400. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DAN测评结果表';
  401. -- 成长规划表
  402. CREATE TABLE IF NOT EXISTS growth_plans (
  403. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  404. child_id BIGINT NOT NULL,
  405. teacher_id BIGINT NOT NULL,
  406. assessment_id BIGINT,
  407. plan_title VARCHAR(200) NOT NULL,
  408. plan_content TEXT NOT NULL COMMENT '规划内容',
  409. duration_months TINYINT COMMENT '规划周期(月)',
  410. status ENUM('draft', 'active', 'completed', 'expired') DEFAULT 'draft',
  411. start_date DATE,
  412. end_date DATE,
  413. review_count INT DEFAULT 0 COMMENT '已复盘次数',
  414. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  415. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  416. INDEX idx_child_id (child_id),
  417. INDEX idx_teacher_id (teacher_id),
  418. INDEX idx_status (status)
  419. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  420. -- =============================================
  421. -- 成长档案表
  422. -- =============================================
  423. CREATE TABLE IF NOT EXISTS growth_records (
  424. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  425. child_id BIGINT NOT NULL COMMENT '孩子ID',
  426. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  427. assessment_id BIGINT COMMENT '关联的测评结果ID',
  428. record_title VARCHAR(200) COMMENT '档案标题',
  429. child_age INT COMMENT '孩子当时年龄(月)',
  430. height VARCHAR(20) COMMENT '身高',
  431. weight VARCHAR(20) COMMENT '体重',
  432. assessment_summary TEXT COMMENT '测评摘要',
  433. overall_score INT COMMENT '综合得分',
  434. growth_suggestions TEXT COMMENT '成长建议',
  435. task_recommendations TEXT COMMENT '任务推荐(JSON)',
  436. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/completed',
  437. external_sync TINYINT DEFAULT 0 COMMENT '是否来自外部系统同步',
  438. external_source VARCHAR(100) COMMENT '外部系统来源',
  439. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  440. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  441. INDEX idx_child_id (child_id),
  442. INDEX idx_parent_id (parent_id),
  443. INDEX idx_status (status)
  444. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  445. -- =============================================
  446. -- 数据库迁移(新增字段和表)- 通过Java代码处理
  447. -- =============================================
  448. -- 注意:ALTER TABLE语句已移到 DatabaseInitializer.java 中执行
  449. -- 避免重复执行导致的错误
  450. -- 3. 家长心愿单表(新增)
  451. CREATE TABLE IF NOT EXISTS reward_wishlists (
  452. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  453. user_id BIGINT NOT NULL COMMENT '创建者用户ID',
  454. family_id BIGINT NOT NULL COMMENT '家庭ID',
  455. title VARCHAR(100) NOT NULL COMMENT '心愿名称',
  456. description TEXT COMMENT '心愿描述',
  457. points_required INT NOT NULL COMMENT '所需积分',
  458. category VARCHAR(32) COMMENT '分类',
  459. image_url VARCHAR(255) COMMENT '图片链接',
  460. status ENUM('available', 'pending', 'exchanged', 'rejected') DEFAULT 'available' COMMENT '状态',
  461. exchange_approved TINYINT COMMENT '是否审批通过',
  462. exchanged_at DATETIME COMMENT '兑换时间',
  463. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  464. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  465. INDEX idx_user_id (user_id),
  466. INDEX idx_family_id (family_id),
  467. INDEX idx_status (status)
  468. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  469. -- 4. 更新任务状态枚举(如果需要支持更多状态)
  470. -- ALTER TABLE tasks MODIFY COLUMN status ENUM('pending', 'completed', 'overdue', 'cancelled', 'parent_pending', 'parent_completed') DEFAULT 'pending';
  471. -- ===================== 任务模板套餐功能 =====================
  472. -- 成长规划师-家庭关系表
  473. CREATE TABLE IF NOT EXISTS guide_families (
  474. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  475. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  476. family_id BIGINT NOT NULL COMMENT '家庭ID',
  477. service_type VARCHAR(20) DEFAULT 'consulting' COMMENT '服务类型: monthly/yearly/consulting',
  478. service_price INT DEFAULT 0 COMMENT '服务价格(分)',
  479. status VARCHAR(20) DEFAULT 'binding' COMMENT '状态: binding/paused/cancelled',
  480. bound_at DATETIME COMMENT '绑定时间',
  481. expire_at DATETIME COMMENT '服务到期时间',
  482. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  483. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  484. UNIQUE KEY uk_guide_family (guide_id, family_id),
  485. INDEX idx_guide_id (guide_id),
  486. INDEX idx_family_id (family_id)
  487. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  488. -- 任务模板套餐
  489. CREATE TABLE IF NOT EXISTS task_template_packages (
  490. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  491. creator_id BIGINT NOT NULL COMMENT '创建者成长规划师ID',
  492. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  493. description TEXT COMMENT '详细介绍',
  494. cycle_days INT NOT NULL COMMENT '周期天数',
  495. category VARCHAR(50) COMMENT '分类',
  496. tags JSON COMMENT '标签',
  497. price INT DEFAULT 0 COMMENT '售价(分)',
  498. platform_fee INT DEFAULT 0 COMMENT '平台服务费(基点)',
  499. is_public TINYINT DEFAULT 0 COMMENT '是否公开',
  500. share_code VARCHAR(50) UNIQUE COMMENT '分享码',
  501. cover_image VARCHAR(500) COMMENT '封面图',
  502. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态',
  503. reviewer_id BIGINT COMMENT '审核人',
  504. reviewed_at DATETIME COMMENT '审核时间',
  505. reject_reason TEXT COMMENT '拒绝原因',
  506. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  507. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  508. INDEX idx_creator_id (creator_id),
  509. INDEX idx_status (status),
  510. INDEX idx_is_public (is_public)
  511. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  512. -- 套餐内任务项
  513. CREATE TABLE IF NOT EXISTS task_template_items (
  514. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  515. package_id BIGINT NOT NULL COMMENT '所属套餐ID',
  516. task_name VARCHAR(100) NOT NULL,
  517. description TEXT,
  518. points INT DEFAULT 0,
  519. frequency VARCHAR(20) DEFAULT 'daily',
  520. duration INT COMMENT '预计时长(分钟)',
  521. is_required TINYINT DEFAULT 0,
  522. sort_order INT DEFAULT 0,
  523. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  524. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  525. INDEX idx_package_id (package_id)
  526. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  527. -- 套餐应用实例
  528. CREATE TABLE IF NOT EXISTS task_plan_instances (
  529. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  530. package_id BIGINT NOT NULL,
  531. family_id BIGINT NOT NULL,
  532. child_id BIGINT NOT NULL,
  533. name VARCHAR(100) NOT NULL,
  534. start_date DATE NOT NULL,
  535. end_date DATE NOT NULL,
  536. status VARCHAR(20) DEFAULT 'active',
  537. total_days INT,
  538. completed_days INT DEFAULT 0,
  539. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  540. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  541. INDEX idx_family_id (family_id),
  542. INDEX idx_child_id (child_id),
  543. INDEX idx_status (status)
  544. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  545. -- 实例任务项
  546. CREATE TABLE IF NOT EXISTS task_plan_items (
  547. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  548. instance_id BIGINT NOT NULL,
  549. template_item_id BIGINT,
  550. task_name VARCHAR(100) NOT NULL,
  551. description TEXT,
  552. points INT DEFAULT 0,
  553. frequency VARCHAR(20) DEFAULT 'daily',
  554. duration INT,
  555. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  556. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  557. INDEX idx_instance_id (instance_id)
  558. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  559. -- 套餐购买订单
  560. CREATE TABLE IF NOT EXISTS package_orders (
  561. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  562. order_no VARCHAR(32) UNIQUE NOT NULL,
  563. user_id BIGINT NOT NULL COMMENT '购买者用户ID',
  564. family_id BIGINT NOT NULL COMMENT '家庭ID',
  565. package_id BIGINT NOT NULL COMMENT '套餐ID',
  566. package_name VARCHAR(100) COMMENT '套餐名称',
  567. price INT NOT NULL COMMENT '支付金额(分)',
  568. platform_fee INT DEFAULT 0 COMMENT '平台服务费(分)',
  569. user_coupon_id BIGINT COMMENT '使用的用户优惠券ID',
  570. guide_id BIGINT COMMENT '成长规划师ID',
  571. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/cancelled/refunded',
  572. pay_method VARCHAR(20) COMMENT '支付方式',
  573. transaction_id VARCHAR(64) COMMENT '微信支付订单号',
  574. paid_at DATETIME COMMENT '支付时间',
  575. notify_data TEXT COMMENT '支付回调数据',
  576. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  577. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  578. INDEX idx_user_id (user_id),
  579. INDEX idx_family_id (family_id),
  580. INDEX idx_package_id (package_id),
  581. INDEX idx_status (status)
  582. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  583. -- 用户表增加成长规划师相关字段 - 已移到 DatabaseInitializer.java 执行
  584. -- ALTER TABLE users ADD COLUMN teacher_no VARCHAR(50) COMMENT '成长规划师证书号';
  585. -- ALTER TABLE users ADD COLUMN teacher_photo VARCHAR(500) COMMENT '成长规划师照片';
  586. -- ALTER TABLE users ADD COLUMN certificate_image VARCHAR(500) COMMENT '成长规划师证书照片';
  587. -- ALTER TABLE users ADD COLUMN teacher_status VARCHAR(20) DEFAULT 'pending' COMMENT '成长规划师审核状态: pending/approved/rejected';
  588. -- ALTER TABLE users ADD INDEX idx_teacher_status (teacher_status);
  589. -- 成长规划师咨询消息表
  590. CREATE TABLE IF NOT EXISTS teacher_messages (
  591. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  592. family_id BIGINT NOT NULL COMMENT '家庭ID',
  593. parent_id BIGINT NOT NULL COMMENT '家长用户ID',
  594. teacher_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  595. content TEXT NOT NULL COMMENT '消息内容',
  596. reply_content TEXT COMMENT '回复内容',
  597. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending/replied',
  598. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  599. replied_at DATETIME COMMENT '回复时间',
  600. INDEX idx_family_id (family_id),
  601. INDEX idx_teacher_id (teacher_id),
  602. INDEX idx_parent_id (parent_id),
  603. INDEX idx_status (status)
  604. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  605. -- 游戏记录表(专注训练模块)
  606. CREATE TABLE IF NOT EXISTS game_records (
  607. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  608. child_id BIGINT NOT NULL COMMENT '孩子ID',
  609. game_code VARCHAR(20) NOT NULL COMMENT '游戏代码',
  610. score INT DEFAULT 0 COMMENT '得分(0-100)',
  611. completion_time INT COMMENT '完成用时(秒)',
  612. difficulty VARCHAR(20) DEFAULT 'medium' COMMENT '难度(easy/medium/hard)',
  613. points_earned INT DEFAULT 0 COMMENT '获得积分',
  614. played_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '游玩时间',
  615. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  616. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  617. INDEX idx_child_id (child_id),
  618. INDEX idx_game_code (game_code),
  619. INDEX idx_played_at (played_at)
  620. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  621. -- 勋章定义表
  622. CREATE TABLE IF NOT EXISTS badge (
  623. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  624. badge_id VARCHAR(50) UNIQUE NOT NULL COMMENT '勋章唯一标识',
  625. name VARCHAR(100) NOT NULL COMMENT '勋章名称',
  626. description TEXT COMMENT '勋章描述',
  627. icon VARCHAR(255) COMMENT '勋章图标',
  628. category VARCHAR(20) COMMENT '分类(学习/运动/家务/阅读/打卡/综合)',
  629. level VARCHAR(20) COMMENT '等级(铜牌/银牌/金牌/钻石)',
  630. rarity VARCHAR(20) COMMENT '稀有度(普通/稀有/史诗/传说)',
  631. trigger_type VARCHAR(20) COMMENT '触发类型(task_count/streak_days/points_total/reward_count/custom)',
  632. threshold INT DEFAULT 0 COMMENT '阈值',
  633. need_approval TINYINT DEFAULT 0 COMMENT '是否需要审批',
  634. expire_days INT DEFAULT -1 COMMENT '有效期天数(-1永久)',
  635. sort_order INT DEFAULT 0 COMMENT '排序',
  636. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  637. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  638. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  639. INDEX idx_category (category),
  640. INDEX idx_is_active (is_active)
  641. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  642. -- 儿童勋章关联表
  643. CREATE TABLE IF NOT EXISTS child_badge (
  644. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  645. child_id BIGINT NOT NULL COMMENT '孩子ID',
  646. badge_id BIGINT NOT NULL COMMENT '勋章ID',
  647. earned_at DATETIME COMMENT '获得时间',
  648. expire_at DATETIME COMMENT '过期时间',
  649. status TINYINT DEFAULT 1 COMMENT '状态:1有效 0过期 -1撤销',
  650. is_favorite TINYINT DEFAULT 0 COMMENT '是否收藏',
  651. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  652. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  653. UNIQUE KEY uk_child_badge (child_id, badge_id),
  654. INDEX idx_child_id (child_id),
  655. INDEX idx_badge_id (badge_id),
  656. INDEX idx_status (status)
  657. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  658. -- =============================================
  659. -- 以下表从 DatabaseInitializer.java 提取
  660. -- 管理后台表
  661. -- =============================================
  662. -- 管理员表
  663. CREATE TABLE IF NOT EXISTS admins (
  664. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  665. username VARCHAR(50) NOT NULL COMMENT '用户名',
  666. password VARCHAR(128) NOT NULL COMMENT '密码(MD5加密)',
  667. nickname VARCHAR(50) COMMENT '昵称',
  668. real_name VARCHAR(50) COMMENT '真实姓名',
  669. phone VARCHAR(11) COMMENT '手机号',
  670. email VARCHAR(100) COMMENT '邮箱',
  671. role VARCHAR(20) DEFAULT 'admin' COMMENT '角色: admin/teacher',
  672. status TINYINT DEFAULT 1 COMMENT '状态:1启用0禁用',
  673. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  674. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  675. INDEX idx_phone (phone),
  676. INDEX idx_username (username)
  677. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员表';
  678. -- 验证码表
  679. CREATE TABLE IF NOT EXISTS verification_codes (
  680. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  681. phone VARCHAR(11) NOT NULL COMMENT '手机号',
  682. code VARCHAR(6) NOT NULL COMMENT '验证码',
  683. type VARCHAR(20) NOT NULL COMMENT '验证码类型',
  684. expires_in INT DEFAULT 300 COMMENT '过期时间(秒)',
  685. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  686. expires_at DATETIME NOT NULL COMMENT '过期时间',
  687. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  688. INDEX idx_phone_type (phone, type),
  689. INDEX idx_expires_at (expires_at)
  690. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='验证码表';
  691. -- 管理后台任务模板表
  692. CREATE TABLE IF NOT EXISTS admin_task_templates (
  693. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  694. title VARCHAR(200) NOT NULL COMMENT '模板标题',
  695. description TEXT COMMENT '模板描述',
  696. points INT DEFAULT 10 COMMENT '默认积分',
  697. category VARCHAR(32) COMMENT '任务分类',
  698. need_review TINYINT DEFAULT 0 COMMENT '是否需要审核:0否1是',
  699. review_by_category TINYINT DEFAULT 0 COMMENT '是否按分类审核:0否1是',
  700. recommended_age INT COMMENT '推荐年龄',
  701. difficulty ENUM('easy', 'medium', 'hard') DEFAULT 'medium' COMMENT '难度: easy/medium/hard',
  702. teacher_id BIGINT COMMENT '成长规划师ID',
  703. complete_types VARCHAR(100) COMMENT '完成方式JSON',
  704. duration INT COMMENT '预计完成时长(分钟)',
  705. review_type VARCHAR(20) COMMENT '审核人类型: creator/parent/teacher/ai',
  706. task_type VARCHAR(20) COMMENT '任务性质: onetime/recurring',
  707. frequency VARCHAR(20) COMMENT '频率: daily/weekly/monthly',
  708. max_frequency INT COMMENT '周期内最多完成次数',
  709. is_active TINYINT DEFAULT 1 COMMENT '是否启用:0禁用1启用',
  710. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  711. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  712. INDEX idx_category (category),
  713. INDEX idx_difficulty (difficulty),
  714. INDEX idx_is_active (is_active)
  715. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理后台任务模板表';
  716. -- =============================================
  717. -- 测评模块表
  718. -- =============================================
  719. -- 测评资料表
  720. -- 数学闯关 - 孩子当前等级
  721. CREATE TABLE IF NOT EXISTS math_child_level (
  722. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  723. child_id BIGINT NOT NULL UNIQUE,
  724. current_level TINYINT NOT NULL DEFAULT 1 COMMENT '1=一位数加减,2=两位数加减,3=一位数四则,4=两位数四则',
  725. total_passed INT DEFAULT 0 COMMENT '累计通关次数',
  726. best_time_ms BIGINT DEFAULT NULL COMMENT '最佳用时(毫秒)',
  727. best_accuracy INT DEFAULT NULL COMMENT '最佳正确率(%)',
  728. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  729. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  730. INDEX idx_child_id (child_id)
  731. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  732. -- 数学闯关 - 通关日志
  733. CREATE TABLE IF NOT EXISTS math_quiz_logs (
  734. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  735. child_id BIGINT NOT NULL,
  736. level TINYINT NOT NULL COMMENT '闯关时等级',
  737. target_n INT NOT NULL COMMENT '目标连续答对数',
  738. correct_count INT NOT NULL COMMENT '实际连续答对数',
  739. total_attempts INT NOT NULL COMMENT '总答题数',
  740. total_time_ms BIGINT NOT NULL COMMENT '总用时(毫秒)',
  741. accuracy INT NOT NULL COMMENT '正确率(%)',
  742. passed TINYINT(1) DEFAULT 0 COMMENT '是否通关',
  743. exprs TEXT COMMENT '本轮表达式列表(JSON)',
  744. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  745. INDEX idx_child_id (child_id),
  746. INDEX idx_level (level)
  747. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  748. CREATE TABLE IF NOT EXISTS assessment_materials (
  749. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  750. title VARCHAR(100) NOT NULL COMMENT '资料标题',
  751. content TEXT COMMENT '测评介绍内容',
  752. cover_image VARCHAR(255) COMMENT '封面图片',
  753. status VARCHAR(20) DEFAULT 'active' COMMENT '状态:active/inactive',
  754. created_at DATETIME COMMENT '创建时间',
  755. updated_at DATETIME COMMENT '更新时间',
  756. INDEX idx_status (status)
  757. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评资料表';
  758. -- 积分配置表
  759. CREATE TABLE IF NOT EXISTS assessment_points_config (
  760. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  761. points_value INT DEFAULT 100 COMMENT '完成测评获得积分',
  762. points_value_yuan INT DEFAULT 1 COMMENT '1积分等于多少分(原元→现分)',
  763. is_active TINYINT DEFAULT 1 COMMENT '是否启用',
  764. created_at DATETIME COMMENT '创建时间',
  765. updated_at DATETIME COMMENT '更新时间'
  766. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分配置表';
  767. -- 家庭测评配置表
  768. CREATE TABLE IF NOT EXISTS family_assessment_config (
  769. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  770. family_id BIGINT NOT NULL COMMENT '家庭ID',
  771. material_id BIGINT COMMENT '测评资料ID',
  772. remind_months INT DEFAULT 12 COMMENT '提醒周期(月)',
  773. last_remind_at DATETIME COMMENT '上次提醒时间',
  774. next_remind_at DATETIME COMMENT '下次提醒时间',
  775. is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1启用0关闭',
  776. created_by BIGINT COMMENT '创建人(规划师ID)',
  777. created_at DATETIME COMMENT '创建时间',
  778. updated_at DATETIME COMMENT '更新时间',
  779. UNIQUE KEY uk_family (family_id),
  780. INDEX idx_next_remind (next_remind_at),
  781. INDEX idx_enabled (is_enabled)
  782. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭测评配置表';
  783. -- 测评记录表
  784. CREATE TABLE IF NOT EXISTS assessment_records (
  785. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  786. family_id BIGINT COMMENT '家庭ID',
  787. child_id BIGINT COMMENT '孩子ID',
  788. material_id BIGINT COMMENT '测评资料ID',
  789. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态:pending待完成/completed已完成',
  790. completed_at DATETIME COMMENT '完成时间',
  791. created_at DATETIME COMMENT '创建时间',
  792. INDEX idx_family (family_id),
  793. INDEX idx_status (status)
  794. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评记录表';
  795. -- 评估订单表(测评订单)
  796. CREATE TABLE IF NOT EXISTS assessment_orders (
  797. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  798. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  799. family_id BIGINT NOT NULL COMMENT '家庭ID',
  800. user_id BIGINT NOT NULL COMMENT '用户ID',
  801. child_id BIGINT COMMENT '孩子ID',
  802. guide_id BIGINT NOT NULL COMMENT '成长规划师ID',
  803. package_id BIGINT NOT NULL COMMENT '套餐ID',
  804. appointment_id BIGINT COMMENT '关联预约ID',
  805. guide_name VARCHAR(50) COMMENT '规划师名称',
  806. package_name VARCHAR(100) COMMENT '套餐名称',
  807. total_price BIGINT DEFAULT 0 COMMENT '总价(分)',
  808. discount_amount BIGINT DEFAULT 0 COMMENT '优惠金额(分)',
  809. actual_price BIGINT DEFAULT 0 COMMENT '实付金额(分)',
  810. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  811. pay_time VARCHAR(50) COMMENT '支付时间',
  812. pay_type VARCHAR(20) COMMENT '支付方式',
  813. transaction_id VARCHAR(64) COMMENT '交易流水号',
  814. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  815. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  816. INDEX idx_family (family_id),
  817. INDEX idx_guide (guide_id),
  818. INDEX idx_status (status)
  819. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评估订单表';
  820. -- =============================================
  821. -- 成长规划师相关表
  822. -- =============================================
  823. -- 成长规划师申请表
  824. CREATE TABLE IF NOT EXISTS guide_applications (
  825. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  826. user_id BIGINT NOT NULL COMMENT '申请人用户ID',
  827. type VARCHAR(20) NOT NULL DEFAULT 'new_apply' COMMENT '申请类型: new_apply-新注册, upgrade-升级',
  828. target_level VARCHAR(20) NOT NULL COMMENT '目标等级: junior-初级, intermediate-中级, senior-高级',
  829. current_level VARCHAR(20) DEFAULT NULL COMMENT '当前等级(升级时填写)',
  830. package_id BIGINT COMMENT '申请的套餐ID',
  831. payment_proof VARCHAR(500) COMMENT '付款凭证URL',
  832. payment_amount INT COMMENT '付款金额(分)',
  833. address VARCHAR(500) COMMENT '地址',
  834. bank_card VARCHAR(50) COMMENT '银行卡号',
  835. bank_name VARCHAR(100) COMMENT '开户行',
  836. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待审核, approved-已通过, rejected-已拒绝',
  837. reject_reason TEXT COMMENT '拒绝原因',
  838. reviewed_at DATETIME COMMENT '审核时间',
  839. reviewed_by BIGINT COMMENT '审核人ID',
  840. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  841. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  842. INDEX idx_user_id (user_id),
  843. INDEX idx_status (status),
  844. INDEX idx_type (type)
  845. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请表';
  846. -- 成长规划师申请过程记录表
  847. CREATE TABLE IF NOT EXISTS guide_application_records (
  848. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  849. application_id BIGINT NOT NULL COMMENT '关联申请ID',
  850. user_id BIGINT NOT NULL COMMENT '操作人用户ID',
  851. action VARCHAR(50) NOT NULL COMMENT '操作: submit/approve/reject/withdraw/resubmit',
  852. from_status VARCHAR(20) COMMENT '操作前状态',
  853. to_status VARCHAR(20) NOT NULL COMMENT '操作后状态',
  854. remark TEXT COMMENT '备注/原因',
  855. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  856. INDEX idx_application_id (application_id),
  857. INDEX idx_user_id (user_id),
  858. INDEX idx_action (action)
  859. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请过程记录表';
  860. -- =============================================
  861. -- 小游戏表
  862. -- =============================================
  863. -- 小游戏表
  864. CREATE TABLE IF NOT EXISTS mini_games (
  865. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  866. game_code VARCHAR(20) NOT NULL UNIQUE COMMENT '游戏代码',
  867. game_name VARCHAR(50) NOT NULL COMMENT '游戏名称',
  868. description TEXT COMMENT '游戏描述',
  869. icon VARCHAR(50) COMMENT '图标emoji',
  870. default_duration INT DEFAULT 5 COMMENT '默认时长(分钟)',
  871. default_points INT DEFAULT 5 COMMENT '默认奖励积分',
  872. game_url VARCHAR(255) COMMENT '游戏H5页面URL',
  873. sort_order INT DEFAULT 0 COMMENT '排序',
  874. status TINYINT DEFAULT 1 COMMENT '状态:0禁用1启用',
  875. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  876. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  877. INDEX idx_game_code (game_code),
  878. INDEX idx_status (status)
  879. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小游戏表';
  880. -- =============================================
  881. -- 地址维度表
  882. -- =============================================
  883. -- 街道地址维度表
  884. CREATE TABLE IF NOT EXISTS streets (
  885. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  886. province VARCHAR(50) COMMENT '省份',
  887. province_code VARCHAR(20) COMMENT '省份编码',
  888. city VARCHAR(50) COMMENT '城市',
  889. city_code VARCHAR(20) COMMENT '城市编码',
  890. district VARCHAR(50) COMMENT '区县',
  891. district_code VARCHAR(20) COMMENT '区县编码',
  892. street VARCHAR(100) COMMENT '街道',
  893. street_code VARCHAR(20) COMMENT '街道编码',
  894. full_name VARCHAR(200) COMMENT '完整地址',
  895. level INT COMMENT '层级:1省2市3区4街道',
  896. parent_id BIGINT COMMENT '父级ID',
  897. sort_order INT DEFAULT 0 COMMENT '排序',
  898. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  899. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  900. INDEX idx_level (level),
  901. INDEX idx_parent_id (parent_id),
  902. INDEX idx_street_code (street_code),
  903. INDEX idx_full_name (full_name(50))
  904. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='街道地址维度表';
  905. -- =============================================
  906. -- 系统日志表
  907. -- =============================================
  908. -- 用户操作日志表
  909. CREATE TABLE IF NOT EXISTS user_operation_logs (
  910. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  911. user_id BIGINT COMMENT '用户ID',
  912. nickname VARCHAR(50) COMMENT '用户昵称',
  913. operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: login/logout/create/update/delete/query等',
  914. description TEXT COMMENT '操作描述',
  915. request_path VARCHAR(200) COMMENT '请求路径',
  916. request_method VARCHAR(10) COMMENT '请求方法',
  917. request_params TEXT COMMENT '请求参数(脱敏)',
  918. response_status INT COMMENT '响应状态码',
  919. client_ip VARCHAR(50) COMMENT '客户端IP',
  920. user_agent VARCHAR(500) COMMENT 'User-Agent',
  921. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  922. INDEX idx_user_id (user_id),
  923. INDEX idx_operation_type (operation_type),
  924. INDEX idx_created_at (created_at)
  925. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户操作日志表';
  926. -- =============================================
  927. -- 邀请与心愿表
  928. -- =============================================
  929. -- 邀请卡片表
  930. CREATE TABLE IF NOT EXISTS invite_card (
  931. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  932. type VARCHAR(20) NOT NULL COMMENT '类型: child/family/guide',
  933. code VARCHAR(64) NOT NULL UNIQUE COMMENT '邀请码',
  934. ref_id BIGINT NOT NULL COMMENT '关联ID(childId/familyId)',
  935. creator_id BIGINT NOT NULL COMMENT '创建人',
  936. expires_at DATETIME NOT NULL COMMENT '过期时间',
  937. used TINYINT DEFAULT 0 COMMENT '是否已使用:0否1是',
  938. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  939. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  940. INDEX idx_code (code),
  941. INDEX idx_ref_type (ref_id, type)
  942. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请卡片表';
  943. -- 心愿单表
  944. CREATE TABLE IF NOT EXISTS wishes (
  945. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  946. family_id BIGINT COMMENT '家庭ID',
  947. child_id BIGINT COMMENT '目标孩子ID',
  948. created_by BIGINT COMMENT '创建者用户ID',
  949. creator_type VARCHAR(20) COMMENT '创建者类型: child/parent',
  950. title VARCHAR(200) NOT NULL COMMENT '心愿标题',
  951. description TEXT COMMENT '心愿描述',
  952. category VARCHAR(32) COMMENT '心愿分类',
  953. points_required INT COMMENT '所需积分',
  954. points_set_by BIGINT COMMENT '定价者ID',
  955. points_set_at DATETIME COMMENT '定价时间',
  956. status VARCHAR(32) DEFAULT 'active' COMMENT '状态: draft/active/pending_exchange/approved/exchanging/fulfilled/cancelled/rejected',
  957. exchange_requested_at DATETIME COMMENT '申请兑换时间',
  958. exchange_approved_by BIGINT COMMENT '批准者ID',
  959. exchange_approved_at DATETIME COMMENT '批准时间',
  960. points_deducted_at DATETIME COMMENT '扣积分时间',
  961. fulfilled_by BIGINT COMMENT '兑现者ID',
  962. fulfilled_at DATETIME COMMENT '兑现时间',
  963. child_confirmed_at DATETIME COMMENT '孩子确认收货时间',
  964. rejected_by BIGINT COMMENT '拒绝者ID',
  965. rejected_at DATETIME COMMENT '拒绝时间',
  966. reject_reason TEXT COMMENT '拒绝原因',
  967. reject_count INT DEFAULT 0 COMMENT '被拒绝次数',
  968. cancelled_by BIGINT COMMENT '取消者ID',
  969. cancelled_at DATETIME COMMENT '取消时间',
  970. cancel_reason TEXT COMMENT '取消原因',
  971. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  972. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  973. INDEX idx_family_id (family_id),
  974. INDEX idx_child_id (child_id),
  975. INDEX idx_status (status)
  976. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='心愿单表';
  977. -- =============================================
  978. -- 商品与订单表
  979. -- =============================================
  980. -- 商品表
  981. CREATE TABLE IF NOT EXISTS products (
  982. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  983. name VARCHAR(200) NOT NULL COMMENT '商品名称',
  984. description TEXT COMMENT '商品描述',
  985. intro TEXT COMMENT '详细介绍',
  986. cover_image VARCHAR(500) COMMENT '封面图片',
  987. images TEXT COMMENT '多张图片JSON',
  988. price INT NOT NULL DEFAULT 0 COMMENT '价格(分)',
  989. stock INT NOT NULL DEFAULT 0 COMMENT '库存',
  990. sales_count INT NOT NULL DEFAULT 0 COMMENT '销量',
  991. product_type VARCHAR(32) NOT NULL COMMENT '商品类型: activity/course/physical/digital/service',
  992. vendor_id BIGINT COMMENT '供应商ID',
  993. vendor_name VARCHAR(100) COMMENT '供应商名称',
  994. status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft/pending/approved/rejected/on_shelf/off_shelf',
  995. reject_reason TEXT COMMENT '审核拒绝原因',
  996. member_price INT COMMENT '会员价(分)',
  997. member_eligible VARCHAR(32) DEFAULT 'none' COMMENT '会员资格: all/budget/none',
  998. domain VARCHAR(32) COMMENT '五维领域: action/mind/body/wisdom/wealth',
  999. dimension_weights TEXT COMMENT '五维能量权重JSON',
  1000. profit_rate INT DEFAULT 0 COMMENT '平台利润率(千分比)',
  1001. delivery_method TINYINT DEFAULT 1 COMMENT '配送方式: 1=快递 2=自提 3=两者皆可',
  1002. category_id BIGINT COMMENT '商品类目ID',
  1003. distribution_system_id BIGINT COMMENT '销售体系ID',
  1004. external_source VARCHAR(64) COMMENT '外部来源系统',
  1005. external_id VARCHAR(128) COMMENT '外部来源ID',
  1006. external_data TEXT COMMENT '外部来源数据JSON',
  1007. has_sku TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用多SKU:0统一价 1多规格',
  1008. sku_spec_names JSON DEFAULT NULL COMMENT '规格维度名:如["颜色","尺寸"]',
  1009. delivery_methods TINYINT(1) DEFAULT 3 COMMENT '配送方式支持:1仅快递 2仅自提 3都支持',
  1010. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1011. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1012. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
  1013. -- 商品订单表
  1014. CREATE TABLE IF NOT EXISTS product_orders (
  1015. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1016. order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单编号',
  1017. product_id BIGINT NOT NULL COMMENT '商品ID',
  1018. product_name VARCHAR(200) COMMENT '商品名称',
  1019. product_type VARCHAR(32) COMMENT '商品类型',
  1020. buyer_id BIGINT NOT NULL COMMENT '购买者ID',
  1021. family_id BIGINT COMMENT '家庭ID',
  1022. quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
  1023. unit_price INT NOT NULL COMMENT '单价(分)',
  1024. total_amount INT NOT NULL COMMENT '总金额(分)',
  1025. status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/paid/completed/cancelled/refunded',
  1026. payment_method VARCHAR(32) COMMENT '支付方式: wechat/points/membership',
  1027. remark TEXT COMMENT '备注',
  1028. paid_at DATETIME COMMENT '支付时间',
  1029. supply_system_id BIGINT COMMENT '所属供应商体系ID',
  1030. supplier_id BIGINT COMMENT '收款供应商用户ID',
  1031. supply_commission INT COMMENT '销售佣金(分)',
  1032. points_used INT DEFAULT 0 COMMENT '使用的积分数量',
  1033. points_cost INT DEFAULT 0 COMMENT '积分抵扣金额(分)',
  1034. money_amount INT DEFAULT 0 COMMENT '现金支付金额(分)',
  1035. consignee_id BIGINT COMMENT '收货人ID',
  1036. purchase_info TEXT COMMENT '购买信息JSON: {id_card, hand_signature, ...}',
  1037. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1038. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1039. INDEX idx_user_id (user_id),
  1040. INDEX idx_family_id (family_id),
  1041. INDEX idx_product_id (product_id),
  1042. INDEX idx_status (status),
  1043. INDEX idx_supply_system_id (supply_system_id)
  1044. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单表';
  1045. -- =============================================
  1046. -- 系统配置与内容表
  1047. -- =============================================
  1048. -- 系统配置表
  1049. CREATE TABLE IF NOT EXISTS sys_config (
  1050. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1051. config_key VARCHAR(64) NOT NULL UNIQUE COMMENT '配置键',
  1052. config_value TEXT COMMENT '配置值',
  1053. description TEXT COMMENT '配置说明',
  1054. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1055. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  1056. -- 内容区块配置表
  1057. CREATE TABLE IF NOT EXISTS content_sections (
  1058. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1059. page_key VARCHAR(50) NOT NULL COMMENT '页面标识',
  1060. section_key VARCHAR(50) NOT NULL COMMENT '区块标识',
  1061. title VARCHAR(100) COMMENT '区块标题',
  1062. allowed_roles VARCHAR(255) DEFAULT '["anonymous"]' COMMENT '允许查看的角色JSON数组',
  1063. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  1064. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/inactive',
  1065. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1066. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1067. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='内容区块配置表';
  1068. -- 文章分类表
  1069. CREATE TABLE IF NOT EXISTS article_categories (
  1070. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1071. name VARCHAR(50) NOT NULL COMMENT '分类名',
  1072. icon VARCHAR(20) DEFAULT '' COMMENT '图标emoji',
  1073. color VARCHAR(20) DEFAULT '#5B9BD5' COMMENT '标识色',
  1074. sort_order INT DEFAULT 0 COMMENT '排序',
  1075. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用'
  1076. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章分类表';
  1077. -- 文章表
  1078. CREATE TABLE IF NOT EXISTS articles (
  1079. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键 ID',
  1080. category_id BIGINT DEFAULT 0 COMMENT '所属分类 ID',
  1081. title VARCHAR(200) NOT NULL COMMENT '标题',
  1082. summary TEXT DEFAULT '' COMMENT '摘要',
  1083. cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图 URL',
  1084. content LONGTEXT COMMENT '富文本内容',
  1085. tags VARCHAR(200) DEFAULT '' COMMENT '标签 JSON 数组',
  1086. author VARCHAR(100) DEFAULT '浠艾福' COMMENT '作者',
  1087. read_time INT DEFAULT 0 COMMENT '预计阅读分钟数',
  1088. article_type VARCHAR(20) DEFAULT 'normal' COMMENT '文章类型:normal(普通)/premium(优质)/original(原创)',
  1089. content_type VARCHAR(20) DEFAULT 'text' COMMENT '内容格式:text/html/markdown',
  1090. difficulty_level INT DEFAULT 0 COMMENT '难度等级:1-5',
  1091. word_count INT DEFAULT 0 COMMENT '文章字数',
  1092. dimension_ids VARCHAR(100) DEFAULT '' COMMENT '关联维度IDs JSON',
  1093. related_dimensions VARCHAR(100) DEFAULT '' COMMENT '关联五维 JSON 数组',
  1094. dimension_weights TEXT COMMENT '五维能量权重 JSON',
  1095. visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限:public/login/private',
  1096. visible_to TEXT COMMENT '私密指定人群 JSON',
  1097. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态:draft/published/archived',
  1098. is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1 精选/0 普通',
  1099. published_at DATETIME DEFAULT NULL COMMENT '发布时间',
  1100. view_count INT DEFAULT 0 COMMENT '浏览次数',
  1101. created_by BIGINT DEFAULT 0 COMMENT '发布人 adminID',
  1102. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1103. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1104. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
  1105. -- Article audit fields (for user-generated content)
  1106. ALTER TABLE articles
  1107. ADD COLUMN author_type VARCHAR(20) DEFAULT 'admin' COMMENT '作者类型:admin/parent/child' AFTER created_by,
  1108. ADD COLUMN audit_status VARCHAR(20) DEFAULT 'approved' COMMENT '审核状态:approved/pending/rejected' AFTER status,
  1109. ADD COLUMN audit_reason TEXT COMMENT '驳回原因' AFTER audit_status,
  1110. ADD COLUMN auditor_id BIGINT DEFAULT 0 COMMENT '审核人 ID' AFTER audit_reason,
  1111. ADD COLUMN audited_at DATETIME COMMENT '审核时间' AFTER auditor_id;
  1112. -- =============================================
  1113. -- 五维能量系统表
  1114. -- =============================================
  1115. -- 能量维度定义表
  1116. CREATE TABLE IF NOT EXISTS energy_dimension (
  1117. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1118. code VARCHAR(16) NOT NULL UNIQUE COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1119. name VARCHAR(20) NOT NULL COMMENT '维度名称: 身/心/智/行/富',
  1120. icon VARCHAR(16) COMMENT '图标emoji',
  1121. element VARCHAR(10) COMMENT '五行元素: 土/火/金/木/水',
  1122. sort_order INT DEFAULT 0 COMMENT '显示顺序',
  1123. status TINYINT DEFAULT 1 COMMENT '状态:1启用/0禁用',
  1124. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1125. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量维度定义表';
  1126. -- 服务-维度比例配置表
  1127. CREATE TABLE IF NOT EXISTS energy_source_config (
  1128. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1129. source_type VARCHAR(32) NOT NULL COMMENT '来源类型: task/activity/course/product/consultation',
  1130. source_id BIGINT NOT NULL COMMENT '来源业务表ID',
  1131. source_name VARCHAR(200) COMMENT '冗余名称',
  1132. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1133. ratio INT NOT NULL COMMENT '占比(基点,6000=60%)',
  1134. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1135. INDEX idx_source (source_type, source_id)
  1136. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务-维度比例配置表';
  1137. -- 能量流水表
  1138. CREATE TABLE IF NOT EXISTS energy_log (
  1139. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1140. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1141. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1142. amount INT NOT NULL COMMENT '变动量(正=获得,负=消耗)',
  1143. balance_after INT NOT NULL COMMENT '变动后余额',
  1144. source_type VARCHAR(32) COMMENT '来源类型: task/product/medical_report/daily_record',
  1145. source_id BIGINT COMMENT '来源ID',
  1146. ref_id BIGINT COMMENT '关联旧流水ID(覆盖时标记)',
  1147. expires_at DATETIME COMMENT '过期时间(空=永不过期)',
  1148. description TEXT COMMENT '描述',
  1149. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1150. INDEX idx_child_dim (child_id, dimension_id),
  1151. INDEX idx_created (created_at),
  1152. INDEX idx_source (source_type, source_id)
  1153. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量流水表';
  1154. -- 维度余额表
  1155. CREATE TABLE IF NOT EXISTS energy_balance (
  1156. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1157. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1158. dimension_id BIGINT NOT NULL COMMENT '维度ID',
  1159. balance INT DEFAULT 0 COMMENT '当前能量值(可为负)',
  1160. total_earned INT DEFAULT 0 COMMENT '累计获得',
  1161. total_spent INT DEFAULT 0 COMMENT '累计消耗',
  1162. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1163. UNIQUE KEY uk_child_dim (child_id, dimension_id)
  1164. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维度余额表';
  1165. -- =============================================
  1166. -- 佣金系统表
  1167. -- =============================================
  1168. -- 佣金记录表
  1169. CREATE TABLE IF NOT EXISTS commission_records (
  1170. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1171. order_id BIGINT NOT NULL COMMENT '订单ID',
  1172. order_type VARCHAR(32) NOT NULL COMMENT '订单类型: membership/product/assessment/package',
  1173. referrer_id BIGINT NOT NULL COMMENT '推荐人ID',
  1174. buyer_id BIGINT NOT NULL COMMENT '购买人ID',
  1175. commission_type VARCHAR(16) NOT NULL COMMENT '佣金类型: member/profit',
  1176. level INT DEFAULT 1 COMMENT '佣金层级: 1=直接推荐, 2=间接推荐',
  1177. order_amount INT NOT NULL COMMENT '订单金额(分)',
  1178. profit_rate INT DEFAULT 0 COMMENT '利润率(千分比,如235=23.5%)',
  1179. commission_amount INT NOT NULL COMMENT '佣金金额(分)',
  1180. status VARCHAR(16) NOT NULL DEFAULT 'settled' COMMENT '状态: pending/settled',
  1181. remark TEXT DEFAULT NULL COMMENT '备注',
  1182. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1183. family_id BIGINT DEFAULT NULL COMMENT '归属家庭ID',
  1184. settled_at DATETIME DEFAULT NULL COMMENT '结算时间',
  1185. withdrawn_at DATETIME DEFAULT NULL COMMENT '提现时间',
  1186. INDEX idx_referrer (referrer_id),
  1187. INDEX idx_buyer (buyer_id),
  1188. INDEX idx_family (family_id),
  1189. INDEX idx_order (order_id, order_type)
  1190. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金记录表';
  1191. -- 提现申请表
  1192. CREATE TABLE IF NOT EXISTS withdrawal_requests (
  1193. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1194. user_id BIGINT NOT NULL COMMENT '用户ID',
  1195. amount INT NOT NULL COMMENT '提现金额(分)',
  1196. account_info TEXT COMMENT '账户信息(JSON)',
  1197. status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
  1198. audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
  1199. audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
  1200. remark TEXT DEFAULT NULL COMMENT '审核备注',
  1201. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1202. INDEX idx_user (user_id),
  1203. INDEX idx_status (status)
  1204. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现申请表';
  1205. -- 会员升级记录表
  1206. CREATE TABLE IF NOT EXISTS member_upgrade_records (
  1207. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1208. user_id BIGINT NOT NULL COMMENT '用户ID',
  1209. from_level VARCHAR(20) NOT NULL COMMENT '升级前等级',
  1210. to_level VARCHAR(20) NOT NULL COMMENT '升级后等级',
  1211. upgrade_type VARCHAR(20) NOT NULL COMMENT '升级类型: pay/consumption/admin',
  1212. order_id BIGINT DEFAULT NULL COMMENT '关联支付订单ID',
  1213. consumption_amount BIGINT DEFAULT NULL COMMENT '触发升级的累计消费金额',
  1214. expire_time DATETIME DEFAULT NULL COMMENT '家庭会员到期时间',
  1215. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1216. INDEX idx_user (user_id),
  1217. INDEX idx_order (order_id)
  1218. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员升级记录表';
  1219. -- =============================================
  1220. -- 规划师服务模块表
  1221. -- =============================================
  1222. -- 服务类型表
  1223. CREATE TABLE IF NOT EXISTS service_types (
  1224. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1225. name VARCHAR(100) NOT NULL COMMENT '类型名称',
  1226. icon VARCHAR(50) COMMENT '图标',
  1227. description TEXT COMMENT '描述',
  1228. sort_order INT DEFAULT 0 COMMENT '排序',
  1229. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1230. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1231. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1232. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务类型表';
  1233. -- 服务内容表
  1234. CREATE TABLE IF NOT EXISTS service_contents (
  1235. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1236. type_id BIGINT NOT NULL COMMENT '关联服务类型',
  1237. title VARCHAR(200) NOT NULL COMMENT '内容标题',
  1238. content TEXT COMMENT '富文本内容',
  1239. duration INT COMMENT '建议时长(分钟)',
  1240. age_range VARCHAR(50) COMMENT '适用年龄',
  1241. price INT COMMENT '参考价格(分)',
  1242. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/ACTIVE',
  1243. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1244. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1245. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务内容表';
  1246. -- 套餐模板表
  1247. CREATE TABLE IF NOT EXISTS guide_package_templates (
  1248. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1249. name VARCHAR(100) NOT NULL COMMENT '模板名称',
  1250. validity_months INT COMMENT '有效期(月)',
  1251. reference_price INT COMMENT '参考价格(分)',
  1252. min_price INT COMMENT '最低售价(分)',
  1253. description TEXT COMMENT '说明',
  1254. status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/DISABLED',
  1255. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1256. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1257. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板表';
  1258. -- 套餐模板服务项表
  1259. CREATE TABLE IF NOT EXISTS package_template_services (
  1260. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1261. template_id BIGINT NOT NULL COMMENT '关联模板',
  1262. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1263. quantity INT DEFAULT 1 COMMENT '数量',
  1264. unit VARCHAR(20) COMMENT '单位'
  1265. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐模板服务项表';
  1266. -- 成长规划师套餐表
  1267. CREATE TABLE IF NOT EXISTS guide_packages (
  1268. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1269. guide_id BIGINT COMMENT '成长规划师ID',
  1270. package_id BIGINT COMMENT '关联模板',
  1271. commission_rate INT COMMENT '佣金比例(基点,1000=10%)',
  1272. teacher_id BIGINT COMMENT '成长规划师ID(旧字段)',
  1273. template_id BIGINT COMMENT '关联模板(旧字段)',
  1274. name VARCHAR(100) NOT NULL COMMENT '套餐名称',
  1275. level VARCHAR(20) COMMENT '套餐等级',
  1276. price INT NOT NULL COMMENT '销售价格(分)',
  1277. validity_months INT COMMENT '有效期(月)',
  1278. validity_days INT DEFAULT 0 COMMENT '有效期天数',
  1279. description TEXT COMMENT '套餐说明',
  1280. status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '状态: DRAFT/PUBLISHED/PAUSED',
  1281. sort_order INT DEFAULT 0 COMMENT '排序',
  1282. sales_count INT DEFAULT 0 COMMENT '销量',
  1283. share_code VARCHAR(50) COMMENT '分享码',
  1284. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1285. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1286. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐表';
  1287. -- 成长规划师套餐服务项表
  1288. CREATE TABLE IF NOT EXISTS guide_package_services (
  1289. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1290. package_id BIGINT NOT NULL COMMENT '关联套餐',
  1291. content_id BIGINT NOT NULL COMMENT '关联服务内容',
  1292. quantity INT DEFAULT 1 COMMENT '数量',
  1293. unit VARCHAR(20) COMMENT '单位'
  1294. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师套餐服务项表';
  1295. -- 成长规划师订单表
  1296. CREATE TABLE IF NOT EXISTS guide_orders (
  1297. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1298. order_no VARCHAR(50) NOT NULL COMMENT '订单号',
  1299. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1300. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1301. package_id BIGINT NOT NULL COMMENT '套餐ID',
  1302. amount INT NOT NULL COMMENT '金额(分)',
  1303. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/PAID/COMPLETED/REFUNDED',
  1304. pay_time DATETIME COMMENT '支付时间',
  1305. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1306. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1307. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师订单表';
  1308. -- 佣金明细表
  1309. CREATE TABLE IF NOT EXISTS guide_commissions (
  1310. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1311. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1312. order_id BIGINT NOT NULL COMMENT '订单ID',
  1313. amount INT NOT NULL COMMENT '佣金金额(分)',
  1314. rate INT COMMENT '佣金比例(基点)',
  1315. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态: PENDING/COMPLETED',
  1316. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1317. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='佣金明细表';
  1318. -- 服务记录表
  1319. CREATE TABLE IF NOT EXISTS guide_service_logs (
  1320. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1321. teacher_id BIGINT NOT NULL COMMENT '成长规划师ID',
  1322. family_id BIGINT NOT NULL COMMENT '家庭ID',
  1323. order_id BIGINT COMMENT '订单ID',
  1324. service_content_id BIGINT NOT NULL COMMENT '服务内容ID',
  1325. notes TEXT COMMENT '服务记录',
  1326. duration INT COMMENT '服务时长(分钟)',
  1327. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  1328. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务记录表';
  1329. -- 成长规划师邀请码表
  1330. CREATE TABLE IF NOT EXISTS guide_invite_codes (
  1331. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1332. guide_id BIGINT NOT NULL COMMENT '成长规划师用户ID',
  1333. code VARCHAR(50) NOT NULL UNIQUE COMMENT '邀请码',
  1334. status VARCHAR(20) DEFAULT 'active' COMMENT '状态',
  1335. used_by_user_id BIGINT COMMENT '使用该邀请码的用户ID',
  1336. used_at DATETIME COMMENT '使用时间',
  1337. expire_at DATETIME COMMENT '过期时间',
  1338. use_count INT DEFAULT 0 COMMENT '使用次数',
  1339. max_use_count INT COMMENT '最大使用次数',
  1340. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1341. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  1342. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师邀请码表';
  1343. -- =============================================
  1344. -- 财富维度表
  1345. -- =============================================
  1346. -- 财商打卡记录表
  1347. CREATE TABLE IF NOT EXISTS finance_checkins (
  1348. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1349. user_id BIGINT NOT NULL COMMENT '用户ID',
  1350. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1351. checkin_type VARCHAR(20) NOT NULL COMMENT '打卡类型: daily_plan/saving/expense/review',
  1352. checkin_date DATE NOT NULL COMMENT '打卡日期',
  1353. amount INT COMMENT '金额(分,收支记录)',
  1354. category VARCHAR(50) COMMENT '收支分类',
  1355. note TEXT COMMENT '备注',
  1356. mood VARCHAR(20) COMMENT '心情',
  1357. earned_energy INT DEFAULT 0 COMMENT '获得的能量值',
  1358. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1359. INDEX idx_user_date (user_id, checkin_date),
  1360. INDEX idx_child (child_id)
  1361. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财商打卡记录表';
  1362. -- 保单管理表
  1363. CREATE TABLE IF NOT EXISTS insurance_policies (
  1364. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1365. user_id BIGINT NOT NULL COMMENT '用户ID',
  1366. child_id BIGINT COMMENT '关联孩子ID',
  1367. policy_name VARCHAR(100) NOT NULL COMMENT '保单名称',
  1368. insurance_company VARCHAR(100) COMMENT '保险公司',
  1369. policy_type VARCHAR(50) COMMENT '保单类型: medical/life/accident/education/endowment',
  1370. insured_person VARCHAR(50) NOT NULL COMMENT '被保人姓名',
  1371. premium INT COMMENT '保费(分)',
  1372. sum_insured INT COMMENT '保额(分)',
  1373. start_date DATE COMMENT '生效日期',
  1374. end_date DATE COMMENT '到期日期',
  1375. renewal_type VARCHAR(20) DEFAULT 'annual' COMMENT '续费类型: annual/monthly/single',
  1376. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/expired/cancelled',
  1377. policy_no VARCHAR(100) COMMENT '保单号',
  1378. remark TEXT COMMENT '备注',
  1379. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1380. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1381. INDEX idx_user (user_id),
  1382. INDEX idx_child (child_id),
  1383. INDEX idx_status (status)
  1384. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保单管理表';
  1385. -- =============================================
  1386. -- 健康检测报告模块表
  1387. -- =============================================
  1388. -- 健康检测报告表
  1389. CREATE TABLE IF NOT EXISTS health_reports (
  1390. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1391. user_id BIGINT NOT NULL COMMENT '上传者用户ID(关联users表)',
  1392. subject_id BIGINT COMMENT '报告主体用户ID(关联users表,为null表示未绑定)',
  1393. family_id BIGINT COMMENT '家庭ID',
  1394. report_type VARCHAR(32) NOT NULL COMMENT '报告类型: physical_exam(体检)/gut_flora(菌群检测)',
  1395. report_date DATE COMMENT '报告日期',
  1396. overall_score INT COMMENT '健康总分(0-100)',
  1397. gut_health_score INT COMMENT '菌群健康分',
  1398. chronic_disease_score INT COMMENT '慢病控制分',
  1399. nutrition_score INT COMMENT '营养均衡分',
  1400. gut_age VARCHAR(32) COMMENT '肠道预测年龄',
  1401. gut_type VARCHAR(50) COMMENT '肠型',
  1402. file_url VARCHAR(500) COMMENT '报告文件URL',
  1403. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active/archived',
  1404. remark TEXT COMMENT '备注',
  1405. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1406. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1407. INDEX idx_user_id (user_id),
  1408. INDEX idx_subject_id (subject_id),
  1409. INDEX idx_family_id (family_id),
  1410. INDEX idx_report_type (report_type)
  1411. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康检测报告表';
  1412. -- 健康报告查看权限表
  1413. CREATE TABLE IF NOT EXISTS health_report_permissions (
  1414. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1415. report_id BIGINT NOT NULL COMMENT '报告ID',
  1416. user_id BIGINT NOT NULL COMMENT '有查看权限的用户ID',
  1417. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1418. UNIQUE KEY uk_report_user (report_id, user_id),
  1419. INDEX idx_report_id (report_id),
  1420. INDEX idx_user_id (user_id)
  1421. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康报告查看权限表';
  1422. -- 健康指标明细表
  1423. CREATE TABLE IF NOT EXISTS health_indicators (
  1424. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1425. report_id BIGINT NOT NULL COMMENT '关联报告ID',
  1426. category VARCHAR(50) COMMENT '指标分类: 营养状况/疾病风险/肠道屏障/神经递质/...',
  1427. indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称',
  1428. indicator_value VARCHAR(100) COMMENT '检测值',
  1429. unit VARCHAR(50) COMMENT '单位',
  1430. ref_range VARCHAR(200) COMMENT '参考范围',
  1431. status VARCHAR(50) COMMENT '评估状态: 正常/偏低/偏高/过多/注意/低风险/未检出',
  1432. sort_order INT DEFAULT 0 COMMENT '显示排序',
  1433. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1434. INDEX idx_report_id (report_id),
  1435. INDEX idx_category (category)
  1436. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康指标明细表';
  1437. -- 健康报告上传草稿表(两阶段入库的中间态)
  1438. CREATE TABLE IF NOT EXISTS health_report_drafts (
  1439. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1440. user_id BIGINT NOT NULL COMMENT '上传人用户ID',
  1441. family_id BIGINT COMMENT '家庭ID',
  1442. report_type VARCHAR(32) NOT NULL COMMENT '报告类型: physical_exam/gut_flora',
  1443. file_url VARCHAR(500) COMMENT '上传的文件URL',
  1444. original_filename VARCHAR(255) COMMENT '原始文件名',
  1445. payload_json MEDIUMTEXT NOT NULL COMMENT '草稿载荷JSON(含解析/手动录入的所有指标)',
  1446. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/confirmed/discarded',
  1447. expire_at DATETIME COMMENT '草稿过期时间',
  1448. confirmed_report_id BIGINT COMMENT 'confirm阶段入库后的健康报告ID',
  1449. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1450. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1451. INDEX idx_user_id (user_id),
  1452. INDEX idx_status_expire (status, expire_at)
  1453. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康报告上传草稿表(两阶段入库中间态)';
  1454. -- ===== v1.2 先天属性体系 =====
  1455. -- 家庭成员先天属性表
  1456. CREATE TABLE IF NOT EXISTS family_member_attributes (
  1457. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1458. member_id BIGINT NOT NULL COMMENT '家庭成员ID(children表或users表)',
  1459. member_type VARCHAR(10) NOT NULL COMMENT '成员类型: child/parent',
  1460. birth_datetime DATETIME COMMENT '出生日期(精确到分钟,用于八字排盘)',
  1461. eight_characters JSON COMMENT '八字四柱JSON',
  1462. wuxing_elements JSON COMMENT '五行星盘元素JSON',
  1463. zodiac VARCHAR(16) COMMENT '生肖: rat/ox/tiger/rabbit/dragon/snake/horse/sheep/monkey/rooster/dog/pig',
  1464. blood_type VARCHAR(5) COMMENT '血型: A/B/AB/O',
  1465. mind_base_score INT DEFAULT 0 COMMENT '心维度基础分(百分位)',
  1466. wisdom_base_score INT DEFAULT 0 COMMENT '智维度基础分(百分位)',
  1467. behavior_modifier JSON COMMENT '行为修正因子JSON',
  1468. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1469. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1470. UNIQUE KEY uk_member (member_id, member_type)
  1471. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员先天属性表';
  1472. -- 星座配置表
  1473. CREATE TABLE IF NOT EXISTS zodiac_config (
  1474. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1475. zodiac_code VARCHAR(20) NOT NULL UNIQUE COMMENT '星座代码',
  1476. zodiac_name VARCHAR(10) NOT NULL COMMENT '星座名称',
  1477. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1478. start_month INT NOT NULL COMMENT '起始月',
  1479. start_day INT NOT NULL COMMENT '起始日',
  1480. end_month INT NOT NULL COMMENT '结束月',
  1481. end_day INT NOT NULL COMMENT '结束日',
  1482. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1483. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1484. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1485. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1486. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1487. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1488. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='星座配置表';
  1489. -- 八字配置表
  1490. CREATE TABLE IF NOT EXISTS bazi_config (
  1491. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1492. stem_or_branch VARCHAR(10) NOT NULL COMMENT '天干或地支',
  1493. type VARCHAR(10) NOT NULL COMMENT '类型: stem/branch',
  1494. element VARCHAR(10) NOT NULL COMMENT '五行: 金木水火土',
  1495. yin_yang VARCHAR(5) COMMENT '阴阳: yin/yang',
  1496. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1497. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1498. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1499. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1500. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1501. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1502. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='八字配置表(天干地支五行)';
  1503. -- 血型配置表
  1504. CREATE TABLE IF NOT EXISTS blood_type_config (
  1505. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1506. blood_type VARCHAR(5) NOT NULL UNIQUE COMMENT '血型: A/B/AB/O',
  1507. description TEXT COMMENT '性格描述',
  1508. mind_base INT DEFAULT 0 COMMENT '心先天基础分(百分位)',
  1509. wisdom_base INT DEFAULT 0 COMMENT '智先天基础分(百分位)',
  1510. body_modifier INT DEFAULT 0 COMMENT '身修正系数(千分比)',
  1511. action_modifier INT DEFAULT 0 COMMENT '行修正系数(千分比)',
  1512. wealth_modifier INT DEFAULT 0 COMMENT '富修正系数(千分比)',
  1513. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1514. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配置表';
  1515. -- =============================================
  1516. -- 活动报名 与 能量规则引擎表(v1.4)
  1517. -- =============================================
  1518. -- 活动报名表
  1519. CREATE TABLE IF NOT EXISTS activity_registrations (
  1520. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1521. activity_id BIGINT NOT NULL COMMENT '活动ID',
  1522. child_id BIGINT NOT NULL COMMENT '孩子ID',
  1523. user_id BIGINT NOT NULL COMMENT '报名人用户ID(家长)',
  1524. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/approved/rejected/cancelled',
  1525. registered_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间',
  1526. approved_at DATETIME COMMENT '审核通过时间',
  1527. approved_by BIGINT COMMENT '审核人用户ID',
  1528. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1529. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1530. UNIQUE KEY uk_activity_child (activity_id, child_id),
  1531. INDEX idx_activity_id (activity_id),
  1532. INDEX idx_child_id (child_id),
  1533. INDEX idx_user_id (user_id),
  1534. INDEX idx_status (status)
  1535. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动报名表';
  1536. -- 能量规则表(规则引擎)
  1537. CREATE TABLE IF NOT EXISTS energy_rule (
  1538. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  1539. rule_code VARCHAR(64) NOT NULL UNIQUE COMMENT '规则编码(唯一)',
  1540. rule_name VARCHAR(200) NOT NULL COMMENT '规则名称',
  1541. event_type VARCHAR(32) NOT NULL COMMENT '事件类型: checkin/register/complete/cancel/overdue',
  1542. action VARCHAR(16) NOT NULL COMMENT '动作: increase/decrease',
  1543. dimension_code VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth(NULL=五维均衡)',
  1544. amount INT COMMENT '固定变动量(基点)',
  1545. amount_formula VARCHAR(255) COMMENT '动态公式(如: balance*0.1)',
  1546. priority INT DEFAULT 0 COMMENT '优先级(数字越大越优先匹配)',
  1547. conditions JSON COMMENT '触发条件(JSON表达式)',
  1548. status TINYINT DEFAULT 1 COMMENT '状态: 1=启用 0=禁用',
  1549. description TEXT COMMENT '规则描述',
  1550. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  1551. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  1552. INDEX idx_event_type (event_type),
  1553. INDEX idx_status (status),
  1554. INDEX idx_priority (priority)
  1555. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='能量规则表(规则引擎)';
  1556. CREATE TABLE IF NOT EXISTS activities (
  1557. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1558. title VARCHAR(100) NOT NULL COMMENT '活动标题',
  1559. description TEXT COMMENT '活动描述',
  1560. cover_image VARCHAR(500) COMMENT '封面图片URL',
  1561. dimension_code VARCHAR(20) COMMENT '维度代码: body/mind/wisdom/action/wealth',
  1562. activity_type VARCHAR(20) DEFAULT 'offline' COMMENT '活动类型: offline/online/campaign',
  1563. status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft/published/ended',
  1564. start_time DATETIME COMMENT '开始时间',
  1565. end_time DATETIME COMMENT '结束时间',
  1566. location VARCHAR(200) COMMENT '活动地点',
  1567. max_participants INT DEFAULT 0 COMMENT '最大参与人数',
  1568. current_participants INT DEFAULT 0 COMMENT '当前参与人数',
  1569. price INT DEFAULT 0 COMMENT '活动价格(分)',
  1570. vendor_id BIGINT COMMENT '服务商ID',
  1571. vendor_name VARCHAR(100) COMMENT '服务商名称',
  1572. dimension_weights TEXT COMMENT '五维能量权重JSON',
  1573. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1574. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1575. INDEX idx_dimension (dimension_code),
  1576. INDEX idx_status (status),
  1577. INDEX idx_start_time (start_time)
  1578. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动表';
  1579. -- v1.x: 活动工作流状态扩展
  1580. ALTER TABLE activities
  1581. MODIFY COLUMN status VARCHAR(20) DEFAULT 'draft'
  1582. COMMENT '状态:draft(草稿)/pending(待审核)/rejected(已驳回)/published(发布中)/withdrawn(已撤回)',
  1583. ADD COLUMN audit_status VARCHAR(20) DEFAULT NULL
  1584. COMMENT '审核状态:approved/pending/rejected',
  1585. ADD COLUMN audit_reason TEXT DEFAULT NULL
  1586. COMMENT '驳回原因',
  1587. ADD COLUMN auditor_id BIGINT DEFAULT NULL
  1588. COMMENT '审核人 ID',
  1589. ADD COLUMN audited_at DATETIME DEFAULT NULL
  1590. COMMENT '审核时间';
  1591. -- ===== v1.3 家庭成员体系 =====
  1592. -- 手动添加的家庭成员表(替代children表用于新成员)
  1593. CREATE TABLE IF NOT EXISTS family_members (
  1594. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1595. family_id BIGINT NOT NULL COMMENT '所属家庭ID',
  1596. user_id BIGINT COMMENT '关联的用户ID(手机号匹配到已有用户时)',
  1597. nickname VARCHAR(100) NOT NULL COMMENT '昵称',
  1598. phone VARCHAR(20) COMMENT '手机号',
  1599. avatar VARCHAR(500) COMMENT '头像',
  1600. gender VARCHAR(10) COMMENT '性别: male/female',
  1601. birthday DATE COMMENT '出生日期',
  1602. birth_hour VARCHAR(16) COMMENT '出生时辰: 子丑寅卯辰巳午未申酉戌亥',
  1603. birth_weight INT COMMENT '出生体重(克)',
  1604. birth_place VARCHAR(128) COMMENT '出生地',
  1605. is_cesarean TINYINT COMMENT '是否剖腹产: 0=顺产, 1=剖腹产',
  1606. generation INT COMMENT '辈分值(0=家庭创建者,+n=向上n代,-n=向下n代)',
  1607. is_spouse TINYINT(1) COMMENT '是否配偶(同辈中)',
  1608. relationship_type VARCHAR(50) NOT NULL COMMENT '关系类型key',
  1609. role_override VARCHAR(20) DEFAULT 'auto' COMMENT '角色覆盖: auto/parent/child/elderly,空=auto',
  1610. show_to_family INT DEFAULT 1 COMMENT '对家庭成员可见: 1=可见, 0=不可见',
  1611. total_points INT DEFAULT 0 COMMENT '总积分',
  1612. -- 孩子专属字段(原children表合并)
  1613. id_card VARCHAR(18) DEFAULT NULL COMMENT '身份证号(孩子)',
  1614. penalty_enabled TINYINT DEFAULT 1 COMMENT '是否扣减积分(0否1是)',
  1615. theme VARCHAR(32) DEFAULT 'default' COMMENT '主题',
  1616. system_points INT DEFAULT 0 COMMENT '系统积分(干预/平台奖励)',
  1617. streak_days INT DEFAULT 0 COMMENT '连续打卡天数',
  1618. last_task_date DATE COMMENT '上次任务日期',
  1619. focus_max_daily TINYINT DEFAULT 3 COMMENT '每日专注上限',
  1620. focus_remaining TINYINT DEFAULT 3 COMMENT '今日剩余专注次数',
  1621. focus_reset_date DATE COMMENT '专注次数重置日期',
  1622. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1623. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1624. INDEX idx_family_id (family_id),
  1625. INDEX idx_phone (phone)
  1626. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员表(手动添加)';
  1627. -- 家庭成员双向关系表(v2: 替代relationship_type/role_override)
  1628. CREATE TABLE IF NOT EXISTS family_relationships (
  1629. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1630. family_id BIGINT NOT NULL COMMENT '所属家庭ID',
  1631. from_member_id BIGINT NOT NULL COMMENT '关系起点成员ID',
  1632. to_member_id BIGINT NOT NULL COMMENT '关系终点成员ID',
  1633. generation_value INT NOT NULL COMMENT '辈分值: -1=子女, 0=同辈, 1=父母, 2=祖父母, 3=曾祖父母',
  1634. relationship_key VARCHAR(50) COMMENT '关系标签key(冗余用于显示, 如father/mother/son/daughter/spouse/sibling)',
  1635. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1636. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1637. UNIQUE KEY uk_from_to (from_member_id, to_member_id),
  1638. INDEX idx_family_id (family_id),
  1639. INDEX idx_from (from_member_id),
  1640. INDEX idx_to (to_member_id)
  1641. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员双向关系表';
  1642. -- 关系类型配置表(管理端可配置)
  1643. CREATE TABLE IF NOT EXISTS relationship_types (
  1644. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1645. type_key VARCHAR(50) NOT NULL UNIQUE COMMENT '类型标识: spouse/parent/child/sibling',
  1646. type_name VARCHAR(100) NOT NULL COMMENT '类型显示名: 配偶/父母/子女/兄弟姐妹',
  1647. capability_role VARCHAR(20) NOT NULL DEFAULT 'parent' COMMENT '能力角色: parent/child',
  1648. default_role VARCHAR(20) DEFAULT NULL COMMENT '默认角色模板: parent/child(已废弃, 兼容保留)',
  1649. sort_order INT DEFAULT 0 COMMENT '排序序号',
  1650. enabled INT DEFAULT 1 COMMENT '是否启用: 1=启用, 0=禁用',
  1651. category VARCHAR(50) DEFAULT 'social' COMMENT '关系分类: blood血亲/marriage姻亲/social社会关系',
  1652. is_blood_relation TINYINT DEFAULT 0 COMMENT '是否血亲关系: 1是0否',
  1653. is_immediate_family TINYINT DEFAULT 0 COMMENT '是否直系亲属: 1是0否',
  1654. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  1655. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系类型配置表';
  1656. -- 默认关系类型数据(default_role: parent/child 为该关系类型的默认角色模板)
  1657. INSERT IGNORE INTO relationship_types (type_key, type_name, default_role, sort_order, enabled, category, is_blood_relation, is_immediate_family) VALUES
  1658. ('spouse', '配偶', 'parent', 1, 1, 'marriage', 0, 1),
  1659. ('parent', '父母', 'parent', 2, 1, 'blood', 1, 1),
  1660. ('child', '子女', 'child', 3, 1, 'blood', 1, 1),
  1661. ('sibling', '兄弟姐妹', 'child', 4, 1, 'blood', 1, 0);
  1662. -- 用户收货地址表
  1663. CREATE TABLE IF NOT EXISTS user_address (
  1664. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1665. user_id BIGINT NOT NULL COMMENT '用户ID',
  1666. receiver_name VARCHAR(50) NOT NULL COMMENT '收货人姓名',
  1667. phone VARCHAR(20) NOT NULL COMMENT '收货人电话',
  1668. province VARCHAR(50) COMMENT '省',
  1669. city VARCHAR(50) COMMENT '市',
  1670. district VARCHAR(50) COMMENT '区',
  1671. street VARCHAR(200) COMMENT '详细地址',
  1672. is_default TINYINT DEFAULT 0 COMMENT '是否默认地址 1=是 0=否',
  1673. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1674. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1675. INDEX idx_user_id (user_id),
  1676. INDEX idx_is_default (is_default)
  1677. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户收货地址表';
  1678. -- =============================================
  1679. -- 新手引导奖励表
  1680. -- =============================================
  1681. CREATE TABLE IF NOT EXISTS onboarding_task (
  1682. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1683. user_id BIGINT NOT NULL,
  1684. task_type VARCHAR(32) NOT NULL,
  1685. reward_points INT DEFAULT 0,
  1686. reward_energy INT DEFAULT 0,
  1687. status VARCHAR(16) DEFAULT 'PENDING',
  1688. completed_at DATETIME,
  1689. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1690. INDEX idx_user_id (user_id)
  1691. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1692. -- =============================================
  1693. -- 成长任务配置表
  1694. -- =============================================
  1695. CREATE TABLE IF NOT EXISTS growth_task (
  1696. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1697. type VARCHAR(16) NOT NULL COMMENT 'DAILY/NEWBIE',
  1698. title VARCHAR(100) NOT NULL,
  1699. description TEXT,
  1700. reward_points INT DEFAULT 0,
  1701. reward_energy INT DEFAULT 0,
  1702. target_value INT DEFAULT 1,
  1703. task_key VARCHAR(32) UNIQUE NOT NULL,
  1704. enabled TINYINT DEFAULT 1,
  1705. sort_order INT DEFAULT 0,
  1706. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1707. INDEX idx_type (type)
  1708. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务配置表';
  1709. CREATE TABLE IF NOT EXISTS growth_task_log (
  1710. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1711. user_id BIGINT NOT NULL,
  1712. task_id BIGINT NOT NULL,
  1713. progress INT DEFAULT 0,
  1714. completed TINYINT DEFAULT 0,
  1715. claimed TINYINT DEFAULT 0,
  1716. date VARCHAR(10) COMMENT 'YYYY-MM-DD for daily, empty for newbie',
  1717. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1718. INDEX idx_user_date (user_id, date),
  1719. INDEX idx_task_id (task_id)
  1720. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长任务用户进度表';
  1721. -- =============================================
  1722. -- 优惠券配置表
  1723. -- =============================================
  1724. CREATE TABLE IF NOT EXISTS coupon (
  1725. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1726. name VARCHAR(64) NOT NULL,
  1727. type VARCHAR(16) DEFAULT 'FIXED',
  1728. value INT DEFAULT 0 COMMENT '金额 单位:分',
  1729. min_spend INT DEFAULT 0 COMMENT '最低消费 单位:分',
  1730. applicable_to VARCHAR(32) DEFAULT 'ALL',
  1731. valid_from DATETIME,
  1732. valid_until DATETIME,
  1733. total_count INT DEFAULT 0,
  1734. used_count INT DEFAULT 0,
  1735. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1736. INDEX idx_valid_period (valid_from, valid_until)
  1737. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券配置表';
  1738. CREATE TABLE IF NOT EXISTS user_coupon (
  1739. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1740. user_id BIGINT NOT NULL,
  1741. coupon_id BIGINT NOT NULL,
  1742. status VARCHAR(16) DEFAULT 'AVAILABLE',
  1743. received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1744. used_at DATETIME,
  1745. order_id BIGINT,
  1746. INDEX idx_user_coupon (user_id, coupon_id),
  1747. INDEX idx_status (status),
  1748. INDEX idx_order_id (order_id)
  1749. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户优惠券表';
  1750. -- =============================================
  1751. -- 邀请里程碑表
  1752. -- =============================================
  1753. CREATE TABLE IF NOT EXISTS invite_milestone (
  1754. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1755. user_id BIGINT NOT NULL,
  1756. milestone VARCHAR(32) NOT NULL,
  1757. reward_points INT DEFAULT 0,
  1758. reward_energy INT DEFAULT 0,
  1759. status VARCHAR(16) DEFAULT 'PENDING',
  1760. achieved_at DATETIME,
  1761. claimed_at DATETIME,
  1762. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1763. INDEX idx_user_milestone (user_id, milestone)
  1764. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='邀请里程碑表';
  1765. -- =============================================
  1766. -- 推广排行榜周记录表
  1767. -- =============================================
  1768. CREATE TABLE IF NOT EXISTS referral_leaderboard (
  1769. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1770. user_id BIGINT NOT NULL,
  1771. week_start VARCHAR(10) NOT NULL COMMENT '周一日期 YYYY-MM-DD',
  1772. referral_count INT DEFAULT 0,
  1773. `rank` INT,
  1774. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1775. UNIQUE INDEX idx_user_week (user_id, week_start),
  1776. INDEX idx_week_rank (week_start, referral_count DESC)
  1777. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广排行榜周记录';
  1778. -- =============================================
  1779. -- 虚拟服务商团队(销售体系)
  1780. -- =============================================
  1781. CREATE TABLE IF NOT EXISTS `distribution_systems` (
  1782. `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  1783. `name` VARCHAR(100) NOT NULL COMMENT '团队名称',
  1784. `description` TEXT COMMENT '团队描述',
  1785. `owner_id` BIGINT COMMENT '创建人(服务商用户ID)',
  1786. `profit_rate` INT DEFAULT 0 COMMENT '利润分成比例(bps, 如2000=20%)',
  1787. `enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
  1788. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  1789. `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1790. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='虚拟服务商团队(销售体系)';
  1791. CREATE TABLE IF NOT EXISTS `distribution_relations` (
  1792. `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  1793. `system_id` BIGINT NOT NULL COMMENT '所属团队ID',
  1794. `user_id` BIGINT NOT NULL COMMENT '服务商用户ID',
  1795. `parent_id` BIGINT COMMENT '上级服务商用户ID',
  1796. `depth` INT DEFAULT 0 COMMENT '层级深度(0=root)',
  1797. `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
  1798. INDEX idx_system (system_id),
  1799. INDEX idx_user (user_id),
  1800. INDEX idx_parent (parent_id)
  1801. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团队-服务商关系(同一人在不同团队可处于不同位置)';
  1802. -- =============================================
  1803. -- 成长任务种子数据
  1804. -- =============================================
  1805. INSERT IGNORE INTO growth_task (type, title, description, reward_points, reward_energy, target_value, task_key, sort_order) VALUES
  1806. ('DAILY', '每日签到', '完成每日签到', 20, 3, 1, 'DAILY_CHECKIN', 1),
  1807. ('DAILY', '完成任务', '完成一个任务', 30, 5, 1, 'DAILY_TASK', 2),
  1808. ('DAILY', '分享文章', '分享一篇好文给好友', 10, 2, 1, 'DAILY_SHARE', 3),
  1809. ('DAILY', 'AI对话', '与AI助手进行一次对话', 15, 3, 1, 'DAILY_AI', 4);
  1810. -- ========== 全域指标定义表 ==========
  1811. -- ===== v1.5 家庭文化镜:关系兼容性配置 =====
  1812. -- 生肖配对规则表
  1813. CREATE TABLE IF NOT EXISTS zodiac_pairing (
  1814. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1815. zodiac_code_1 VARCHAR(20) NOT NULL COMMENT '生肖代码1',
  1816. zodiac_code_2 VARCHAR(20) NOT NULL COMMENT '生肖代码2',
  1817. pairing_type VARCHAR(20) NOT NULL COMMENT '配对类型: liuhe/sanhe/banhe/liuchong/xianghai/xiangxing/ping',
  1818. compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
  1819. description TEXT COMMENT '配对解读',
  1820. advice TEXT COMMENT '相处建议',
  1821. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1822. UNIQUE KEY uk_zodiac_pair (zodiac_code_1, zodiac_code_2)
  1823. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生肖配对规则表';
  1824. -- 十二生肖六合/三合/六冲种子数据
  1825. INSERT IGNORE INTO zodiac_pairing (zodiac_code_1, zodiac_code_2, pairing_type, compatibility_score, description, advice) VALUES
  1826. ('rat', 'ox', 'liuhe', 100, '子丑六合,天生一对', '你们是最佳拍档,互相补充,默契十足'),
  1827. ('rat', 'monkey', 'sanhe', 85, '申子半合水局,默契度高', '智慧结合,创意无限,适合一起做规划'),
  1828. ('rat', 'dragon', 'sanhe', 85, '子辰半合水局,相辅相成', '一个机灵一个大气,共同成就大事'),
  1829. ('rat', 'horse', 'liuchong', 20, '子午相冲,水火不容', '价值观差异大,需要多包容理解'),
  1830. ('rat', 'tiger', 'xiangxing', 30, '寅子相刑,容易误会', '沟通方式不同,建议用行动代替言语'),
  1831. ('rat', 'rabbit', 'xiangxing', 30, '卯子相刑,互不相让', '各执己见时先冷静再沟通'),
  1832. ('rat', 'sheep', 'xianghai', 35, '子未相害,暗中较劲', '表面和谐但内心可能有竞争意识'),
  1833. ('ox', 'tiger', 'ping', 55, '牛虎平平,互敬互重', '踏实遇上冒险,可以互相学习'),
  1834. ('ox', 'rabbit', 'xianghai', 35, '丑卯相害,各怀心思', '建议开诚布公,减少猜测'),
  1835. ('ox', 'dragon', 'ping', 55, '牛龙平平,求同存异', '务实和理想主义的碰撞'),
  1836. ('ox', 'snake', 'sanhe', 85, '巳酉丑三合金局,配合默契', '务实加智慧,黄金搭档'),
  1837. ('ox', 'horse', 'xianghai', 35, '丑午相害,相处需技巧', '步调不同,需要彼此迁就'),
  1838. ('ox', 'sheep', 'liuchong', 20, '丑未相冲,针锋相对', '一个固执一个犟,需要第三方调和'),
  1839. ('tiger', 'rabbit', 'ping', 55, '虎兔平平,各有所长', '虎的魄力配兔的细腻,互补型'),
  1840. ('tiger', 'dragon', 'ping', 55, '虎龙平平,互相欣赏', '都有王者风范,但要注意谁说了算'),
  1841. ('tiger', 'snake', 'xianghai', 35, '寅巳相害,互相防备', '一个直率一个深沉,需要更多信任'),
  1842. ('tiger', 'horse', 'sanhe', 85, '寅午半合火局,一拍即合', '热情似火,志同道合的行动派'),
  1843. ('tiger', 'sheep', 'ping', 55, '虎羊平平,温柔与力量', '虎保护羊,羊温暖虎'),
  1844. ('tiger', 'monkey', 'liuchong', 20, '寅申相冲,竞争关系', '针尖对麦芒,需要在竞争中找合作'),
  1845. ('tiger', 'pig', 'liuhe', 100, '寅亥六合,情投意合', '虎猪相合,真诚相待的最佳组合'),
  1846. ('rabbit', 'dragon', 'xianghai', 35, '卯辰相害,表面和谐', '温和遇到强势,需要找到平衡'),
  1847. ('rabbit', 'snake', 'ping', 55, '兔蛇平平,温和相处', '都是内敛型,适合安静的陪伴'),
  1848. ('rabbit', 'horse', 'ping', 55, '兔马平平,一动一静', '一个爱静一个爱动,互相调剂'),
  1849. ('rabbit', 'sheep', 'sanhe', 85, '卯未半合木局,志趣相投', '文艺组合,品味相投'),
  1850. ('rabbit', 'monkey', 'xiangxing', 30, '卯申相刑,互不买账', '思维方式差异大,需要耐心'),
  1851. ('rabbit', 'rooster', 'liuchong', 20, '卯酉相冲,水火难容', '生活节奏完全不同,需要大包容'),
  1852. ('rabbit', 'dog', 'liuhe', 100, '卯戌六合,忠诚相伴', '兔狗相合,彼此忠诚的最佳关系'),
  1853. ('dragon', 'snake', 'ping', 55, '龙蛇平平,同源相惜', '都有神秘气质,惺惺相惜'),
  1854. ('dragon', 'horse', 'ping', 55, '龙马平平,各有天地', '一个在天一个在地,互不干涉'),
  1855. ('dragon', 'sheep', 'xiangxing', 30, '辰未相刑,暗中别扭', '看似无事却有暗流,多交流可化解'),
  1856. ('dragon', 'monkey', 'sanhe', 85, '申子辰三合水局,天生队友', '最佳事业组合,互相成就'),
  1857. ('dragon', 'rooster', 'liuhe', 100, '辰酉六合,珠联璧合', '龙凤配,传统的最佳搭档'),
  1858. ('dragon', 'dog', 'liuchong', 20, '辰戌相冲,正面冲突', '硬碰硬的关系,需要智慧化解'),
  1859. ('snake', 'horse', 'xiangxing', 30, '巳午相刑,热度不同', '蛇冷静马热情,温度要调和'),
  1860. ('snake', 'sheep', 'sanhe', 85, '巳酉丑三合金局,智慧搭档', '沉稳加温柔,互相信任的深层关系'),
  1861. ('snake', 'monkey', 'liuhe', 100, '巳申六合,智谋相投', '聪明人之间的默契'),
  1862. ('snake', 'rooster', 'sanhe', 85, '巳酉丑三合金局,配合无间', '细节控和完美主义者的理想组合'),
  1863. ('snake', 'pig', 'liuchong', 20, '巳亥相冲,南辕北辙', '一个深沉一个随性,需要大幅磨合'),
  1864. ('horse', 'sheep', 'liuhe', 100, '午未六合,温情相依', '马羊相合,温暖体贴的最佳关系'),
  1865. ('horse', 'monkey', 'xiangxing', 30, '午申相刑,互不理解', '行动派和思考派的碰撞'),
  1866. ('horse', 'rooster', 'xiangxing', 30, '午酉相刑,意气用事', '都容易冲动,需要一个冷静者调和'),
  1867. ('horse', 'dog', 'sanhe', 85, '寅午戌三合火局,行动搭档', '热情忠诚组合,一起行动效率高'),
  1868. ('horse', 'pig', 'liuhe', 100, '亥午暗合,心有灵犀', '一静一动却暗合,出人意料的默契'),
  1869. ('sheep', 'monkey', 'xiangxing', 30, '未申相刑,互挑毛病', '容易在小事上相互挑剔'),
  1870. ('sheep', 'rooster', 'ping', 55, '羊鸡平平,互相欣赏', '羊的细腻欣赏鸡的精致'),
  1871. ('sheep', 'dog', 'xiangxing', 30, '未戌相刑,各怀心事', '需要建立更深层的信任'),
  1872. ('sheep', 'pig', 'sanhe', 85, '亥卯未三合木局,温柔组合', '温和的三合组,舒适无压力的关系'),
  1873. ('monkey', 'rooster', 'ping', 55, '猴鸡平平,互相启发', '聪明人的相遇,火花四射'),
  1874. ('monkey', 'dog', 'xiangxing', 30, '申戌相刑,互不信任', '需要时间证明真心'),
  1875. ('monkey', 'pig', 'liuhe', 100, '申亥六合,智勇双全', '猴子机智猪包容,最佳朋友组合'),
  1876. ('rooster', 'dog', 'xiangxing', 30, '酉戌相刑,互相挑剔', '完美主义遇见忠诚卫士,互相看不惯'),
  1877. ('rooster', 'pig', 'ping', 55, '鸡猪平平,各取所需', '鸡的精明和猪的豁达互相补充'),
  1878. ('dog', 'pig', 'sanhe', 85, '寅午戌三合火局,忠诚相伴', '忠诚的守护组合,互相支持');
  1879. -- 血型配对表
  1880. CREATE TABLE IF NOT EXISTS blood_type_pairing (
  1881. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1882. blood_type_1 VARCHAR(5) NOT NULL COMMENT '血型1',
  1883. blood_type_2 VARCHAR(5) NOT NULL COMMENT '血型2',
  1884. compatibility_score INT DEFAULT 50 COMMENT '兼容分 0-100',
  1885. description TEXT COMMENT '配对描述',
  1886. advice TEXT COMMENT '相处建议',
  1887. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1888. UNIQUE KEY uk_blood_pair (blood_type_1, blood_type_2)
  1889. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='血型配对表';
  1890. INSERT IGNORE INTO blood_type_pairing (blood_type_1, blood_type_2, compatibility_score, description, advice) VALUES
  1891. ('A', 'A', 80, '同型相吸,稳重默契', '都能理解对方的细腻敏感,但注意不要一起钻牛角尖'),
  1892. ('A', 'B', 50, '互补型,有吸引力也有摩擦', 'B型的自由奔放吸引A型,但A型的严谨可能让B型感到压力'),
  1893. ('A', 'O', 75, 'A主内O主外,搭配和谐', 'O型的大气包容A型的细致,是最常见的和谐组合'),
  1894. ('A', 'AB', 70, 'AB型善解人意,A型感到被理解', 'AB型的理性刚好平衡A型的感性'),
  1895. ('B', 'B', 75, '同型相投,自由自在', '都给彼此空间,但可能缺乏规划'),
  1896. ('B', 'O', 70, 'O型包容B型,相处轻松', 'O型的稳定给了B型安全感'),
  1897. ('B', 'AB', 65, '互相欣赏,各有天地', 'B型的创意和AB型的分析能力互补'),
  1898. ('O', 'O', 85, '强强联合,行动力爆棚', '都是行动派,但要注意不要都太强势'),
  1899. ('O', 'AB', 75, 'O型领导,AB型军师', 'O型的大方向加AB型的精细思维,无敌组合'),
  1900. ('AB', 'AB', 60, '互相理解但可能过度理性', '两个理性派,别忘了情感交流');
  1901. -- 生命灵数关系解读表
  1902. CREATE TABLE IF NOT EXISTS life_number_relationship (
  1903. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1904. relationship_number INT NOT NULL COMMENT '关系数字 1-9',
  1905. title VARCHAR(100) COMMENT '关系主题',
  1906. description TEXT COMMENT '关系解读',
  1907. advice TEXT COMMENT '相处建议',
  1908. color_hex VARCHAR(10) COMMENT '代表色',
  1909. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1910. UNIQUE KEY uk_relationship_num (relationship_number)
  1911. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生命灵数关系解读表';
  1912. INSERT IGNORE INTO life_number_relationship (relationship_number, title, description, advice, color_hex) VALUES
  1913. (1, '开创者关系', '你们在一起充满创造力和领导力,彼此激励去实现目标', '注意不要互相竞争谁说了算,明确分工才能发挥最大能量', '#FF4444'),
  1914. (2, '合作伙伴关系', '你们是天生的搭档,善于倾听和配合,营造和谐氛围', '过于迁就对方可能会失去自我,保持适度独立才能长久', '#FF8C42'),
  1915. (3, '创意火花关系', '在一起充满欢乐和创造力,社交圈会因为你们而扩大', '注意不要太表面化,偶尔需要深度的对话来维系情感', '#FFD700'),
  1916. (4, '建设者关系', '你们是务实稳健的组合,能一起把想法变成现实', '生活不能只有工作和责任,记得给彼此创造惊喜和浪漫', '#10B981'),
  1917. (5, '探险者关系', '在一起充满变化和新鲜感,喜欢一起探索未知', '变化太多可能会让关系缺乏安全感,寻找一些共同的固定仪式', '#3B82F6'),
  1918. (6, '守护者关系', '你们的关系以关爱和责任为基础,彼此是最坚实的后盾', '付出太多可能会感到疲惫,学会接受对方的爱和照顾', '#6366F1'),
  1919. (7, '智者关系', '在一起有深度的精神交流和思想碰撞,追求真理', '不要沉浸在各自的世界里,记得用简单的方式表达爱', '#8B5CF6'),
  1920. (8, '成就者关系', '你们是强强联合,追求物质和事业上的共同成就', '在追求成功的同时不要忽视感情的温度,平衡事业和生活', '#F59E0B'),
  1921. (9, '圆满者关系', '在一起有强烈的宿命感,彼此理解和支持,是灵魂伴侣', '太理想化可能会失望,接受对方的不完美才能走得更远', '#FF6B9D');
  1922. CREATE TABLE IF NOT EXISTS indicator_definitions (
  1923. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1924. domain VARCHAR(50) NOT NULL COMMENT '领域: physical/mental/nutrition/behavior/social',
  1925. category VARCHAR(50) NOT NULL COMMENT '分类: 舌色/苔色/情绪/...',
  1926. code VARCHAR(50) NOT NULL UNIQUE COMMENT '编码: tongue_color/coating_color/...',
  1927. name VARCHAR(100) NOT NULL COMMENT '显示名: 舌体颜色/苔色/...',
  1928. data_type VARCHAR(20) NOT NULL DEFAULT 'enum' COMMENT '数据类型: enum/number/string',
  1929. options JSON COMMENT '枚举值列表: ["淡红","红","绛","青紫"] 或 null',
  1930. unit VARCHAR(50) COMMENT '单位',
  1931. ref_range VARCHAR(200) COMMENT '参考范围',
  1932. sort_order INT DEFAULT 0 COMMENT '排序',
  1933. status TINYINT DEFAULT 1 COMMENT '0=禁用 1=启用',
  1934. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1935. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1936. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全域指标定义';
  1937. -- ========== 全域指标值表 ==========
  1938. CREATE TABLE IF NOT EXISTS indicator_values (
  1939. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1940. source_type VARCHAR(50) NOT NULL COMMENT '来源: tongue_record/health_report/assessment',
  1941. source_id BIGINT NOT NULL COMMENT '来源记录ID',
  1942. definition_id BIGINT NOT NULL COMMENT 'FK→indicator_definitions.id',
  1943. value VARCHAR(200) COMMENT '值',
  1944. numeric_value DECIMAL(10,2) COMMENT '数值(number类型时用)',
  1945. remark TEXT COMMENT '备注',
  1946. recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1947. INDEX idx_source (source_type, source_id),
  1948. INDEX idx_definition (definition_id)
  1949. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全域指标值';
  1950. -- ========== 舌诊主记录表 ==========
  1951. CREATE TABLE IF NOT EXISTS tongue_records (
  1952. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1953. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  1954. child_id BIGINT COMMENT '孩子ID',
  1955. image_url VARCHAR(500) COMMENT '舌象图片URL',
  1956. overall_assessment TEXT COMMENT '总体评估',
  1957. status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/confirmed',
  1958. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1959. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  1960. INDEX idx_member (member_id, child_id),
  1961. INDEX idx_status (status)
  1962. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='舌诊主记录';
  1963. -- ========== 种子数据:舌诊7项指标定义 ==========
  1964. INSERT IGNORE INTO indicator_definitions (domain, category, code, name, data_type, options, sort_order, status) VALUES
  1965. ('physical', '舌色', 'tongue_color', '舌体颜色', 'enum', '["淡红","红","绛","青紫"]', 1, 1),
  1966. ('physical', '苔色', 'coating_color', '苔色', 'enum', '["薄白","白","黄","灰黑"]', 2, 1),
  1967. ('physical', '苔质', 'coating_texture', '苔质', 'enum', '["润","燥","滑","涩","腻"]', 3, 1),
  1968. ('physical', '裂纹', 'fissure', '裂纹程度', 'enum', '["无","轻","中","重"]', 4, 1),
  1969. ('physical', '齿痕', 'teeth_mark', '齿痕程度', 'enum', '["无","轻","中","重"]', 5, 1),
  1970. ('physical', '舌下络脉', 'sublingual_vein', '舌下络脉', 'enum', '["正常","轻","中","重"]', 6, 1),
  1971. ('physical', '体质', 'constitution', '体质辨识', 'enum', '["平和质","气虚质","阳虚质","阴虚质","湿热质","痰湿质","血瘀质","气郁质","特禀质"]', 7, 1);
  1972. -- =============================================
  1973. -- 活动报名 & 能量规则引擎 v1.4 - 字段扩展
  1974. -- 通过 DatabaseInitializer.java 在 ALTER 阶段执行
  1975. -- =============================================
  1976. -- 活动表扩展字段
  1977. ALTER TABLE activities ADD COLUMN require_registration TINYINT DEFAULT 1 COMMENT '是否需要报名: 1=需要, 0=直接参与';
  1978. ALTER TABLE activities ADD COLUMN require_checkin_review TINYINT DEFAULT 1 COMMENT '打卡是否需要审核: 1=需要, 0=直接通过';
  1979. ALTER TABLE activities ADD COLUMN energy_penalty_unregistered INT DEFAULT 5 COMMENT '未报名打卡的行能量扣减值';
  1980. -- ============================================================
  1981. -- 新增:系统配置表(角色年龄阈值等)
  1982. -- ============================================================
  1983. CREATE TABLE IF NOT EXISTS system_config (
  1984. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  1985. config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
  1986. config_value TEXT COMMENT '配置值',
  1987. description TEXT COMMENT '说明',
  1988. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  1989. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  1990. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  1991. -- ============================================================
  1992. -- 数据迁移: children → family_members + roleOverride 变更
  1993. -- 执行时机: Phase 9(所有代码变更完成后、上线前)
  1994. -- ============================================================
  1995. -- 1. family_members.capability_role → role_override (已在 DDL 中 ALTER)
  1996. -- 2. relationship_types.capability_role → default_role (已在 DDL 中 ALTER)
  1997. -- ============================================================
  1998. -- 数据迁移: children → family_members + roleOverride 变更
  1999. -- 执行时机: Phase 9(所有代码变更完成后、上线前)
  2000. -- ============================================================
  2001. -- 1. family_members 已包含所有必要字段(role_override, 孩子专属字段已在 DDL 中)
  2002. -- relationship_types.capability_role → default_role 已在 DDL 中 ALTER
  2003. -- 2. 迁移 children 数据到 family_members(匹配更新:family_members 已存在该成员记录时更新)
  2004. UPDATE family_members fm
  2005. INNER JOIN children c ON fm.family_id = c.family_id AND fm.nickname = c.nickname AND fm.user_id = c.user_id
  2006. SET
  2007. fm.id_card = c.id_card,
  2008. fm.penalty_enabled = c.penalty_enabled,
  2009. fm.theme = c.theme,
  2010. fm.system_points = c.system_points,
  2011. fm.streak_days = c.streak_days,
  2012. fm.last_task_date = c.last_task_date,
  2013. fm.focus_max_daily = c.focus_max_daily,
  2014. fm.focus_remaining = c.focus_remaining,
  2015. fm.focus_reset_date = c.focus_reset_date,
  2016. fm.total_points = c.total_points,
  2017. fm.show_to_family = c.show_to_family,
  2018. fm.birthday = c.birthday,
  2019. fm.gender = c.gender,
  2020. fm.phone = c.phone,
  2021. fm.role_override = 'child';
  2022. -- 3. 迁移 children 数据到 family_members(不匹配则插入新记录)
  2023. INSERT INTO family_members (family_id, user_id, nickname, birthday, gender, phone,
  2024. id_card, penalty_enabled, theme, system_points, streak_days, last_task_date,
  2025. focus_max_daily, focus_remaining, focus_reset_date, show_to_family, total_points,
  2026. role_override, created_at, updated_at)
  2027. SELECT family_id, user_id, nickname, birthday, gender, phone,
  2028. id_card, penalty_enabled, theme, system_points, streak_days, last_task_date,
  2029. focus_max_daily, focus_remaining, focus_reset_date, show_to_family, total_points,
  2030. 'child', created_at, updated_at
  2031. FROM children
  2032. WHERE NOT EXISTS (
  2033. SELECT 1 FROM family_members fm2
  2034. WHERE fm2.family_id = children.family_id
  2035. AND fm2.nickname = children.nickname
  2036. AND fm2.user_id = children.user_id
  2037. );
  2038. -- 4. 插入 system_config 初始数据
  2039. INSERT INTO system_config (config_key, config_value, description) VALUES
  2040. ('child_age_threshold', '18', '未成年年龄分界线(岁)'),
  2041. ('elderly_age_threshold', '65', '老年年龄分界线(岁)')
  2042. ON DUPLICATE KEY UPDATE config_value = VALUES(config_value);
  2043. -- 5. 删除 children 表(最后执行,确认迁移完成后再执行此步)
  2044. -- DROP TABLE IF EXISTS children;
  2045. -- ============================================================
  2046. -- 购物车表
  2047. -- ============================================================
  2048. CREATE TABLE IF NOT EXISTS cart (
  2049. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2050. user_id BIGINT NOT NULL COMMENT '用户ID',
  2051. product_id BIGINT NOT NULL COMMENT '商品ID',
  2052. quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
  2053. sku_id BIGINT DEFAULT NULL COMMENT 'SKU ID',
  2054. spec_option_ids VARCHAR(500) DEFAULT NULL COMMENT '规格选项ID列表JSON',
  2055. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2056. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2057. INDEX idx_user_product (user_id, product_id)
  2058. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
  2059. -- ============================================================
  2060. -- 供应商销售体系
  2061. -- ============================================================
  2062. CREATE TABLE IF NOT EXISTS supply_system (
  2063. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2064. name VARCHAR(100) NOT NULL COMMENT '体系名称',
  2065. admin_id BIGINT NOT NULL COMMENT '管理员用户ID',
  2066. settlement_period_days INT NOT NULL DEFAULT 30 COMMENT '账期(天)',
  2067. platform_profit_rate DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)',
  2068. description TEXT COMMENT '描述',
  2069. models TEXT COMMENT 'AI模型列表JSON,如["agnes-image-2.0-flash","agnes-2.5-flash"]',
  2070. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled',
  2071. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2072. updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2073. KEY idx_admin_id (admin_id)
  2074. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商体系';
  2075. CREATE TABLE IF NOT EXISTS supply_system_member (
  2076. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2077. system_id BIGINT NOT NULL COMMENT '体系ID',
  2078. user_id BIGINT NOT NULL COMMENT '用户ID',
  2079. role VARCHAR(20) NOT NULL DEFAULT 'member' COMMENT '角色: admin/member',
  2080. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive',
  2081. joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2082. UNIQUE KEY uk_system_user (system_id, user_id),
  2083. KEY idx_user_id (user_id)
  2084. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体系成员';
  2085. CREATE TABLE IF NOT EXISTS supply_settlement (
  2086. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2087. system_id BIGINT NOT NULL COMMENT '体系ID',
  2088. period_start DATE NOT NULL COMMENT '结算周期开始',
  2089. period_end DATE NOT NULL COMMENT '结算周期结束',
  2090. total_sales INT NOT NULL DEFAULT 0 COMMENT '销售总额(分)',
  2091. platform_profit INT NOT NULL DEFAULT 0 COMMENT '平台留利金额(分)',
  2092. supplier_payout INT NOT NULL DEFAULT 0 COMMENT '供应商实付(分)',
  2093. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled',
  2094. settled_at DATETIME COMMENT '结算时间',
  2095. remark TEXT COMMENT '备注',
  2096. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2097. KEY idx_system_id (system_id),
  2098. KEY idx_period (period_start, period_end)
  2099. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算记录';
  2100. CREATE TABLE IF NOT EXISTS supply_settlement_detail (
  2101. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2102. settlement_id BIGINT NOT NULL COMMENT '结算ID',
  2103. order_id BIGINT NOT NULL COMMENT '订单ID',
  2104. order_no VARCHAR(64) NOT NULL COMMENT '订单号',
  2105. product_name VARCHAR(200) NOT NULL COMMENT '商品名称',
  2106. amount INT NOT NULL COMMENT '订单金额(分)',
  2107. platform_fee INT NOT NULL COMMENT '平台留利(分)',
  2108. supplier_id BIGINT COMMENT '收款供应商用户ID',
  2109. supplier_name VARCHAR(100) COMMENT '收款供应商名称',
  2110. payout INT NOT NULL COMMENT '供应商实付(分)',
  2111. created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  2112. KEY idx_settlement_id (settlement_id),
  2113. KEY idx_order_id (order_id)
  2114. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算明细';
  2115. -- =============================================
  2116. -- 收货人与购买信息采集
  2117. -- =============================================
  2118. CREATE TABLE IF NOT EXISTS consignees (
  2119. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  2120. user_id BIGINT NOT NULL COMMENT '所属用户ID',
  2121. name VARCHAR(100) NOT NULL COMMENT '收货人姓名',
  2122. phone VARCHAR(20) COMMENT '手机号',
  2123. id_card VARCHAR(20) COMMENT '身份证号',
  2124. hand_signature TEXT COMMENT '手签名(base64图片或URL)',
  2125. ethnicity VARCHAR(20) COMMENT '民族',
  2126. blood_type VARCHAR(20) COMMENT '血型',
  2127. address VARCHAR(500) COMMENT '收货地址',
  2128. is_default TINYINT(1) DEFAULT 0 COMMENT '是否默认收货人',
  2129. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2130. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  2131. INDEX idx_user_id (user_id)
  2132. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收货人信息(含购买所需特殊信息)';
  2133. CREATE TABLE IF NOT EXISTS product_purchase_fields (
  2134. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  2135. product_id BIGINT NOT NULL COMMENT '商品ID',
  2136. field_key VARCHAR(50) NOT NULL COMMENT '字段标识: name/phone/id_card/hand_signature/ethnicity/blood_type',
  2137. field_name VARCHAR(100) NOT NULL COMMENT '显示名: 收货人姓名/手机号/身份证号/手签名/民族/血型',
  2138. is_required TINYINT(1) DEFAULT 1 COMMENT '是否必填 1=是 0=否',
  2139. sort_order INT DEFAULT 0 COMMENT '排序',
  2140. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2141. INDEX idx_product_id (product_id),
  2142. UNIQUE KEY uk_product_field (product_id, field_key)
  2143. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品购买信息字段配置';
  2144. -- AI管家会话表
  2145. CREATE TABLE IF NOT EXISTS butler_sessions (
  2146. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2147. user_id BIGINT NOT NULL COMMENT '用户ID',
  2148. title VARCHAR(200) DEFAULT '新会话' COMMENT '会话标题',
  2149. conversation_id VARCHAR(100) COMMENT 'Dify对话ID',
  2150. context TEXT COMMENT '上下文信息(JSON)',
  2151. status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active(进行中)/archived(已归档)',
  2152. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2153. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2154. INDEX idx_user_id (user_id),
  2155. INDEX idx_status (status),
  2156. INDEX idx_user_status (user_id, status)
  2157. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI管家会话表';
  2158. -- 家庭订阅记录
  2159. CREATE TABLE IF NOT EXISTS member_subscription (
  2160. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2161. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2162. `level` VARCHAR(10) NOT NULL DEFAULT 'L1' COMMENT 'L1=一生一世, L2=久久一生',
  2163. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active/expired/cancelled',
  2164. start_time DATETIME DEFAULT NULL COMMENT '开始时间',
  2165. expire_time DATETIME DEFAULT NULL COMMENT '到期时间',
  2166. payment_id BIGINT DEFAULT NULL COMMENT '关联订单ID',
  2167. auto_renew TINYINT(1) DEFAULT 0 COMMENT '自动续费(L2)',
  2168. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2169. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2170. INDEX idx_family_id (family_id),
  2171. INDEX idx_status (status),
  2172. INDEX idx_expire_time (expire_time)
  2173. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭订阅记录';
  2174. -- 订阅订单
  2175. CREATE TABLE IF NOT EXISTS member_subscription_order (
  2176. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2177. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2178. `level` VARCHAR(10) NOT NULL COMMENT 'L1/L2',
  2179. amount INT NOT NULL COMMENT '金额(分)',
  2180. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/paid/cancelled/refunded',
  2181. payment_type VARCHAR(20) DEFAULT NULL COMMENT '支付方式 wechat/alipay',
  2182. transaction_id VARCHAR(64) DEFAULT NULL COMMENT '微信支付订单号',
  2183. order_no VARCHAR(64) NOT NULL COMMENT '订单号',
  2184. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2185. paid_at DATETIME DEFAULT NULL,
  2186. UNIQUE KEY uk_order_no (order_no),
  2187. INDEX idx_family_id (family_id),
  2188. INDEX idx_status (status)
  2189. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订阅订单';
  2190. -- 权益使用日志
  2191. CREATE TABLE IF NOT EXISTS subscription_benefit_log (
  2192. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2193. subscription_id BIGINT NOT NULL COMMENT '订阅ID',
  2194. benefit_code VARCHAR(50) NOT NULL COMMENT '权益代码',
  2195. used_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2196. detail TEXT COMMENT '使用详情(JSON)',
  2197. INDEX idx_subscription_id (subscription_id)
  2198. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权益使用日志';
  2199. -- 推广等级 R0-R4
  2200. CREATE TABLE IF NOT EXISTS promotion_tier (
  2201. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2202. user_id BIGINT NOT NULL COMMENT '用户ID',
  2203. tier VARCHAR(20) NOT NULL DEFAULT 'R0' COMMENT 'R0利他者/R1传福人/R2聚能师/R3启慧者/R4传承者',
  2204. team_size_1st INT DEFAULT 0 COMMENT '一层团队人数',
  2205. team_size_2nd INT DEFAULT 0 COMMENT '二层团队人数',
  2206. team_size_3rd INT DEFAULT 0 COMMENT '三层团队人数',
  2207. total_team_size INT DEFAULT 0 COMMENT '三层累计总人数',
  2208. total_referral_earnings INT DEFAULT 0 COMMENT '累计推荐佣金(分)',
  2209. total_share_earnings INT DEFAULT 0 COMMENT '累计消费返利(分)',
  2210. promoted_at DATETIME DEFAULT NULL COMMENT '最近晋级时间',
  2211. last_change_at DATETIME DEFAULT NULL COMMENT '最后变更时间',
  2212. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2213. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2214. UNIQUE KEY uk_user_id (user_id),
  2215. INDEX idx_tier (tier)
  2216. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广等级';
  2217. -- 推广等级变更记录
  2218. CREATE TABLE IF NOT EXISTS promotion_tier_change_log (
  2219. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2220. user_id BIGINT NOT NULL COMMENT '用户ID',
  2221. old_tier VARCHAR(20) DEFAULT NULL COMMENT '变更前等级',
  2222. new_tier VARCHAR(20) NOT NULL COMMENT '变更后等级',
  2223. reason VARCHAR(50) DEFAULT NULL COMMENT 'qualify升级/demote降级/admin管理员调整',
  2224. changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2225. INDEX idx_user_id (user_id)
  2226. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广等级变更记录';
  2227. -- 推荐关系树(三层)
  2228. CREATE TABLE IF NOT EXISTS referral_tree (
  2229. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2230. parent_id BIGINT NOT NULL COMMENT '推荐人ID',
  2231. child_id BIGINT NOT NULL COMMENT '被推荐人ID',
  2232. level INT NOT NULL COMMENT '层级深度(1/2/3)',
  2233. path VARCHAR(255) DEFAULT NULL COMMENT 'materialized path如/1/2/3/',
  2234. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2235. UNIQUE KEY uk_child_id (child_id),
  2236. INDEX idx_parent_id (parent_id),
  2237. INDEX idx_level (level)
  2238. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推荐关系树';
  2239. -- 产品P点配置
  2240. CREATE TABLE IF NOT EXISTS product_ppoint (
  2241. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2242. product_id BIGINT NOT NULL COMMENT '产品ID',
  2243. ppoint INT NOT NULL DEFAULT 0 COMMENT 'P点值(平台利润分)',
  2244. start_date DATE DEFAULT NULL COMMENT '生效日期',
  2245. end_date DATE DEFAULT NULL COMMENT '失效日期',
  2246. created_by BIGINT DEFAULT NULL COMMENT '创建人',
  2247. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2248. INDEX idx_product_id (product_id),
  2249. INDEX idx_dates (start_date, end_date)
  2250. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品P点配置';
  2251. -- 测评商品扩展信息
  2252. CREATE TABLE IF NOT EXISTS assessment_products (
  2253. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2254. product_id BIGINT NOT NULL COMMENT '关联products表',
  2255. assessment_type VARCHAR(20) NOT NULL COMMENT 'single=单包, bundle=套餐',
  2256. total_sessions INT NOT NULL DEFAULT 1 COMMENT '包含测评次数',
  2257. validity_days INT NOT NULL DEFAULT 365 COMMENT '有效期(天)',
  2258. guide_scope VARCHAR(50) DEFAULT 'all' COMMENT '规划师范围: all/assigned/auto',
  2259. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2260. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2261. INDEX idx_product_id (product_id)
  2262. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评商品扩展信息';
  2263. -- 测评额度表
  2264. CREATE TABLE IF NOT EXISTS assessment_quotas (
  2265. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2266. quota_no VARCHAR(32) NOT NULL COMMENT '额度编号',
  2267. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2268. child_id BIGINT COMMENT '指定孩子ID(NULL=不限)',
  2269. product_order_id BIGINT NOT NULL COMMENT '来源订单ID',
  2270. product_id BIGINT NOT NULL COMMENT '商品ID',
  2271. product_name VARCHAR(100) NOT NULL COMMENT '商品名快照',
  2272. total_sessions INT NOT NULL DEFAULT 1 COMMENT '总次数',
  2273. remaining_sessions INT NOT NULL DEFAULT 1 COMMENT '剩余次数',
  2274. validity_start DATETIME NOT NULL COMMENT '有效期开始',
  2275. validity_end DATETIME NOT NULL COMMENT '有效期截止',
  2276. status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active/expired/used_all/cancelled',
  2277. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2278. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2279. INDEX idx_family (family_id),
  2280. INDEX idx_order (product_order_id),
  2281. UNIQUE KEY uk_quota_no (quota_no)
  2282. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评额度表';
  2283. -- 测评执行记录表
  2284. CREATE TABLE IF NOT EXISTS assessment_executions (
  2285. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2286. quota_id BIGINT NOT NULL COMMENT '关联额度ID',
  2287. child_id BIGINT NOT NULL COMMENT '被测评孩子',
  2288. guide_id BIGINT COMMENT '执行规划师ID',
  2289. assessment_type VARCHAR(30) COMMENT '本次具体测评类型',
  2290. appointment_id BIGINT COMMENT '关联预约ID',
  2291. result_id BIGINT COMMENT '关联测评结果ID',
  2292. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/in_progress/completed/cancelled',
  2293. scheduled_date DATETIME COMMENT '预约执行时间',
  2294. completed_at DATETIME COMMENT '实际完成时间',
  2295. notes VARCHAR(500) COMMENT '备注',
  2296. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2297. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2298. INDEX idx_quota (quota_id),
  2299. INDEX idx_child (child_id),
  2300. INDEX idx_appointment (appointment_id)
  2301. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评执行记录表';
  2302. -- 测评指导意见表(结构化存储)
  2303. CREATE TABLE IF NOT EXISTS growth_guidances (
  2304. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2305. result_id BIGINT NOT NULL COMMENT '关联测评结果ID',
  2306. dimension VARCHAR(30) NOT NULL COMMENT '维度: attention/focus/memory/logic/emotion/general',
  2307. score INT COMMENT '该维度得分(0-100)',
  2308. suggestion TEXT NOT NULL COMMENT '建议内容',
  2309. priority INT DEFAULT 0 COMMENT '优先级(0=普通, 1=重要, 2=紧急)',
  2310. sort_order INT DEFAULT 0 COMMENT '排序',
  2311. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2312. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2313. INDEX idx_result (result_id)
  2314. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评指导意见(结构化)';
  2315. -- 方案生成规则表
  2316. CREATE TABLE IF NOT EXISTS assessment_plan_rules (
  2317. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2318. dimension VARCHAR(30) NOT NULL COMMENT '测评维度: attention/focus/memory/logic/emotion',
  2319. score_min INT NOT NULL COMMENT '分数下限(含)',
  2320. score_max INT NOT NULL COMMENT '分数上限(含)',
  2321. template_id BIGINT NOT NULL COMMENT '关联TaskTemplatePackage ID',
  2322. priority INT DEFAULT 0 COMMENT '优先级',
  2323. is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用',
  2324. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2325. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2326. INDEX idx_dimension (dimension),
  2327. INDEX idx_score (score_min, score_max)
  2328. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='方案生成规则';
  2329. -- 家庭访问安全日志表
  2330. CREATE TABLE IF NOT EXISTS family_access_logs (
  2331. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2332. user_id BIGINT NOT NULL COMMENT '访问方用户ID',
  2333. family_id BIGINT NOT NULL COMMENT '被访问的家庭ID',
  2334. request_uri VARCHAR(500) NOT NULL COMMENT '请求路径',
  2335. request_method VARCHAR(10) NOT NULL,
  2336. access_type VARCHAR(20) NOT NULL COMMENT 'check_type: query/path/body',
  2337. result VARCHAR(10) NOT NULL COMMENT 'allowed/denied/log_only',
  2338. client_ip VARCHAR(50),
  2339. user_agent VARCHAR(500),
  2340. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2341. INDEX idx_user_time (user_id, created_at),
  2342. INDEX idx_family_time (family_id, created_at)
  2343. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭访问安全日志';
  2344. -- 五维能量分数历史记录表
  2345. CREATE TABLE IF NOT EXISTS five_dimension_scores (
  2346. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2347. member_id BIGINT NOT NULL COMMENT '成员ID(user或family_member)',
  2348. member_type VARCHAR(20) NOT NULL COMMENT '成员类型: user/member',
  2349. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2350. dimension_code VARCHAR(20) NOT NULL COMMENT '维度编码: body/mind/wisdom/action/wealth',
  2351. score INT NOT NULL COMMENT '分数(0-100)',
  2352. assessed_at DATETIME NOT NULL COMMENT '评估时间',
  2353. source_type VARCHAR(50) COMMENT '来源类型: periodic/task/assessment/manual',
  2354. source_id BIGINT COMMENT '来源记录ID',
  2355. detail_json TEXT COMMENT '详细数据JSON',
  2356. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2357. INDEX idx_member_dim (member_id, member_type, dimension_code),
  2358. INDEX idx_family_time (family_id, assessed_at),
  2359. INDEX idx_source (source_type, source_id)
  2360. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='五维能量分数历史记录';
  2361. -- 家庭邀请令牌表
  2362. CREATE TABLE IF NOT EXISTS family_invitations (
  2363. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2364. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2365. token VARCHAR(64) NOT NULL UNIQUE COMMENT '邀请令牌(UUID)',
  2366. created_by BIGINT NOT NULL COMMENT '创建人用户ID',
  2367. status VARCHAR(16) DEFAULT 'active' COMMENT '状态: active/used/expired/revoked',
  2368. expires_at DATETIME COMMENT '过期时间',
  2369. max_use_count INT DEFAULT 1 COMMENT '最大使用次数',
  2370. used_count INT DEFAULT 0 COMMENT '已使用次数',
  2371. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2372. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2373. INDEX idx_family_id (family_id),
  2374. INDEX idx_token (token),
  2375. INDEX idx_status (status)
  2376. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭邀请令牌';
  2377. -- 规划师绑定家庭申请表
  2378. CREATE TABLE IF NOT EXISTS teacher_family_binding_requests (
  2379. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2380. teacher_id BIGINT NOT NULL COMMENT '规划师用户ID',
  2381. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2382. invitation_token VARCHAR(128) COMMENT '关联邀请码/令牌',
  2383. status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/approved/rejected/cancelled',
  2384. requested_at DATETIME COMMENT '申请时间',
  2385. decided_by BIGINT COMMENT '审批人用户ID',
  2386. decided_at DATETIME COMMENT '审批时间',
  2387. reject_reason VARCHAR(200) COMMENT '拒绝原因',
  2388. message VARCHAR(500) COMMENT '申请留言',
  2389. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2390. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2391. UNIQUE KEY uk_teacher_family (teacher_id, family_id),
  2392. INDEX idx_family_status (family_id, status)
  2393. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='规划师绑定家庭申请表';
  2394. -- Dify会话本地镜像表
  2395. CREATE TABLE IF NOT EXISTS chat_conversations (
  2396. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2397. user_id BIGINT NOT NULL,
  2398. dify_conversation_id VARCHAR(64),
  2399. assistant_type VARCHAR(32) COMMENT 'family/nutrition/tongue',
  2400. title VARCHAR(200),
  2401. last_message_at DATETIME,
  2402. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2403. UNIQUE KEY uk_dify_conv (dify_conversation_id),
  2404. INDEX idx_user (user_id)
  2405. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dify会话本地镜像';
  2406. CREATE TABLE IF NOT EXISTS chat_messages (
  2407. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2408. conversation_id BIGINT NOT NULL,
  2409. dify_message_id VARCHAR(64),
  2410. role VARCHAR(20) NOT NULL COMMENT 'user/assistant',
  2411. content TEXT NOT NULL,
  2412. inputs_json TEXT,
  2413. metadata TEXT,
  2414. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2415. INDEX idx_conv (conversation_id)
  2416. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dify消息本地镜像';
  2417. -- 迁移版本追踪表
  2418. CREATE TABLE IF NOT EXISTS schema_versions (
  2419. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2420. version_code VARCHAR(64) NOT NULL UNIQUE,
  2421. description VARCHAR(500),
  2422. checksum VARCHAR(64),
  2423. applied_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2424. applied_by VARCHAR(100)
  2425. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='迁移版本追踪表';
  2426. -- 待退款记录表
  2427. CREATE TABLE IF NOT EXISTS pending_refund (
  2428. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2429. user_id BIGINT NOT NULL COMMENT '用户ID',
  2430. withdrawal_request_id BIGINT COMMENT '提现申请ID',
  2431. amount INT NOT NULL COMMENT '退款金额(分)',
  2432. attempt_count INT DEFAULT 0 COMMENT '当前尝试次数',
  2433. max_attempts INT DEFAULT 10 COMMENT '最大重试次数',
  2434. next_retry_time DATETIME COMMENT '下次重试时间',
  2435. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/processing/success/failed',
  2436. failure_reason VARCHAR(500) COMMENT '失败原因',
  2437. refunded_amount INT COMMENT '实际退款金额(分)',
  2438. refunded_at DATETIME COMMENT '退款时间',
  2439. remark VARCHAR(500) COMMENT '备注',
  2440. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2441. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2442. INDEX idx_user_id (user_id),
  2443. INDEX idx_status (status),
  2444. INDEX idx_next_retry (next_retry_time),
  2445. INDEX idx_withdrawal_request (withdrawal_request_id)
  2446. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='待退款记录表';
  2447. -- 家庭每日运势表(迁移 79)
  2448. CREATE TABLE IF NOT EXISTS tianpan_daily_fortune (
  2449. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2450. family_id BIGINT NOT NULL COMMENT '家庭ID',
  2451. date VARCHAR(20) NOT NULL COMMENT '日期 YYYY-MM-DD',
  2452. lunar_date VARCHAR(50) COMMENT '农历日期',
  2453. day_ganzhi VARCHAR(10) COMMENT '日柱',
  2454. five_elements_main VARCHAR(20) COMMENT '当日五行主气',
  2455. five_elements_detail VARCHAR(100) COMMENT '五行详情',
  2456. auspicious TEXT COMMENT '宜做的事(JSON数组)',
  2457. inauspicious TEXT COMMENT '忌做的事(JSON数组)',
  2458. family_advice TEXT COMMENT '家庭建议',
  2459. focus_member_name VARCHAR(50) COMMENT '关注成员',
  2460. focus_member_tip TEXT COMMENT '成员提示',
  2461. wuxing_tip TEXT COMMENT '五行提示',
  2462. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2463. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2464. UNIQUE KEY uk_family_date (family_id, date),
  2465. INDEX idx_family_id (family_id),
  2466. INDEX idx_date (date)
  2467. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭每日运势表';
  2468. -- 成员年度能量表(迁移 80)
  2469. CREATE TABLE IF NOT EXISTS tianpan_member_annual_energy (
  2470. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2471. member_id BIGINT NOT NULL COMMENT '成员ID',
  2472. year INT NOT NULL COMMENT '年份',
  2473. dimensions_body INT DEFAULT 0 COMMENT '身能量',
  2474. dimensions_mind INT DEFAULT 0 COMMENT '心能量',
  2475. dimensions_wisdom INT DEFAULT 0 COMMENT '智能量',
  2476. dimensions_action INT DEFAULT 0 COMMENT '行能量',
  2477. dimensions_wealth INT DEFAULT 0 COMMENT '富能量',
  2478. jupiter_phase VARCHAR(50) COMMENT '木星相位',
  2479. saturn_phase VARCHAR(50) COMMENT '土星相位',
  2480. highlights TEXT COMMENT '年度亮点(JSON数组)',
  2481. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2482. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2483. UNIQUE KEY uk_member_year (member_id, year),
  2484. INDEX idx_member_id (member_id),
  2485. INDEX idx_year (year)
  2486. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成员年度能量表';
  2487. -- 商品推荐日志表(迁移 80)
  2488. CREATE TABLE IF NOT EXISTS product_recommendation_log (
  2489. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2490. user_id BIGINT COMMENT '用户 ID',
  2491. product_id BIGINT COMMENT '商品 ID',
  2492. scene VARCHAR(32) COMMENT '触发场景:report_upload/manual/chat',
  2493. reason VARCHAR(255) COMMENT '推荐理由',
  2494. match_score DOUBLE COMMENT '匹配分',
  2495. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2496. INDEX idx_user_id (user_id)
  2497. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品推荐日志';
  2498. -- 商品维度关联表(迁移 81)
  2499. CREATE TABLE IF NOT EXISTS product_dimension_mapping (
  2500. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2501. product_id BIGINT NOT NULL COMMENT '商品 ID',
  2502. dimension_code VARCHAR(32) NOT NULL COMMENT '维度: body/wisdom/mind/action/wealth',
  2503. match_score INT DEFAULT 100 COMMENT '匹配度 0-100',
  2504. match_reason VARCHAR(200) COMMENT '匹配原因',
  2505. tags VARCHAR(500) COMMENT '推荐标签 JSON',
  2506. enabled TINYINT DEFAULT 1,
  2507. created_at DATETIME,
  2508. updated_at DATETIME,
  2509. INDEX idx_product (product_id),
  2510. INDEX idx_dimension (dimension_code)
  2511. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品维度关联表';
  2512. -- 复购提醒发送记录表(迁移 82)
  2513. CREATE TABLE IF NOT EXISTS repurchase_reminder_record (
  2514. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2515. user_id BIGINT NOT NULL,
  2516. product_id BIGINT NOT NULL,
  2517. order_id BIGINT COMMENT '关联订单 ID',
  2518. reminder_days INT DEFAULT 30,
  2519. sent_at DATETIME,
  2520. clicked TINYINT DEFAULT 0,
  2521. purchased TINYINT DEFAULT 0,
  2522. INDEX idx_user_pending (user_id, purchased)
  2523. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='复购提醒发送记录';
  2524. -- 复购提醒配置表(迁移 83)
  2525. CREATE TABLE IF NOT EXISTS repurchase_reminder_config (
  2526. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2527. product_category VARCHAR(100),
  2528. product_id BIGINT COMMENT '特定商品 ID(优先于 category)',
  2529. reminder_days INT DEFAULT 30,
  2530. reminder_template VARCHAR(500) COMMENT '提醒话术模板',
  2531. max_reminders INT DEFAULT 3,
  2532. enabled TINYINT DEFAULT 1,
  2533. created_at DATETIME
  2534. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='复购提醒配置表';
  2535. -- products 表添加推荐相关字段(迁移 81-83)
  2536. ALTER TABLE products ADD COLUMN IF NOT EXISTS recommendation_tags VARCHAR(500) COMMENT '推荐标签 JSON' AFTER domain;
  2537. ALTER TABLE products ADD COLUMN IF NOT EXISTS purchase_count_threshold INT DEFAULT 0;
  2538. ALTER TABLE products ADD COLUMN IF NOT EXISTS repurchase_interval_days INT DEFAULT 30;
  2539. -- 社交圈/珍珠表(迁移 85)
  2540. CREATE TABLE IF NOT EXISTS social_circle (
  2541. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2542. name VARCHAR(100) NOT NULL COMMENT '圈子名称',
  2543. type VARCHAR(50) NOT NULL COMMENT '类型: topic/activity/hobby/ability/product/health/provider',
  2544. match_source VARCHAR(50) NOT NULL COMMENT '匹配源: article/activity/game/assessment/product/health_report/teacher',
  2545. source_id BIGINT COMMENT '匹配源ID',
  2546. member_count INT DEFAULT 0 COMMENT '成员数',
  2547. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2548. INDEX idx_type (type),
  2549. INDEX idx_match_source (match_source),
  2550. INDEX idx_source_id (source_id)
  2551. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社交圈/珍珠';
  2552. -- 社交圈成员表(迁移 85)
  2553. CREATE TABLE IF NOT EXISTS social_circle_member (
  2554. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2555. circle_id BIGINT NOT NULL,
  2556. member_id BIGINT NOT NULL COMMENT '用户ID',
  2557. member_type VARCHAR(20) NOT NULL COMMENT 'parent/child',
  2558. joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2559. UNIQUE KEY uk_circle_member (circle_id, member_id),
  2560. INDEX idx_member (member_id, member_type),
  2561. INDEX idx_circle_id (circle_id)
  2562. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='圈子成员';
  2563. -- AI对话摘要
  2564. CREATE TABLE IF NOT EXISTS ai_conversation_summary (
  2565. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2566. user_id BIGINT NOT NULL COMMENT '用户ID',
  2567. conversation_id VARCHAR(100) NOT NULL COMMENT 'Dify会话ID',
  2568. summary_text TEXT COMMENT '对话摘要文本',
  2569. summary_tokens INT DEFAULT 0 COMMENT '摘要token数',
  2570. message_count INT DEFAULT 0 COMMENT '本次对话消息数',
  2571. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2572. INDEX idx_conversation (conversation_id),
  2573. INDEX idx_user (user_id)
  2574. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI对话摘要';
  2575. -- AI用户关键事实
  2576. CREATE TABLE IF NOT EXISTS ai_user_facts (
  2577. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2578. user_id BIGINT NOT NULL COMMENT '用户ID',
  2579. fact_key VARCHAR(100) NOT NULL COMMENT '事实键',
  2580. fact_value VARCHAR(500) COMMENT '事实值',
  2581. source_conversation VARCHAR(100) COMMENT '来源会话ID',
  2582. confidence DECIMAL(3,2) DEFAULT 1.00 COMMENT '置信度0-1',
  2583. created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  2584. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  2585. INDEX idx_user_key (user_id, fact_key),
  2586. INDEX idx_conversation (source_conversation)
  2587. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI用户关键事实';
  2588. CREATE TABLE IF NOT EXISTS supply_hierarchy (
  2589. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2590. system_id BIGINT NOT NULL COMMENT '供应商体系ID',
  2591. parent_id BIGINT NOT NULL COMMENT '上级供应商ID',
  2592. child_id BIGINT NOT NULL COMMENT '下级供应商ID',
  2593. level INT DEFAULT 1 COMMENT '层级深度',
  2594. status VARCHAR(20) DEFAULT 'active',
  2595. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2596. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2597. UNIQUE KEY uk_system_parent_child (system_id, parent_id, child_id),
  2598. KEY idx_system_child (system_id, child_id),
  2599. KEY idx_parent (parent_id)
  2600. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商上下级关系表';
  2601. CREATE TABLE IF NOT EXISTS supply_hierarchy_change_request (
  2602. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2603. system_id BIGINT NOT NULL,
  2604. applicant_id BIGINT NOT NULL COMMENT '申请人ID',
  2605. target_parent_id BIGINT NOT NULL COMMENT '目标上级ID',
  2606. status VARCHAR(20) DEFAULT 'pending',
  2607. reason VARCHAR(500),
  2608. reject_reason VARCHAR(500),
  2609. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2610. reviewed_at DATETIME,
  2611. reviewed_by BIGINT,
  2612. KEY idx_system_applicant (system_id, applicant_id),
  2613. KEY idx_status (status)
  2614. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商更换上级申请表';
  2615. CREATE TABLE IF NOT EXISTS butler_profiles (
  2616. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2617. user_id BIGINT NOT NULL COMMENT '用户ID',
  2618. tier VARCHAR(10) COMMENT '服务等级: L1/L2',
  2619. status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/approved/rejected',
  2620. member_count INT DEFAULT 0 COMMENT '当前服务家庭数',
  2621. max_members INT DEFAULT 50 COMMENT '最大服务家庭上限',
  2622. annual_fee_l1 BIGINT COMMENT '年费L1档(P点)',
  2623. annual_fee_l2 BIGINT COMMENT '年费L2档(P点)',
  2624. description TEXT COMMENT '个人简介',
  2625. certificates TEXT COMMENT '资质证书URL(JSON数组)',
  2626. reject_reason VARCHAR(500) COMMENT '审核拒绝原因',
  2627. commission_rate_l1 INT DEFAULT 1000 COMMENT '年度分佣比例L1(basis points,10000=100%)',
  2628. commission_rate_l2 INT DEFAULT 5000 COMMENT '年度分佣比例L2(basis points,10000=100%)',
  2629. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2630. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  2631. approved_at DATETIME COMMENT '审核通过时间',
  2632. UNIQUE KEY uk_user_id (user_id),
  2633. INDEX idx_status (status),
  2634. INDEX idx_tier (tier)
  2635. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管家服务提供商档案';
  2636. CREATE TABLE IF NOT EXISTS butler_service_records (
  2637. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2638. butler_id BIGINT NOT NULL COMMENT '管家用户ID',
  2639. member_user_id BIGINT NOT NULL COMMENT '会员用户ID',
  2640. subscription_id BIGINT COMMENT '关联订阅记录ID(年费服务时)',
  2641. service_type VARCHAR(20) NOT NULL COMMENT '服务类型: annual/per_session',
  2642. amount_p BIGINT NOT NULL COMMENT '服务金额(P点)',
  2643. platform_fee_p BIGINT DEFAULT 0 COMMENT '平台留成(P点)',
  2644. butler_amount_p BIGINT DEFAULT 0 COMMENT '管家所得(P点)',
  2645. member_tier VARCHAR(10) COMMENT '会员订阅级别: L1/L2',
  2646. year_month VARCHAR(7) COMMENT '结算年月 YYYY-MM',
  2647. remark VARCHAR(500) COMMENT '备注',
  2648. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2649. INDEX idx_butler_id (butler_id),
  2650. INDEX idx_member_user_id (member_user_id),
  2651. INDEX idx_year_month (year_month),
  2652. INDEX idx_service_type (service_type)
  2653. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管家服务记录';
  2654. CREATE TABLE IF NOT EXISTS butler_commission_settlements (
  2655. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2656. butler_id BIGINT NOT NULL COMMENT '管家用户ID',
  2657. year_month VARCHAR(7) NOT NULL COMMENT '结算年月 YYYY-MM',
  2658. member_count INT DEFAULT 0 COMMENT '本月服务家庭数',
  2659. annual_base_amount_p BIGINT DEFAULT 0 COMMENT '年费基准总额(P点)',
  2660. annual_butler_amount_p BIGINT DEFAULT 0 COMMENT '年费-管家所得(P点)',
  2661. annual_platform_amount_p BIGINT DEFAULT 0 COMMENT '年费-平台留成(P点)',
  2662. per_session_total_p BIGINT DEFAULT 0 COMMENT '按次服务总金额(P点)',
  2663. per_session_platform_total_p BIGINT DEFAULT 0 COMMENT '按次-平台留成(P点)',
  2664. per_session_butler_total_p BIGINT DEFAULT 0 COMMENT '按次-管家所得(P点)',
  2665. total_butler_amount_p BIGINT DEFAULT 0 COMMENT '本月管家总所得(P点)',
  2666. status VARCHAR(20) DEFAULT 'pending' COMMENT '结算状态: pending/paid',
  2667. settled_at DATETIME COMMENT '确认发放时间',
  2668. settled_by BIGINT COMMENT '结算确认人',
  2669. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2670. UNIQUE KEY uk_butler_month (butler_id, year_month),
  2671. INDEX idx_status (status),
  2672. INDEX idx_year_month (year_month)
  2673. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管家月度佣金结算单';
  2674. -- 家庭公共账户体系
  2675. CREATE TABLE family_earnings (
  2676. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2677. family_id BIGINT NOT NULL UNIQUE COMMENT '家庭ID',
  2678. total_earned BIGINT NOT NULL DEFAULT 0 COMMENT '累计推荐收入(分)',
  2679. available_amount BIGINT NOT NULL DEFAULT 0 COMMENT '当前可支配余额(分)',
  2680. withdrawn_amount BIGINT NOT NULL DEFAULT 0 COMMENT '已提现金额(分)',
  2681. distributed_amount BIGINT NOT NULL DEFAULT 0 COMMENT '已颁发给成员的金额(分)',
  2682. updated_at DATETIME,
  2683. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2684. INDEX idx_family_id (family_id)
  2685. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭公共账户';
  2686. CREATE TABLE family_earnings_member (
  2687. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2688. family_id BIGINT NOT NULL,
  2689. user_id BIGINT NOT NULL,
  2690. allocated_amount BIGINT NOT NULL DEFAULT 0 COMMENT '管理员累计分配(分)',
  2691. consumed_amount BIGINT NOT NULL DEFAULT 0 COMMENT '已消费金额(分)',
  2692. available_amount BIGINT NOT NULL DEFAULT 0 COMMENT '可消费余额=allocated-consumed(分)',
  2693. can_use_family_balance TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否允许使用家庭公共池',
  2694. updated_at DATETIME,
  2695. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2696. UNIQUE KEY idx_family_user (family_id, user_id)
  2697. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员已分配余额';
  2698. CREATE TABLE family_earnings_record (
  2699. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2700. family_id BIGINT NOT NULL,
  2701. type VARCHAR(20) NOT NULL COMMENT '类型: earn收入/withdraw提现/distribute颁发/consume消费',
  2702. amount BIGINT NOT NULL COMMENT '金额(分)',
  2703. from_user_id BIGINT COMMENT '操作人',
  2704. to_user_id BIGINT COMMENT '受益人(颁发/消费时填写)',
  2705. note VARCHAR(255) COMMENT '备注',
  2706. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  2707. INDEX idx_family_id (family_id),
  2708. INDEX idx_type (type)
  2709. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭收益收支流水';
  2710. ALTER TABLE commission_records ADD COLUMN family_id BIGINT COMMENT '归属家庭ID';
  2711. -- ========== Schema.sql 补充: 从 DatabaseInitializer 同步的表 ==========
  2712. -- after_sales_requests
  2713. CREATE TABLE IF NOT EXISTS after_sales_requests (id BIGINT AUTO_INCREMENT PRIMARY KEY,order_id BIGINT NOT NULL COMMENT '订单ID',order_no VARCHAR(32) NOT NULL COMMENT '订单号',user_id BIGINT NOT NULL COMMENT '用户ID',type VARCHAR(32) NOT NULL COMMENT '类型: REFUND/RETURN_REFUND',reason VARCHAR(255) COMMENT '原因',description TEXT COMMENT '描述',images TEXT COMMENT '凭证图片(JSON数组)',refund_amount INT DEFAULT 0 COMMENT '退款金额(分)',status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/approved/rejected/completed',reject_reason VARCHAR(255) COMMENT '驳回原因',handled_by BIGINT COMMENT '处理人ID',handled_at DATETIME COMMENT '处理时间',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_order (order_id),INDEX idx_user (user_id),INDEX idx_status (status)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='售后申请';
  2714. -- article_reading_records
  2715. CREATE TABLE IF NOT EXISTS article_reading_records (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT COMMENT '用户ID', child_id BIGINT NOT NULL COMMENT '孩子ID', content VARCHAR(500) COMMENT '阅读内容摘要', duration_seconds INT DEFAULT 0 COMMENT '阅读时长(秒)', read_at DATETIME COMMENT '阅读时间', created_at DATETIME, INDEX idx_child_id (child_id), INDEX idx_read_at (read_at)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章阅读记录表';
  2716. -- bazi_reading_template
  2717. CREATE TABLE IF NOT EXISTS bazi_reading_template (id BIGINT AUTO_INCREMENT PRIMARY KEY, element VARCHAR(20) NOT NULL COMMENT '五行: wood/fire/earth/metal/water', condition VARCHAR(20) NOT NULL COMMENT '状态: strong/weak/balanced', personal_trait TEXT COMMENT '性格特质描述', mind_growth_advice TEXT COMMENT '心理成长建议', daily_tip_template TEXT COMMENT '每日宜忌模板', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_element_condition (element, condition)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='五行命理解读模板';
  2718. -- cart_items
  2719. CREATE TABLE IF NOT EXISTS cart_items (id BIGINT AUTO_INCREMENT PRIMARY KEY,user_id BIGINT NOT NULL COMMENT '用户ID',product_id BIGINT NOT NULL COMMENT '商品ID',quantity INT DEFAULT 1 COMMENT '数量',selected TINYINT(1) DEFAULT 1 COMMENT '是否选中',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_user (user_id),INDEX idx_product (product_id),UNIQUE KEY uk_user_product (user_id, product_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
  2720. -- contacts
  2721. CREATE TABLE IF NOT EXISTS contacts (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', name VARCHAR(100) NOT NULL COMMENT '姓名', phone VARCHAR(20) COMMENT '电话', avatar VARCHAR(500) COMMENT '头像', relationship_type VARCHAR(20) COMMENT '关系类型: family/friend/partner/colleague/other', known_since DATETIME COMMENT '认识时间', bio VARCHAR(500) COMMENT '简介', birthday DATE COMMENT '生日', intimacy_level INT DEFAULT 0 COMMENT '亲密度(0-100)', contact_source VARCHAR(20) DEFAULT 'manual' COMMENT '来源: phone/manual', tags VARCHAR(500) COMMENT '标签(逗号分隔)', last_contact_at DATETIME COMMENT '最近联系时间', contact_count INT DEFAULT 0 COMMENT '联系次数', notes TEXT COMMENT '备注', family_member_id BIGINT DEFAULT NULL COMMENT '关联的家庭成员ID', invited_status VARCHAR(16) DEFAULT 'none' COMMENT '邀请加入家庭状态: none/invited/accepted/declined', created_at DATETIME, updated_at DATETIME, INDEX idx_user_id (user_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='联系人表';
  2722. -- family_member_logs
  2723. CREATE TABLE IF NOT EXISTS family_member_logs (id BIGINT AUTO_INCREMENT PRIMARY KEY, family_id BIGINT NOT NULL COMMENT '家庭ID', member_id BIGINT NOT NULL COMMENT '成员ID', action VARCHAR(32) NOT NULL COMMENT '操作: join/leave/update/kick', old_value VARCHAR(500) COMMENT '旧值', new_value VARCHAR(500) COMMENT '新值', operator_id BIGINT COMMENT '操作人用户ID', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_family_id (family_id), INDEX idx_member_id (member_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员变更日志';
  2724. -- dan_knowledge_base
  2725. CREATE TABLE IF NOT EXISTS dan_knowledge_base (id BIGINT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(200) NOT NULL COMMENT '知识标题', content TEXT NOT NULL COMMENT '知识内容', sort INT DEFAULT 0 COMMENT '排序', status TINYINT(1) DEFAULT 1 COMMENT '状态: 0禁用 1启用', remark VARCHAR(500) COMMENT '备注', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库表';
  2726. -- dan_knowledge_base_dimension
  2727. CREATE TABLE IF NOT EXISTS dan_knowledge_base_dimension (id BIGINT PRIMARY KEY AUTO_INCREMENT, knowledge_id BIGINT NOT NULL COMMENT '知识库ID', dimension_id BIGINT NOT NULL COMMENT '维度配置ID', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_knowledge_dimension (knowledge_id, dimension_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识-维度关联表';
  2728. -- dan_knowledge_base_tag
  2729. CREATE TABLE IF NOT EXISTS dan_knowledge_base_tag (id BIGINT PRIMARY KEY AUTO_INCREMENT, knowledge_id BIGINT NOT NULL, tag_id BIGINT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_knowledge_tag (knowledge_id, tag_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识-标签关联表';
  2730. -- dan_knowledge_tag
  2731. CREATE TABLE IF NOT EXISTS dan_knowledge_tag (id BIGINT PRIMARY KEY AUTO_INCREMENT, tag_name VARCHAR(100) NOT NULL UNIQUE COMMENT '标签名', tag_type VARCHAR(50) DEFAULT 'custom' COMMENT '标签类型: custom/auto', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='标签表';
  2732. -- distribution_relations
  2733. CREATE TABLE IF NOT EXISTS distribution_relations (id BIGINT AUTO_INCREMENT PRIMARY KEY,system_id BIGINT NOT NULL COMMENT '体系ID',user_id BIGINT NOT NULL COMMENT '用户ID',parent_id BIGINT COMMENT '上级用户ID(null=根)',depth INT DEFAULT 0 COMMENT '层级深度',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_system (system_id),INDEX idx_user (user_id),INDEX idx_parent (parent_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售关系';
  2734. -- distribution_systems
  2735. CREATE TABLE IF NOT EXISTS distribution_systems (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(64) NOT NULL COMMENT '体系名称',description VARCHAR(255) COMMENT '描述',owner_id BIGINT COMMENT '创建者ID',profit_rate INT DEFAULT 0 COMMENT '平台利润率(千分比)',enabled TINYINT(1) DEFAULT 1 COMMENT '启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='销售体系';
  2736. -- emotion_checkin
  2737. CREATE TABLE IF NOT EXISTS emotion_checkin (id BIGINT AUTO_INCREMENT PRIMARY KEY, child_id BIGINT NOT NULL COMMENT '孩子ID', user_id BIGINT NOT NULL COMMENT '打卡人用户ID', emotion_type INT NOT NULL COMMENT '情绪类型: 1快乐/2平和平静/3平静/4有点不舒服/5难受/6烦躁/7生气/8焦虑/9恐惧', emotion_name VARCHAR(20) COMMENT '情绪名称: happy/calm/peaceful/uncomfortable/sad/irritable/angry/anxious/fearful', energy_level INT NOT NULL DEFAULT 3 COMMENT '能量状态: 1很低/2低/3中等/4高/5很高', note TEXT COMMENT '打卡备注', photo_url VARCHAR(500) COMMENT '照片URL', favorite_thing VARCHAR(500) COMMENT '今日最喜欢的一件事', points_awarded INT DEFAULT 0 COMMENT '奖励积分', parent_visible TINYINT DEFAULT 1 COMMENT '家长可见: 1可见/0不可见', checkin_date DATE NOT NULL COMMENT '打卡日期', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_child_id (child_id), INDEX idx_user_id (user_id), INDEX idx_checkin_date (checkin_date), INDEX idx_child_date (child_id, checkin_date)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='情绪打卡表';
  2738. -- health_checkins
  2739. CREATE TABLE IF NOT EXISTS health_checkins (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT COMMENT '用户ID(家长)', child_id BIGINT COMMENT '孩子ID', checkin_date DATE COMMENT '打卡日期', behaviors TEXT COMMENT '打卡行为JSON数组', note VARCHAR(500) COMMENT '备注', mood VARCHAR(20) COMMENT '心情: happy/normal/sad/angry/sick', earned_energy INT DEFAULT 5 COMMENT '获得能量值', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_child_id (child_id), INDEX idx_checkin_date (checkin_date)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康打卡表';
  2740. -- health_disease_risk
  2741. CREATE TABLE IF NOT EXISTS health_disease_risk (id BIGINT AUTO_INCREMENT PRIMARY KEY, report_id BIGINT NOT NULL COMMENT '关联报告ID', disease_name VARCHAR(100) NOT NULL COMMENT '疾病名称', risk_value VARCHAR(50) COMMENT '风险值(0-1)', risk_level VARCHAR(20) COMMENT '风险等级: 高风险/需注意/低风险', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_report (report_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疾病风险评估数据';
  2742. -- health_gut_flora
  2743. CREATE TABLE IF NOT EXISTS health_gut_flora (id BIGINT AUTO_INCREMENT PRIMARY KEY, report_id BIGINT NOT NULL COMMENT '关联报告ID', bacteria_name VARCHAR(100) NOT NULL COMMENT '菌种名称', bacteria_value VARCHAR(50) COMMENT '菌种丰度值', normal_range VARCHAR(100) COMMENT '正常范围', status VARCHAR(20) COMMENT '状态: 正常/偏低/偏高', category VARCHAR(50) COMMENT '分类: 有益菌/有害菌/中性菌', sort_order INT DEFAULT 0 COMMENT '排序', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_report (report_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菌群检测专项数据';
  2744. -- health_report_survey
  2745. CREATE TABLE IF NOT EXISTS health_report_survey (id BIGINT AUTO_INCREMENT PRIMARY KEY, report_id BIGINT NOT NULL COMMENT '关联报告ID', user_id BIGINT NOT NULL COMMENT '用户ID', child_id BIGINT NOT NULL COMMENT '孩子ID', survey_data JSON COMMENT '调研问卷结果JSON', status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending/completed', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_report (report_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报告调研问卷';
  2746. -- numsoul_config
  2747. CREATE TABLE IF NOT EXISTS numsoul_config (number INT PRIMARY KEY COMMENT '灵数1-9', title VARCHAR(50) NOT NULL COMMENT '称号', keywords VARCHAR(200) COMMENT '性格关键词', mind_growth_advice TEXT COMMENT '心理成长建议', recommended_article_tags VARCHAR(200) COMMENT '关联文章标签', color_hex VARCHAR(7) COMMENT '代表色' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生命灵数配置';
  2748. -- nutrition_deficiency_record
  2749. CREATE TABLE IF NOT EXISTS nutrition_deficiency_record (id BIGINT AUTO_INCREMENT PRIMARY KEY,child_id BIGINT NOT NULL COMMENT '孩子ID',report_id BIGINT NOT NULL COMMENT '关联报告ID',nutrient VARCHAR(50) NOT NULL COMMENT '营养素名',deficiency_type VARCHAR(20) NOT NULL COMMENT 'deficiency/excess/borderline/unclassified',severity DECIMAL(5,2) DEFAULT 0 COMMENT '严重程度(0-1)',indicator_name VARCHAR(100) COMMENT '关联指标名',indicator_value VARCHAR(50) COMMENT '指标检测值',ref_range VARCHAR(100) COMMENT '参考范围',symptoms TEXT COMMENT '症状描述',food_suggestions TEXT COMMENT '推荐食物',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_child (child_id),INDEX idx_report (report_id),INDEX idx_nutrient (nutrient)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营养缺乏分析记录';
  2750. -- nutrition_indicator_mapping
  2751. CREATE TABLE IF NOT EXISTS nutrition_indicator_mapping (id BIGINT AUTO_INCREMENT PRIMARY KEY,indicator_name_pattern VARCHAR(200) NOT NULL COMMENT '指标名匹配模式(SQL LIKE语法,%为通配符)',nutrient VARCHAR(50) NOT NULL COMMENT '关联营养素名',severity_weight DECIMAL(3,2) DEFAULT 1.00 COMMENT '权重(0-1)',deficiency_symptoms TEXT COMMENT '缺乏症状描述',excess_symptoms TEXT COMMENT '过量症状描述',food_suggestions TEXT COMMENT '推荐食物(逗号分隔)',sort_order INT DEFAULT 0 COMMENT '排序(大值优先匹配)',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_nutrient (nutrient)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='指标-营养素映射表';
  2752. -- product_dimension_config
  2753. CREATE TABLE IF NOT EXISTS product_dimension_config (id BIGINT PRIMARY KEY AUTO_INCREMENT, dimension_code VARCHAR(50) NOT NULL UNIQUE COMMENT '维度代码: body/mind/wisdom/action/wealth', dimension_name VARCHAR(100) NOT NULL COMMENT '维度名称', dimension_type VARCHAR(50) NOT NULL DEFAULT 'five' COMMENT '类型: five(五维)/action(行动)/other', parent_id BIGINT COMMENT '父级ID,无父级为NULL', sort INT DEFAULT 0 COMMENT '排序', enabled TINYINT(1) DEFAULT 1 COMMENT '启用: 0禁用 1启用', dify_dataset_id VARCHAR(100) COMMENT 'Dify Dataset ID,不填则不同步', remark VARCHAR(500) COMMENT '备注', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维度配置表';
  2754. -- promotion_tier_config
  2755. CREATE TABLE IF NOT EXISTS promotion_tier_config (id BIGINT AUTO_INCREMENT PRIMARY KEY, tier_code VARCHAR(10) NOT NULL UNIQUE COMMENT '等级编码: R0/R1/R2/R3/R4', tier_name VARCHAR(50) NOT NULL COMMENT '等级名称', min_team_size_1st INT NOT NULL DEFAULT 0 COMMENT '一级团队人数下限', min_team_size_2nd INT NOT NULL DEFAULT 0 COMMENT '二级团队人数下限', min_total_referral_earnings INT NOT NULL DEFAULT 0 COMMENT '累计推荐佣金下限(分)', min_total_share_earnings INT NOT NULL DEFAULT 0 COMMENT '累计消费返利下限(分)', commission_rate_l1 INT NOT NULL DEFAULT 0 COMMENT 'L1佣金比例(%)', commission_rate_l2 INT NOT NULL DEFAULT 0 COMMENT 'L2佣金比例(%)', sort_order INT NOT NULL DEFAULT 0 COMMENT '排序', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广等级阈值配置';
  2756. -- shop_categories
  2757. CREATE TABLE IF NOT EXISTS shop_categories (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(64) NOT NULL COMMENT '分类名称',parent_id BIGINT DEFAULT 0 COMMENT '父分类ID(0=根节点)',level INT DEFAULT 0 COMMENT '层级(0/1/2/3)',sort INT DEFAULT 0 COMMENT '排序',image VARCHAR(512) COMMENT '分类图标',enabled TINYINT(1) DEFAULT 1 COMMENT '启用',dimension_codes VARCHAR(128) COMMENT '维度编码(逗号分隔: body,mind,heart)',product_types VARCHAR(128) COMMENT '商品类型(逗号分隔: PHYSICAL,COURSE,ASSESSMENT)',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_parent (parent_id),INDEX idx_sort (sort)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品类目';
  2758. -- shop_discount_rules
  2759. CREATE TABLE IF NOT EXISTS shop_discount_rules (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(64) NOT NULL COMMENT '规则名称',type VARCHAR(32) NOT NULL COMMENT '类型: PERCENT/FIXED/THRESHOLD',value INT NOT NULL COMMENT '折扣值(PERCENT=百分比数字, FIXED/THRESHOLD=金额分)',threshold_amount INT COMMENT '满减门槛(分,仅THRESHOLD)',category_id BIGINT COMMENT '适用类目ID(null=全部)',distribution_system_id BIGINT COMMENT '适用体系ID(null=全部)',product_ids TEXT COMMENT '适用商品ID(逗号分隔,null=全部)',start_time DATETIME COMMENT '开始时间',end_time DATETIME COMMENT '结束时间',max_uses INT DEFAULT 0 COMMENT '最大使用次数(0=不限)',used_count INT DEFAULT 0 COMMENT '已使用次数',enabled TINYINT(1) DEFAULT 1 COMMENT '启用',created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_category (category_id),INDEX idx_enabled (enabled)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='折扣规则';
  2760. -- trial_memberships
  2761. CREATE TABLE IF NOT EXISTS trial_memberships (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', family_id BIGINT NOT NULL COMMENT '家庭ID', start_date DATETIME NOT NULL COMMENT '试用开始时间', end_date DATETIME NOT NULL COMMENT '试用结束时间', status VARCHAR(20) DEFAULT 'PENDING' COMMENT '状态:PENDING/ACTIVE/EXPIRED/CONVERTED', trial_days INT DEFAULT 7 COMMENT '试用天数', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_user_id (user_id), INDEX idx_family_id (family_id), INDEX idx_status (status), INDEX idx_end_date (end_date)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2762. -- user_profile_history
  2763. CREATE TABLE IF NOT EXISTS user_profile_history (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', field_name VARCHAR(64) NOT NULL COMMENT '变更字段名', old_value TEXT COMMENT '旧值', new_value TEXT COMMENT '新值', source VARCHAR(32) DEFAULT 'user' COMMENT '变更来源: user/admin/auto', changed_at DATETIME NOT NULL COMMENT '变更时间', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_ph_user (user_id), INDEX idx_ph_field (field_name), INDEX idx_ph_changed (changed_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息变更历史表';
  2764. -- follow_up
  2765. CREATE TABLE IF NOT EXISTS follow_up (id BIGINT AUTO_INCREMENT PRIMARY KEY, family_id BIGINT NOT NULL COMMENT '家庭ID', child_id BIGINT COMMENT '孩子ID', teacher_id BIGINT COMMENT '规划师ID', deficiency_id BIGINT COMMENT '缺乏项ID', message_id BIGINT COMMENT '消息ID', status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', description VARCHAR(500) COMMENT '描述', parent_feedback TEXT COMMENT '家长反馈', teacher_review VARCHAR(500) COMMENT '规划师点评', due_date DATETIME COMMENT '截止日期', completed_at DATETIME COMMENT '完成时间', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_family (family_id), INDEX idx_teacher (teacher_id), INDEX idx_status (status), INDEX idx_due (due_date);
  2766. -- food_nutrients
  2767. CREATE TABLE IF NOT EXISTS food_nutrients (id BIGINT AUTO_INCREMENT PRIMARY KEY, food_id BIGINT NOT NULL COMMENT '食材ID', nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', amount_per_100g DECIMAL(10,4) NOT NULL COMMENT '每100g含量', unit VARCHAR(20) NOT NULL COMMENT '单位', source VARCHAR(50) DEFAULT 'importer' COMMENT '数据来源', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_food_nutrient (food_id, nutrient_code), INDEX idx_nutrient (nutrient_code);
  2768. -- foods
  2769. CREATE TABLE IF NOT EXISTS foods (id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL COMMENT '食材名称', category VARCHAR(50) COMMENT '分类: 蔬菜/水果/肉禽/水产/蛋奶/豆类/谷物/调味/其他', unit VARCHAR(20) DEFAULT 'g' COMMENT '计量单位', calories DECIMAL(8,2) COMMENT '热量(kcal/100g)', protein DECIMAL(8,2) COMMENT '蛋白质(g/100g)', fat DECIMAL(8,2) COMMENT '脂肪(g/100g)', carbs DECIMAL(8,2) COMMENT '碳水(g/100g)', fiber DECIMAL(8,2) COMMENT '膳食纤维(g/100g)', price_level TINYINT COMMENT '价格等级 1-5', nutrition_tags VARCHAR(500) COMMENT '营养标签JSON', suitable_for VARCHAR(200) COMMENT '适宜人群JSON', allergens VARCHAR(200) COMMENT '过敏原JSON', external_source VARCHAR(100) COMMENT '数据来源', external_id VARCHAR(100) COMMENT '外部ID', cover_image VARCHAR(500) COMMENT '食材图片', status VARCHAR(20) DEFAULT 'active', sort_order INT DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_category (category), INDEX idx_price (price_level);
  2770. -- meal_logs
  2771. CREATE TABLE IF NOT EXISTS meal_logs (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', child_id BIGINT COMMENT '孩子ID', meal_type VARCHAR(20) NOT NULL COMMENT '早餐/午餐/晚餐/加餐', meal_date DATE NOT NULL COMMENT '用餐日期', meal_time DATETIME COMMENT '具体时间', foods TEXT NOT NULL COMMENT '食物清单JSON', total_calories DECIMAL(8,2) COMMENT '总热量', total_protein DECIMAL(8,2) COMMENT '总蛋白质', total_fat DECIMAL(8,2) COMMENT '总脂肪', total_carbs DECIMAL(8,2) COMMENT '总碳水', total_fiber DECIMAL(8,2) COMMENT '总膳食纤维', note TEXT COMMENT '备注', images VARCHAR(1000) COMMENT '图片JSON', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_user_date (user_id, meal_date), INDEX idx_child_date (child_id, meal_date);
  2772. -- product_skus
  2773. CREATE TABLE IF NOT EXISTS product_skus ( id INT NOT NULL AUTO_INCREMENT, product_id INT NOT NULL COMMENT '商品ID', sku_code VARCHAR(64) NOT NULL COMMENT 'SKU编码', specs JSON NOT NULL COMMENT '规格JSON', price DECIMAL(10,2) NOT NULL COMMENT 'SKU价格', stock INT NOT NULL DEFAULT 0 COMMENT '库存', original_price DECIMAL(10,2) COMMENT '原价/划线价', image VARCHAR(512) COMMENT 'SKU图片', enabled TINYINT(1) NOT NULL DEFAULT 1, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_product_id (product_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品SKU';
  2774. -- rdi_standards
  2775. CREATE TABLE IF NOT EXISTS rdi_standards (id BIGINT AUTO_INCREMENT PRIMARY KEY, nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', age_group VARCHAR(10) NOT NULL COMMENT '年龄段', gender VARCHAR(6) DEFAULT 'all' COMMENT '性别', rdi_type VARCHAR(10) NOT NULL COMMENT '参考类型', amount DECIMAL(10,4) NOT NULL COMMENT '推荐量', unit VARCHAR(20) NOT NULL COMMENT '单位', source VARCHAR(100) COMMENT '数据来源', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_rdi (nutrient_code, age_group, gender, rdi_type), INDEX idx_age (age_group);
  2776. -- recipes
  2777. CREATE TABLE IF NOT EXISTS recipes (id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200) NOT NULL COMMENT '食谱名称', meal_type VARCHAR(20) COMMENT '早餐/午餐/晚餐/加餐', description TEXT COMMENT '简介', ingredients TEXT NOT NULL COMMENT '食材清单JSON', steps TEXT COMMENT '烹饪步骤JSON', cook_time INT COMMENT '烹饪时间(分钟)', difficulty VARCHAR(20) COMMENT '难度: 简单/中等/困难', total_calories DECIMAL(8,2) COMMENT '总热量', total_protein DECIMAL(8,2) COMMENT '总蛋白质', total_fat DECIMAL(8,2) COMMENT '总脂肪', total_carbs DECIMAL(8,2) COMMENT '总碳水', total_fiber DECIMAL(8,2) COMMENT '总膳食纤维', suitable_for VARCHAR(200) COMMENT '适宜场景', nutrition_tags VARCHAR(500) COMMENT '营养标签', external_source VARCHAR(100), external_id VARCHAR(100), cover_image VARCHAR(500), status VARCHAR(20) DEFAULT 'active', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_meal_type (meal_type), INDEX idx_cook_time (cook_time);
  2778. -- report_food_suitability
  2779. CREATE TABLE IF NOT EXISTS report_food_suitability (id BIGINT AUTO_INCREMENT PRIMARY KEY, report_id BIGINT NOT NULL COMMENT '健康报告ID', food_id BIGINT COMMENT '食材ID', food_name VARCHAR(100) NOT NULL COMMENT '食材名称', category VARCHAR(50) COMMENT '分类', score INT NOT NULL COMMENT '适宜度评分', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_report (report_id), INDEX idx_food (food_id);
  2780. -- seasonal_foods
  2781. CREATE TABLE IF NOT EXISTS seasonal_foods (id BIGINT AUTO_INCREMENT PRIMARY KEY, food_id BIGINT NOT NULL COMMENT '关联foods.id', month TINYINT NOT NULL COMMENT '月份 1-12', region VARCHAR(50) DEFAULT '全国' COMMENT '产地', peak_flag TINYINT DEFAULT 0 COMMENT '盛产标志', sort_order INT DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_food_month (food_id, month), INDEX idx_month (month);
  2782. -- shopping_list_items
  2783. CREATE TABLE IF NOT EXISTS shopping_list_items (id BIGINT AUTO_INCREMENT PRIMARY KEY, list_id BIGINT NOT NULL COMMENT '购物清单ID', food_id BIGINT COMMENT '食材ID', food_name VARCHAR(100) NOT NULL COMMENT '食材名称', category VARCHAR(50) COMMENT '分类', quantity DECIMAL(8,2) DEFAULT 1 COMMENT '数量', unit VARCHAR(20) DEFAULT '份' COMMENT '单位', priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', reason VARCHAR(200) COMMENT '推荐原因', score INT COMMENT '评分', source VARCHAR(20) COMMENT '来源', purchased TINYINT DEFAULT 0 COMMENT '是否已购', purchased_at DATETIME COMMENT '购买时间', sort_order INT DEFAULT 0 COMMENT '排序', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_list (list_id), INDEX idx_purchased (purchased);
  2784. -- shopping_lists
  2785. CREATE TABLE IF NOT EXISTS shopping_lists (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', child_id BIGINT COMMENT '孩子ID', report_id BIGINT COMMENT '健康报告ID', title VARCHAR(200) COMMENT '标题', source VARCHAR(20) NOT NULL COMMENT '来源', status VARCHAR(20) DEFAULT 'active' COMMENT '状态', total_items INT DEFAULT 0 COMMENT '总项数', purchased_items INT DEFAULT 0 COMMENT '已购项数', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_user (user_id), INDEX idx_report (report_id), INDEX idx_status (status);
  2786. -- user_food_preference
  2787. CREATE TABLE IF NOT EXISTS user_food_preference (id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户ID', food_id BIGINT COMMENT '食材ID', food_name VARCHAR(100) NOT NULL COMMENT '食材名称', score INT NOT NULL DEFAULT 0 COMMENT '评分', reason VARCHAR(500) COMMENT '原因', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_user (user_id);
  2788. -- ========== Schema.sql 补充: 从 entity 反向生成的表 ==========
  2789. -- article_quiz_records
  2790. CREATE TABLE IF NOT EXISTS article_quiz_records (
  2791. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2792. article_id BIGINT,
  2793. user_id BIGINT,
  2794. child_id BIGINT,
  2795. questions VARCHAR(255),
  2796. answers VARCHAR(255),
  2797. score INT,
  2798. points_earned INT,
  2799. created_at DATETIME,
  2800. updated_at DATETIME
  2801. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2802. -- assessment_results
  2803. CREATE TABLE IF NOT EXISTS assessment_results (
  2804. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2805. child_id BIGINT,
  2806. teacher_id BIGINT,
  2807. appointment_id BIGINT,
  2808. attention_score INT,
  2809. focus_score INT,
  2810. memory_score INT,
  2811. logic_score INT,
  2812. overall_score INT,
  2813. assessment_date DATETIME,
  2814. duration_minutes INT,
  2815. analysis_report VARCHAR(255),
  2816. growth_suggestions VARCHAR(255),
  2817. next_review_date DATETIME,
  2818. status VARCHAR(255),
  2819. created_at DATETIME,
  2820. updated_at DATETIME,
  2821. child_name VARCHAR(255),
  2822. child_birthday DATETIME,
  2823. child_gender VARCHAR(255),
  2824. child_age INT,
  2825. school VARCHAR(255),
  2826. grade VARCHAR(255),
  2827. grade_class VARCHAR(255),
  2828. height INT,
  2829. weight INT,
  2830. family_status VARCHAR(255),
  2831. parent_degree VARCHAR(255),
  2832. nation VARCHAR(255),
  2833. province VARCHAR(255),
  2834. city VARCHAR(255),
  2835. district VARCHAR(255),
  2836. address VARCHAR(255),
  2837. single_child VARCHAR(255),
  2838. school_score VARCHAR(255),
  2839. urgent_name VARCHAR(255),
  2840. urgent_phone VARCHAR(255),
  2841. pics VARCHAR(255),
  2842. videos VARCHAR(255),
  2843. audio VARCHAR(255),
  2844. audio_url VARCHAR(255),
  2845. process_desc VARCHAR(255),
  2846. result_desc VARCHAR(255)
  2847. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2848. -- cognitive_norms
  2849. CREATE TABLE IF NOT EXISTS cognitive_norms (
  2850. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2851. dimension_key VARCHAR(255),
  2852. gender VARCHAR(255),
  2853. age_min INT,
  2854. age_max INT,
  2855. percentile5 INT,
  2856. percentile25 INT,
  2857. percentile50 INT,
  2858. percentile75 INT,
  2859. percentile95 INT,
  2860. source VARCHAR(255),
  2861. created_at DATETIME
  2862. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2863. -- contact_match_requests
  2864. CREATE TABLE IF NOT EXISTS contact_match_requests (
  2865. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2866. requester_id BIGINT,
  2867. target_user_id BIGINT,
  2868. contact_id BIGINT,
  2869. status VARCHAR(255),
  2870. message VARCHAR(255),
  2871. created_at DATETIME,
  2872. updated_at DATETIME
  2873. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2874. -- daily_checkin
  2875. CREATE TABLE IF NOT EXISTS daily_checkin (
  2876. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2877. member_id BIGINT,
  2878. checkin_date DATETIME,
  2879. diet_score INT,
  2880. exercise_score INT,
  2881. sleep_score INT,
  2882. water_intake INT,
  2883. mood_score INT,
  2884. weight_kg DECIMAL(10,2),
  2885. height_cm DECIMAL(10,2),
  2886. remark VARCHAR(255),
  2887. created_at DATETIME,
  2888. updated_at DATETIME
  2889. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2890. -- diet_meal_record
  2891. CREATE TABLE IF NOT EXISTS diet_meal_record (
  2892. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2893. member_id BIGINT,
  2894. checkin_id BIGINT,
  2895. meal_type VARCHAR(255),
  2896. food_name VARCHAR(255),
  2897. food_amount VARCHAR(255),
  2898. calories INT,
  2899. protein DECIMAL(10,2),
  2900. fat DECIMAL(10,2),
  2901. carbs DECIMAL(10,2),
  2902. fiber DECIMAL(10,2),
  2903. eaten_at DATETIME,
  2904. source VARCHAR(255),
  2905. created_at DATETIME
  2906. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2907. -- dimension_weights
  2908. CREATE TABLE IF NOT EXISTS dimension_weights (
  2909. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2910. target_type VARCHAR(255),
  2911. target_id BIGINT,
  2912. dimension VARCHAR(255),
  2913. weight INT,
  2914. enabled TINYINT(1),
  2915. created_at DATETIME,
  2916. updated_at DATETIME
  2917. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2918. -- emotion_alert
  2919. CREATE TABLE IF NOT EXISTS emotion_alert (
  2920. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2921. child_id BIGINT,
  2922. alert_type VARCHAR(255),
  2923. severity VARCHAR(255),
  2924. title VARCHAR(255),
  2925. message VARCHAR(255),
  2926. related_checkin_id BIGINT,
  2927. resolved TINYINT(1),
  2928. created_at DATETIME,
  2929. resolved_at DATETIME
  2930. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2931. -- energy_dimension_config
  2932. CREATE TABLE IF NOT EXISTS energy_dimension_config (
  2933. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2934. dimension VARCHAR(255),
  2935. data_source VARCHAR(255),
  2936. category VARCHAR(255),
  2937. weight INT,
  2938. is_active INT,
  2939. updated_at DATETIME
  2940. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2941. -- exercise_record
  2942. CREATE TABLE IF NOT EXISTS exercise_record (
  2943. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2944. member_id BIGINT,
  2945. checkin_id BIGINT,
  2946. exercise_type VARCHAR(255),
  2947. duration_minutes INT,
  2948. intensity VARCHAR(255),
  2949. calories_burned INT,
  2950. heart_rate_avg INT,
  2951. heart_rate_max INT,
  2952. start_time DATETIME,
  2953. end_time DATETIME,
  2954. remark VARCHAR(255),
  2955. created_at DATETIME
  2956. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2957. -- family_memberships
  2958. CREATE TABLE IF NOT EXISTS family_memberships (
  2959. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2960. family_id BIGINT,
  2961. level_code VARCHAR(255),
  2962. start_date DATETIME,
  2963. end_date DATETIME,
  2964. payment_method VARCHAR(255),
  2965. payment_status VARCHAR(255),
  2966. order_no VARCHAR(255),
  2967. transaction_id VARCHAR(255),
  2968. amount INT,
  2969. auto_renew INT,
  2970. created_at DATETIME,
  2971. updated_at DATETIME
  2972. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2973. -- food_recommend_idx
  2974. CREATE TABLE IF NOT EXISTS food_recommend_idx (
  2975. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2976. user_id BIGINT,
  2977. food_id BIGINT,
  2978. food_name VARCHAR(255),
  2979. index_score INT,
  2980. health_report_id BIGINT,
  2981. calculated_at DATETIME,
  2982. created_at DATETIME
  2983. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2984. -- food_recommend_idx_log
  2985. CREATE TABLE IF NOT EXISTS food_recommend_idx_log (
  2986. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2987. user_id BIGINT,
  2988. food_id BIGINT,
  2989. food_name VARCHAR(255),
  2990. previous_index INT,
  2991. new_index INT,
  2992. health_report_id BIGINT,
  2993. change_reason VARCHAR(255),
  2994. changed_at DATETIME
  2995. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  2996. -- guide_activities
  2997. CREATE TABLE IF NOT EXISTS guide_activities (
  2998. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  2999. guide_id BIGINT,
  3000. title VARCHAR(255),
  3001. description VARCHAR(255),
  3002. cover_image VARCHAR(255),
  3003. category VARCHAR(255),
  3004. location VARCHAR(255),
  3005. activity_date DATETIME,
  3006. max_participants INT,
  3007. current_participants INT,
  3008. price BIGINT,
  3009. status VARCHAR(255),
  3010. source VARCHAR(255),
  3011. published_at DATETIME,
  3012. created_at DATETIME,
  3013. updated_at DATETIME
  3014. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3015. -- guide_family_relations
  3016. CREATE TABLE IF NOT EXISTS guide_family_relations (
  3017. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3018. guide_id BIGINT,
  3019. family_id BIGINT,
  3020. relation_type VARCHAR(255),
  3021. status VARCHAR(255),
  3022. created_at DATETIME,
  3023. updated_at DATETIME
  3024. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3025. -- guide_hierarchy
  3026. CREATE TABLE IF NOT EXISTS guide_hierarchy (
  3027. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3028. parent_id BIGINT,
  3029. child_id BIGINT,
  3030. level INT,
  3031. status VARCHAR(255),
  3032. created_at DATETIME,
  3033. updated_at DATETIME
  3034. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3035. -- health_data_sources
  3036. CREATE TABLE IF NOT EXISTS health_data_sources (
  3037. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3038. member_id BIGINT,
  3039. source_type VARCHAR(255),
  3040. dimension_codes VARCHAR(255),
  3041. parsed_result VARCHAR(255),
  3042. file_url VARCHAR(255),
  3043. confidence DECIMAL(10,2),
  3044. created_at DATETIME
  3045. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3046. -- health_dimension_scores
  3047. CREATE TABLE IF NOT EXISTS health_dimension_scores (
  3048. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3049. member_id BIGINT,
  3050. dimension VARCHAR(255),
  3051. score INT,
  3052. percentile INT,
  3053. data_source VARCHAR(255),
  3054. tier INT,
  3055. raw_data VARCHAR(255),
  3056. assess_date DATETIME,
  3057. expire_date DATETIME,
  3058. created_at DATETIME,
  3059. updated_at DATETIME
  3060. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3061. -- health_growth_record
  3062. CREATE TABLE IF NOT EXISTS health_growth_record (
  3063. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3064. member_id BIGINT,
  3065. record_date DATETIME,
  3066. height_cm DECIMAL(10,2),
  3067. weight_kg DECIMAL(10,2),
  3068. bmi DECIMAL(10,2),
  3069. head_circumference DECIMAL(10,2),
  3070. bone_age INT,
  3071. tooth_age INT,
  3072. growth_rate DECIMAL(10,2),
  3073. percentile_height INT,
  3074. percentile_weight INT,
  3075. percentile_bmi INT,
  3076. standard_type VARCHAR(255),
  3077. source VARCHAR(255),
  3078. created_at DATETIME,
  3079. updated_at DATETIME
  3080. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3081. -- health_norm_reference
  3082. CREATE TABLE IF NOT EXISTS health_norm_reference (
  3083. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3084. dimension VARCHAR(255),
  3085. gender VARCHAR(255),
  3086. age_min INT,
  3087. age_max INT,
  3088. percentile5 INT,
  3089. percentile15 INT,
  3090. percentile25 INT,
  3091. percentile50 INT,
  3092. percentile75 INT,
  3093. percentile85 INT,
  3094. percentile95 INT,
  3095. source VARCHAR(255),
  3096. created_at DATETIME
  3097. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3098. -- interaction_logs
  3099. CREATE TABLE IF NOT EXISTS interaction_logs (
  3100. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3101. family_id BIGINT,
  3102. from_member_id BIGINT,
  3103. to_member_id BIGINT,
  3104. interaction_type VARCHAR(255),
  3105. description VARCHAR(255),
  3106. happened_at DATETIME,
  3107. created_at DATETIME
  3108. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3109. -- membership_levels
  3110. CREATE TABLE IF NOT EXISTS membership_levels (
  3111. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3112. level_code VARCHAR(255),
  3113. level_name VARCHAR(255),
  3114. level_desc VARCHAR(255),
  3115. price_monthly INT,
  3116. price_quarterly INT,
  3117. price_yearly INT,
  3118. features VARCHAR(255),
  3119. max_children INT,
  3120. max_tasks_per_day INT,
  3121. ai_review_enabled INT,
  3122. priority_support INT,
  3123. teacher_consultation INT,
  3124. created_at DATETIME,
  3125. updated_at DATETIME
  3126. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3127. -- mental_health_screen
  3128. CREATE TABLE IF NOT EXISTS mental_health_screen (
  3129. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3130. child_id BIGINT,
  3131. screen_type VARCHAR(255),
  3132. answers VARCHAR(255),
  3133. total_score INT,
  3134. severity_level VARCHAR(255),
  3135. risk_flags VARCHAR(255),
  3136. suggestions VARCHAR(255),
  3137. completed_at DATETIME,
  3138. created_at DATETIME,
  3139. updated_at DATETIME
  3140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3141. -- order_items
  3142. CREATE TABLE IF NOT EXISTS order_items (
  3143. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3144. order_id BIGINT,
  3145. product_id BIGINT,
  3146. sku_id BIGINT,
  3147. product_name VARCHAR(255),
  3148. product_image VARCHAR(255),
  3149. sku_specs VARCHAR(255),
  3150. price DECIMAL(10,2),
  3151. quantity INT,
  3152. subtotal DECIMAL(10,2)
  3153. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3154. -- payment_orders
  3155. CREATE TABLE IF NOT EXISTS payment_orders (
  3156. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3157. order_no VARCHAR(255),
  3158. family_id BIGINT,
  3159. level_code VARCHAR(255),
  3160. payment_type VARCHAR(255),
  3161. period VARCHAR(255),
  3162. amount INT,
  3163. user_coupon_id BIGINT,
  3164. status VARCHAR(255),
  3165. pay_method VARCHAR(255),
  3166. transaction_id VARCHAR(255),
  3167. paid_at DATETIME,
  3168. created_at DATETIME,
  3169. updated_at DATETIME
  3170. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3171. -- points_exchange_products
  3172. CREATE TABLE IF NOT EXISTS points_exchange_products (
  3173. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3174. name VARCHAR(255),
  3175. description VARCHAR(255),
  3176. cover_image VARCHAR(255),
  3177. points_price INT,
  3178. stock INT,
  3179. product_type VARCHAR(255),
  3180. category VARCHAR(255),
  3181. expiry_days INT,
  3182. sort_order INT,
  3183. status VARCHAR(255),
  3184. created_at DATETIME,
  3185. updated_at DATETIME
  3186. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3187. -- points_exchange_records
  3188. CREATE TABLE IF NOT EXISTS points_exchange_records (
  3189. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3190. user_id BIGINT,
  3191. child_id BIGINT,
  3192. family_member_id BIGINT,
  3193. product_id BIGINT,
  3194. product_name VARCHAR(255),
  3195. points_cost INT,
  3196. quantity INT,
  3197. status VARCHAR(255),
  3198. redeem_code VARCHAR(255),
  3199. expired_at DATETIME,
  3200. created_at DATETIME,
  3201. updated_at DATETIME
  3202. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3203. -- promotion_materials
  3204. CREATE TABLE IF NOT EXISTS promotion_materials (
  3205. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3206. title VARCHAR(255),
  3207. description VARCHAR(255),
  3208. material_type VARCHAR(255),
  3209. cover_url VARCHAR(255),
  3210. file_url VARCHAR(255),
  3211. tags VARCHAR(255),
  3212. usage_scenario VARCHAR(255),
  3213. sort_order INT,
  3214. status VARCHAR(255),
  3215. created_by BIGINT,
  3216. created_at DATETIME,
  3217. updated_at DATETIME
  3218. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3219. -- relationship_questionnaire_responses
  3220. CREATE TABLE IF NOT EXISTS relationship_questionnaire_responses (
  3221. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3222. snapshot_id BIGINT,
  3223. respondent_id BIGINT,
  3224. answers_json VARCHAR(255),
  3225. trust_score DECIMAL(10,2),
  3226. intimacy_score DECIMAL(10,2),
  3227. communication_score DECIMAL(10,2),
  3228. interaction_bonus DECIMAL(10,2),
  3229. total_score DECIMAL(10,2),
  3230. calculated_at DATETIME
  3231. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3232. -- relationship_questionnaire_snapshots
  3233. CREATE TABLE IF NOT EXISTS relationship_questionnaire_snapshots (
  3234. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3235. family_member_id BIGINT,
  3236. respondent_id BIGINT,
  3237. member_name VARCHAR(255),
  3238. relationship_type VARCHAR(255),
  3239. ai_generated_json VARCHAR(255),
  3240. version VARCHAR(255),
  3241. created_at DATETIME
  3242. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3243. -- share_events
  3244. CREATE TABLE IF NOT EXISTS share_events (
  3245. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3246. user_id BIGINT,
  3247. target_type VARCHAR(255),
  3248. target_id BIGINT,
  3249. share_channel VARCHAR(255),
  3250. share_title VARCHAR(255),
  3251. share_url VARCHAR(255),
  3252. click_count INT,
  3253. read_count INT,
  3254. reward_points INT,
  3255. status VARCHAR(255),
  3256. expires_at DATETIME,
  3257. created_at DATETIME,
  3258. updated_at DATETIME
  3259. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3260. -- share_reads
  3261. CREATE TABLE IF NOT EXISTS share_reads (
  3262. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3263. share_event_id BIGINT,
  3264. reader_id BIGINT,
  3265. reader_ip VARCHAR(255),
  3266. read_duration INT,
  3267. read_at DATETIME
  3268. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3269. -- sleep_record
  3270. CREATE TABLE IF NOT EXISTS sleep_record (
  3271. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3272. member_id BIGINT,
  3273. checkin_id BIGINT,
  3274. sleep_time DATETIME,
  3275. wake_time DATETIME,
  3276. duration_minutes INT,
  3277. deep_sleep_minutes INT,
  3278. light_sleep_minutes INT,
  3279. rem_minutes INT,
  3280. quality_score INT,
  3281. dream_count INT,
  3282. remark VARCHAR(255),
  3283. created_at DATETIME
  3284. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3285. -- teachers
  3286. CREATE TABLE IF NOT EXISTS teachers (
  3287. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3288. user_id BIGINT,
  3289. teacher_no VARCHAR(255),
  3290. title VARCHAR(255),
  3291. specialty VARCHAR(255),
  3292. bio VARCHAR(255),
  3293. experience_years INT,
  3294. rating INT,
  3295. total_appointments INT,
  3296. status VARCHAR(255),
  3297. verification_status VARCHAR(255),
  3298. street_id BIGINT,
  3299. province VARCHAR(255),
  3300. city VARCHAR(255),
  3301. district VARCHAR(255),
  3302. street VARCHAR(255),
  3303. verified_at DATETIME,
  3304. created_at DATETIME,
  3305. updated_at DATETIME
  3306. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3307. -- training_plan_items
  3308. CREATE TABLE IF NOT EXISTS training_plan_items (
  3309. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3310. plan_id BIGINT,
  3311. sequence INT,
  3312. dimension_key VARCHAR(255),
  3313. suggestion VARCHAR(255),
  3314. task_title VARCHAR(255),
  3315. task_desc VARCHAR(255),
  3316. minigame_code VARCHAR(255),
  3317. article_id BIGINT,
  3318. task_points INT,
  3319. deadline_days INT,
  3320. status VARCHAR(255),
  3321. completed_at DATETIME,
  3322. created_at DATETIME
  3323. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3324. -- training_plans
  3325. CREATE TABLE IF NOT EXISTS training_plans (
  3326. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3327. guide_id BIGINT,
  3328. child_id BIGINT,
  3329. title VARCHAR(255),
  3330. description VARCHAR(255),
  3331. status VARCHAR(255),
  3332. source VARCHAR(255),
  3333. deployed_at DATETIME,
  3334. created_at DATETIME,
  3335. updated_at DATETIME
  3336. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3337. -- training_plan_tasks
  3338. CREATE TABLE IF NOT EXISTS training_plan_tasks (
  3339. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3340. plan_id BIGINT,
  3341. plan_item_id BIGINT,
  3342. task_id BIGINT,
  3343. child_id BIGINT,
  3344. status VARCHAR(255),
  3345. created_at DATETIME
  3346. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3347. -- upgrade_services
  3348. CREATE TABLE IF NOT EXISTS upgrade_services (
  3349. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3350. guide_id BIGINT,
  3351. from_level VARCHAR(255),
  3352. to_level VARCHAR(255),
  3353. service_fee INT,
  3354. status VARCHAR(255),
  3355. reviewed_by BIGINT,
  3356. reviewed_at DATETIME,
  3357. reject_reason VARCHAR(255),
  3358. created_at DATETIME,
  3359. updated_at DATETIME
  3360. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3361. -- user_nutrition_profile
  3362. CREATE TABLE IF NOT EXISTS user_nutrition_profile (
  3363. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3364. user_id BIGINT,
  3365. fruit_allergy VARCHAR(255),
  3366. fruit_preferences VARCHAR(255),
  3367. questionnaire_status VARCHAR(255),
  3368. budget_monthly INT,
  3369. family_taste_preferences VARCHAR(255),
  3370. cuisine_style VARCHAR(255),
  3371. meal_count INT,
  3372. cooking_ability VARCHAR(255),
  3373. created_at DATETIME,
  3374. updated_at DATETIME
  3375. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3376. -- user_rfm_tags
  3377. CREATE TABLE IF NOT EXISTS user_rfm_tags (
  3378. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3379. user_id BIGINT,
  3380. r_score INT,
  3381. f_score INT,
  3382. m_score INT,
  3383. rfm_tier VARCHAR(255),
  3384. total_orders INT,
  3385. total_amount DECIMAL(10,2),
  3386. last_order_at DATETIME,
  3387. updated_at DATETIME
  3388. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3389. -- user_trigger_rules
  3390. CREATE TABLE IF NOT EXISTS user_trigger_rules (
  3391. user_id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3392. action_config VARCHAR(255),
  3393. last_triggered_at DATETIME
  3394. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3395. -- water_record
  3396. CREATE TABLE IF NOT EXISTS water_record (
  3397. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3398. member_id BIGINT,
  3399. checkin_id BIGINT,
  3400. amount_ml INT,
  3401. water_type VARCHAR(255),
  3402. drunk_at DATETIME,
  3403. created_at DATETIME
  3404. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  3405. -- =============================================
  3406. -- 家庭成员变更日志表
  3407. -- =============================================
  3408. CREATE TABLE IF NOT EXISTS family_member_logs (
  3409. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3410. family_id BIGINT NOT NULL COMMENT '家庭ID',
  3411. member_id BIGINT NOT NULL COMMENT '成员ID',
  3412. action VARCHAR(32) NOT NULL COMMENT '操作: join/leave/update/kick',
  3413. old_value VARCHAR(500) COMMENT '旧值',
  3414. new_value VARCHAR(500) COMMENT '新值',
  3415. operator_id BIGINT COMMENT '操作人用户ID',
  3416. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3417. INDEX idx_family_id (family_id),
  3418. INDEX idx_member_id (member_id)
  3419. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员变更日志';
  3420. -- 健康打卡 - 运动记录
  3421. CREATE TABLE IF NOT EXISTS exercise_record (
  3422. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3423. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  3424. checkin_id BIGINT COMMENT '关联打卡ID',
  3425. exercise_type VARCHAR(32) COMMENT '运动类型: run/swim/yoga/walk/cycle/other',
  3426. duration_minutes INT COMMENT '时长(分钟)',
  3427. intensity VARCHAR(16) COMMENT '强度: low/medium/high',
  3428. calories_burned INT COMMENT '消耗热量(千卡)',
  3429. heart_rate_avg INT COMMENT '平均心率',
  3430. heart_rate_max INT COMMENT '最大心率',
  3431. start_time DATETIME COMMENT '开始时间',
  3432. end_time DATETIME COMMENT '结束时间',
  3433. remark TEXT COMMENT '备注',
  3434. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3435. INDEX idx_member_id (member_id)
  3436. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运动打卡记录';
  3437. -- 健康打卡 - 睡眠记录
  3438. CREATE TABLE IF NOT EXISTS sleep_record (
  3439. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3440. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  3441. checkin_id BIGINT COMMENT '关联打卡ID',
  3442. sleep_time DATETIME COMMENT '入睡时间',
  3443. wake_time DATETIME COMMENT '醒来时间',
  3444. duration_minutes INT COMMENT '总睡眠时长(分钟)',
  3445. deep_sleep_minutes INT COMMENT '深睡时长(分钟)',
  3446. light_sleep_minutes INT COMMENT '浅睡时长(分钟)',
  3447. rem_minutes INT COMMENT 'REM时长(分钟)',
  3448. quality_score INT COMMENT '睡眠质量评分1-10',
  3449. dream_count INT COMMENT '做梦次数',
  3450. remark TEXT COMMENT '备注',
  3451. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3452. INDEX idx_member_id (member_id)
  3453. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='睡眠打卡记录';
  3454. -- 健康打卡 - 饮水记录
  3455. CREATE TABLE IF NOT EXISTS water_record (
  3456. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3457. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  3458. checkin_id BIGINT COMMENT '关联打卡ID',
  3459. amount_ml INT COMMENT '饮水量(毫升)',
  3460. water_type VARCHAR(32) COMMENT '类型: plain/sparkling/tea/other',
  3461. drunk_at DATETIME COMMENT '饮水时间',
  3462. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3463. INDEX idx_member_id (member_id)
  3464. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='饮水打卡记录';
  3465. -- 健康打卡 - 饮食记录
  3466. CREATE TABLE IF NOT EXISTS health_meal_record (
  3467. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3468. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  3469. checkin_id BIGINT COMMENT '关联打卡ID',
  3470. meal_type VARCHAR(32) COMMENT '餐次: breakfast/lunch/dinner/snack',
  3471. food_items TEXT COMMENT '食物清单JSON',
  3472. total_calories INT COMMENT '总卡路里',
  3473. protein_g INT COMMENT '蛋白质克数',
  3474. fat_g INT COMMENT '脂肪克数',
  3475. carbs_g INT COMMENT '碳水克数',
  3476. fiber_g INT COMMENT '膳食纤维克数',
  3477. meal_time DATETIME COMMENT '用餐时间',
  3478. remark VARCHAR(500) COMMENT '备注',
  3479. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3480. INDEX idx_member_id (member_id)
  3481. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='饮食打卡记录';
  3482. -- 健康打卡 - 冥想记录
  3483. CREATE TABLE IF NOT EXISTS health_meditation_record (
  3484. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  3485. member_id BIGINT NOT NULL COMMENT '家庭成员ID',
  3486. checkin_id BIGINT COMMENT '关联打卡ID',
  3487. duration_minutes INT COMMENT '时长(分钟)',
  3488. type VARCHAR(32) COMMENT '类型: mindfulness/guided/breathing/body_scan',
  3489. mood VARCHAR(32) COMMENT '冥想后心情',
  3490. remark VARCHAR(500) COMMENT '备注',
  3491. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  3492. INDEX idx_member_id (member_id)
  3493. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='冥想打卡记录';