文件
hl-api-changelog/changelogs-v2/2026-09/18_7933_餐食单价说明改为单价元不限定每人-修改接口-管理后台.md
T
2026-09-18 16:13:51 +08:00

13 KiB
原始文件 Blame 文件历史

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 7933 餐食单价说明改为「单价(元)」,不再限定每人每餐 admin lc(GIT) 修改接口 deployed verified verified mmg 175d2b72dc32574d6eb850051b60d3d1e9d6f0ac 2026-09-18 仅告知:餐食接口中 unitPrice 的说明由「单价(每人每餐,元)」改为「单价(元)」,不再限定每人。字段名、类型、必填、校验、取值全部不变,前端无需改代码。[mmg 2026-09-18 复核] 数据链确零改动,但 grep 实证 EditModal 单价 placeholder 残留旧口径「每人每餐,元」(suffix 已有元),移除并注释缘由,spec 加无「每人每餐」残留断言,定向 6/6+scoped checkpoint 全绿;有一处 UI 文案改动故由 not_required 改 verified。 2026-09-18 dev-v3

resource: 餐食单价说明改为「单价(元)」

服务: hl-resource-service PR: #7938 Issue: #7933 日期: 2026-09-18 影响范围: 管理后台「餐食管理」接口中 unitPrice 的说明文字


⚠️ 关键变化

📝 unitPrice 的含义从「每人每餐的单价」改为「单价(元)」,不再限定每人。 订单用餐金额改为按人、按桌两种算法,餐食单价按哪种算由订单用餐决定。#7737 Changelog 里「单价(每人每餐,元,两位小数)」的说明以本文为准。

前端无需改代码:字段名、类型、必填、校验、取值全部不变。


一、背景

订单用餐金额改为按人、按桌两种算法(2026-09-18 定),餐食单价不再只表示每人每餐的价格。


二、变更接口清单

# 接口 方法 路径 变更类型 说明
1 分页查询餐食 GET /admin/dish/items/page 仅说明变化 出参 records[].unitPrice 说明改为「单价(元)」
2 查询餐食列表 GET /admin/dish/items/list 仅说明变化 出参 [].unitPrice 说明改为「单价(元)」
3 查询餐食详情 GET /admin/dish/items/{dishId}/view 仅说明变化 出参 unitPrice 说明改为「单价(元)」
4 新建餐食 POST /admin/dish/items/add 仅说明变化 入参 unitPrice 说明改为「单价(元)」
5 修改餐食 PUT /admin/dish/items/{dishId}/update 仅说明变化 入参 unitPrice 说明改为「单价(元)」

三、接口详情

1. 分页查询餐食 GET /admin/dish/items/page

VO: DishPageReqVO → PageResult<DishListItemRespVO>

使用场景

餐食管理列表分页查询。本次只有出参 unitPrice 的说明变化。

入参字段表

字段 位置 类型 必填 约束 说明
keyword Query String 否 去首尾空格后 ≤64 模糊匹配编码、名称(不变)
dishCode Query String 否 去首尾空格后 ≤20 编码精确匹配(不变)
status Query Integer 否 0 / 1 0=下架,1=上架(不变)
settleType Query String 否 cash / sign / company 结算方式(不变)
createdByName Query String 否 — 创建人姓名包含式匹配(不变)
page Query Integer 否 ≥1,默认 1 页码(不变)
pageSize Query Integer 否 1–100,默认 20 每页条数(不变)

出参字段表

字段 类型 说明
records[].unitPrice Number 单价(元),两位小数;原说明「单价(每人每餐,元)」
records[] 其余字段、total / page / pageSize — 不变

请求示例

GET /admin/dish/items/page?page=1&pageSize=20
Authorization: Bearer <admin token>

响应示例

{
  "code": 200,
  "message": "成功",
  "success": true,
  "data": {
    "records": [
      {
        "dishId": "2100767707048636418",
        "dishCode": "STANDARD_300",
        "dishName": "标准三百快",
        "unitPrice": 30.00,
        "imageUrl": null,
        "settleType": "sign",
        "status": 1,
        "remark": null,
        "createdBy": "1900000000000000001",
        "createdByName": "张三",
        "createdAt": "2026-09-18 10:02:11"
      }
    ],
    "total": 1,
    "page": 1,
    "pageSize": 20
  }
}

