父节点
cc06bb796a
当前提交
ccb71ead90
@ -0,0 +1,37 @@
|
||||
# 房务释放回池:冻结旧房务会话 + 旧房务消息整段转「留言池」(链路修通真生效)
|
||||
|
||||
> 变更类型:🔧 修复(后端,前端按下方「留言态展示」配合)
|
||||
> 端类型:管理后台(房务管家·订单详情聊天 / 定制师侧「待接单房务」会话)
|
||||
> 日期:2026-06-24 | 工单:#4329 #4331 | PR:#4330 #4332 | 服务:hl-user-service(双实例已部署 health UP,**测试服 DB+API ground-truth 实测全通过**)
|
||||
|
||||
---
|
||||
|
||||
## 背景
|
||||
房务订单聊天=方案A(一单一会话 `HOUSE:{orderId}`,房务轮换)。此前「释放回抢单池」后两个 bug:
|
||||
1. 定制师还能跟**旧房务**继续聊(旧房务会话没冻结);
|
||||
2. 上次聊天内容没转成「留言」(下个房务抢单看不到对话连续性)。
|
||||
|
||||
根因有两层:
|
||||
- **#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`、聊天恢复。
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户