# 后端开发对接任务单 > 本文件是 2026-08-17 的历史任务单。最新后端源码已实现其中多项当时缺失的能力;当前有效结论和剩余任务以 [《APP 前后端联调结果与后端处理单(2026-08-22)》](./backend-integration-report-2026-08-22.md) 为准。 更新时间:2026-08-17 收件人:家谱项目后端开发、测试及接口维护人员 ## 后端执行结论 请按本任务单完成缺失接口、数据库字段、权限校验和自动化测试。前端页面及调用逻辑已经完成,不需要后端等待前端再次开发;接口实现后可直接联调。 建议执行顺序: 1. P0:族人档案字段、微信登录、VIP 多支付、内容密码找回、家谱永久注销。 2. P1:推荐关系、动态权限目录、平台评论契约收紧。 3. 联调后端已存在的公开家谱搜索、视频评论、平台视频和回收站接口。 接口路径、字段、枚举、必填规则及响应 schema 只以随文提供的 `genealogy-app-openapi.yaml` 为准。后端实现与 OpenAPI 不一致时,应同步修正实现或契约,不能要求前端增加旧字段、snake_case 别名或猜测式兼容代码。 ## 1. 结论与契约归属 前端已补齐本轮确认保留的能力。后端尚未提供的能力没有使用假数据或旧接口兼容:页面、入口、表单、提交状态、失败提示、取消请求和严格响应校验均已完成,接口可用后直接进入联调。 `genealogy-app-openapi.yaml` 是本项目 APP 接口的唯一契约所有者。本文件只记录前后端差距、责任和验收方式,不重复定义请求或响应结构;实现字段与枚举一律以 OpenAPI 为准。 核对基线: - 参考前端:`C:\Users\Rain\Desktop\job\Jiapu-App` - 当前前端:`C:\Users\Rain\Desktop\job\jiapuapp` - 当前后端源码:`C:\Users\Rain\Desktop\job\Genealogy` - 参考项目注册了 78 个活动路由;`video2.nvue`、`video3.nvue`、`video4.nvue` 均为有效且可达的视频页,已纳入前端比对。`ancestorsOrder.vue` 是 67 字节空壳,不作为正式功能。 - 当前项目有 59 个有效路由。旧版多页面流程已按当前产品职责合并,因此验收按业务能力和用户路径,不按旧文件数量一一复制。 > “后端源码现状”来自 2026-08-17 静态源码核对。前端侧没有修改、构建或运行后端工程,后端开发完成后需自行执行后端构建与自动化测试。 ## 2. 总体差距表 | 优先级 | 业务能力 | 当前前端状态 | 后端源码现状 | 后端下一步 | 联调通过标准 | | --- | --- | --- | --- | --- | --- | | P0 | 微信快捷登录 | 已完成授权码登录入口、取消/失败状态、重复提交保护;前端不接收 AppSecret | `AppAuthController` 只有注册、密码登录和短信登录,没有 `/auth/login/wechat` | 按 OpenAPI 新增授权码交换、账号匹配/绑定与冲突响应;正式开放平台参数只放服务端和打包配置 | Android/iOS 正式包完成首次授权、已有账号登录、取消授权、重复登录和账号冲突路径 | | P0 | VIP 多支付方式 | 已完成微信、支付宝、余额选项;选项完全由 capability 下发;三类支付结果严格分支校验 | capability 只返回 `enabled/disabledReason`;下单体没有 `paymentMethod`;支付响应仍是微信单一形态 | capability 下发支付方式;下单接收 `paymentMethod`;按渠道返回互斥参数;余额支付在服务端原子扣款并开通会员 | 三种支付各走通成功、取消、失败、超时查询;同一订单不能跨渠道重复支付或重复开通 | | P0 | 族人完整档案 | 新增、编辑、详情展示及校验均完成;遗传病史按服务端能力字段控制 | `LineagePerson/Bo/Vo` 仅已有 `aliasName`,其余新增字段缺失 | 增加数据库列、实体、请求体、VO、映射与服务校验;敏感字段必须服务端鉴权后才返回 | 新增和编辑可回显全部字段;无权限响应不包含遗传病史;旧数据读取不报错 | | P0 | 内容密码找回 | 谱文、成长记录、重要证件已接入短信验证找回;有发送倒计时、重置状态和未知结果防重 | 已有内容密码保护/解锁/移除和通用认证验证,但没有 recovery 三个 APP 端点 | 复用服务端短信验证能力,实现 capability、发码、重置;只允许资源所有者或获授权管理员操作 | 三类资源均覆盖发码限频、错码、过期码、无权限、成功重置;全链路有审计记录 | | P0 | 家谱永久注销 | 设置页已完成归档前置、不可用原因、脱敏手机号、家谱名+短信双确认和非幂等未知结果处理 | 后端已有管理员删除引擎与资格检查,但没有 APP 谱主入口;`AppGenealogyVo` 没有注销能力字段 | 用现有删除引擎增加 owner-only APP 包装;投影 capability;成功提交后撤销所有成员家谱上下文 | 非谱主、未归档、名称不符、错码、资金/任务阻塞均拒绝;成功后不可再进入并异步完成清理 | | P0 | 创建家谱始迁祖 | 创建表单已增加“始迁祖”,请求字段为 `firstAncestorName` | 当前创建家谱请求体和服务没有该字段,也不会原子创建首位世系人物 | 按 OpenAPI 接收字段,并在创建家谱事务内创建对应第一代人物;失败时家谱和人物一起回滚 | 填写始迁祖创建后,世系树立即出现同名第一代人物;重复提交不产生重复人物 | | P1 | 功德记录图片 | 功德表单已支持图片上传、逐项移除、编辑保留和详情预览;请求 `mediaOssIds`,响应 `mediaFiles` | 当前功德记录请求体和 APP VO 没有媒体字段 | 按 OpenAPI 复用业务文件关联;更新按传入 ID 集合替换关联,空字符串表示清空;列表和详情返回授权后的 `BusinessFileAccess[]` | 新增、编辑、移除和详情均能正确回显;越权和失效文件不可访问;移入回收站后附件权限同步失效 | | P1 | 推广关系 | 注册页可填写推荐码;个人中心有“我的推荐”、复制和分享入口;全部使用正式响应,不伪造收益 | 注册体没有 `referralCode`,没有推荐资料接口或推荐关系服务 | 注册支持一次性绑定推荐人;新增 `/referrals/me`;落实防自邀、防重复绑定和收益归属幂等 | 首次绑定、无推荐码、自邀、重复绑定、并发注册和推荐资料查询均有自动化测试 | | P1 | 动态权限项 | 成员管理可从服务端目录渲染分组权限、读取和保存成员授权;前端不硬编码 `auth_str` | 成员权限 GET/PUT 已存在;缺少 `/permission-catalog` | 基于后端唯一权限定义输出当前家谱可授权目录、名称、分组和禁用原因;保存响应返回最终授权集合 | 后端新增权限无需发版即可显示;越权勾选被服务端拒绝;保存后回显与实际鉴权一致 | | P1 | 家谱视频评论 | 已完成一级评论、一级回复展示/发表、本人或管理员删除;回复入口只允许根评论 | 根评论、回复列表、发表、删除均已存在,字段与前端契约基本一致 | 按 OpenAPI 联调并补自动化契约测试;保持只允许一层回复 | 根评论和直属回复顺序正确;删除权限可信;弱网重复提交不会静默生成多条 | | P1 | 平台宣传视频 | 已完成列表、播放、点赞、一级评论和删除;链接统一通过业务文件访问层处理 | 列表/详情/点赞/评论均已存在;评论请求仍允许 `parentCommentId` 并在服务内支持回复 | 本期产品决定为平台视频只保留一级评论:删除 `parentCommentId` 输入并清理/迁移已有回复数据 | APP 位置筛选正确;过期内容不返回;点赞幂等;平台评论响应中不存在子回复 | | P1 | 公开家谱搜索 | 已完成关键词输入、清空、加载/空/错状态及本地二次过滤 | `/genealogies/public` 已支持可选 `keyword` | 无新增接口,按 OpenAPI 联调并确认匿名/登录策略 | 姓氏、谱名、堂号等后端约定字段可查;空关键词恢复列表;分页/数量限制明确 | | P1 | 相册批量管理 | 已完成批量选择、全选、逐张移至回收站、部分失败保留选择及结果提示 | 单张删除和回收站机制已存在,资源引用可恢复 | 不阻塞上线;如后续数据量需要,再单独设计服务端批量接口和部分成功语义 | 选中项逐张处理可见;失败项仍被选中;成功项可从回收站恢复 | | P1 | 内容删除与回收站 | 前端所有相关文案统一为“移至回收站”,不再错误声称立即永久删除 | `ContentRecycleBinService` 及恢复链路已存在 | 按现有接口联调,确认各资源类型映射完整 | 删除后列表移除、回收站出现、恢复后关系与文件引用完整 | ## 3. 族人档案字段表 以下键名已经写入前端契约和 OpenAPI。后端需要把 OpenAPI 作为唯一字段来源,不增加 snake_case 别名或双读兼容分支。 | 字段 | 含义 | 前端行为 | 后端要求 | | --- | --- | --- | --- | | `courtesyName` | 字 | 新增、编辑、详情显示;文本长度校验 | 新增数据库字段并原样回显 | | `aliasName` | 别名 | 已接入;空值不显示 | 后端已有,核对映射与长度即可 | | `zodiac` | 生肖 | 选择并显示 | 校验 OpenAPI 枚举,不接受任意文本 | | `currentAddress` | 现居住地 | 文本输入和详情显示 | 长度校验,空值保持为空而非虚构默认值 | | `mobile` | 手机号 | 格式校验,详情显示 | 格式和权限由服务端再次校验 | | `email` | 邮箱 | 格式校验,详情显示 | 规范化大小写规则并回显 | | `education` | 学历 | 文本输入和显示 | 按 OpenAPI 长度保存,不自行映射未知字典 | | `occupation` | 职业 | 文本输入和显示 | 按 OpenAPI长度保存 | | `deathAge` | 享年 | 数字输入;仅逝者相关资料使用 | 使用明确整数范围;不能以真假判断吞掉 `0` | | `deathType` | 去世原因/类型 | 文本输入和显示 | 依 OpenAPI长度保存;不要与生存状态混成同一字段 | | `burialDate` | 安葬日期 | 日期选择和格式化显示 | 使用 OpenAPI 日期格式,避免时区转换导致日期偏移 | | `hereditaryMedicalHistory` | 遗传病史 | 仅 `canManageSensitiveMedicalHistory=true` 时编辑/显示 | 服务端强制鉴权;无权限时响应不得泄露字段内容;需审计访问与修改 | | `canManageSensitiveMedicalHistory` | 敏感病史能力 | 决定表单和详情是否出现敏感字段 | 由当前用户、家谱和成员关系实时计算,客户端提交不能覆盖 | 建议后端改动顺序:数据库迁移 → Entity/Bo/请求 DTO/Vo → Mapper → Service 校验和鉴权 → Controller 契约测试。不能只扩 DTO 而遗漏数据库、详情 VO 或树节点回显。 ## 4. 后端已存在、直接进入联调的接口 | 能力 | OpenAPI 路径 | 源码核对结论 | | --- | --- | --- | | 公开家谱搜索 | `GET /genealogy/app/genealogies/public?keyword=` | 已支持可选关键词 | | 家谱视频根评论 | `GET/POST /genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments` | 已存在 | | 家谱视频回复 | `GET /genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/{commentId}/replies` | 已存在 | | 家谱视频评论删除 | `DELETE /genealogy/app/genealogies/{genealogyId}/videos/{videoId}/comments/{commentId}` | 已存在 | | 平台视频 | `GET /genealogy/app/platform-videos?placement=` | 已存在,当前 Controller 要求 placement | | 平台视频点赞/评论 | `/genealogy/app/platform-videos/{videoId}/likes`、`/comments` | 已存在;评论需收紧为一级 | | 成员权限读取/保存 | `GET/PUT /genealogy/app/genealogies/{genealogyId}/members/{memberId}/permissions` | 已存在;保存响应需严格返回最终集合 | | 内容回收站 | `/genealogy/app/genealogies/{genealogyId}/recycle-bin/...` | 已有查询与恢复服务 | ## 5. 后端需要新增或调整的契约 具体 schema、required、枚举和响应包装见 `genealogy-app-openapi.yaml`,这里仅列责任边界。 | 端点/契约 | 类型 | 后端责任 | | --- | --- | --- | | `POST /genealogy/app/auth/login/wechat` | 新增 | 只接收微信一次性授权码;服务端换取身份并处理账号冲突 | | `POST /genealogy/app/auth/register` 的 `referralCode` | 调整 | 注册事务内一次绑定,防自邀、防重复与并发覆盖 | | `GET /genealogy/app/referrals/me` | 新增 | 返回稳定推荐码和服务端统计;无数据也返回合法空统计 | | `GET /genealogy/app/vip/capability` 的 `paymentMethods` | 调整 | 返回当前租户、平台、用户可用渠道及禁用原因 | | `POST /genealogy/app/vip/orders` 的 `paymentMethod` 与响应 | 调整 | 按微信/支付宝/余额返回互斥结果;响应必须带渠道判别字段 | | `/content-password-recovery/{resourceType}/{resourceId}` | 新增三步接口 | 查询能力、发送验证码、验证并重置;服务端掌握手机号与权限 | | `GET /genealogy/app/genealogies/{genealogyId}/permission-catalog` | 新增 | 输出动态权限目录,权限编码只由后端唯一权限定义产生 | | `AppGenealogyVo` 注销能力字段 | 调整 | 返回 `canDeletePermanently`、禁用原因和已验证手机号脱敏值 | | 家谱永久注销发码与提交 | 新增 | owner-only,校验归档、阻塞任务、精确家谱名、短信码并调用现有删除引擎 | | 族人档案字段 | 调整 | 数据库到请求/响应全链路一致;敏感病史单独服务端鉴权 | | 平台视频评论请求 | 收紧 | 去掉 `parentCommentId`,拒绝并清理不符合一级评论契约的数据 | ## 6. 本轮明确的产品取舍 | 参考项目做法 | 当前实现 | 原因 | | --- | --- | --- | | 安全问题找回内容密码 | 已验证手机号短信找回 | 安全问题答案弱且容易被猜测,不能作为敏感内容的正式凭据 | | 直接点击永久删除家谱 | 归档前置 + 家谱名 + 短信双确认 + 后台异步任务 | 家谱关联数据多,必须由服务端做资格检查和可审计的高风险操作 | | 固定 `auth_str` 权限字符串 | 服务端动态权限目录 + 成员授权集合 | 权限语义必须由服务端唯一拥有,避免客户端版本与鉴权漂移 | | 删除提示为永久删除 | 内容先进入回收站 | 与当前后端实际生命周期一致,避免误导用户 | | 宣传视频直接信任旧 URL | 平台视频资源走统一文件访问层 | 避免 HTTP、过期或未授权资源地址绕过现有文件契约 | | 客户端保存微信密钥或信任用户资料 | 客户端仅提交一次性授权码 | AppSecret 必须只在服务端;展示资料不能作为登录身份凭据 | ## 7. 后端验收与安全底线 - 所有写接口继续在服务端校验家谱成员关系、角色和具体权限,不能以页面按钮是否显示作为安全边界。 - 微信登录、短信发码、内容密码重置和永久注销必须有限频、过期、一次性消费、失败次数限制和审计记录。 - 遗传病史属于敏感字段:无权限时不只是禁止修改,也不得从列表、详情、树节点或日志中返回原文。 - 余额购买 VIP 必须在一个服务端事务中完成余额校验、扣款、订单成功和权益开通,并使用稳定幂等键防重复扣款。 - 支付宝仅返回 APP 支付所需订单字符串;微信返回完整 APP 预支付签名参数;不同渠道字段不能混合猜测。 - 永久注销成功提交后应立即让所有成员端失去该家谱操作上下文;异步删除失败要可追踪、可重试,但不能把家谱恢复成可写状态。 - 运行时响应必须通过 OpenAPI 定义;不要长期保留旧字段、snake_case 别名或“缺字段时客户端猜测”的兼容路径。 ## 8. 前端验收状态与待联调项 前端静态契约、59 个页面注册、导航、隐私审计、设计回归和资源引用均已通过项目检查。以下事项只能在后端完成后验证: - 真机微信登录和微信/支付宝支付回跳; - 余额真实扣款、订单查询和重复支付防护; - 短信发送、限频、过期和服务端审计; - 族人字段数据库持久化与敏感病史服务端脱敏; - 永久注销任务、成员上下文撤销和关联数据清理; - 推广关系的注册事务、归属和收益统计; - 权限目录与各业务接口实际判权的一致性。 联调时若运行时响应与 OpenAPI 不一致,应优先修正后端实现或 OpenAPI 的唯一契约,不应在前端增加第二套字段读取逻辑。