空数据 / 降级响应

不变:无数据时 records 为 []、total 为 0。

错误响应

{ "code": 400, "message": "每页条数最大为100", "success": false, "data": null }

业务边界

  • 返回值与改前逐字段一致,只是 unitPrice 不再理解为每人每餐。

2. 查询餐食列表 GET /admin/dish/items/list

VO: DishListReqVO → List<DishListItemRespVO>

使用场景

餐食下拉数据源。本次只有出参 unitPrice 的说明变化。

入参字段表

字段 位置 类型 必填 约束 说明
keyword Query String 否 去首尾空格后 ≤64 模糊匹配编码、名称(不变)
settleType Query String 否 cash / sign / company 结算方式(不变)
limit Query Integer 否 1–200,默认 50 最大返回条数(不变)

出参字段表

字段 类型 说明
[].unitPrice Number 单价(元),两位小数;原说明「单价(每人每餐,元)」
[] 其余字段 — 不变,同接口 1 的 records[]

请求示例

GET /admin/dish/items/list?limit=50
Authorization: Bearer <admin token>

响应示例

{
  "code": 200,
  "message": "成功",
  "success": true,
  "data": [
    {
      "dishId": "2100767707048636418",
      "dishCode": "STANDARD_300",
      "dishName": "标准三百快",
      "unitPrice": 30.00,
      "imageUrl": null,
      "settleType": "sign",
      "status": 1,
      "remark": null,
      "createdBy": "1900000000000000001",
      "createdByName": "张三",
      "createdAt": "2026-09-18 10:02:11"
    }
  ]
}

空数据 / 降级响应

不变:没有上架餐食时 data 为 []。

错误响应

{ "code": 400, "message": "limit最大为200", "success": false, "data": null }

业务边界

  • 返回值与改前逐字段一致,只是 unitPrice 不再理解为每人每餐。

3. 查询餐食详情 GET /admin/dish/items/{dishId}/view

VO: DishRespVO

使用场景

编辑回显。本次只有出参 unitPrice 的说明变化。

入参字段表

字段 位置 类型 必填 约束 说明
dishId Path String 是 正数 餐食 ID(不变)

出参字段表

字段 类型 说明
unitPrice Number 单价(元),两位小数;原说明「单价(每人每餐,元)」
其余字段 — 不变,同接口 1 的 records[]

请求示例

GET /admin/dish/items/2100767707048636418/view
Authorization: Bearer <admin token>

响应示例

{
  "code": 200,
  "message": "成功",
  "success": true,
  "data": {
    "dishId": "2100767707048636418",
    "dishCode": "STANDARD_300",
    "dishName": "标准三百快",
    "unitPrice": 30.00,
    "imageUrl": null,
    "settleType": "cash",
    "status": 1,
    "remark": null,
    "createdBy": "1900000000000000001",
    "createdByName": "张三",
    "createdAt": "2026-09-18 10:02:11"
  }
}

空数据 / 降级响应

不变:无空数据分支,餐食不存在或已删除返回 340001。

错误响应

{ "code": 340001, "message": "餐食不存在", "success": false, "data": null }

业务边界

  • 返回值与改前逐字段一致,只是 unitPrice 不再理解为每人每餐。

4. 新建餐食 POST /admin/dish/items/add

VO: DishCreateReqVO → DishWriteRespVO

使用场景

新建餐食。本次只有入参 unitPrice 的说明变化。

入参字段表

字段 位置 类型 必填 约束 说明
unitPrice Body Number 是 0–99999999.99,最多两位小数(不变) 单价(元);原说明「单价(每人每餐,元)」
其余入参 Body — — 不变 dishCode、dishName、imageUrl、settleType、status、remark 全部不变

出参字段表

字段 类型 说明
dishId String 新餐食 ID(不变)
dishName String 餐食名称(不变)

请求示例

