admin
927458b9e0
feat(aihr): harden M0-M2 mobile training flows
2026-07-23 21:18:13 +08:00
admin
06322c994b
feat(aihr): add tenant organization governance
2026-07-23 15:58:38 +08:00
admin
f6609808df
feat(aihr): add M1 broadcast targeting and mandatory reads
2026-07-23 12:11:41 +08:00
admin
cd94f4fe9f
test: add M1 broadcast acceptance reproducers
2026-07-23 11:27:53 +08:00
admin
4b31848e3d
fix(aihr): harden broadcast and mobile assistant flows
2026-07-23 03:35:36 +08:00
admin
163b08ecfe
feat(aihr): 重构运营后台与租户知识治理
...
- 重构运营总览、侧栏和内容运营工作台\n- 增加大喇叭、成果审核与运营统计链路\n- 补齐租户、知识空间、分类和知识维护闭环\n- 加固标签页租户上下文、停用租户写保护与迁移预检
2026-07-23 01:24:22 +08:00
admin
4ab0fccc73
fix(knowledge): parse PDFs through safe Tika adapter
2026-07-22 21:44:40 +08:00
admin
87772cc64c
feat: add qwen realtime practice beta
2026-07-22 09:29:39 +08:00
admin
2488febf19
Merge branch 'codex/personal-assistant-phase2' into codex/multi-tenant-knowledge-platform
...
# Conflicts:
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrModelSeedServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java
# docs/API_INTEGRATION.md
# docs/个人AI助理阶段二专项TechSpec.md
# docs/个人AI助理阶段二开发推进计划.md
# frontend/src/views/knowledge/processing.vue
# mobile-uni/src/pages/user/sop/index.vue
# mobile-uni/src/services/api.ts
# mobile-uni/src/services/personal-assistant.ts
# mobile-uni/tests/personal-assistant.test.mjs
# scripts/demo-check.sh
# scripts/personal-assistant-smoke.sh
2026-07-22 08:54:04 +08:00
admin
c38a723ae4
Merge branch 'codex/brd-release-20260715' into codex/multi-tenant-knowledge-platform
...
# Conflicts:
# AGENTS.md
# README.md
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrOrgSyncServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java
# docs/20260708/uni-app用户侧前端重建计划.md
# docs/API_INTEGRATION.md
# docs/BRD_IMPLEMENTATION_AUDIT.md
# docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
# docs/DEMO_ACCEPTANCE.md
# docs/DEV_SETUP.md
# docs/FIGMA_IMPLEMENTATION_MATRIX.md
# docs/README.md
# frontend/src/views/knowledge/processing.vue
# mobile-uni/src/pages/supervisor/assign/index.vue
# mobile-uni/src/pages/supervisor/index/index.vue
# mobile-uni/src/pages/supervisor/profile/index.vue
# mobile-uni/src/pages/supervisor/review/index.vue
# mobile-uni/src/pages/supervisor/reviews/index.vue
# mobile-uni/src/pages/supervisor/team/index.vue
# mobile-uni/src/pages/user/cases/index.vue
# mobile-uni/src/pages/user/practice/index.vue
# mobile-uni/src/pages/user/profile/index.vue
# mobile-uni/src/pages/user/sop/index.vue
# mobile-uni/src/pages/user/today/index.vue
# mobile-uni/src/types/api.ts
# scripts/tests/aihr-schema-migrations.test.sh
2026-07-22 08:41:49 +08:00
admin
1ffb1c7bd0
Merge branch 'codex/production-collation-release-fix' into codex/multi-tenant-knowledge-platform
...
# Conflicts:
# AGENTS.md
# README.md
# backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java
# backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java
# docs/API_INTEGRATION.md
# docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
# docs/DEV_SETUP.md
# docs/H5_REDESIGN.md
# docs/README.md
# docs/RUOYI_AI_INCREMENTAL_MIGRATION.md
# docs/物业AI人力资源系统开发规格TechSpec.md
# scripts/release-preflight.sh
# scripts/tests/aihr-schema-migrations.test.sh
2026-07-22 08:38:40 +08:00
admin
d7664e45a7
feat(work-results): support historical project outcomes
2026-07-22 00:29:19 +08:00
admin
4536d607e3
feat: add project-scoped work assistant results
2026-07-21 04:44:15 +08:00
admin
b6a7af9e51
fix(backend): return canonical extPartyId in practice review detail
...
The reviewDetail query referenced a.trainee_name without declaring the
table alias, which 500s whenever org-sync display fields are enabled,
and the mobile payload never exposed extPartyId, so the supervisor
review pages could not resolve organization member names.
2026-07-20 13:16:18 +08:00
admin
11ef5b9721
test: align practice assertions with current behavior
2026-07-20 11:36:55 +08:00
admin
dd7058a783
test: adapt exam idempotency test to model service constructor
2026-07-20 11:33:34 +08:00
admin
175a047952
fix: prevent NPE on practice finish without measured response latency
2026-07-20 11:27:13 +08:00
admin
4e9ccfa8b5
feat(backend): employee name fallback labels and AI exam question generation
...
- practice team members / exam targets: when person_name is empty, show
phone-masked label (员工·尾号XXXX) instead of a bare 员工
- POST /api/aihr/mobile/exams/supervisor/ai-generate: LLM-generated exam
questions grounded on SOP knowledge fragments, strict JSON sanitize,
scores rebalanced to 100; clear errors when model unavailable
2026-07-20 10:16:40 +08:00
admin
95759d7f26
feat(backend): switch mentor TTS voice to cloned shifu-warm voice
...
Already deployed to production jar on 2026-07-20; committing to keep
repo in sync with the live service.
2026-07-20 09:03:58 +08:00
admin
0a5fc9a463
feat(assistant): unify confirmed memory capture
2026-07-20 02:30:06 +08:00
admin
61bc7191d1
feat(web-ai): support qwen image search safely
2026-07-19 22:58:20 +08:00
admin
c17d83fc59
feat(web-ai): render markdown answers safely
2026-07-19 22:02:49 +08:00
admin
7bd2c540fa
feat(web-ai): support qwen web search agent
2026-07-19 21:32:39 +08:00
admin
6853facbe0
fix(web-ai): store encryption key in database
2026-07-19 20:20:57 +08:00
admin
925b48e436
feat(work-report): add voice-first reporting flow
2026-07-19 12:17:11 +08:00
admin
24da833fa6
feat(personal-assistant): add confirmed project memory
2026-07-19 08:19:24 +08:00
admin
9210b7dde6
feat(speech): switch mentor voice to anna and slow warm speed to 0.88
...
diana auditioned too bright for the mentor persona; anna measures
steadier (median F0 220Hz, lowest variance) in production auditions.
2026-07-19 03:01:48 +08:00
admin
5760a5b70a
feat(speech): switch mentor TTS voice to female diana
...
Code-only commit; production deployment handled separately.
2026-07-19 02:38:35 +08:00
admin
064816a784
feat(knowledge): add short-term ask memory
2026-07-18 21:22:49 +08:00
admin
68d5600534
feat(speech): add role-aware emotional TTS profiles
2026-07-18 18:27:14 +08:00
admin and Claude Fable 5
0a7eb38e05
feat: work-report module V1 — four report types with review flow
...
客户 2026-07-18 语音需求落地:「报」分四种——优秀案例/操作视频/
完整SOP/有用知识,员工提交、主管或运营审核。
后端(新包 org.dromara.aihr.report):
- aihr_work_report 表(自建,utf8mb4_general_ci 显式声明,含提交人/
审核人/状态/附件 OSS 编号,提交人与状态双索引)
- POST /api/aihr/work-report/reports 员工提交(类型/标题/说明校验)
- POST /attachment 附件上传(≤100MB,OSS 落盘,ossId 字符串安全)
- GET /reports/mine 我的上报;GET /reports 审核队列(canModerate 门禁,
复用社区 Policy);POST /{id}/review APPROVE/REJECT
(仅 PENDING 可审,重复审核 400)
- 审核通过后的入库动作留给运营在案例库/知识库人工完成(不自动入库,
遵守'入知识库必须人工确认'原则)
员工端:
- 新页 pages/user/report(替换'建设中'占位):四类型卡片选择、
标题+说明(说明支持录音转写)、附件选择上传(视频类必传校验)、
我的上报列表(待审核/已通过/已驳回+审核意见)
- 「我」页常用功能入口文案更新
生产验证(端到端):
- API:员工提交→我的上报可见→员工查审核队列403→主管队列可见
→审核通过→重复审核400 全通过
- UI:我页入口→上报页→选类型→填表→提交→列表显示'待审核',
历史记录显示'已通过'+审核意见
- 后端发布(备份 ruoyi-admin.jar.bak-20260718123032,25s恢复),
H5 已发布(备份 h5-before-20260718123032)
二期待办:主管端待审列表页(现主管可用接口审核)、通过后一键转
案例库/知识库、上报采纳积分奖励(等客户定规则)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-18 12:38:14 +08:00
admin and Claude Fable 5
13ec3bf20c
fix(case): align project scope query with 2026-07-16 org snapshot contract
...
客户反馈核验中发现:案例素材上传对所有 APP 用户报
「当前账号没有可用项目身份」——projectScopesForAppUser 查询快照表
已不存在的 project_ext_org_id 列(07-16 组织新契约更名为 project_code),
DataAccessException 被兜底吞掉后 scope 恒为空。全代码库仅此一处引用
旧列名(aihr_case_record 自身列不受影响,读写走同一解析器语义一致)。
修复后生产全链路跑通:主管上传语音(TTS合成测试音频)→ ASR 转写
→ organize 结构化(背景/处理/结果)→ curate 入库 → 员工 records 可见。
后端已发布(备份 ruoyi-admin.jar.bak-20260718095809,重启25s恢复)。
同轮生产验证(有奖征题闭环,零代码改动):员工发问→运营审核→
后台发悬赏征题(rewardPoints=50+deadline)→员工回答→审核→采纳最佳
→积分0→50到账(明细正确)、重复采纳不重复发奖、员工调管理接口403、
员工端问题榜/积分页 UI 呈现全部正确。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-18 10:01:53 +08:00
admin and Claude Fable 5
dfd82e1886
fix: unify all aihr collations, stop silent logout on biz 403, enable knowledge apps
...
线上现象:「问」页语音提问报 401(请求不带 token),用户观察为
「点了几个页面后登录状态失效」。
根因链(逐环生产验证):
1. 问师傅 /api/knowledge/query 对真实登录返回业务 403
「当前登录端未启用知识问答应用」——生产 aihr_knowledge_app 为空表,
多租户知识平台的应用注册/空间绑定/角色授权从未在生产配置(P1 遗留)。
2. 前端 readPayload 把 403 也视为认证失败并 clearAuth() —— 业务 403
触发静默登出,localStorage token 被清。
3. 之后语音 ASR 请求裸奔 -> 401「未能读取到有效 token」。
同期回归:凌晨对 aihr_practice_assignment.ext_party_id 的单列 collation
热修复,使其与 aihr_practice_session(仍 0900_ai_ci)的 JOIN 反向失配,
/practice/mistakes 500。
修复:
- backend/script/sql/update/aihr_20260718_unify_all_collations_mysql8.sql:
47 张 aihr 表全部 CONVERT 到运行时基准 collation(生产=general_ci),
终结 collation 打地鼠;本地验证后已在生产执行
(schema 备份 /opt/wygj/backups/aihr-schema-before-unify-20260718041407.sql),
13 项移动端接口回归全 200(含 mistakes)。
- api.ts/auth.ts:本地登录态仅在真正 401(HTTP 或业务码)时清除,并经
redirectToLoginForAuthLoss 记住当前页自动回登录(2s 防抖,登录页内不跳);
业务 403(权限拒绝,如录音归属/知识空间)只报错不登出;
authenticatedFileUrl 同步收紧(403 不再清登录态)。
- 生产数据配置(幂等 INSERT,业务范围保守):
· aihr_knowledge_app 注册 yc_admin(pc)/yc_mobile(app) SESSION 应用
· yc_mobile 绑定 SOP 域 5 库(1001/1002/1003/1201/1202),
employee/supervisor ROLE READ;yc_admin 绑定全部 13 库,
hr_operator/superadmin MANAGE
· 财务/销售/行政等大库(1004-1010)暂仅管理端,待业务确认再放开
生产验证:
- 问师傅 query 200,真实回答+引用「投诉处理 SOP v1.0」
- E2E:登录后全 tab 浏览+语音+文字提问,token 全程稳定(storage 打桩零触发)
- 无效 token 点语音提问 -> 自动回登录页(原为死胡同 toast)
- H5 已发布(备份 h5-before-20260718042238)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-18 04:24:45 +08:00
admin and Claude Fable 5
a4bbfc2222
fix: stop snowflake ossId precision loss and daily-drill audio identity mismatch
...
线上现象:对练页录音转写后提交回应,报「录音不属于当前账号,请重新录音后提交」。
根因A(前端,截图直接原因):OSS 编号是雪花 ID(如 2078204068457525249),
超出 JS Number 安全整数范围,后端按 RuoYi 规范序列化为字符串,但前端 4 处
用 Number() 强转(对练 ASR、每日题 ASR、每日题恢复列表、候选人面试 ASR),
精度丢失成 …5200,后端按错误 oss_id 查归属 COUNT=0 → 误报。
生产铁证:同一暂存行,正确 id 查得 1 行,JS 强转后的 id 查得 0 行;
用损坏 id 提交 turn 复现原报错,用字符串正确 id 提交成功。
修复A:speech.ts 新增 normalizeOssId(纯字符串校验透传,禁止 Number 强转),
4 处调用点改为字符串保存,practice/candidate 服务签名与状态类型放宽为
number|string(types/api.ts 本就是 number|string,Jackson 字符串转 Long 无损)。
根因B(后端,潜伏):answerDailyDrill 用组织 extPartyId(如 1003)做录音
归属身份校验,而暂存写入的是登录手机号——每日题语音提交必失败。
修复B:新增 validateAudioOwnershipByUser,按服务端登录 owner_user_id
(与暂存同源、不可伪造)校验,对练路径(身份一致)保持原校验不变。
发布与验证:
- H5 已发布(备份 /opt/wygj/backups/h5-before-20260718035416)
- 后端 jar 已发布重启(备份 /opt/wygj/app/ruoyi-admin.jar.bak-20260718035552),
15s 恢复,重启后对练 turn+字符串 ossId 生产复核通过
- 每日题语音路径为逻辑级+数据级验证(该账号今日无待训练每日题,
业务级复验待下一次每日题窗口)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-18 03:57:47 +08:00
admin and Claude Fable 5
680b4cf83c
fix: align aihr_practice_assignment.ext_party_id collation to utf8mb4_general_ci
...
根因:生产库 aihr_practice_assignment.ext_party_id 继承表级默认 utf8mb4_0900_ai_ci,
与 aihr_practice_question_feedback.ext_party_id (utf8mb4_general_ci) 冲突,
导致 AihrPracticeSeedService.assignments() 子查询抛 ERROR 1267,
/me 接口异常,员工端误报'人力系统未匹配'。
修复:
- ALTER TABLE 对齐 ext_party_id 列排序规则为 utf8mb4_general_ci
- 已在生产热修复并验证,查询恢复正常
- 本地 docker 容器复现+修复验证通过
- 前端无需改动,H5 重新构建确认流程无误
影响范围:
- 仅 aihr_practice_assignment 表单列 MODIFY
- 保留所有数据与索引,无业务中断
- 回滚材料在 /opt/wygj/backups/release-20260718005151
遗留:
- position 页异常场景退出入口待下轮补充(P1)
- schema 规范:后续 DDL 显式声明 COLLATE,不依赖表级默认
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-18 02:27:11 +08:00
admin
32fa376d63
fix: align release table collations
2026-07-18 01:04:17 +08:00
admin
6bdc86e3fc
feat: restore learning feedback and knowledge capabilities
2026-07-18 00:50:11 +08:00
admin
e93421ca1e
fix(aihr): close Figma UI regression gaps
2026-07-17 04:17:14 +08:00
admin
1fe91cc0f3
fix(aihr): adapt updated organization snapshot
2026-07-16 14:27:00 +08:00
admin
876a23a123
feat(knowledge): add application and principal space grants
2026-07-16 10:26:28 +08:00
admin
735e9a78c1
feat(knowledge): add multi-space platform schema
2026-07-16 10:21:35 +08:00
admin
c866ef2701
feat(aihr): support signed position mappings
2026-07-15 16:32:06 +08:00
admin
a42f42091c
fix(aihr): harden knowledge processing failures
2026-07-15 15:58:07 +08:00
admin
ab406e616a
fix(release): enforce AIHR tenant collation contract
2026-07-15 13:33:56 +08:00
admin
bd19cdd255
fix(aihr): harden zip upload queue
2026-07-15 13:06:47 +08:00
admin
eacf1a0aea
feat(mobile): align employee practice screens for release
2026-07-15 11:23:08 +08:00
admin
82d93a1af1
feat(aihr): allow employees to complete onboarding tasks
2026-07-15 02:49:40 +08:00
admin
2f21895597
feat(aihr): add candidate voice interview answers
2026-07-15 02:45:00 +08:00
admin
40574c204d
fix(aihr): separate onboarding and candidate review states
2026-07-15 02:39:29 +08:00
admin
e7611f701d
test(aihr): verify project scoped sop query
2026-07-15 02:21:20 +08:00