13 KiB
13 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | 8086 | 餐食不关联餐厅时餐厅名返回 null,分页按餐厅排序 | admin | lc(GIT) | 修改接口 | deployed | verified | verified | mmg | 780b8e76b7ec8a04f4746739c750215e5d5db577 | 2026-09-21 | 餐食出参 restaurantName 不再对不关联餐厅的餐食返回「全部」,改为 null(分页、下拉、详情一致);餐食分页顺序改为按餐厅建档先后归并、组内创建时间倒序、不关联餐厅的排最后。前端需按本文对接。前端已交付(mmg 2026-09-21, hl-admin 780b8e76):餐食管理列表餐厅列按 restaurantId null 自渲染「全部」(关联但餐厅已删、name null 仍显 -);订单「用餐」页签餐食下拉候选标签去掉对「全部」文案的特判(只按有无 restaurantName 拼后缀);编辑弹窗回显因按 restaurantId 守门实证零改动;分页顺序改后端固定,前端无排序参数零改动。index 9 例+EditModal 8 例+MealTab 13 例全过,checkpoint 全项通过。 | 2026-09-21 | dev-v3 |
resource: 餐食不关联餐厅时餐厅名返回 null,分页按餐厅排序
服务: hl-resource-service PR: #8090 Issue: #8086 日期: 2026-09-21 影响范围: 管理后台「餐食管理」分页、下拉、详情 3 个读接口
⚠️ 关键变化
- 🔁
restaurantName不再返回「全部」:不关联餐厅的餐食,restaurantName由"全部"改为null;restaurantId仍为null。分页、下拉、详情三个接口口径一致。页面上要显示「全部」由前端在restaurantId为null时自行展示。 - 🔁 分页顺序变了:
GET /admin/dish/items/page由「更新时间倒序」改为「按餐厅建档先后归并 → 同一餐厅内创建时间倒序 → 不关联餐厅的整组排最后」。改过的餐食不再被顶到列表最前。
二、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|---|---|---|---|---|
| 1 | 分页查询餐食 | GET | /admin/dish/items/page |
修改 | 出参 restaurantName 取值变化;返回顺序变化 |
| 2 | 餐食下拉列表 | GET | /admin/dish/items/list |
修改 | 出参 restaurantName 取值变化;顺序不变 |
| 3 | 餐食详情 | GET | /admin/dish/items/{dishId}/view |
修改 | 出参 restaurantName 取值变化 |
三、接口详情
出参 restaurantName 的取值口径三个接口完全一致,下表对三处都适用:
| 情况 | restaurantId |
改动前 restaurantName |
改动后 restaurantName |
|---|---|---|---|
| 餐食不关联餐厅 | null |
"全部" |
null |
| 关联餐厅,餐厅正常 | 餐厅 ID | 餐厅名称 | 餐厅名称(不变) |
| 关联餐厅,餐厅已删除/查不到 | 餐厅 ID | null |
null(不变) |
1. 分页查询餐食 GET /admin/dish/items/page
VO: DishPageReqVO → PageResult<DishListItemRespVO>
使用场景
管理后台「餐食管理」列表页。
入参字段表
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
| 全部入参 | Query | — | — | — | page、pageSize、keyword、status、settleType、createdByName 均不变,本次不新增、不删除入参 |
不支持自定义排序参数,顺序由后端固定。
出参字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| records[].restaurantId | String | 餐厅 ID;不关联餐厅为 null(不变) |
| records[].restaurantName | String | 取值变化。按上表:不关联餐厅由 "全部" 改为 null |
| records[] 其余字段 | — | dishId、dishName、unitPrice、priceUnit、imageUrl、settleType、status、remark、createdBy、createdByName、createdAt 均不变 |
| total / page / pageSize | — | 不变 |
返回顺序变化,排序键依次为:不关联餐厅的排最后 → 餐厅建档先后(餐厅 ID 升序)→ 同一餐厅内创建时间倒序 → 餐食 ID 倒序。改动前是「更新时间倒序、餐食 ID 倒序」。
餐厅甲(建档最早) 其下餐食按创建时间倒序
餐厅乙 其下餐食按创建时间倒序
…
不关联餐厅的餐食 按创建时间倒序,整组排在最后
请求示例
GET /admin/dish/items/page?page=1&pageSize=20
Authorization: Bearer <admin token>
响应示例
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"total": 32,
"page": 1,
"pageSize": 20,
"records": [
{
"dishId": "2100978382416141313",
"restaurantId": "2023382100664676353",
"restaurantName": "菌香园火锅",
"dishName": "儿童餐",
"unitPrice": 25.00,
"priceUnit": "person",
"settleType": "cash",
"status": 1,
"createdAt": "2026-09-19 00:00:38"
},
{
"dishId": "2101571815203901441",
"restaurantId": null,
"restaurantName": null,
"dishName": "全顺车队-特供",
"unitPrice": 200.00,
"priceUnit": "person",
"settleType": "cash",
"status": 1,
"createdAt": "2026-09-20 15:19:01"
}
]
}
}
空数据 / 降级响应
records 为 []、total 为 0:筛选条件没命中任何未删除餐食。
错误响应
{ "code": 400, "message": "每页条数最大为100", "success": false, "data": null }
业务边界
- 翻页按同一顺序切分,不会出现跨页重复或遗漏。
- 餐厅被删除后,其下餐食仍按原餐厅的位置排序,不会跑到末尾;末尾只放
restaurantId为null的餐食。 - 同一餐厅内创建时间相同的餐食,按餐食 ID 倒序稳定排列。
- 餐食被修改后不再被顶到列表最前(排序基准由更新时间改为创建时间)。
2. 餐食下拉列表 GET /admin/dish/items/list
VO: DishListReqVO → List<DishListItemRespVO>
使用场景
餐食下拉数据源。
入参字段表
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
| 全部入参 | Query | — | — | — | restaurantId、keyword、settleType、limit 均不变,本次不新增、不删除入参 |
出参字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| [].restaurantName | String | 取值变化。按上表:不关联餐厅由 "全部" 改为 null |
| [] 其余字段 | — | 均不变 |
返回顺序(创建时间升序、餐食 ID 升序)与条数上限不变。
请求示例
GET /admin/dish/items/list?limit=50
Authorization: Bearer <admin token>
响应示例
{
"code": 200,
"message": "成功",
"success": true,
"data": [
{
"dishId": "2100767758525329410",
"restaurantId": null,
"restaurantName": null,
"dishName": "GL8车队-特供",
"unitPrice": 99999999.99,
"priceUnit": "person",
"settleType": "company",
"status": 1,
"createdAt": "2026-09-18 10:03:59"
}
]
}
空数据 / 降级响应
data 为 []:按当前条件没有上架餐食。
错误响应
{ "code": 400, "message": "limit最大为200", "success": false, "data": null }
业务边界
- 本次只改
restaurantName取值,不改该接口返回哪些行、返回顺序与条数上限。 - 下架、已删除的餐食任何情况下都不返回。
3. 餐食详情 GET /admin/dish/items/{dishId}/view
VO: Long dishId → DishRespVO
使用场景
「餐食管理」列表点开编辑时回显单条餐食。
入参字段表
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
| dishId | Path | String | 是 | 雪花 ID | 餐食 ID(不变) |
出参字段表
| 字段 | 类型 | 说明 |
|---|---|---|
| restaurantName | String | 取值变化。按上表:不关联餐厅由 "全部" 改为 null |
| 其余字段 | — | 与分页 records[] 相同,均不变 |
请求示例
GET /admin/dish/items/2101571815203901441/view
Authorization: Bearer <admin token>
响应示例
{
"code": 200,
"message": "成功",
"success": true,
"data": {
"dishId": "2101571815203901441",
"restaurantId": null,
"restaurantName": null,
"dishName": "全顺车队-特供",
"unitPrice": 200.00,
"priceUnit": "person",
"settleType": "cash",
"status": 1,
"createdAt": "2026-09-20 15:19:01"
}
}
空数据 / 降级响应
不存在空数据形态;餐食不存在或已删除时走错误响应。
错误响应
{ "code": 340001, "message": "餐食不存在", "success": false, "data": null }
业务边界
- 回显时
restaurantId为null即该餐食不关联具体餐厅;restaurantName同为null,不再下发「全部」文案。
四、契约约束与正确调用方式
- 判断一条餐食「有没有餐厅」只看
restaurantId是否为null,不要再用restaurantName === "全部"判断。 - 页面需要显示「全部」字样时,前端在
restaurantId为null时自行渲染;后端不再下发该文案。 - 入参不变:新建、修改餐食时不传
restaurantId仍表示该餐食不关联具体餐厅。 - 分页不支持自定义排序参数,顺序由后端固定。
- 「全部」仍是业务上的一类(不关联具体餐厅的餐食),同期 #8087 的餐食下拉按餐厅联动沿用该语义;本次只是后端不再把「全部」作为
restaurantName的值下发。
六、边界行为
- 餐厅被删除后,其下餐食的
restaurantName为null、restaurantId仍返回原值;该餐食仍按原餐厅的位置排序,不会跑到末尾(末尾只放restaurantId为null的餐食)。 - 同一餐厅内创建时间相同的餐食,按餐食 ID 倒序稳定排列。
六.6、修改前后对比
| 项 | 改动前 | 改动后 |
|---|---|---|
不关联餐厅的 restaurantName |
"全部" |
null |
| 分页排序 | 更新时间倒序, 餐食ID倒序 |
不关联餐厅排最后, 餐厅建档先后, 创建时间倒序, 餐食ID倒序 |
| 下拉、详情排序与其他字段 | — | 不变 |
六.7、影响评估
- 是否破坏向后兼容: 是(依赖
restaurantName === "全部"的前端判断会失效;列表顺序改变) - 前端是否必须同步上线: 是,按本文改判断条件与「全部」文案渲染
- 前端 workaround 清理点: 去掉对
restaurantName取值"全部"的依赖
七、不影响范围
- 仅影响: 餐食分页、下拉、详情 3 个读接口的
restaurantName取值,以及分页返回顺序 - 零影响:
- 餐食新建
POST /admin/dish/items/add、修改PUT /admin/dish/items/{dishId}/update、上下架、删除接口与其入参校验 - 餐食其余出参字段、分页筛选条件、错误码
- 下拉与详情的返回顺序
- 餐厅管理接口与
restaurant表
- 餐食新建
八、测试环境已验证
部署提交 3dcbaabef,经 Gateway 用真实 TEST 身份实测 16 项全部通过:
分页 32 条中 20 条不关联餐厅 → restaurantName 全为 null ✓
分页 32 条中 12 条关联餐厅 → 仍返回餐厅名称 ✓
分页整体顺序 → 不关联餐厅排最后 + 餐厅建档先后 + 组内创建时间倒序 + 餐食ID倒序 ✓
4 家餐厅的分组先后 → 菌香园火锅 → 苏日姥爷蒙餐融合菜 → 七间房全羊馆 → 九牧羊鲜羊火锅 ✓
不关联餐厅的 20 条 → 整组排在最后,组内创建时间倒序 ✓
pageSize=10 逐页拼接 → 与一次取回 50 条的顺序完全一致,不重复不遗漏 ✓
详情(不关联餐厅 / 关联餐厅各一条) → null / 餐厅名称 ✓
下拉 9 条 → restaurantName 全为 null,顺序与本次改动前完全一致 ✓
十、相关文档
- 关联 Issue: wx/HL#8086
- 关联 PR: wx/HL#8090
关联 / 联系人
链接
- Issue: #8086
- PR: wx/HL#8090
- Merge commit: 3dcbaabef
联系人
- 后端: @lc