R1 先行批:question-center 后端(SB 2.7.18,23 单测全绿)+ 建表脚本 + 仓库说明
build / build-push (push) Successful in 51s

This commit is contained in:
chenxing
2026-10-22 10:13:00 +08:00
parent 380df08271
commit 907063a0b6
30 changed files with 2693 additions and 2 deletions
+66
View File
@@ -0,0 +1,66 @@
-- =====================================================================
-- 问卷应用 question-center R1 建表脚本(库:ysch_question)
-- 表:questionnaire / pull_cursor / answer_projection
-- 与实体(ddl-auto=update 开发期自动建表)保持同构;生产用本脚本 + ddl-auto=none
-- =====================================================================
CREATE DATABASE IF NOT EXISTS ysch_question DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE ysch_question;
-- ---------------------------------------------------------------------
-- 问卷主表:一份问卷 = 一个 FC 表单(1:1)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `questionnaire` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sch_id` BIGINT NOT NULL COMMENT '学校域',
`form_uuid` VARCHAR(40) NOT NULL COMMENT 'FC form.uuid(uk 兜底防重复绑定)',
`form_code` VARCHAR(64) NULL COMMENT 'FC form.code:填写链接 #/f/{code} 入口',
`title_snapshot` VARCHAR(128) NULL COMMENT 'FC form.name 快照(以 FC 为准可刷新)',
`form_version` INT NULL COMMENT '发布核验时钉版的版本号;NULL=从未发布',
`status` INT NOT NULL DEFAULT 0 COMMENT '0=草稿 1=收集中 2=已结束(问卷投放态)',
`description` LONGTEXT NULL COMMENT 'JSON:{description,cover,thanks}',
`anonymous` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '受众含 ANONYMOUS',
`schema_snapshot` LONGTEXT NULL COMMENT '发布时钉版的 FC schema 快照(统计渲染用)',
`publish_time` DATETIME NULL,
`finish_time` DATETIME NULL,
`create_by` VARCHAR(64) NULL,
`create_time` DATETIME NULL,
`update_by` VARCHAR(64) NULL,
`update_time` DATETIME NULL,
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_questionnaire_form_uuid` (`form_uuid`),
KEY `idx_questionnaire_sch_status` (`sch_id`, `status`, `is_deleted`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '问卷主表';
-- ---------------------------------------------------------------------
-- 投影拉取游标:每表单一行(冻结表单 append-only answer_uuid 游标)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `pull_cursor` (
`form_uuid` VARCHAR(40) NOT NULL COMMENT 'FC form.uuid',
`cursor` VARCHAR(40) NULL COMMENT '已拉到的最后一条 answer_uuid(FC nextCursor)',
`seen_count` BIGINT NOT NULL DEFAULT 0 COMMENT '对账:累计首见行数(含墓碑)',
`last_pull_at` DATETIME NULL,
`last_status` VARCHAR(255) NULL COMMENT 'OK / FAILED:原因',
PRIMARY KEY (`form_uuid`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '答卷投影拉取游标';
-- ---------------------------------------------------------------------
-- 答卷投影行:uk answer_uuid 幂等 upsert;墓碑翻 is_deleted 不删行
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `answer_projection` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`answer_uuid` VARCHAR(40) NOT NULL COMMENT 'FC answer_uuid(uk)',
`form_uuid` VARCHAR(40) NOT NULL,
`values_json` LONGTEXT NOT NULL COMMENT 'FC 行 values 原文 JSON(不解析不校验)',
`submitter_id` INT NULL COMMENT 'FC userId;0=匿名行',
`subject_id` INT NULL COMMENT '被代填人;自填=本人、匿名=NULL',
`status` VARCHAR(32) NULL COMMENT 'FC 答卷状态',
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=FC 侧墓碑(软删)',
`fc_create_time` VARCHAR(32) NULL COMMENT 'FC 行 create_time 原文',
`fc_update_time` VARCHAR(32) NULL,
`pulled_at` DATETIME NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_answer_projection_uuid` (`answer_uuid`),
KEY `idx_answer_projection_form` (`form_uuid`, `is_deleted`, `fc_create_time`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '答卷投影行';