schema.sql 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. -- 爱伴·AI之旅 训练营 数据库初始化脚本
  2. -- 数据库: cfc 同库 (zxyj) —— 训练营运营表 train_* 与 cfc 会员/活动/账本同库共存
  3. -- 训练营品牌:爱伴·AI之旅
  4. -- 课程等级:L0/L1/L2/L3/L4;其中 L0 = 「家立方-AI管家成长营」(首期课程)
  5. -- 课程表(L0~L4 课程主数据)
  6. CREATE TABLE IF NOT EXISTS train_course (
  7. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  8. level VARCHAR(20) NOT NULL COMMENT '课程等级:L0/L1/L2/L3/L4',
  9. name VARCHAR(100) NOT NULL COMMENT '课程名称(如 L0 = 家立方-AI管家成长营)',
  10. description VARCHAR(500) COMMENT '课程简介',
  11. status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/active/finished',
  12. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  13. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  14. UNIQUE KEY uk_level (level),
  15. INDEX idx_status (status)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='训练营课程(L0/L1/L2/L3/L4)';
  17. -- 班次表
  18. CREATE TABLE IF NOT EXISTS train_class (
  19. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  20. activity_id BIGINT COMMENT '关联 cfc 活动 ID(activities.id,cfc 同库)',
  21. course_id BIGINT COMMENT '关联课程 ID(train_course.id,L0/L1/L2…)',
  22. name VARCHAR(100) NOT NULL COMMENT '班次名称',
  23. code VARCHAR(20) UNIQUE COMMENT '班级码(学员进班用)',
  24. time VARCHAR(100) COMMENT '培训时间描述',
  25. place VARCHAR(100) COMMENT '培训地点',
  26. capacity INT DEFAULT 20 COMMENT '容量',
  27. status VARCHAR(20) DEFAULT 'draft' COMMENT 'draft/active/finished',
  28. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  29. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  30. INDEX idx_code (code),
  31. INDEX idx_activity_id (activity_id),
  32. INDEX idx_course_id (course_id)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班次';
  34. -- 学员用户表
  35. CREATE TABLE IF NOT EXISTS train_user (
  36. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  37. cfc_user_id BIGINT COMMENT 'cfc 统一会员 ID(users.id,cfc 同库)',
  38. openid VARCHAR(64) COMMENT '微信openid',
  39. phone VARCHAR(11) COMMENT '手机号',
  40. name VARCHAR(50) COMMENT '姓名',
  41. alumni_verify VARCHAR(50) COMMENT '校友身份校验: accepted/pending/rejected',
  42. invite_code VARCHAR(50) COMMENT '专属邀请码',
  43. grade VARCHAR(50) COMMENT '校友届别',
  44. department VARCHAR(50) COMMENT '院系',
  45. city VARCHAR(50) COMMENT '城市',
  46. family_struct VARCHAR(100) COMMENT '家庭结构',
  47. concern_book VARCHAR(20) COMMENT '最关心的账本: wealth/health/growth',
  48. role VARCHAR(20) DEFAULT 'student' COMMENT 'student/teacher/assistant/admin',
  49. class_id BIGINT COMMENT '所属班次ID',
  50. status VARCHAR(20) DEFAULT 'active' COMMENT 'active/blocked',
  51. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  52. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. INDEX idx_openid (openid),
  54. INDEX idx_phone (phone),
  55. INDEX idx_class_id (class_id),
  56. INDEX idx_cfc_user_id (cfc_user_id)
  57. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员用户';
  58. -- 兼容存量库:为新版本新增的 cfc 关联列补列(列已存在时静默跳过)
  59. -- 下方语句由 DatabaseInitializer 逐条执行并容错,重复执行不报致命错误
  60. ALTER TABLE train_class ADD COLUMN activity_id BIGINT COMMENT '关联 cfc 活动 ID(activities.id,cfc 同库)';
  61. ALTER TABLE train_class ADD COLUMN course_id BIGINT COMMENT '关联课程 ID(train_course.id,L0/L1/L2…)';
  62. ALTER TABLE train_user ADD COLUMN cfc_user_id BIGINT COMMENT 'cfc 统一会员 ID(users.id,cfc 同库)';
  63. ALTER TABLE train_class ADD COLUMN start_at DATETIME COMMENT '课程开始时间(投屏计时基准,NULL=未开始)';
  64. -- 小组表
  65. CREATE TABLE IF NOT EXISTS train_group (
  66. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  67. class_id BIGINT NOT NULL COMMENT '班次ID',
  68. name VARCHAR(50) NOT NULL COMMENT '组名(含数字+钱/身体/孩子之一)',
  69. slogan VARCHAR(100) COMMENT '8字口号',
  70. qr_code VARCHAR(255) COMMENT '二维码',
  71. spokesperson_uid BIGINT COMMENT '路演发言人(话最少的人,不可更换)',
  72. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  73. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  74. INDEX idx_class_id (class_id)
  75. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小组';
  76. -- 组内成员表
  77. CREATE TABLE IF NOT EXISTS train_group_member (
  78. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  79. group_id BIGINT NOT NULL COMMENT '组ID',
  80. uid BIGINT NOT NULL COMMENT '学员ID',
  81. joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  82. INDEX idx_group_id (group_id),
  83. INDEX idx_uid (uid)
  84. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组内成员';
  85. -- 分工表(三本账)
  86. CREATE TABLE IF NOT EXISTS train_assignment (
  87. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  88. group_id BIGINT NOT NULL COMMENT '组ID',
  89. uid BIGINT NOT NULL COMMENT '学员ID',
  90. book_type VARCHAR(20) NOT NULL COMMENT 'wealth/health/growth',
  91. role VARCHAR(20) DEFAULT 'expert' COMMENT 'expert/support',
  92. use_sample TINYINT DEFAULT 0 COMMENT '1=使用etotem脱敏样本',
  93. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/confirmed',
  94. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  95. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  96. INDEX idx_group_book (group_id, book_type),
  97. INDEX idx_uid (uid)
  98. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组内分工(三本账)';
  99. -- 成果上传表
  100. CREATE TABLE IF NOT EXISTS train_submission (
  101. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  102. uid BIGINT NOT NULL COMMENT '学员ID',
  103. group_id BIGINT COMMENT '组ID',
  104. book_type VARCHAR(20) COMMENT 'wealth/health/growth',
  105. type VARCHAR(20) DEFAULT 'deep' COMMENT 'deep(深度产出)/taught(互教跑通)',
  106. files TEXT COMMENT '文件列表JSON: [{url,name}]',
  107. image TEXT COMMENT '核心产出截图(脱敏后)',
  108. sample_flag TINYINT DEFAULT 0 COMMENT '1=样本数据非本人',
  109. desensitized TINYINT DEFAULT 0 COMMENT '1=已确认脱敏',
  110. verified_by BIGINT COMMENT '助教/讲师ID',
  111. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/approved/rejected',
  112. reject_reason VARCHAR(255) COMMENT '退回原因',
  113. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  114. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  115. INDEX idx_uid (uid),
  116. INDEX idx_group_id (group_id),
  117. INDEX idx_status (status)
  118. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成果上传';
  119. -- 教学卡表(互教5步教学卡)
  120. CREATE TABLE IF NOT EXISTS train_teaching_card (
  121. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  122. submission_id BIGINT COMMENT '关联成果ID',
  123. uid BIGINT NOT NULL,
  124. group_id BIGINT,
  125. book_type VARCHAR(20) COMMENT 'wealth/health/growth',
  126. steps TEXT COMMENT '5步教学卡内容JSON',
  127. image VARCHAR(255) COMMENT '教学卡照片',
  128. quality_score INT DEFAULT NULL COMMENT '教学卡质量分0-20',
  129. quality_by BIGINT COMMENT '评分人',
  130. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/approved/rejected',
  131. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  132. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  133. INDEX idx_uid (uid)
  134. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教学卡';
  135. -- 积分流水表
  136. CREATE TABLE IF NOT EXISTS train_score (
  137. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  138. group_id BIGINT COMMENT '组ID(可为空=个人分)',
  139. uid BIGINT COMMENT '学员ID',
  140. item VARCHAR(50) NOT NULL COMMENT '计分项:install/prep/find/upload/teach/roadmap_quality/roadmap/vote/help',
  141. points INT NOT NULL COMMENT '分值',
  142. by_uid BIGINT COMMENT '打分人(人工评分项)',
  143. remark VARCHAR(255) COMMENT '备注',
  144. ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  145. INDEX idx_group_id (group_id),
  146. INDEX idx_uid (uid),
  147. INDEX idx_item (item)
  148. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分流水';
  149. -- 投票表(两轮)
  150. CREATE TABLE IF NOT EXISTS train_vote (
  151. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  152. class_id BIGINT NOT NULL,
  153. round INT NOT NULL COMMENT '1=我学会了(2票,不得投本组);2=最想抄走(1票,可投本组)',
  154. voter_uid BIGINT NOT NULL COMMENT '投票人',
  155. target_group_id BIGINT NOT NULL COMMENT '被投组ID',
  156. ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  157. INDEX idx_class_round (class_id, round),
  158. INDEX idx_voter (voter_uid),
  159. INDEX idx_target (target_group_id)
  160. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='投票';
  161. -- 路演材料表
  162. CREATE TABLE IF NOT EXISTS train_roadmap (
  163. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  164. group_id BIGINT NOT NULL,
  165. proposition VARCHAR(20) COMMENT '命题A-E',
  166. files TEXT COMMENT '路演材料截图/文件',
  167. speaker_uid BIGINT COMMENT '发言人ID',
  168. score INT DEFAULT NULL COMMENT '讲师路演评分0-40',
  169. score_by BIGINT COMMENT '评分人',
  170. status VARCHAR(20) DEFAULT 'pending',
  171. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  172. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  173. INDEX idx_group_id (group_id)
  174. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='路演材料';
  175. -- 装机打卡表
  176. CREATE TABLE IF NOT EXISTS train_checkin (
  177. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  178. uid BIGINT NOT NULL,
  179. image VARCHAR(255) COMMENT 'WorkBuddy已安装登录截图',
  180. status VARCHAR(20) DEFAULT 'done' COMMENT 'done=已装机',
  181. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  182. INDEX idx_uid (uid)
  183. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='装机打卡';
  184. -- 数据准备自检表
  185. CREATE TABLE IF NOT EXISTS train_prep_check (
  186. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  187. uid BIGINT NOT NULL,
  188. wealth_data TINYINT DEFAULT 0 COMMENT '券商持仓',
  189. health_data TINYINT DEFAULT 0 COMMENT '体检或血压',
  190. growth_data TINYINT DEFAULT 0 COMMENT '孩子成绩或日程',
  191. has_none TINYINT DEFAULT 0 COMMENT '1=选了无',
  192. use_sample TINYINT DEFAULT 0 COMMENT '1=分配到etotem脱敏样本',
  193. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  194. INDEX idx_uid (uid)
  195. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据准备自检';
  196. -- 7天行动计划表
  197. CREATE TABLE IF NOT EXISTS train_plan (
  198. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  199. uid BIGINT NOT NULL,
  200. items TEXT COMMENT '4件事JSON: [补齐账本,固化3用法,第2条自动化,约etotem测评]',
  201. submitted_at DATETIME,
  202. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/done',
  203. INDEX idx_uid (uid)
  204. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='7天行动计划';
  205. -- 卡券表
  206. CREATE TABLE IF NOT EXISTS train_coupon (
  207. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  208. uid BIGINT NOT NULL,
  209. type VARCHAR(20) NOT NULL COMMENT 'L1/private/etotem',
  210. code VARCHAR(64) COMMENT '凭证码',
  211. status VARCHAR(20) DEFAULT 'unused' COMMENT 'unused/used/expired',
  212. trigger VARCHAR(50) COMMENT '触发来源: vote/finish/research/champion/teaching',
  213. granted_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  214. used_at DATETIME,
  215. INDEX idx_uid (uid),
  216. INDEX idx_type (type)
  217. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='卡券';
  218. -- 测评兴趣调研表
  219. CREATE TABLE IF NOT EXISTS train_survey (
  220. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  221. uid BIGINT NOT NULL,
  222. class_id BIGINT,
  223. interest VARCHAR(100) COMMENT 'interest_health/interest_growth',
  224. submitted_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  225. INDEX idx_uid (uid)
  226. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测评兴趣调研';
  227. -- 管理后台账号表
  228. CREATE TABLE IF NOT EXISTS train_admin (
  229. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  230. username VARCHAR(50) NOT NULL UNIQUE,
  231. password VARCHAR(128) NOT NULL COMMENT 'BCrypt加密',
  232. role VARCHAR(20) NOT NULL COMMENT 'admin(运营)/lecturer(讲师)/assistant(助教)',
  233. name VARCHAR(50) COMMENT '姓名',
  234. manage_group_ids VARCHAR(255) COMMENT '助教负责的组ID(逗号分隔)',
  235. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  236. INDEX idx_username (username)
  237. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理后台账号';
  238. -- 审核日志表
  239. CREATE TABLE IF NOT EXISTS train_audit_log (
  240. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  241. action VARCHAR(100) NOT NULL COMMENT '操作',
  242. actor_uid BIGINT COMMENT '操作者',
  243. target_type VARCHAR(50) COMMENT '目标类型',
  244. target_id BIGINT COMMENT '目标ID',
  245. detail TEXT COMMENT '详情',
  246. ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  247. INDEX idx_actor (actor_uid),
  248. INDEX idx_target (target_type, target_id)
  249. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审计日志';
  250. -- 报名单表(报名/付费/裂变一期)
  251. CREATE TABLE IF NOT EXISTS train_enrollment (
  252. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  253. uid BIGINT COMMENT '学员ID(登录后)',
  254. class_id BIGINT COMMENT '所选班次ID',
  255. name VARCHAR(50) COMMENT '姓名',
  256. phone VARCHAR(11) COMMENT '手机号',
  257. bring_laptop TINYINT DEFAULT 0 COMMENT '1=带电脑',
  258. data_ready VARCHAR(50) COMMENT '已备数据类别(逗号分隔)',
  259. top_problems TEXT COMMENT '最想解决的3个问题JSON',
  260. source VARCHAR(20) DEFAULT 'scene' COMMENT '来源:scene/invite',
  261. invite_code VARCHAR(50) COMMENT '邀请码(基于train_user.invite_code)',
  262. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/confirmed/cancelled',
  263. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  264. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  265. INDEX idx_uid (uid),
  266. INDEX idx_class_id (class_id),
  267. INDEX idx_status (status)
  268. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报名单';
  269. -- 支付订单表
  270. CREATE TABLE IF NOT EXISTS train_order (
  271. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  272. order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号',
  273. enrollment_id BIGINT COMMENT '关联报名单',
  274. uid BIGINT COMMENT '学员ID',
  275. class_id BIGINT COMMENT '班次ID',
  276. amount INT NOT NULL COMMENT '实付金额(分)',
  277. original_amount INT COMMENT '原价(分)',
  278. discount_amount INT DEFAULT 0 COMMENT '优惠(分)',
  279. pay_channel VARCHAR(20) DEFAULT 'wechat' COMMENT '支付渠道',
  280. status VARCHAR(20) DEFAULT 'unpaid' COMMENT 'unpaid/paid/refunded/failed/closed',
  281. pay_time DATETIME,
  282. wechat_txn_id VARCHAR(64) COMMENT '微信交易号',
  283. prepay_id VARCHAR(64) COMMENT '预支付ID',
  284. refund_amount INT DEFAULT 0 COMMENT '已退金额(分)',
  285. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  286. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  287. INDEX idx_uid (uid),
  288. INDEX idx_class_id (class_id),
  289. INDEX idx_status (status),
  290. INDEX idx_enrollment_id (enrollment_id)
  291. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单';
  292. -- 转介绍关系表
  293. CREATE TABLE IF NOT EXISTS train_invite (
  294. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  295. inviter_id BIGINT NOT NULL COMMENT '邀请人(train_user.id)',
  296. invitee_id BIGINT COMMENT '被邀请人(train_user.id)',
  297. invite_code VARCHAR(50) COMMENT '邀请码',
  298. order_id BIGINT COMMENT '被邀请人的订单ID',
  299. successful TINYINT DEFAULT 0 COMMENT '1=被邀请人已完成付费',
  300. reward_status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/granted',
  301. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  302. INDEX idx_inviter (inviter_id),
  303. INDEX idx_invitee (invitee_id),
  304. UNIQUE KEY uk_code_invitee (invite_code, invitee_id)
  305. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转介绍关系';
  306. -- 课前资料包表(二期)
  307. CREATE TABLE IF NOT EXISTS train_course_material (
  308. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  309. class_id BIGINT COMMENT '班次ID(为空=通用资料)',
  310. title VARCHAR(100) NOT NULL,
  311. file_url VARCHAR(255) COMMENT 'PDF/附件URL',
  312. sort INT DEFAULT 0,
  313. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  314. INDEX idx_class_id (class_id)
  315. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课前资料包';
  316. -- 班级投屏配置表(每班一条,按下述模块开关控制大屏显示)
  317. CREATE TABLE IF NOT EXISTS train_screen_config (
  318. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  319. class_id BIGINT NOT NULL COMMENT '班次ID',
  320. show_scoreboard TINYINT DEFAULT 1 COMMENT '1=显示小组积分榜',
  321. show_checkin TINYINT DEFAULT 1 COMMENT '1=显示签到情况',
  322. show_progress TINYINT DEFAULT 1 COMMENT '1=显示完课进度',
  323. show_group_progress TINYINT DEFAULT 1 COMMENT '1=显示小组进展矩阵(分工/任务/路演)',
  324. show_vote TINYINT DEFAULT 1 COMMENT '1=显示投票结果',
  325. show_material TINYINT DEFAULT 1 COMMENT '1=显示课程资料',
  326. show_banner TINYINT DEFAULT 1 COMMENT '1=显示公告横幅',
  327. show_timer TINYINT DEFAULT 1 COMMENT '1=显示课程进行时间',
  328. agenda VARCHAR(2000) COMMENT '课程环节JSON: [{"title":"开场","minutes":10},...]',
  329. current_step INT DEFAULT 0 COMMENT '当前环节序号(从0开始,助教切换)',
  330. banner VARCHAR(200) COMMENT '投屏公告',
  331. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  332. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  333. UNIQUE KEY uk_class_id (class_id)
  334. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级投屏配置';
  335. -- 团报订单表(FR-PAY-03:多学员一单 + 企业开票信息采集)
  336. CREATE TABLE IF NOT EXISTS train_group_order (
  337. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  338. group_no VARCHAR(32) NOT NULL UNIQUE COMMENT '团报单号',
  339. class_id BIGINT NOT NULL COMMENT '班次ID',
  340. leader_uid BIGINT NOT NULL COMMENT '发起人(train_user.id)',
  341. member_count INT DEFAULT 1 COMMENT '报名人数',
  342. unit_amount INT COMMENT '单价(分)',
  343. total_amount INT NOT NULL COMMENT '总金额(分)',
  344. order_id BIGINT COMMENT '关联支付订单(train_order.id)',
  345. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/closed',
  346. invoice_title VARCHAR(200) COMMENT '发票抬头(企业名称)',
  347. invoice_tax_no VARCHAR(100) COMMENT '税号',
  348. invoice_email VARCHAR(100) COMMENT '电子发票接收邮箱',
  349. invoice_phone VARCHAR(50) COMMENT '收票人电话',
  350. invoice_type VARCHAR(20) COMMENT '普票/专票',
  351. pay_time DATETIME COMMENT '支付时间',
  352. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  353. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  354. INDEX idx_class_id (class_id),
  355. INDEX idx_leader_uid (leader_uid),
  356. INDEX idx_status (status)
  357. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团报订单(多学员一单+开票)';
  358. -- 团报成员表(FR-PAY-03:一个团报单下的学员名单,支付成功后逐人生成报名单)
  359. CREATE TABLE IF NOT EXISTS train_group_order_member (
  360. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  361. group_order_id BIGINT NOT NULL COMMENT '团报单ID',
  362. name VARCHAR(50) NOT NULL COMMENT '学员姓名',
  363. phone VARCHAR(11) COMMENT '手机号',
  364. uid BIGINT COMMENT '对应学员ID(已注册则回填)',
  365. enrollment_id BIGINT COMMENT '支付成功后生成的报名单ID',
  366. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid',
  367. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  368. INDEX idx_group_order_id (group_order_id),
  369. INDEX idx_uid (uid)
  370. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团报成员';
  371. -- 学员案例表(FR-FISS-04:采集→脱敏→授权→回流)
  372. CREATE TABLE IF NOT EXISTS train_case (
  373. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  374. uid BIGINT NOT NULL COMMENT '案例学员ID',
  375. class_id BIGINT COMMENT '班次ID',
  376. title VARCHAR(100) NOT NULL COMMENT '案例标题',
  377. summary TEXT COMMENT '脱敏后的案例内容(不含真实数据)',
  378. source_submission_id BIGINT COMMENT '来源成果(train_submission.id)',
  379. status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending待授权/authorized已授权/rejected已拒绝/published已发布',
  380. consent_at DATETIME COMMENT '学员授权时间',
  381. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  382. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  383. INDEX idx_uid (uid),
  384. INDEX idx_status (status)
  385. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员案例(采集/授权/回流)';