{
  "dishCode": "STANDARD_300",
  "dishName": "标准三百快",
  "unitPrice": 30.00,
  "settleType": "sign"
}

响应示例

{
  "code": 200,
  "message": "成功",
  "success": true,
  "data": { "dishId": "2100767707048636418", "dishName": "标准三百快" }
}

空数据 / 降级响应

不变:要么 200 写入,要么返回错误码且零写入。

错误响应

单价校验提示不变:

{ "code": 400, "message": "单价最多两位小数", "success": false, "data": null }

业务边界

  • 单价仍必填,0–99999999.99,最多两位小数;不填、负数、三位小数的提示与改前一致。

5. 修改餐食 PUT /admin/dish/items/{dishId}/update

VO: DishUpdateReqVO → DishWriteRespVO

使用场景

修改餐食(整份覆盖)。本次只有入参 unitPrice 的说明变化。

入参字段表

字段 位置 类型 必填 约束 说明
dishId Path String 是 正数 餐食 ID(不变)
unitPrice Body Number 是 0–99999999.99,最多两位小数(不变) 单价(元);原说明「单价(每人每餐,元)」
其余入参 Body — — 不变 dishCode、dishName、imageUrl、settleType、status、remark 全部不变

出参字段表

字段 类型 说明
dishId String 餐食 ID(不变)
dishName String 修改后的名称(不变)

请求示例

{
  "dishCode": "STANDARD_300",
  "dishName": "标准三百快",
  "unitPrice": 32.00,
  "imageUrl": null,
  "settleType": "company",
  "status": 1,
  "remark": null
}

响应示例

{
  "code": 200,
  "message": "成功",
  "success": true,
  "data": { "dishId": "2100767707048636418", "dishName": "标准三百快" }
}

空数据 / 降级响应

不变:要么 200 覆盖写入,要么返回错误码且不改动数据。

错误响应

{ "code": 340001, "message": "餐食不存在", "success": false, "data": null }

业务边界

  • 单价仍必填,0–99999999.99,最多两位小数;不填、负数、三位小数的提示与改前一致。

四、契约约束与正确调用方式

请求怎么传与改前完全一致,unitPrice 仍是必填的两位小数金额。

场景 payload
✅ 单价 30 元 { "unitPrice": 30.00, ... }
❌ 不传单价 400「单价不能为空」
❌ 单价 -1 400「单价不能小于0」
❌ 单价 1.234 400「单价最多两位小数」

五、数据库行为

不变:新建、修改按传入的单价原样保存两位小数,已有餐食的单价不改。


六、边界行为

  • 未登录 → 401(网关拦截),不变。
  • 已有餐食的单价数值不变,只是含义不再限定每人。

六.6、修改前后对比

字段级对比

字段 改前 改后
unitPrice 说明(接口 1–5) 单价(每人每餐,元) 单价(元)
unitPrice 类型、必填、校验、取值 — 不变

行为级对比

行为 改前 改后
接口入参、出参、校验、返回值 — 不变

六.7、影响评估

  • 是否破坏向后兼容: 否
  • 前端是否必须同步上线: 否,前端无需改代码
  • 前端 workaround 清理点: 无

七、不影响范围

  • 仅影响: 餐食接口 1–5 中 unitPrice 的说明文字
  • 零影响:
    • 餐食上下架 PUT /admin/dish/items/{dishId}/status/update、删除 DELETE /admin/dish/items/{dishId}/del
    • 已有餐食数据

八、测试环境已验证

部署前后各抓一次比对:

Swagger 新建/修改/列表行/详情 4 个模型 unitPrice 说明  → 「单价(每人每餐,元)」改为「单价(元)」 ✓
4 个模型其余字段、7 个餐食接口定义                     → 部署前后一致 ✓
GET /admin/dish/items/page、/list、6 个 /{dishId}/view → 返回逐行逐字段一致 ✓
POST /add、PUT /{dishId}/update 单价不填 / -1 / 1.234  → 提示部署前后一致,均未写入 ✓

十、相关文档

关联 / 联系人

链接

联系人

  • 后端负责人: @lc