hl-api-changelog/changelogs-v2/2026-08/05_5539_核单资源下拉可选范围与中文字段契约-修改接口-管理后台.md
API Changelog Bot 090b25a484
一些检查失败了
changelog-filename-gate / validate (push) Failing after 2s
docs(changelog): 2026-08 批量补齐 author/关联联系人章节(yst格式),5558 从 v1 目录迁至 v2
2026-08-05 22:01:46 +08:00

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 5539 核单资源下拉可选范围与中文字段契约 admin yst 修改接口 deployed verified implemented pi-main-session hl-admin@0a8a72ed6a978a9f14187679188f4c8308e354cd hl-resource-service;PR #5540 已合并并部署测试服,Gateway 真实验收通过;等待管理后台完成破坏性契约迁移。 2026-08-05 dev-v3

⚠️ 修改接口·管理后台】核单资源下拉可选范围与中文字段契约(#5539

PR: #5540 服务: hl-resource-service 更新时间: 2026-08-05

1. 接口背景

核单门票/游玩统一资源下拉首版会返回下架资源,且资源类型、结算方式只有编码,默认核算价字段名也不够明确。本次收紧为只返回启用资源,并调整请求与响应字段。删除字段和字段改名属于破坏性契约变化,接入方需要按第 12 节迁移。

变更接口

# 接口名 方法 路径 变更类型 说明
1 分页查询门票/游玩资源选项 GET /admin/resource-options/ticket-items 修改接口 仅返回启用资源,删除状态字段,增加中文名称字段并重命名默认核算价

3. 接口详情

  • 使用场景:核单 Step 2 新增或搜索可选的门票/游玩项目。
  • 认证:需要有效的管理后台 JWT,使用 Authorization: Bearer <token>
  • 幂等性:幂等,只读查询。
  • 限流:无接口专属限流约定。
  • 响应类型Result<PageResult<TicketResourceOptionRespVO>>
  • 请求体:无。

4. 接口入参

4.1 Query 参数(修改后完整字段)

字段 类型 必填 默认值 校验规则 说明
dayDate String ISO 日期 yyyy-MM-dd 实际游玩日期;价格字段只匹配这一天的资源价格
keyword String null 最长 100 个字符 资源名称模糊搜索;自动去除首尾空格;去除后为空等同未传
resourceType String null SCENICACTIVITY 不传时同时查询景区和游玩项目
page Integer 1 最小值 1 当前页码
pageSize Integer 20 1100 每页条数

4.2 已删除的 Query 参数

字段 修改前 修改后
status 可选,0 已下架、1 已启用;不传查询全部 已删除;接口固定只返回启用资源

4.3 请求体字段

无请求体。

5. 出参字段

5.1 统一响应与分页字段

字段 类型 可空 说明
code Integer 业务状态码;成功为 200
message String 响应消息;成功为 成功
success Boolean code == 200 时为 true
traceId String 链路追踪 ID
data Object 分页结果
data.records Array 本页启用资源列表;无匹配资源时为 []
data.total Integer 符合条件的启用资源总数
data.page Integer 当前页码
data.pageSize Integer 每页条数

5.2 data.records[] 资源字段(修改后完整 13 项)

字段 类型 可空 说明
resourceType String 资源类型编码:SCENICACTIVITY
resourceTypeName String 资源类型中文名:景区游玩项目
resourceId String 资源 ID;固定按 JSON String 返回,不要转换为 JavaScript Number
resourceName String 资源名称;名称为 null、空字符串或纯空白的资源不会返回
city String 城市;景区优先返回城市名称;原值为 null、空字符串或纯空白时统一返回 null
settleType String 结算方式编码;空值/空白统一为 null;未知非空编码去除首尾空格后原值返回
settleTypeName String 结算方式中文名;cash/sign/company 分别为现付/签单/公司付款;编码为空或未知时为 null
dayDate String 本次查询的实际游玩日期,格式 yyyy-MM-dd
protocolPrice Decimal 该日期的协议价;未配置时为 null
settlementPrice Decimal 该日期的结算价;未配置时为 null
defaultUnitPrice Decimal 默认核算单价:优先取结算价,结算价为空时回退协议价;两者都为空时为 null
priceConfigured Boolean defaultUnitPrice 非空时为 true,否则为 false
specName String 固定返回 成人票

5.3 已删除或改名的响应字段

修改前字段 修改后 迁移说明
status 已删除 接口已固定过滤为启用资源,不再返回状态值
statusName 已删除 接口已固定过滤为启用资源,不再返回状态文案
ticketUnitPrice 改名为 defaultUnitPrice 价格优先级不变:结算价优先、协议价回退

6. 枚举 / 数据字典

6.1 resourceType / resourceTypeName

resourceType resourceTypeName 说明
SCENIC 景区 景区资源
ACTIVITY 游玩项目 活动/游玩项目资源

6.2 settleType / settleTypeName

settleType settleTypeName 说明
cash 现付 资源结算方式为现付
sign 签单 资源结算方式为签单
company 公司付款 资源结算方式为公司付款
null null 原编码为空或空白
其他非空编码 null 编码去除首尾空格后原值返回,中文名为空

6.3 价格字段关系

条件 defaultUnitPrice priceConfigured
settlementPrice 非空 settlementPrice true
settlementPrice 为空、protocolPrice 非空 protocolPrice true
两个价格都为空 null false

7. 错误码

code 含义 触发场景
200 成功 查询完成;没有匹配资源时仍为成功,records=[]
400 参数校验失败 缺少/无法解析 dayDatekeyword 超过 100 字符,resourceType 非法,或分页参数越界
401 未认证或认证失效 未携带有效的管理后台 JWT
500 系统异常 查询过程发生未预期异常

8. 示例

8.1 典型成功:启用景区与游玩项目

请求

GET /admin/resource-options/ticket-items?dayDate=2026-08-03&keyword=体验&page=1&pageSize=20
Authorization: Bearer <admin-token>

无请求体。

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "records": [
      {
        "resourceType": "SCENIC",
        "resourceTypeName": "景区",
        "resourceId": "2079454953641836546",
        "resourceName": "草原景区体验区",
        "city": "呼伦贝尔市",
        "settleType": "sign",
        "settleTypeName": "签单",
        "dayDate": "2026-08-03",
        "protocolPrice": 100.00,
        "settlementPrice": 88.00,
        "defaultUnitPrice": 88.00,
        "priceConfigured": true,
        "specName": "成人票"
      },
      {
        "resourceType": "ACTIVITY",
        "resourceTypeName": "游玩项目",
        "resourceId": "2079454953641836550",
        "resourceName": "骑马体验",
        "city": "海拉尔区",
        "settleType": "cash",
        "settleTypeName": "现付",
        "dayDate": "2026-08-03",
        "protocolPrice": 66.00,
        "settlementPrice": null,
        "defaultUnitPrice": 66.00,
        "priceConfigured": true,
        "specName": "成人票"
      }
    ],
    "total": 2,
    "page": 1,
    "pageSize": 20
  },
  "traceId": "a1b2c3d4-e5f6-7890",
  "success": true
}

