3.0 KiB
3.0 KiB
房务释放回池:冻结旧房务会话 + 旧房务消息整段转「留言池」(链路修通真生效)
变更类型:🔧 修复(后端,前端按下方「留言态展示」配合) 端类型:管理后台(房务管家·订单详情聊天 / 定制师侧「待接单房务」会话) 日期:2026-06-24 | 工单:#4329 #4331 | PR:#4330 #4332 | 服务:hl-user-service(双实例已部署 health UP,测试服 DB+API ground-truth 实测全通过)
背景
房务订单聊天=方案A(一单一会话 HOUSE:{orderId},房务轮换)。此前「释放回抢单池」后两个 bug:
- 定制师还能跟旧房务继续聊(旧房务会话没冻结);
- 上次聊天内容没转成「留言」(下个房务抢单看不到对话连续性)。
根因有两层:
- #4331(根因):释放事件经 Feign 调 user 绑定时传
houseAdminId=null,但 user 端入参 VO 该字段有@NotNull→@Valid直接 400 打回 → 释放绑定逻辑从未真正执行(软依赖被 fallback 静默吞掉,主流程照常成功,潜伏数周)。去掉该@NotNull后链路才通。 - #4330(逻辑):释放绑定逻辑本身补全——归档旧房务成员行 + 旧房务名下消息整段转留言池。
后端行为变化(前端一般无需改)
释放回抢单池后:
- 旧房务:会话成员行
status→ARCHIVED,脱离该会话——其会话列表不再显示本会话、且不能再发消息(发消息返业务码「无权访问该会话」)。 - 该会话全部聊天消息(含旧房务已读的)整段改判回「留言池」(无房务接收态)。
- 定制师:其「联系房务」回退「待接单房务」态(peer 占位),后续发的消息进留言池。
- 下个房务抢单:留言池消息整段转发给新房务(计入未读 + 转为正常聊天)。
- 同一房务重新抢回该单:归档行自动复活(
status→ACTIVE),聊天恢复。
前端「留言态」展示配合(重点)
释放回池后,定制师打开会话标题显示「待接单房务」,该会话历史消息整体呈现为「留言」态——这是预期效果(无房务接单期间的消息都是留言,等下个房务抢单转为实时聊天):
- 定制师侧:会话仍可打开、可继续发(进留言池),消息标「留言」属正常,不是 bug。
- 房务侧(未抢单):订单详情显示「抢单后可与定制师实时沟通」占位(前端已去掉旧「内部留言」入口,符合「只留聊天」要求)。
- 旧房务侧:释放后该会话从其会话列表消失(已归档),符合预期。
验证说明(如实·ground-truth)
✅ 测试服 DB + API 实测全通过:
- 释放后旧房务(admin)成员行
status=ARCHIVED、其会话列表无此会话; - 旧房务释放后发消息被拒(「无权访问该会话」);
- 该单留言池消息齐全(定制师留言 admin_id=0 就绪,下个房务抢单可转发);
- 同房务重抢→成员行复活
ACTIVE、聊天恢复。