docs(changelog): 补 #8597 退团房期限清空与退团房待办交接件,并订正 #8491 里「三列一并置空」的错述
changelog-filename-gate / validate (push) Failing after 2s

新增 30_8597 覆盖两个端点:
- PUT /v3/admin/order/house-console/room-transfers/{id}/deadline
- GET /v3/admin/order/house-console/audit

同时就地订正已交付的 30_8491(4 行 / 3 处):原文写「cancelDays 传 null 时
cancelCutoff / remindDays 一并清空」,与源码相反。HouseRoomTransferManager#doUpdateDeadline
对 cancelDays == null 的分支是「cutoff / remind 沿用行上原值」——两列 NOT NULL,
传 null 会被 Mapper 守卫当失败返 0、进而被误报成并发修改(正是 #8597 的根因)。
30_8491 自己第 1847 行记录的实测读数也是「cancelCutoff 保留」,即该文件内部自相矛盾。

订正不是措辞问题:前端若按原文写 `cancelCutoff === null` 去判「有没有设期限」,
那个判断恒为 false。订正后同时写明正确判据是看 cancelDays 或 risk === "NO_DEADLINE"。

两文件 validate-changelog-frontmatter.mjs --files 全绿(校验 2 个对象,EXIT=0)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
这个提交包含在:
API Changelog Bot
2026-09-30 07:46:23 +08:00
共同撰写人 Claude Opus 5
父节点 a60a791132
当前提交 c2f04d7b32
共修改 2 个文件,包含 455 行新增和 4 行删除
@@ -743,8 +743,8 @@ GET /v3/admin/order/house-console/room-transfers?status=PENDING&cityCode=海拉
|------|------|------|------|------|------|
| id | Path | Long | ✅ | - | 转房行 ID |
| cancelDays | Body | Integer | ❌ | 0~60;null 表示清除期限 | 入住前几天免费取消 |
| cancelCutoff | Body | String | ❌ | HH:mm;cancelDays 非空而本字段空时取 18:00;cancelDays 为 null 时本字段被忽略、一并清空 | 截止当天的时刻 |
| remindDays | Body | Integer | ❌ | 0~30;cancelDays 非空而本字段空时取 1;cancelDays 为 null 时本字段被忽略、一并清空 | 提前几天提醒 |
| cancelCutoff | Body | String | ❌ | HH:mm;cancelDays 非空而本字段空时取 18:00;cancelDays 为 null 时本字段被忽略,**该行原值保留、不置空**(#8597 订正) | 截止当天的时刻 |
| remindDays | Body | Integer | ❌ | 0~30;cancelDays 非空而本字段空时取 1;cancelDays 为 null 时本字段被忽略,**该行原值保留、不置空**(#8597 订正) | 提前几天提醒 |
#### 出参 `Result<HouseRoomTransferRespVO>`
@@ -784,7 +784,7 @@ GET /v3/admin/order/house-console/room-transfers?status=PENDING&cityCode=海拉
#### 空数据 / 降级响应
`cancelDays` 传 null 表示清除期限:`cancelDays` / `cancelCutoff` / `remindDays` 三列一并置空,返回行的 `deadlineAt=null`、`risk=NO_DEADLINE`、`riskLabel="未设免费取消期"`。
`cancelDays` 传 null 表示清除期限:**只有 `cancelDays` 变成 null**,`cancelCutoff` / `remindDays` 保留该行原值(从未设过期限时是默认的 `"18:00"` / `1`);返回行的 `deadlineAt=null`、`risk=NO_DEADLINE`、`riskLabel="未设免费取消期"`。判「有没有设期限」只看 `cancelDays === null` 或 `risk === "NO_DEADLINE"`,不要看 `cancelCutoff` / `remindDays` 是否为 null(#8597 订正)。
#### 错误响应
@@ -1620,7 +1620,7 @@ DELETE /v3/admin/order/house-console/stay-templates/1839000000000000001
| 模板保存 / 删除 | `house_stay_template` | 新建 / 整份覆盖;删除为软删 |
| 团期转交 | 团期认领字段、团期时间线 | CAS 换持有人,写时间线;计划与分房不动 |
**显式 SET NULL 说明**: 设置期限时 `cancelDays` 传 null 会把 cancel_days / cancel_cutoff / remind_days 三列一并清空,`deadlineAt` 随之为 null;其余写接口未传的可选字段保持原值,不会被写成 null。
**显式 SET NULL 说明**: 设置期限时 `cancelDays` 传 null **只把免费退改天数清空**,截止时刻与提醒天数保留该行原值(两列非空),`deadlineAt` 随之为 null(#8597 订正);其余写接口未传的可选字段保持原值,不会被写成 null。
---