8.2 边界情况:空白城市、未知结算编码且当天无价格

请求

GET /admin/resource-options/ticket-items?dayDate=2026-12-31&resourceType=ACTIVITY&page=1&pageSize=20
Authorization: Bearer <admin-token>

无请求体。

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "records": [
      {
        "resourceType": "ACTIVITY",
        "resourceTypeName": "游玩项目",
        "resourceId": "2079454953641836558",
        "resourceName": "特色体验",
        "city": null,
        "settleType": "other",
        "settleTypeName": null,
        "dayDate": "2026-12-31",
        "protocolPrice": null,
        "settlementPrice": null,
        "defaultUnitPrice": null,
        "priceConfigured": false,
        "specName": "成人票"
      }
    ],
    "total": 1,
    "page": 1,
    "pageSize": 20
  },
  "traceId": "b2c3d4e5-f6a7-8901",
  "success": true
}

8.3 业务失败:缺少游玩日期

请求

GET /admin/resource-options/ticket-items?page=1&pageSize=20
Authorization: Bearer <admin-token>

无请求体。

响应

{
  "code": 400,
  "message": "游玩日期不能为空",
  "data": null,
  "traceId": "c3d4e5f6-a7b8-9012",
  "success": false
}

9. 业务边界

  • 无论是否携带旧版 status 参数,接口都固定只返回已启用资源;调用方不应继续传该参数。
  • 下架资源、软删除资源、名称为 null/空字符串/纯空白的资源均不返回,也不计入 total
  • 默认统一查询 SCENICACTIVITY;结果按“名称升序 → 资源类型升序 → 资源 ID 升序”稳定排序。
  • keyword 只匹配资源名称;不会匹配城市或资源 ID。
  • 当天没有价格不会排除资源,defaultUnitPrice=nullpriceConfigured=false
  • citysettleType 为空不影响资源是否返回;空白值会被规范为 null
  • 未知非空结算编码保留在 settleType,但 settleTypeName=null
  • 页码超过最后一页时,返回 code=200records=[]total 仍为符合条件的启用资源总数。

