question-center 问卷后端(ysch-question-service)

问卷应用 R1「先行跑通」后端:Spring Boot 2.7.18,包名 com.yunhai.question,端口 8090,库 ysch_question。链路:新建问卷(自动挂接 FC 表单)→ iframe 内用 FC 设计器编辑 → 发布投放(链接+二维码)→ FC 填写页提交 → 投影拉取 → 回收明细与基础统计。表单定义/版本/校验/答卷权威全在 form-center(FC),本服务零改动 FC;提交入口永远在 FC 填写页 #/f/{code}(不建第二提交入口)。

配套前端:ysch-question-front(Vue3+TS+Vite5,端口 8091)。

├── sql/question_r1.sql   建表脚本(questionnaire / pull_cursor / answer_projection)
└── src/                  主代码 + 无外部依赖单测(H2+mock,23 例:投影幂等/游标推进/人数口径/绑定 uk)

前置依赖(联调)

依赖 地址 说明
form-center 后端/前端 localhost:8086 / 8089 /oapi 三端点 + 设计器 iframe / 填写页 #/f/{code}
MySQL localhost:3306 建库 ysch_question(执行 sql/question_r1.sql;开发期 ddl-auto=update 可自动建表)
Redis localhost:6379 平台 starter 密钥链(trust-registry)
CAS/UserBase localhost:8443 / 8060 登录与模块下发(local-debug 形态,同 flow-center)
appKey UserBase question-center appKey=100020 已注册(2026-10-22);FC 验签走 trust-registry 密钥链,FC 本地 trusted-apps 仅停摆兜底、可不配
AppRegistry FC 管理页 校管理员在 FC 管理面登记 question 应用(appCode 恒 question,不写代码注册)

启动(本地 dev)

# 1) MySQL 建库
mysql -uroot -p123456 < sql/question_r1.sql

# 2) 启动(:8090)
mvn -o spring-boot:run
# 健康探针:登录态 curl http://localhost:8090/api/question/ping → 200 {pong,user,shcId};未登录 → 302 CAS

关键配置(src/main/resources/application.yml)

  • yh.app-auth.app-key: 100020(UserBase 已注册;FC 侧经 trust-registry 密钥链验签,secret 两端须一致)
  • yh.open.services.form-center: http://localhost:8086(FormCenterClient 唯一出站点)
  • question.projection.fixed-delay-ms: 30000

测试

mvn -o test   # 23 例单测(H2/mock,无外部依赖)

红线(沿任务书 §7)

不迁旧数据;不做家长问卷;不跨校;不建第二答卷提交入口;不改 form-center/flow-center/svc-hall/Notice/UserBase/BasePlatform;不 import FC 在途未提交类(FormConsumerAccessService/AnswerDelivery*/SubmissionContext* 等);OAPI 只用已提交的 schema/answer/answers 三端点;appCode 恒为 question(2026-10-22 改定;FC AppRegistry 按此登记)。

S
Description
managed by projman
Readme
77 KiB
Languages
Java 99%
Dockerfile 1%