diff --git a/AGENTS.md b/AGENTS.md index ceec6d07..23192874 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -78,6 +78,7 @@ - 迁移时不要整包搬 `ruoyi-chat`;优先在 `ruoyi-aihr` 内吸收必要表、service、loader 和检索接口,并保留 seed fallback。 - 已落地的演示流不要退回静态壳:AI 面试、三角色对练、案例沉淀已是真模型优先(未配置/失败回退本地兜底),SOP 知识库、移动端三端首页保留 fallback——改造时降级链必须保留。 - 本项目 AI 表前缀用 `aihr_*`:知识库是 `aihr_knowledge_info/attach/fragment`,上传队列是 `aihr_knowledge_upload_item`,导入任务是 `aihr_knowledge_import_task`,模型配置是 `aihr_model_provider/config`,移动端训练记录是 `aihr_practice_session`,候选人补充资料是 `aihr_candidate_material`,组织人员快照是 `aihr_org_snapshot`(本地 reset 有 Demo seed;生产/试点从 `docs/open-org-sync-api-design-v1.md` 对应开放组织系统同步,入口 `POST /api/aihr/org/sync`)。 +- 2026-07-15 生产开放员工快照只返回 `position_id`,未返回岗位名称,开放 API 也没有岗位字典资源;因此生产 2943 名在职人员当前全部落为 `position_name='员工'`、`position_level='一线'`,主管数为 0。补齐开放平台岗位字段/字典或 HR 正式 `position_id` 映射并重新同步前,不得宣称主管身份与项目权限已验收,也不要在代码里猜 `position_id` 的角色含义。 ## 业务文档 diff --git a/README.md b/README.md index 4587cbc7..318f6708 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - 用户侧 Alpha:三端已在 `mobile-uni/` 按真实页面栈重建,portless 本地入口为 `https://wygj-mobile-uni.localhost/h5/`;员工端路由为 `/h5/#/pages/user/today/index`、`/practice/index`、`/sop/index`、`/profile/index`,候选人端为 `/h5/#/pages/candidate/index/index`,主管端为 `/h5/#/pages/supervisor/index/index`。已接手机号短信登录、问师傅检索/反馈/总结卡、员工训练闭环、案例素材入库、候选人面试/资料、主管复盘/派专项;旧 `mobile/` 不再作为新增功能承载面。三端输入不是统一全模态:员工对练/每日题支持文字和语音、问师傅仅文字,候选面试支持文字和语音且补充资料可传图片,主管端以文字复盘和录音回听为主;详见 [BRD 功能审查记录](docs/BRD_IMPLEMENTATION_AUDIT.md)。 - 英雄路径:AI 面试(真模型出题/评分)、三角色对练(真 LLM 客户回复+评分,asr/tts 配置后支持语音)、案例沉淀(真实语音上传+ASR 转写+模型整理)均为真模型优先、未配置或失败回退本地兜底;SOP 知识库已接中文关键词 + MySQL Fulltext + Qdrant 混合召回 + rerank 重排,支持 txt/md/PDF/Word/Excel/PPT/图片/视频上传解析入库(图片走 vision OCR,视频走 ffmpeg 抽音轨转写+关键帧描述),资料处理中心支持 ZIP 异步展开后逐文件入队;模型配置页可查看向量库维度/点数并一键重建。 - 资料处理:已新增解析任务状态页,按 `aihr_knowledge_attach` 和 `aihr_knowledge_fragment` 展示等待解析、解析中、已完成、失败、片段数和向量化状态;任务列表按当前筛选结果前端分页(10/20/50 条,筛选或刷新回到第一页)。页面只保留“批量导入”,通过异步队列处理多文件或 ZIP,不提供浏览器目录选择和服务端目录导入入口。后端目录导入接口仅保留为运维/调试能力。 -- 组织人员:`aihr_org_snapshot` 本地 reset 保留演示 seed;配置开放组织同步系统后,通过 `POST /api/aihr/org/sync` 从 `/api/open/v1/sync/snapshot` 拉取公司、部门、员工快照并刷新本地组织人员口径。2026-07-15 已在线上完成外部同步配置和覆盖同步,生产快照为 3417 名员工,其中 3392 人可通过手机号映射,25 人为上游手机号数据不可用。 +- 组织人员:`aihr_org_snapshot` 本地 reset 保留演示 seed;配置开放组织同步系统后,通过 `POST /api/aihr/org/sync` 从 `/api/open/v1/sync/snapshot` 拉取公司、部门、员工快照并刷新本地组织人员口径。2026-07-15 已在线上完成外部同步配置和覆盖同步,生产快照为 3417 名员工,其中 3392 人可通过手机号映射,25 人为上游手机号数据不可用。当前开放快照只有 `position_id`、没有岗位名称或岗位字典,生产 2943 名在职人员暂全部归为“一线”,主管身份与项目权限仍待上游/HR 补正式岗位映射后验收。 - 正式试点:管理端可按起止日期导出正式试点 CSV,严格门禁只统计唯一映射到在职组织的训练、校准和 SOP 评审。组织身份同步和至少 20 名手机号映射门槛已具备;下一步仍需选定真实试点窗口,产生员工训练、人工校准和 SOP 评审样本后重跑严格门禁,详见 [演示与试点验收](docs/DEMO_ACCEPTANCE.md)。 - 侧栏:MVP 阶段只展示“首页 / AI面试 / 三角色对练 / 案例沉淀 / SOP知识库 / 资料处理 / 系统设置-模型配置”,其余若依默认菜单暂时隐藏。 - 本地短信:真实阿里云短信参数放根目录 `.env.local`,由 `scripts/dev-backend.sh` 自动加载;不要把密钥写入 `application-dev.yml`。dev 未配短信时验证码固定 `123456`(`aihr.sms.dev-fixed-code`,prod 强制失效)。 @@ -66,4 +66,4 @@ ## 下一步 -现役验收入口是 [DEMO_ACCEPTANCE.md](docs/DEMO_ACCEPTANCE.md)。阶段一的工程闭环和正式组织同步已就绪,当前主线是选定 1–2 个项目、至少 20 名员工的真实试点窗口,产生训练、校准和 SOP 业务评审样本后重跑 M5 严格门禁;详见 [AI 陪练二期开发推进计划](docs/AI陪练二期开发推进计划.md)。大喇叭信息平台、知识学习平台和北森对接属阶段二/三,不进当前主线。后续迭代同时参考 [H5_REDESIGN.md](docs/H5_REDESIGN.md)、[BACKLOG.md](docs/BACKLOG.md) 和 [ruoyi-ai 能力分片迁移计划](docs/RUOYI_AI_INCREMENTAL_MIGRATION.md),不把归档排期当当前待办。 +现役验收入口是 [DEMO_ACCEPTANCE.md](docs/DEMO_ACCEPTANCE.md)。阶段一工程闭环、组织人员与手机号同步已就绪;当前主线是先补齐正式岗位/主管映射,再选定 1–2 个项目、至少 20 名员工和每项目主管的真实试点窗口,产生训练、校准和 SOP 业务评审样本后重跑 M5 严格门禁;详见 [BRD 对齐工作计划](docs/下一步工作计划-BRD对齐-20260715.md)。大喇叭信息平台、知识学习平台和北森对接属阶段二/三,不进当前主线。 diff --git a/docs/20260708/uni-app用户侧前端重建计划.md b/docs/20260708/uni-app用户侧前端重建计划.md index 568f4f1a..52d4cfcc 100644 --- a/docs/20260708/uni-app用户侧前端重建计划.md +++ b/docs/20260708/uni-app用户侧前端重建计划.md @@ -121,7 +121,7 @@ mobile-uni/ 截至 2026-07-10,`mobile-uni/` 已是用户、主管、候选人三端的现役页面栈,旧 `mobile/` 仅作 MVP 兜底。三端均以登录身份和真实 API 驱动:员工完成训练、问师傅和成长回读;主管按后端组织范围进行团队、复盘和专项指派;候选人按真实面试/资料状态进入独立线性页面。H5 构建、真实浏览器主链路和接口回读均已完成验证,不使用前端 mock 掩盖业务状态。 -2026-07-15 更新:组织同步和手机号映射门槛已从上游数据问题中恢复,线上 `aihr_org_snapshot` 已覆盖为 3417 名员工,其中 3392 人可手机号映射,25 人手机号仍不可用,疑似乱码为 0。严格试点尚未通过的剩余原因不再是组织同步能力,而是需要在真实试点窗口产生训练、人工校准和 SOP 评审样本;旧窗口 `2026-07-07..2026-07-10` 仍不能作为业务验收证据。下一阶段优先组织 1–2 个项目、至少 20 名员工的联合试点验收,不继续把功能堆回首页或旧单页。 +2026-07-15 更新:组织人员和手机号同步门槛已从上游数据问题中恢复,线上 `aihr_org_snapshot` 已覆盖为 3417 名员工,其中 3392 人可手机号映射,25 人手机号仍不可用,疑似乱码为 0。但开放员工快照只返回 `position_id`,没有岗位名称或岗位字典,生产 2943 名在职人员全部回退为“一线”,主管身份尚未恢复。下一阶段需先补正式岗位映射,再组织 1–2 个项目、至少 20 名员工和项目主管的联合试点验收,不继续把功能堆回首页或旧单页。 - 第一批用户侧主链路已落地到 `mobile-uni/`: 登录、今日页、问师傅、答案反馈、总结卡、对练页、个人页。 - 本机开发入口已切到 portless: `https://wygj-mobile-uni.localhost/h5/`。 diff --git a/docs/API_INTEGRATION.md b/docs/API_INTEGRATION.md index 7165d990..62826c75 100644 --- a/docs/API_INTEGRATION.md +++ b/docs/API_INTEGRATION.md @@ -15,10 +15,10 @@ | 案例媒体安全 | `GET /api/knowledge/case/records/{caseId}/media` | 案例详情只返回 `mediaOssId`,不返回原始 `sys_oss.url`;媒体下载会重复执行登录、后台角色或 APP 项目范围校验,再由服务端流式读取 OSS。管理端与 `mobile-uni` 通过鉴权 blob/temp 文件播放,关闭详情页时释放本地对象 URL | | SOP知识库 `/knowledge/sop` | `POST /api/knowledge/search`、`POST /api/knowledge/answer-feedback`、`GET /api/knowledge/position-sop`、`GET /api/aihr/mobile/onboard/tasks`、`POST /api/aihr/mobile/onboard/tasks/{id}/complete`、`GET /api/aihr/mobile/qualification`、`POST /api/knowledge/doc/upload` | 已接入 MySQL Fulltext + Qdrant 混合召回、岗位学习适配摘要、OSS-first 文档上传、txt/md/PDF/Word/Excel/PPT 解析和 embedding 写入,失败回退 seed;搜索返回 `reviewId` 与 `promptVersion`,员工反馈回传并保存该评审批次,SOP 人工评审记录同时保留答案生成提示词版本,管理端可继续复核;员工学习页按当前 APP 身份读取正式岗前/入职任务,员工只能将本人处于“待完成/进行中”的任务确认完成,服务端按组织快照/手机号归属更新 `status/completed_time`,不接受前端身份参数;资格证据无正式数据时明确返回 `NOT_CONFIGURED`,不以 AI 分数代替上岗资格;`position-sop` 仍保留一期生活顾问学习导航语义 | | 资料处理 `/knowledge/processing` | `GET /api/knowledge/processing/overview`、`POST /api/knowledge/doc/upload-async`、`GET /api/knowledge/doc/upload-items`、`POST /api/knowledge/doc/upload-items/{id}/retry` | 已接入解析任务状态聚合;页面只保留“批量导入”,接口暂存+入队即秒回,后台 worker(并发 2)逐条解析/归类/向量化;ZIP 在 worker 内安全解压后把支持的子文件继续入同一批次队列,页面按批次轮询进度、失败可单文件重试;不提供浏览器目录选择或服务端目录导入入口 | -| 组织人员同步 | `POST /api/aihr/org/sync` | 从开放组织同步系统的 `/api/open/v1/sync/snapshot` 拉取 `company/department/employee` 快照,分页参数使用 `limit`;员工手机号只落 `person_phone` 用于移动端身份映射,不在组织列表响应暴露;岗位识别 `position/job_title/post/job_name/role/title` 等字段。`dryRun` 必须显式传入 `true`(预检)或 `false`(写入),省略或传 `null` 直接拒绝,避免空请求意外写库;默认 `replaceExisting=true`,写入前必须先用 `{"dryRun":true}`;dry-run 不访问本地快照表、不执行 DDL/写库,返回 `phoneLinked/maskedPhone/suspectText/warnings` 且 `syncedCount=0`。非 dry-run 覆盖写入遇到员工被跳过、手机号不完整、脱敏手机号或疑似乱码时默认拒绝,只有确认 dry-run 结果后显式传 `allowPartialReplace=true` 才允许覆盖;重复 `ext_party_id` 始终拒绝写入,因为数据库唯一键会折叠重复身份;`replaceExisting=false` 不触发不完整快照覆盖闸门,但仍拒绝重复身份。2026-07-15 线上已用 `/api/open/v1` 前缀完成配置、dry-run 和覆盖同步:开放平台返回公司 17、部门 963、员工 3417;生产 `aihr_org_snapshot` 为 3417 行,`phoneLinked=3392`、`maskedPhone=25`、`suspectText=0`,在职 2943、离职 474。当前剩余 25 人手机号不可用属于上游数据质量问题;功能发布不再被组织同步能力阻塞 | +| 组织人员同步 | `POST /api/aihr/org/sync` | 从开放组织同步系统的 `/api/open/v1/sync/snapshot` 拉取 `company/department/employee` 快照,分页参数使用 `limit`;员工手机号只落 `person_phone` 用于移动端身份映射,不在组织列表响应暴露;岗位识别 `position/job_title/post/job_name/role/title` 等字段。`dryRun` 必须显式传入 `true`(预检)或 `false`(写入),省略或传 `null` 直接拒绝,避免空请求意外写库;默认 `replaceExisting=true`,写入前必须先用 `{"dryRun":true}`;dry-run 不访问本地快照表、不执行 DDL/写库,返回 `phoneLinked/maskedPhone/suspectText/warnings` 且 `syncedCount=0`。非 dry-run 覆盖写入遇到员工被跳过、手机号不完整、脱敏手机号或疑似乱码时默认拒绝,只有确认 dry-run 结果后显式传 `allowPartialReplace=true` 才允许覆盖;重复 `ext_party_id` 始终拒绝写入。2026-07-15 线上已完成覆盖同步:公司 17、部门 963、员工 3417,`phoneLinked=3392`、`maskedPhone=25`、`suspectText=0`,在职 2943、离职 474。当前开放员工项只有 `position_id`,没有上述岗位名称字段,开放 API 也无岗位字典资源;生产岗位统一回退为“员工/一线”,主管数为 0。人员/手机号同步已就绪,但主管身份与项目权限仍依赖上游岗位字段/字典或 HR 正式映射 | | 移动端手机号登录 | `GET /resource/sms/code`、`POST /auth/mobile/sms-login` | 已复用 sms4j 阿里云配置 `config1` 和 RuoYi `sms` 授权策略;短信发送成功后才写 Redis 验证码;手机号不存在时自动注册 `app_user`;`aihr.sms.dev-fixed-code` 非空时不真发短信、验证码固定(dev 默认 `123456`)。prod 默认关闭,试点期只有同时设置 `AIHR_SMS_DEV_FIXED_CODE` 与 `AIHR_SMS_PROD_FIXED_CODE_ENABLED=true` 才启用固定码。 | | 用户侧三端首页 `mobile-uni` hash 路由;旧 `/h5/user`、`/h5/candidate`、`/h5/supervisor` 兼容重定向 | `GET /api/aihr/mobile/home/{role}` | 未登录请求只返回不读取租户业务统计的公开首屏 seed;已登录移动端请求自动携带 `Authorization/clientid`,才返回员工/主管真实统计;移动端本地 fallback 保演示 | -| 移动端登录后角色识别 | `GET /api/aihr/mobile/me` | 认证后按手机号匹配组织快照;`position_level` 为“主管/项目经理”时进入主管端,否则进入员工端;接口失败回退员工端 | +| 移动端登录后角色识别 | `GET /api/aihr/mobile/me` | 认证后按手机号匹配组织快照;`position_level` 为“主管/项目经理”时进入主管端,否则进入员工端;接口失败回退员工端。生产当前因上游岗位字段缺失只能识别为“一线”,不能用手工选择生活顾问替代主管身份验收 | | 移动端员工训练与主管复盘闭环 | 员工复用 `POST /api/train/practice/start`、`/turn`、`/finish`,查询 `GET /api/aihr/mobile/practice/history`、`/practice/mistakes`、`/profile`;训练完成后提交 `POST /api/aihr/mobile/practice/satisfaction`;主管查询 `GET /api/aihr/mobile/practice/team`、`/practice/alerts`、`/practice/reviews`、`/practice/reviews/{id}`,标记 `POST /api/aihr/mobile/practice/reviews/{id}/reviewed`,指派 `POST /api/aihr/mobile/practice/assignments` | 员工端登录后带 `Authorization` 与 `clientid` 调用;`mode=mobile` 完成后写入 `aihr_practice_session`。满意度接口只接受本人已完成训练的 1-5 分,意见脱敏后落库,未填写不补默认值。错题本按员工本人聚合低分/红线回合,并关联已有 `retry` assignment,不伪造错题结论。主管 `/practice/team` 在同一项目权限范围内额外返回 `mistakes` 聚合,按场景/归因统计次数、影响人数、平均分和最近发生时间;普通员工返回“无主管权限”。主管接口以后端当前登录手机号映射在职组织快照,仅允许岗位为“主管/项目经理”的账号,并按租户和项目范围返回真实成员、全状态训练记录及非 daily 专项。复盘标记只允许首次 `待复盘 -> 已复盘` 创建后续专项,并发重复提交幂等;可带 `incentivePoint` 写入贡献度。每日三题正式只对 `hire_date` 在当前日期前三个月内的在职员工派发;没有入职日期时不使用训练次数推断,开发 Demo 的旧回退只有在 `dev/local` profile 且由 `aihr.practice.allow-legacy-daily-drill-fallback` 显式开启时生效,生产 profile 强制关闭。 | | 移动端候选人闭环 | 页面拆为 `/pages/candidate/index/index`、`/interview/index`、`/materials/index`、`/progress/index`、`/study/index`;面试复用 `POST /api/recruit/interview/start`、`/answer`、`/finish` 和 `GET /records`;资料 `POST/GET /api/aihr/mobile/candidate/materials`;预习 `POST /api/knowledge/search`;HR 审核 `GET /api/aihr/hr/candidate/materials`、`POST /api/aihr/hr/candidate/materials/{id}/review` | 候选人端登录后带 `Authorization` 与 `clientid` 调用;首页只按当前手机号对应的真实面试记录和最新资料状态分流,不读取公开 home seed。APP 候选人身份以后端登录手机号为准,前端 `candidateId/candidateName` 只作非 APP 场景兼容参数;面试支持文字作答和复用 `/api/ai/asr` 的录音转文字/选音频,`/answer` 可带可选 `answerAudioOssId`,服务端只接受当前候选人名下处于 `staged/bound` 状态的音频并将 `ossId` 写入问题快照,不向客户端暴露原始 OSS URL;`/answer` 与 `/finish` 还会校验当前 APP 手机号与启动会话的候选人 ID 一致,未知或他人会话直接拒绝;面试拉题/评分走真实模型优先;资料写 `sys_oss`/MinIO 和 `aihr_candidate_material`,HR 审核后进度页同步三态;岗前预习查询正式 SOP,不兜前端示例答案 | diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 85b6b019..aa6813a3 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -16,6 +16,12 @@ 审查证据来自当前源码与本地渲染控件;本轮未重新执行真实方言 ASR、图片上传、语音响应时延或生产环境端到端测试,因此这些能力继续标记为未验证。图片/视频情境输入已在 `AI陪练二期开发推进计划.md` 中明确为文本场景稳定后的独立评估项;个人知识空间按 `银城员工端APP分阶段实施总纲.md` 留在阶段二,不应拉入当前阶段一主线。 +- 2026-07-15 BRD 对齐批次生产发布:从干净分支 `codex/brd-release-20260715` 的 release commit `f0175253` 重新构建管理端、H5 和 `ruoyi-admin.jar`,本地 preflight 通过后,备份整站/JAR/配置和数据库至 `/opt/wygj/backups/brd-align-20260715160117`,再切换静态目录与 JAR并重启 `wygj-aihr.service`。发布后管理端资源为 `index-CJmvDHQd.js`、H5 为 `index-Bu6EO0TO.js`;remote asset、后端整包和 `ruoyi-aihr` 模块 hash 均与本地产物一致,schema `16/16`,根站/H5/租户/员工首页 API 均为 `200`,服务自 `16:03:46 CST` 起 active。本批次未执行 SQL 迁移或生产业务数据写入。 + +- 2026-07-15 A4 认证态与数据缺口回归:真实管理端 `admin` 会话登录成功并打开资料处理页,页面只保留“批量导入/刷新”,解析任务按 10 条/页展示 97 页;线上员工首页确认 C1 文案为“文字提问,快速解答”。生产仍启用试点固定验证码,因此不能把本轮移动登录写成“正式短信 OTP”;使用已存在的一线 APP 用户完成固定码登录、手工确认生活顾问岗位并进入员工今日页。主管路径未通过:生产 2943 名在职员工的 `position_name` 全为“员工”、`position_level` 全为“一线”,主管/项目经理为 0。 + +- 2026-07-15 开放平台岗位契约复核:直接只读检查外部快照键,员工项包含 `position_id`,但不包含 `position_name/job_title/post_name/job_name/role_name/title`;单员工详情同样只有 `position_id`,`position/positions/post` 快照资源均不可用。因此不能在 AIHR 端猜测 `position_id` 角色,需开放平台补岗位名称/岗位字典,或由 HR 签字提供 `position_id → 岗位名称/主管层级` 映射后重新同步。当前生产只读缺口为 SOP 文档 `3/5`、案例 `0/20`、校准 `0/20`、SOP 人工评审 `0`、满意度 `0`、候选资料 `0`、正式岗位适用 `0`、入职任务 `0`、资格门禁 `0`;在职手机号可用 `2927/2943`。 + - 2026-07-15 管理端资料处理分页静态发布:已备份生产根目录至 `/opt/wygj/backups/www-20260715134936`,再同步 `frontend/dist/`;根目录同步未使用 `--delete`,因此未覆盖同目录的 `/h5`。线上 `processing-yUVzof10.js` SHA-256 与本地构建一致。真实管理员会话确认任务分页共 97 页、第二页仍展示 10 条,状态筛选后回到第一页;根站、H5 和租户接口均返回 `200`。本轮未发布后端、迁移数据库或写入业务数据。 - 2026-07-15 当前发布与资料导入复核:提交 `eacf1a0a` 已发布到线上,`release-preflight.sh` 通过资源/后端哈希、`16/16` schema、根站/H5/API 健康检查,`wygj-aihr.service` 为 `active`。使用真实管理员认证在生产验证 ZIP 异步资料链路:ZIP 入队后拆为 `2` 条队列记录,`2/2` 完成,生成 `1` 个文档和 `2` 个片段;测试队列、附件、片段和 OSS 对象已清理。当前生产 BRD 证据仍未达标:评分校准 `0` 条,SOP 评审 `0/14`,候选资料 `0` 条;组织快照为在职 `22` 条、`2` 个项目、主管/经理岗位 `7` 条,但手机号映射为 `0`。该结果证明“版本已发布、ZIP 功能可用”,不等于正式试点验收完成。 diff --git a/docs/DEMO_ACCEPTANCE.md b/docs/DEMO_ACCEPTANCE.md index e43b07e1..327a3402 100644 --- a/docs/DEMO_ACCEPTANCE.md +++ b/docs/DEMO_ACCEPTANCE.md @@ -34,7 +34,7 @@ 试点正式验收前,用 `AIHR_PILOT_TENANT_ID=000000 AIHR_PILOT_START_DATE=2026-07-07 AIHR_PILOT_END_DATE=2026-07-10 AIHR_PILOT_STRICT=true ./scripts/demo-check.sh` 检查 M5 样本闸门,租户和日期替换为本批试点的真实值。闸门只统计目标租户、该时间窗内的数据;正式试点人员必须通过唯一手机号映射到在职组织快照,达到 10 次已完成对练的人数需覆盖试点人员的 80% 以上。校准样本、AI/人工分档一致率和 SOP 可用率未达标时同样失败,不用静态演示 marker 或历史 seed 数据代替真实试点数据。 -2026-07-15 线上组织同步快照:开放平台返回 17 个公司、963 个部门、3417 名员工;生产 `aihr_org_snapshot` 已覆盖为 3417 行,其中 3392 人具备可用于手机号登录映射的号码,25 人手机号仍不可用,疑似乱码为 0,在职 2943 人、离职 474 人。组织同步能力和“至少 20 名正式人员可映射”的发布门槛已具备;25 人属于上游数据质量问题,不阻塞功能发布。严格试点验收仍必须用真实批次窗口产生训练、人工校准和 SOP 评审样本;旧窗口 `2026-07-07..2026-07-10` 没有人达到 10 次对练,不能作为一期业务验收完成证据。 +2026-07-15 线上组织同步快照:开放平台返回 17 个公司、963 个部门、3417 名员工;生产 `aihr_org_snapshot` 已覆盖为 3417 行,其中 3392 人具备可用于手机号登录映射的号码,25 人手机号仍不可用,疑似乱码为 0,在职 2943 人、离职 474 人。人员/手机号和“至少 20 名正式人员可映射”的门槛已具备;但开放员工快照只返回 `position_id`,没有岗位名称或岗位字典,生产 2943 名在职人员全部落为“一线”,正式主管数为 0。补齐岗位映射并重新同步前,主管认证态与跨项目权限不得标为通过。严格试点还必须用真实批次窗口产生训练、人工校准和 SOP 评审样本;旧窗口不能作为一期业务验收完成证据。 ## 录屏兜底 diff --git a/docs/DEV_SETUP.md b/docs/DEV_SETUP.md index b9dad23c..3ed1ee5d 100644 --- a/docs/DEV_SETUP.md +++ b/docs/DEV_SETUP.md @@ -192,6 +192,8 @@ RELEASE_REMOTE_URL=https://peilian.njzhmj.top RELEASE_VERIFY_REMOTE_MATCH=true R 发布时必须保留 preflight 输出、远端备份目录和发布后浏览器回归结果;回滚优先使用对应备份目录恢复,再重启后端服务,不能直接覆盖当前线上目录而不留证据。 +发布后可用生产 API 前缀跑非 strict 页面/源码预检:`FRONTEND_URL=https://peilian.njzhmj.top MOBILE_URL=https://peilian.njzhmj.top FRONTEND_API_PREFIX=prod-api ./scripts/demo-check.sh`。脚本中的样本计数仍读取本机 `wygj-mysql`,不得把该部分当成生产数据;生产样本必须另用只读查询或正式窗口导出核验。 + ## MVP 页面验证 登录后侧栏应只展示以下入口: diff --git a/docs/RELEASE_EXECUTION_20260715.md b/docs/RELEASE_EXECUTION_20260715.md index 62b8816a..1d0590a8 100644 --- a/docs/RELEASE_EXECUTION_20260715.md +++ b/docs/RELEASE_EXECUTION_20260715.md @@ -15,3 +15,14 @@ 3. 先备份 `/opt/wygj/www`、`/opt/wygj/www/h5` 和 `/opt/wygj/app/ruoyi-admin.jar`,再同步产物并重启 `wygj-aihr.service`。 4. 发布后执行 remote match、后端模块 hash、schema 三项只读复检;任一失败立即按本次备份回滚。 5. 认证态员工、主管、管理端回归与非 strict `demo-check` 结果回写 `BRD_IMPLEMENTATION_AUDIT.md`;不得把发布成功写成正式试点验收完成。 + +## 执行结果 + +- 最终发布提交:`f0175253` +- 生产备份:`/opt/wygj/backups/brd-align-20260715160117` +- 回滚保留目录:`/opt/wygj/www.pre-f0175253` +- 远端复检:管理端/H5 资源匹配、后端整包与 `ruoyi-aihr` 模块匹配、schema `16/16`、服务 active +- 管理端认证态:通过;资料处理页只保留批量导入/刷新并显示 97 页任务 +- 员工认证态:使用生产现有固定码配置通过;未达到“正式短信 OTP”口径 +- 主管认证态:未通过;外部快照缺岗位名称/字典,生产主管数为 0,转入计划 B11 +- 非 strict 检查:新增 `FRONTEND_API_PREFIX=prod-api` 后通过生产根站、H5、租户、验证码和源码契约检查;样本统计来自本机 Docker,生产数据缺口以审计记录中的生产只读查询为准 diff --git a/docs/下一步工作计划-BRD对齐-20260715.md b/docs/下一步工作计划-BRD对齐-20260715.md index 1ac12747..912bdefe 100644 --- a/docs/下一步工作计划-BRD对齐-20260715.md +++ b/docs/下一步工作计划-BRD对齐-20260715.md @@ -1,6 +1,6 @@ # 下一步工作计划(BRD 对齐版) -> 版本:v2.1(2026-07-15 二次修订:发布前只跑本地预检、remote match+schema 移到发布后;案例底线补齐算术;CER 阈值归 B4 确认;B7 按生产实测字段改写) +> 版本:v2.2(2026-07-15 执行复核:发布完成;新增开放平台岗位字典/主管映射门禁 B11;生产 demo-check 支持可配置 API 前缀) > 基准:《物业AI人力资源系统业务需求文档BRD.md》v1.2(唯一事实源) > 阶段边界:《银城员工端APP分阶段实施总纲.md》阶段一(陪练)+ 2026-07-08《数字师傅学练问报整合方案》定案 > 现状证据:《BRD_IMPLEMENTATION_AUDIT.md》2026-07-15 最新条目 + 本日生产只读复核 @@ -13,17 +13,18 @@ **已完成**(不再列入待办): - 生产已发布至 `eacf1a0a` 批次并有后续静态增量,线上 H5 = `index-rPeDLbpR.js`;发布预检通过资源/后端哈希与健康检查。 - 生产 schema **16/16 齐备**,内置 Prompt **6/6**,生活顾问启用场景 **14 条**(含服务推介/增值 1、日常服务 1)。 -- **组织同步已线上闭环**:开放平台拉取公司 17 / 部门 963 / 员工 3417;`aihr_org_snapshot` 3417 行,手机号可映射 **3392**,在职 2943。主管身份与项目数据权限的数据基础已就位。 +- **组织人员与手机号同步已线上闭环**:开放平台拉取公司 17 / 部门 963 / 员工 3417;`aihr_org_snapshot` 3417 行,手机号可映射 **3392**,在职 2943。项目归属可用,但开放员工快照只返回 `position_id`,不返回岗位名称,开放 API 也无岗位字典资源;生产 `position_name='员工'`、`position_level='一线'` 为 2943/2943,主管身份仍未就位。 **真实缺口**(本计划的全部工作对象): - 正式试点证据全部为 0:评分校准 0/20、SOP 人工评审 0/14、案例 0/20、满意度 0、候选资料 0(L1-B/C/D)。 +- 主管身份为 0:开放平台需补岗位名称/岗位字典或由 HR 提供 `position_id → 岗位/层级` 正式映射,否则 C2 的主管认证态与跨项目权限无法验收。 - SOP 文档仅 3/5,缺服务推介/增值与日常服务两类的真实业务内容确认(4.3.4、L1-B)。 - 方言 ASR 零实测(9.1 MVP 阻塞项、L1-C ≤5s)。 - 仓库有 17 个已跟踪修改 + 2 个未跟踪文件未收拢,发布预检拒绝任何脏工作区,当前修复批次无法发布。 - 25 名员工手机号不可用(上游数据问题,不阻塞,需反馈开放平台)。 - PII 出境条款、成本计量契约、HR 学分规则等外部输入未闭合(G3/G6、4.5)。 -**结论:最大阻塞已从"发布与组织数据"转移到"试点圈定(B3)与内容/评审样本"。** 所有新增页面/功能默认冻结(守 MVP 切割线,BRD 附录 C 头号风险 = 范围失控)。 +**结论:发布已完成;当前最大阻塞是"试点圈定(B3)+主管岗位映射(B11)+内容/评审样本"。** 所有新增页面/功能默认冻结(守 MVP 切割线,BRD 附录 C 头号风险 = 范围失控)。 --- @@ -46,7 +47,8 @@ | # | 需要的输入 | 提供方 | 负责人 | 回复期限 | 兜底触发日 | 阻塞的 BRD 条款 | 不给的后果 | |---|---|---|---|---|---|---|---| -| B3 | **试点项目圈定(1–2 个住宅项目)+ 窗口起止日期 + ≥20 名员工名单**(组织数据已就位,可直接从 3392 条手机号映射中圈人) | HR 负责人 | 待指派 | 07-18 | 07-22 | 10.2-D | M5 全部指标无分母;半年会没有"真实使用数据" | +| B3 | **试点项目圈定(1–2 个住宅项目)+ 窗口起止日期 + ≥20 名员工名单 + 每项目至少 1 名主管**(员工可从手机号映射中圈定,主管需与 B11 的正式岗位映射一致) | HR 负责人 | 待指派 | 07-18 | 07-22 | 10.2-D | M5 全部指标无分母;半年会没有"真实使用数据" | +| B11 | **补齐岗位契约**:开放员工快照直接返回 `position_name/job_title`,或开放岗位字典资源;若短期不能改接口,由 HR 签字提供 `position_id → 岗位名称/主管层级` 映射及试点主管名单。不得按 `position_id` 猜角色 | 开放平台+HR | 待指派 | 07-18 | 07-22 | 5.4、G3、L1-B | 生产 2943 名在职人员全部落为“一线”,主管端和项目级权限无法认证态验收 | | B2 | 补 2 份真实 SOP 文档(现 3/5),并由业务确认全部五类核心流程的成功条件、价格/取消规则、回访口径;随后完成 14 条场景/SOP 的人工评审(现 0/14) | 内容负责人/HR | 待指派 | 07-20 | 07-24 | 4.3.4、L1-B(SOP≥5) | SOP 覆盖与 RAG 可用率(≥80%)无法验收 | | B9 | **历史案例批量提供**:试点前 **≥20 条**历史案例语音/材料入库并脱敏审核,不依赖试点新增量补齐验收底线;试点期继续按"每周每项目 1 条"采集新案例 | 各项目负责人 | 待指派 | 07-22 | 07-25 | 4.6、L1-B(案例≥20) | 案例库验收必然失败 | | B4 | 方言 ASR 厂商选型(**阶段一只选 1 种方言**,按试点区域确认;BRD 9.1 只要求 1 条路径)+ 费用授权 + **同时确认 CER 达标阈值**(BRD 只定了 ≤5s 响应,识别准确率的验收线需业务拍板,否则 C3 实测无法判定"达标") | 技术组+HR | 待指派 | 07-20 | 07-24 | 4.3.3、9.1、L1-C | MVP 阻塞项零实测,且测了也无法判定通过 | @@ -56,7 +58,7 @@ | B8 | 认证等级/学分规则契约(初/中/高级条件、学分来源与分值、防刷) | HR | 待指派 | 07-31 | 08-07 | 4.5、10.2-A | 成长页只能继续挂"规则待配置、不生效" | | B10 | 25 名员工手机号不可用 → 反馈开放平台修数(低优先级,不阻塞) | 开放平台 | 待指派 | 07-31 | — | 5.4 | 25 人无法登录 APP | -追办顺序:**B3 → B9 → B2 → B4**,其余并行。 +追办顺序:**B3 → B11 → B9 → B2 → B4**,其余并行。 --- @@ -65,7 +67,7 @@ | # | 任务 | 依据 | 完成定义 | 期限 | |---|---|---|---|---| | C1 | "问师傅"文案对齐:`pages/user/today/index.vue` 的"语音提问,快速解答"**直接改为符合现状的文字**(语音问答入 backlog,届时复用 `speech.ts` + `/api/ai/asr`,不新增接口) | 4.7、2026-07-15 审计 | 首页承诺与 SOP 页能力一致 | 07-16(随 A1 批次发布) | -| C2 | 主管身份与项目数据权限验收:组织数据已就位,用正式主管账号认证态验证——本项目团队可见、跨项目不可见、训练记录/待复盘按项目过滤 | 5.4、G3、L1-B | 认证态回归留证写入审计记录 | 07-18 | +| C2 | 主管身份与项目数据权限验收:待 B11 补齐岗位契约并重新同步后,用正式主管账号认证态验证——本项目团队可见、跨项目不可见、训练记录/待复盘按项目过滤 | 5.4、G3、L1-B | 生产主管数 >0;认证态回归留证写入审计记录 | B11+1 天 | | C3 | 方言实测(B4 选型后):**1 种方言**,固定样本集(≥20 条真实短音频),记录字错率(CER)与单轮响应 P95(≤5s,L1-C);CER 与 B4 确认的阈值比对——**阈值未确认前只记录数据、不判定达标** | 4.3.3、9.1、L1-C | 样本数、CER、P95 三项数据落审计记录;CER ≤ B4 阈值且 P95 ≤5s 才在验收表标"通过" | B4+3 天 | | C4 | LLM/ASR/TTS 调用计量:待 B6/财务给出计费字段与单价后,新增租户范围 `llm_call_log`(模块/模型/token/延迟/费用)+ 月度上限告警与自动降级;此前维持手动断路器,不硬编码价格 | 6.3、G6 | 有持久化计量与可配置上限 | B6 后一周内 | | C5 | 案例入库流水线支援 B9:批量导入入口复用现有上传/整理/筛选链路,脱敏门禁逐条通过;不为批量导入新做页面 | 4.6、L1-B | ≥20 条历史案例状态"已入库"且脱敏扫描 0 命中 | 07-25 | @@ -106,7 +108,7 @@ 07-15(今日) B 催办清单发出(B3 置顶) + C1 文案修改 07-16 A1 收拢工作区成 release commit + A2 发布窗口落字 07-17 A3 原子发布(预检→备份→切换→回归) + A4 结构回归与数据缺口留档 -07-18 C2 主管身份/项目权限认证态验收(组织数据已就位,不依赖外部) +07-18 起 C2 主管身份/项目权限认证态验收(依赖 B11 岗位契约与重新同步) 07-18~07-25 B2 SOP 补齐与评审 / B9+C5 历史案例 ≥20 条入库 / C3 方言实测(依赖 B4) 07-28~08-08 D 试点窗口(1–2 项目、≥20 人、2 周;以 B3 实际答复为准) 08-11~08-15 L1 证据包收口:strict 门禁全绿(带试点窗口日期)+ CSV 导出 @@ -117,12 +119,13 @@ ## 7. 风险与止损 1. **B3 试点圈定拖延是当前最大单点风险**(组织数据已就位,决策成本已最低):07-22 仍无答复,升级 HR 负责人;试点每晚一周,半年会"真实使用数据"窗口就少一周。 -2. **案例 20 条**:依赖 B9 存量导入;若试点前不足 20 条,立即提高采集频率(每项目每周 2–3 条)并如实下调收口预期,不用未脱敏或演示数据凑数。 -3. **发布失败**:A3 原子流程任一步失败即按备份回滚,当天不重试第二次,先归因。 -4. **范围失控**(BRD 附录 C 头号风险):任何新页面/新功能请求一律进 `docs/BACKLOG.md`;每周对照本计划复盘一次偏差。 -5. **方言不达标**:若 CER/P95 不达标,按 BRD 9.2 止损——保"1 条方言路径可演示",验收表如实标注差距,不虚标通过。 -6. **计划保鲜**:《BRD_IMPLEMENTATION_AUDIT.md》条目非严格时序,引用前须以"生产只读复核 + 线上实测"确认基线;本计划每次执行前先校验第 0 节事实是否仍成立。 +2. **B11 主管岗位缺失**:当前开放快照只有 `position_id`,生产主管数为 0;07-22 前拿不到岗位字典或 HR 正式映射,主管复盘/跨项目权限不能验收,试点只能暂停而不能用手工猜测角色替代。 +3. **案例 20 条**:依赖 B9 存量导入;若试点前不足 20 条,立即提高采集频率(每项目每周 2–3 条)并如实下调收口预期,不用未脱敏或演示数据凑数。 +4. **发布失败**:A3 原子流程任一步失败即按备份回滚,当天不重试第二次,先归因。 +5. **范围失控**(BRD 附录 C 头号风险):任何新页面/新功能请求一律进 `docs/BACKLOG.md`;每周对照本计划复盘一次偏差。 +6. **方言不达标**:若 CER/P95 不达标,按 BRD 9.2 止损——保"1 条方言路径可演示",验收表如实标注差距,不虚标通过。 +7. **计划保鲜**:《BRD_IMPLEMENTATION_AUDIT.md》条目非严格时序,引用前须以"生产只读复核 + 线上实测"确认基线;本计划每次执行前先校验第 0 节事实是否仍成立。 --- -*本计划由工程侧起草,v2.1 已按 Codex 审查修订;B 表负责人/期限需业务方确认后生效。执行进展回写《BRD_IMPLEMENTATION_AUDIT.md》,本文件只改计划不记证据。* +*本计划由工程侧起草,v2.2 已按 2026-07-15 生产执行结果修订;B 表负责人/期限需业务方确认后生效。执行进展回写《BRD_IMPLEMENTATION_AUDIT.md》,本文件只改计划不记证据。*