验证证据

  • PR #5540 已合并到 dev-v3hl-resource-service 已部署测试服。
  • Gateway 真实 HTTP 验收确认仅启用过滤、新旧字段、String ID、结算方式映射、价格优先级、双价缺失、筛选与鉴权均按本文契约生效。

10. 修改前后对比

10.1 字段级对比

位置 修改前 修改后
Query dayDate/keyword/resourceType/status/page/pageSize dayDate/keyword/resourceType/page/pageSize
资源状态 status/statusName 两个字段均删除
资源类型中文名 新增 resourceTypeName
结算方式中文名 新增 settleTypeName
默认核算价 ticketUnitPrice 改名为 defaultUnitPrice
城市空白值 可能返回空字符串/纯空白 统一返回 null
结算编码空白值 可能返回空字符串/纯空白 统一返回 null

10.2 行为级对比

行为 修改前 修改后
可选资源范围 默认包含启用和下架,可通过 status 筛选 固定只返回启用资源
默认核算价优先级 结算价优先,协议价回退 不变,仅字段改名
未知结算编码 只有原始编码 保留原始编码,中文名为 null
排序 启用优先,再按名称/类型/ID 全部为启用资源,按名称/类型/ID

11. 影响评估 / 回滚

  • 是否破坏向后兼容:是;请求删除 status,响应删除和改名字段。
  • 前端是否必须同步上线:已接入首版接口的前端必须同步迁移;尚未接入的前端直接按新契约实现。
  • 回滚影响:若后端回滚到首版,resourceTypeName/settleTypeName/defaultUnitPrice 将消失,旧字段和下架资源会重新出现;前后端需保持同一契约版本。

12. 前端迁移清单

  • 删除请求中的 status 参数和相关状态筛选逻辑。
  • 删除对响应 statusstatusName 的读取、展示与过滤。
  • 将所有 ticketUnitPrice 读取改为 defaultUnitPrice
  • 展示资源类型时读取 resourceTypeName;编码判断仍使用 resourceType
  • 展示结算方式时读取 settleTypeName,并允许该字段为 null
  • 允许 citysettleTypesettleTypeName、三个价格字段为 null
  • 不再在前端筛除下架资源;接口结果已经只包含启用资源。
  • resourceId 继续按 String 保存和传递。

13. 关联 / 联系人

13.1 链接

13.2 联系人

  • 后端负责人: @yst

关联/联系人

链接

联系人

  • 后端负责人: @yst