docs(changelog): #7443 TRANSFER 提交开关测试服已开启,订正 18_7443 里 frontend_status=not_required 的判定依据
changelog-filename-gate / validate (push) Failing after 2s
changelog-filename-gate / validate (push) Failing after 2s
18_7443 判 not_required 的理由逐字是「上游写口 809009 开关关闭,产品上产不出 TRANSFER 需求, 4 个新错误码仅 kind=TRANSFER 触发、前端不可达」。 该前提已于 2026-09-19 15:33:32 CST 被本会话推翻:测试服 Nacos 开启 hl.order.requirement.transfer-kind-submit-enabled 并重启 order-v3 两实例 (承载类 RequirementService 无 @RefreshScope)。 ⇒ 那 4 个错误码与 TRANSFER 派车路径在测试环境里现在可达,frontend_status 改判为 pending。 不替 mmg 拍 not_required:原判定的理由没了,但生产仍不可达、是否启动前端集成是排期问题。 边界写清三条:代码默认值仍 false / 生产未动 / 开关开了 ≠ TRANSFER 全链路可用。 18_7443 原文件未改动,保留接 grep。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
这个提交包含在:
+426
@@ -0,0 +1,426 @@
|
||||
---
|
||||
schema: "hl-changelog/v2"
|
||||
ticket: "7443"
|
||||
title: "TRANSFER 用车需求提交开关测试服已开启——订正 18_7443 PR-1 的 frontend_status 判定"
|
||||
consumer: "admin"
|
||||
author: "wx(GIT)"
|
||||
change_type: "修改接口"
|
||||
backend_status: "deployed"
|
||||
gateway_status: "verified"
|
||||
frontend_status: "pending"
|
||||
frontend_owner: ""
|
||||
frontend_ref: ""
|
||||
target_release: ""
|
||||
verified_at: ""
|
||||
status_note: "订正件,不改代码,只改测试服 Nacos 配置 + 重启。18_7443 判 not_required 的理由是「809009 开关关闭,产品上产不出 TRANSFER 需求,4 个新错误码前端不可达」——该理由 2026-09-19 15:33:32 起已不成立:hl.order.requirement.transfer-kind-submit-enabled 在测试服 namespace=test 的 hl-order-service-v3-test.yml 被置 true 并随 order-v3 两实例重启(15:36:32/15:36:46)生效。本文撰写前二次复验(Nacos 直读 17:00:35 CST 仍为 true;SUPER_ADMIN 身份两次真实网关调用穿透了原先必现的 809009 分支,其中一次落库成功)。三条边界必须同时看:①代码默认值仍是 false(@Value 未改),生产环境未动;②RequirementService 无 @RefreshScope,改配置必须重启才生效,这次也确实重启了;③本文撰写过程中意外发现 18_7443/19_7443(未推送草稿) 关于「confirm/change 仍必现 605041」的既有说法本身已经过期——AC-24 修复(PR #7952, commit c527e48c3, 2026-09-18 18:55 合入 dev-v3)已经是当前测试服 order-v3(ca0656f1c)与 fleet(31fd5b5e6) 两个正在跑的字节的祖先提交,即该修复本身也已随各自服务的最近一次部署上线,但本文未对 confirm/change 端点做真实网关复测,这一句只有源码祖先关系与部署记录支撑,不构成端到端功能验证,请勿据此对外宣称"确认/改派已验证可用"。frontend_status 由 not_required 改判 pending:原判定的前提(不可达)已不成立,但生产环境仍不可达、且是否现在启动前端集成属产品排期决定,不是本文档能替 mmg 拍板的,故不写 not_required(意味着无需关注),也不写 claimed/implemented(没有证据),交给 mmg 自行判断是否现在启动。"
|
||||
updated_at: "2026-09-19"
|
||||
base: "dev-v3"
|
||||
---
|
||||
|
||||
# order-v3: TRANSFER 用车需求提交开关测试服已开启——订正 18_7443 PR-1 的 frontend_status 判定
|
||||
|
||||
> **存放目录**: changelogs-v2/{YYYY-MM}/
|
||||
>
|
||||
> **服务**: hl-order-service-v3(本次唯一变化点在这里;连带影响 hl-fleet-service 已上线的两个既有端点的错误码可达性,那两个端点本身零改动)
|
||||
> **PR**: 无代码 PR——本次是测试服 Nacos 配置变更 + 实例重启,不是任何 git 提交
|
||||
> **Issue**: #7443
|
||||
> **日期**: 2026-09-19
|
||||
> **影响范围**: 管理后台「提交/修改用车需求」面板的 `kind=TRANSFER` 分支,测试环境从"提交恒 809009 失败关闭"变为"可正常提交并落库";连带使车务两个既有端点(批量派车创建、接送机配置)此前记录为"前端不可达"的 4 个错误码,在测试环境变为可达
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 关键变化
|
||||
|
||||
**18_7443 判 `frontend_status: not_required` 的理由,写在该文件 status_note 里逐字是**:
|
||||
|
||||
> 「上游写口 809009 开关关闭,产品上产不出 TRANSFER 需求,4 个新错误码仅 kind=TRANSFER 触发、前端不可达」
|
||||
|
||||
**这个前提在测试服上已不成立**。`hl.order.requirement.transfer-kind-submit-enabled` 已于
|
||||
**2026-09-19 15:33:32 CST** 在测试服 Nacos(namespace=`test`,`hl-order-service-v3-test.yml`)
|
||||
被置为 `true`,并随 `hl-order-service-v3` 两个实例重启(`15:36:32`/`15:36:46`)生效。
|
||||
|
||||
**本文撰写前已重新独立复验,不是照抄背景信息**:
|
||||
|
||||
1. Nacos 直读(2026-09-19 17:00:35 CST):`hl.order.requirement.transfer-kind-submit-enabled: true`。
|
||||
2. 真实网关调用(SUPER_ADMIN 身份,`https://api.test.1814.love:9443`):
|
||||
- `17:00:10`,订单 `2101219133700952066`(状态已drift为 `COMPLETED`),提交 `kind=TRANSFER`
|
||||
→ `HTTP 200`,业务码 **582017**「订单状态不允许提交需求(当前: COMPLETED)」——
|
||||
这个码由 `guardOrdinaryRequirementUpsertAllowed`(源码第 1287 行)抛出,
|
||||
**晚于**开关闸门 `assertTransferKindSubmitOpened`(第 1279 行);能看到 582017 而不是
|
||||
809009,本身就证明请求已经穿过了开关闸门。
|
||||
- `17:03:31`,订单 `2101230985700954114`,提交 `kind=TRANSFER` → `HTTP 200`,`code=200`,
|
||||
`success=true`,`data.kind=TRANSFER`、`data.status=PENDING_REVIEW`、
|
||||
`data.version` 由 1 升到 2、`data.branchTaken=PENDING_EDIT`——真实落库成功。
|
||||
|
||||
⇒ 那 4 个错误码(602200/602201/602202/602205,见 18_7443 六.5)以及 `TRANSFER` 派车路径,
|
||||
**在测试环境里现在是可达的**:只要该订单存在生效 TRANSFER 需求(本次已证明可以产出),车务侧
|
||||
`POST /admin/fleet/assignments/batch` 与 `PUT /admin/fleet/assignments/pickup-dropoff-config`
|
||||
(两端点本身零改动)即可触发这 4 个码。
|
||||
|
||||
**必须同时看清的三条边界,别把它们和上面这条合并**:
|
||||
|
||||
1. **代码默认值仍是 `false`**(`RequirementService.java:383` `@Value("${hl.order.requirement.transfer-kind-submit-enabled:false}")`,
|
||||
`application.yml:61` `${HL_ORDER_REQUIREMENT_TRANSFER_KIND_SUBMIT_ENABLED:false}`,本次未动这行代码)。
|
||||
变的是**测试服的 Nacos 配置**,不是代码默认值,**更不是生产**——生产环境这个开关本次未做任何改动,
|
||||
仍是关闭状态,`PUT /v3/admin/order/{id}/vehicle-requirement` 提交 `kind=TRANSFER` 在生产恒返 809009。
|
||||
2. 承载该开关的 `RequirementService` **没有 `@RefreshScope`**(源码 338 行注释明确写着这一点),
|
||||
所以改配置后**必须重启实例才生效**,这次也确实重启了(两个实例 15:36:32/15:36:46,见「八、测试环境已验证」)。
|
||||
3. 🔴 **本文撰写过程中意外查实:18_7443(以及尚未推送的 19_7443 草稿)里"kind=TRANSFER 派车行走确认/改派仍必现
|
||||
605041/605905"这句既有说法本身已经过期**。AC-24 基线复核修复(PR #7952,commit `c527e48c3`,
|
||||
2026-09-18 18:55 合入 `dev-v3`)经 `git merge-base --is-ancestor` 核实,**已经是**当前测试服正在跑的
|
||||
order-v3(`ca0656f1c`,2026-09-19 15:36:31 部署)与 fleet(`31fd5b5e6`,2026-09-19 07:32:22 部署)
|
||||
两份字节的祖先提交——也就是说这个修复本身也已经随各自服务**各自独立的**最近一次部署上线到测试环境,
|
||||
并不是还躺在未合并分支上。**但本文没有对 `POST /requirements/{id}/confirm`、
|
||||
`POST /{assignmentId}/confirm`、`POST /{assignmentId}/change` 三个端点做真实网关复测**,
|
||||
上面这句判断只有「源码祖先关系」+「部署记录」两条支撑,**不构成端到端功能验证**。
|
||||
⇒ **开关打开、且 AC-24 修复也已部署 ≠ 已经端到端验证过 TRANSFER 全链路可用**——这句结论目前只到
|
||||
"提交能成功"这一步有真实网关证据,"确认/改派不再 605041"这一步只有部署记录、没有功能复测,
|
||||
请勿据此对外宣称"确认/改派已验证可用",需要硬结论时请另跑一次针对这三个端点的网关取证。
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
| 维度 | 18_7443 撰写时(2026-09-18) | 本文撰写时(2026-09-19) |
|
||||
|------|------------------------------|---------------------------|
|
||||
| 测试服 Nacos `transfer-kind-submit-enabled` | `false`(未覆盖,取代码默认值) | `true`(2026-09-19 15:33:32 发布,15:36:32/46 重启生效,17:00:35 复验仍为 true) |
|
||||
| `PUT /vehicle-requirement` 提交 `kind=TRANSFER` | 恒 809009,零落库 | 按三分支正常处理,可落库(17:03:31 实测) |
|
||||
| `order_vehicle_requirement` 表行数(背景实证,由取证方 2026-09-19 当天提供) | — | 392 → 393,新行 `requirement_kind=TRANSFER`、`is_active=1` |
|
||||
| AC-24(confirm/change 基线复核修复,PR #7952) | 未提及;18_7443 当时的订正段仍写"已随 AC-24 修复"但缺部署记录支撑 | 经本文核实,已是当前测试服 order-v3/fleet 两份运行字节的祖先提交(部署记录+祖先关系可查,未做功能复测) |
|
||||
|
||||
---
|
||||
|
||||
## 二、变更接口清单
|
||||
|
||||
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|
||||
|---|------|------|------|----------|------|
|
||||
| 1 | 提交/修改/调整用车需求 | PUT | `/v3/admin/order/{id}/vehicle-requirement` | 行为变更(仅测试服配置,代码零改动) | `kind=TRANSFER` 从恒返 809009 变为按 INIT_SUBMIT/PENDING_EDIT/DONE_ADJUST 三分支正常处理 |
|
||||
|
||||
---
|
||||
|
||||
## 三、接口详情
|
||||
|
||||
### 1. 提交/修改/调整用车需求 `PUT /v3/admin/order/{id}/vehicle-requirement`
|
||||
|
||||
**VO**: `VehicleRequirementReqVO → VehicleRequirementRespVO`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师(或超管)在订单详情页提交/修改/调整用车需求;服务端按 `order_vehicle_requirement` 表
|
||||
该订单该 `kind` 下是否存在 active 行、以及该行 `status` 三分支自动判断走向:无 active
|
||||
→ `INIT_SUBMIT`(首提);`PENDING` → `PENDING_EDIT`(改草稿);`DONE` → `DONE_ADJUST`(完成版调整)。
|
||||
本次变化点只在 `kind=TRANSFER` 分支:此前测试服上这个分支进方法体第一步(`assertTransferKindSubmitOpened`)
|
||||
就会被开关拦下失败关闭;开关打开后请求会继续往下走完整流程(正常读服务日、容量校验、INSERT
|
||||
新版本行)。`kind=TRAVEL`(含不传 `kind`)分支不受本次影响,行为与改动前逐字一致——这个
|
||||
`kind` 字段本身是 #7439/13_7439 已发布的既有契约字段,不是本次新增。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
> 覆盖范围:`VehicleRequirementReqVO`(含内部类 `FleetItem`)全量 6 个字段 + 1 个路径参数,
|
||||
> `D:/work2/HL-v3` 已 ff 到 `origin/dev-v3@076654889`,逐一核对源码。
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| id | Path | Long | 是 | - | 订单 ID |
|
||||
| kind | Body | String | 否 | `TRAVEL`\|`TRANSFER`(`@Pattern`) | 需求类别:`TRAVEL`=团期行程用车(服务日冻结为行程日)/ `TRANSFER`=接送机(服务日由服务端从大交通派生,允许落在行程日窗外)。不传按 `TRAVEL`。字段本身非本次新增,本次变化的是 `TRANSFER` 分支在测试服是否能走通 |
|
||||
| fleet[] | Body | Array | 是 | `@NotEmpty` ≥1 项 | 车型组合 |
|
||||
| fleet[].vehicleType | Body | String | 是 | `suv`\|`mpv`\|`bus`\|`sedan` | 车型大类 key,只选大类不选具体车型;后端兼容历史别名并归一 |
|
||||
| fleet[].seats | Body | Integer | 是 | - | 座位数选项值,前端从车型大类 `seatOptions` 下拉选择,不允许手输 |
|
||||
| fleet[].count | Body | Integer | 是 | >0 | 辆数 |
|
||||
| specialTags | Body | Array\<String\> | 否 | - | 通用特殊诉求标签(字典 `vehicle_special_demand` 的 value) |
|
||||
| pickupRequired | Body | Boolean | 否 | - | 兼容字段;接机/接站以实时 `ARRIVAL` 大交通批次为准 |
|
||||
| dropoffRequired | Body | Boolean | 否 | - | 兼容字段;送机/送站以实时 `DEPARTURE` 大交通批次为准 |
|
||||
| remark | Body | String | 否 | ≤500 | 备注 |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
> `VehicleRequirementRespVO` 全量 21 个字段(含 `fleet[]` 上一层展开的衍生统计字段)。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | Long | 需求行 ID |
|
||||
| kind | String | `TRAVEL`\|`TRANSFER`;同订单两类可并存各一条活跃需求,前端按此分栏 |
|
||||
| serviceDates[] | Array\<Date\> | 本版冻结的服务日期,升序去重;`TRAVEL`=行程日,`TRANSFER`=航班/车次日(可落在行程日窗外) |
|
||||
| version | Integer | 版本号 |
|
||||
| isActive | Boolean | 是否为当前生效版本 |
|
||||
| status | String | 需求状态(`PENDING`/`PENDING_REVIEW`/`PROCESSING`/`DONE` 等,核心订单与团期订单分流不同) |
|
||||
| submittedAt | DateTime | 首提时间 |
|
||||
| claimerId | Long | 接单车控 ID |
|
||||
| claimerName | String | 接单车控姓名 |
|
||||
| claimedAt | DateTime | 接单时刻 |
|
||||
| passengerCount | Integer | 订单乘车人数(成人+儿童+幼童+婴儿) |
|
||||
| vehicleCount | Integer | 车辆总数(`fleet[].count` 求和) |
|
||||
| totalSeatCount | Integer | 车辆座位总数(`fleet[].seats * count`,含司机座) |
|
||||
| driverSeatCount | Integer | 司机占用座位数(每辆车 1 个司机座,等于 `vehicleCount`) |
|
||||
| passengerSeatCapacity | Integer | 可载客座位数(`totalSeatCount - driverSeatCount`) |
|
||||
| remainingPassengerSeats | Integer | 剩余可载客座位数(`passengerSeatCapacity - passengerCount`) |
|
||||
| pickupRequired | Boolean | 兼容回显字段;接机/接站以实时大交通为准 |
|
||||
| dropoffRequired | Boolean | 兼容回显字段;送机/送站以实时大交通为准 |
|
||||
| branchTaken | String | 实际走的分支:`INIT_SUBMIT`(首提)/`PENDING_EDIT`(草稿改)/`DONE_ADJUST`(完成版调整) |
|
||||
| previousVersion | Integer | `DONE_ADJUST` 分支:上一版本号;其余分支 `null` |
|
||||
| assignmentDeletedCount | Integer | `DONE_ADJUST` 分支:软删旧 assignment 行数;其余分支 `null` |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```json
|
||||
PUT /v3/admin/order/2101230985700954114/vehicle-requirement
|
||||
{
|
||||
"kind": "TRANSFER",
|
||||
"fleet": [
|
||||
{"vehicleType": "mpv", "seats": 7, "count": 1}
|
||||
],
|
||||
"specialTags": [],
|
||||
"remark": "revalidate-switch-20260919"
|
||||
}
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
> 以下为 2026-09-19T17:03:31 CST 真实网关调用原文,`SUPER_ADMIN` 身份,
|
||||
> 该订单此前已有一条生效 TRANSFER 需求(本版从 1 升到 2,故 `branchTaken=PENDING_EDIT`)。
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"id": "2101235734970093569",
|
||||
"kind": "TRANSFER",
|
||||
"serviceDates": ["2026-12-19", "2026-12-21"],
|
||||
"version": 2,
|
||||
"isActive": true,
|
||||
"status": "PENDING_REVIEW",
|
||||
"submittedAt": "2026-09-19 16:48:50",
|
||||
"claimerId": null,
|
||||
"claimerName": null,
|
||||
"claimedAt": null,
|
||||
"passengerCount": 2,
|
||||
"vehicleCount": 1,
|
||||
"totalSeatCount": 7,
|
||||
"driverSeatCount": 1,
|
||||
"passengerSeatCapacity": 6,
|
||||
"remainingPassengerSeats": 4,
|
||||
"pickupRequired": true,
|
||||
"dropoffRequired": true,
|
||||
"branchTaken": "PENDING_EDIT",
|
||||
"previousVersion": null,
|
||||
"assignmentDeletedCount": null
|
||||
},
|
||||
"traceId": null,
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
N/A(写接口,要么返回完整 `VehicleRequirementRespVO` 要么失败关闭,不存在独立的空数据/降级形态)。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
> 以下为 2026-09-19T17:00:10 CST 真实网关调用原文(`SUPER_ADMIN` 身份,订单已是 `COMPLETED` 状态)。
|
||||
> 这个码由**晚于**开关闸门的 `guardOrdinaryRequirementUpsertAllowed` 抛出,能看到它而不是
|
||||
> 809009,本身就是"已穿过开关闸门"的证据。
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 582017,
|
||||
"message": "订单状态不允许提交需求(当前: COMPLETED)",
|
||||
"data": null,
|
||||
"traceId": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
> 809009(开关关闭时的失败关闭码)此刻在测试服**无法复现**(开关已开),下面这段按源码原文
|
||||
> 转录,不是本次网关实测:`VehicleRequirementKindErrorCode.java:95-98`
|
||||
> `IErrorCode.of(809009, "接送机用车需求尚未开放提交,请联系管理员确认开放时间(订单 {0,number,#})", "requirement")`。
|
||||
> 生产环境开关仍关闭,生产上这个码目前仍是"当前的正常返回"。
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- `kind` 不传或空=`TRAVEL`,与改动前逐字一致,本次不涉及
|
||||
- `kind=TRANSFER` 且开关关闭(生产现状):恒 809009,一行都不落库
|
||||
- `kind=TRANSFER` 且开关打开(本次测试服现状):按三分支正常处理,与 `TRAVEL` 走同一套
|
||||
版本化/容量校验逻辑,唯服务日来源不同(`TRANSFER` 由大交通派生)
|
||||
- 该开关**没有 `@RefreshScope`**,改配置对已启动实例无效,必须重启才生效
|
||||
- 本次变化不改变 VO 契约、不新增字段、不新增错误码——`kind` 字段与 809009 错误码均是
|
||||
#7439/13_7439 已发布的既有契约,本文只订正"测试环境是否可达"这一件事
|
||||
|
||||
---
|
||||
|
||||
## 四、契约约束与正确调用方式
|
||||
|
||||
| 场景 | 做法 |
|
||||
|------|------|
|
||||
| 测试服提交 `kind=TRANSFER` | 现在会走真实业务逻辑,**不再**恒返 809009;前端如果此前按"这个分支永远失败"写了兜底逻辑,需要知道这个假设在测试环境已经不成立 |
|
||||
| 生产提交 `kind=TRANSFER` | **仍然**恒返 809009,本次未动生产配置,前端不要把测试环境的行为套用到生产判断上 |
|
||||
| 依赖 `kind=TRANSFER` 需求存在的下游接口(车务批量创建、接送机配置) | 现在可以在测试环境用真实数据走通前置条件,不必再造假数据或假设"根本走不到这一步" |
|
||||
| `kind=TRANSFER` 派车行的确认/改派(`POST /requirements/{id}/confirm`、`POST /{assignmentId}/confirm`、`POST /{assignmentId}/change`) | 本文档**不提供**这三个端点是否已修好的功能级结论;只提供"修复代码已在测试服运行的字节祖先链上"这一条部署记录级证据,需要硬结论请另行网关取证 |
|
||||
|
||||
---
|
||||
|
||||
## 五、数据库行为
|
||||
|
||||
| 操作 | 影响 |
|
||||
|------|------|
|
||||
| `kind=TRANSFER` 且开关打开、三分支校验全部通过 | 正常 INSERT `order_vehicle_requirement` 新版本行(`requirement_kind=TRANSFER`,`is_active=1`),旧版本行 `is_active` 置 0;落库结构不因开关状态改变 |
|
||||
| `kind=TRANSFER` 且开关关闭 | `assertTransferKindSubmitOpened` 在**任何 DB 写操作之前**直接抛 809009,零写入 |
|
||||
| `kind=TRAVEL`(含不传 `kind`) | 行为与改动前一致,不受本次开关状态影响 |
|
||||
| 本次两次复验调用 | 17:00:10 那次在 `guardOrdinaryRequirementUpsertAllowed` 处失败关闭(订单已 `COMPLETED`),**零写入**;17:03:31 那次正常落库,`order_vehicle_requirement` 新增一条 `version=2` 的 TRANSFER 需求行 |
|
||||
|
||||
---
|
||||
|
||||
## 六、边界行为
|
||||
|
||||
- `kind` 传空字符串/null:按 `TRAVEL` 处理,不受开关影响
|
||||
- `kind` 传非 `TRAVEL`/`TRANSFER` 枚举值:走 `@Pattern` 校验,400 参数错误,不到业务码,不受开关影响
|
||||
- `kind=TRANSFER` 且开关关闭:`assertTransferKindSubmitOpened`(`RequirementService.java:5768-5777`)
|
||||
当场拒绝,`log.warn` 记录 orderId,**不落库**——这是生产环境的当前状态,本次未改
|
||||
- `kind=TRANSFER` 且开关打开(本次测试服现状):走完整业务路径,容量、服务日解析等既有校验
|
||||
规则不受本次影响,该走的分支照样走(例如容量不足仍会按既有规则处理)
|
||||
- 该开关**没有 `@RefreshScope`**(`RequirementService.java:338` 注释明确写明),改 Nacos 对
|
||||
已启动实例不生效,必须重启;本次两个实例已于 15:36:32/15:36:46 重启生效
|
||||
- ⚠️ **已知关联风险 #7667(`dispatchVehicleToHouse` 绕过 809007 守卫)已提前于 2026-09-14
|
||||
修复并部署(PR #7693,见同目录 `14_7667_提交车务前拦截未回填服务日的接送机需求-修复-管理后台.md`),
|
||||
早于本次开关变更,本次开闸**没有**重新暴露这个缺陷**——`application.yml:59-60` 的注释原文
|
||||
警告过"开闸前必须先处理 #7667……该缺陷现在不可达,本开关开闸那一刻同时变可达",经核实该修复
|
||||
已在今天的开关变更之前就已经在线,不是本文遗漏的风险
|
||||
- 🔴 `kind=TRANSFER` 派车行走「确认」(`POST /requirements/{id}/confirm`、`POST /{assignmentId}/confirm`)
|
||||
与「改派」(`POST /{assignmentId}/change`):AC-24 基线复核修复(PR #7952,commit `c527e48c3`)
|
||||
经 `git merge-base --is-ancestor` 核实已是当前测试服 order-v3(`ca0656f1c`)与 fleet
|
||||
(`31fd5b5e6`)两份运行字节的祖先提交,**但本文未对这三个端点做真实网关复测**,"确认/改派
|
||||
是否还会误判 605041/605905"目前只有部署记录支撑,不是功能级结论——需要硬结论请另行取证,
|
||||
不要凭本条直接对外宣称"已验证可用"
|
||||
- 生产环境:本次未做任何改动,`transfer-kind-submit-enabled` 仍是代码默认值 `false`,
|
||||
`kind=TRANSFER` 提交在生产仍恒返 809009
|
||||
|
||||
---
|
||||
|
||||
## 六.5 枚举(`kind` 字段)
|
||||
|
||||
**所属字段**: `VehicleRequirementReqVO.kind` / `VehicleRequirementRespVO.kind` | **类型**: `String`
|
||||
(`VehicleRequirementKind` 枚举,`com.hulalv.order.requirement.enums.VehicleRequirementKind`)
|
||||
|
||||
| 值 | 中文 | 说明 |
|
||||
|----|------|------|
|
||||
| `TRAVEL` | 团期行程用车 | 服务日冻结为行程日(由 `order_itinerary_day` 派生);不传 `kind` 时的默认值 |
|
||||
| `TRANSFER` | 接送机 | 服务日取航班/车次日期,允许落在行程日窗外,不做行程日包含校验;**本文订正的对象**——测试服该分支从"提交即拒绝"变为"可正常提交" |
|
||||
|
||||
字段本身非本次新增(#7439/13_7439 已发布),本次只是该枚举值在测试环境下游是否可达发生了变化。
|
||||
|
||||
---
|
||||
|
||||
## 六.6、修改前后对比
|
||||
|
||||
| 项目 | 改前(截至 2026-09-19 15:33 CST) | 改后(2026-09-19 15:33:32 起,仅测试服) |
|
||||
|------|-----------------------------------|---------------------------------------------|
|
||||
| Nacos `hl.order.requirement.transfer-kind-submit-enabled`(测试服,namespace=test) | `false`(代码默认值,未在 `hl-order-service-v3-test.yml` 覆盖) | `true`(手工发布,随两实例重启于 15:36:32/15:36:46 生效) |
|
||||
| `PUT /v3/admin/order/{id}/vehicle-requirement`,`kind=TRANSFER` | 恒返 809009,`order_vehicle_requirement` 零写入 | 按三分支正常处理,可正常落库 |
|
||||
| 车务侧 `TransferDispatchErrorCode` 四码(602200/602201/602202/602205) | 语法上存在但前端不可达(订单不存在生效 TRANSFER 需求,触发不了前置四步) | 可达——只要该订单已提交生效 TRANSFER 需求 |
|
||||
| 生产环境同一开关 | `false` | **未改动,仍是 `false`** |
|
||||
| 代码(`@Value` 默认值、VO 契约、错误码文案) | — | **零改动**,本次只动测试服 Nacos 配置 |
|
||||
|
||||
---
|
||||
|
||||
## 六.7、影响评估
|
||||
|
||||
- **向后兼容**: 是——`kind` 不传或为 `TRAVEL` 时行为逐字不变;本次是纯环境配置变化,代码零改动
|
||||
- **前端同步**: 视产品排期,非强制立即上线。前端**可以**从现在起在测试环境用真实数据联调
|
||||
`kind=TRANSFER` 分支(此前只能靠 SQL 直接造假数据,看不到真实闭环);是否现在启动集成,
|
||||
由 mmg / 产品按排期自行决定,本文档不替其拍板
|
||||
- **数据**: 无需迁移;测试服会因此产生真实的 `requirement_kind=TRANSFER` 数据行,属预期现象,
|
||||
不是异常数据
|
||||
|
||||
---
|
||||
|
||||
## 七、不影响范围
|
||||
|
||||
- 生产环境:本次未做任何改动,开关仍是代码默认值 `false`,`kind=TRANSFER` 提交仍恒返 809009
|
||||
- `kind=TRAVEL`(含不传 `kind`)的全部请求路径与既有校验规则
|
||||
- `VehicleRequirementReqVO`/`VehicleRequirementRespVO` 的字段契约本身(无新增/删除字段,
|
||||
已发布契约见 `13_7439_团期车务地基-用车需求分家-修改接口-管理后台.md`)
|
||||
- 车务两个既有端点(`POST /admin/fleet/assignments/batch`、
|
||||
`PUT /admin/fleet/assignments/pickup-dropoff-config`)自身的入参/出参/校验逻辑
|
||||
(见 `18_7443_接送机用车需求分叉PR1派车入参新增需求类别kind-修改接口-管理后台.md`),
|
||||
本次零改动,只是它们依赖的"生效 TRANSFER 需求"这个前提现在测试服上能满足了
|
||||
- 确认/改派三个端点(`POST /requirements/{id}/confirm`、`POST /{assignmentId}/confirm`、
|
||||
`POST /{assignmentId}/change`)的入参/出参本身;这三个端点是否已修复见「六、边界行为」的
|
||||
明确保留意见(部署记录支撑,功能未复测)
|
||||
- `#7667`(`dispatchVehicleToHouse` 绕过 809007)——已于本次开关变更之前提前修复部署,
|
||||
本次开闸未重新暴露
|
||||
|
||||
---
|
||||
|
||||
## 八、测试环境已验证
|
||||
|
||||
Nacos 配置直读(2026-09-19 17:00:35 CST,SSH `root@1.182.108.58` → 本机 Nacos OpenAPI
|
||||
`GET /nacos/v1/cs/configs?dataId=hl-order-service-v3-test.yml&group=DEFAULT_GROUP&tenant=test`):
|
||||
|
||||
```
|
||||
requirement:
|
||||
transfer-kind-submit-enabled: true
|
||||
```
|
||||
|
||||
实例重启记录(`ps -eo pid,lstart,cmd`,2026-09-19 17:00 采集):
|
||||
|
||||
```
|
||||
PID 1290325 Sat Sep 19 15:36:32 2026 -Dserver.port=8186 hl-order-service-v3-1.0.0-SNAPSHOT.jar
|
||||
PID 1290982 Sat Sep 19 15:36:46 2026 -Dserver.port=8086 hl-order-service-v3-1.0.0-SNAPSHOT.jar
|
||||
```
|
||||
|
||||
真实网关调用(`https://api.test.1814.love:9443`,`SUPER_ADMIN` 身份):
|
||||
|
||||
```
|
||||
17:00:10 PUT /v3/admin/order/2101219133700952066/vehicle-requirement {kind:TRANSFER,...}
|
||||
→ HTTP 200, code=582017「订单状态不允许提交需求(当前: COMPLETED)」
|
||||
(晚于开关闸门的守卫抛出,证明已穿过 809009 分支;该单原始评估时可能非 COMPLETED,
|
||||
状态已在评估之间漂移,本次不追)
|
||||
|
||||
17:03:31 PUT /v3/admin/order/2101230985700954114/vehicle-requirement {kind:TRANSFER,...}
|
||||
→ HTTP 200, code=200, success=true
|
||||
data.kind=TRANSFER, data.status=PENDING_REVIEW, data.version 1→2,
|
||||
data.branchTaken=PENDING_EDIT(真实落库)
|
||||
```
|
||||
|
||||
部署记录交叉核实(在测试服上执行 `/opt/hulalv/scripts/deploy-status.sh`):
|
||||
|
||||
```
|
||||
hl-order-service-v3 dev-v3 ca0656f1c 1/N 2026-09-19 15:36:31 root@192.168.100.168 ok
|
||||
hl-fleet-service dev-v3 31fd5b5e6 8/Y 2026-09-19 07:32:22 root@116.117.151.52 ok
|
||||
```
|
||||
|
||||
Git 祖先关系核实(`git merge-base --is-ancestor c527e48c3 <deployed-commit>`):
|
||||
`c527e48c3`(PR #7952,AC-24 六处落点)是 `ca0656f1c` 与 `31fd5b5e6` 的共同祖先——即该修复的
|
||||
代码已在两份当前运行的字节里,但本文**未**对确认/改派端点做网关级复测(见「⚠️ 关键变化」第 3 条
|
||||
与「六、边界行为」的保留意见)。
|
||||
|
||||
> ⚠️ **必须同时写明的限定**:本文验证的是"提交 `kind=TRANSFER` 能否成功"这一件事,验证方式是
|
||||
> 两次真实网关调用(一次因订单状态失败关闭但证明穿过了开关闸门,一次真实落库成功)+ Nacos
|
||||
> 配置直读,三者互相印证、独立于背景信息重新采集。"确认/改派是否不再误判 605041/605905"
|
||||
> **不在本次实测范围内**,只有部署记录与源码祖先关系两条间接证据,不要把两件事混为一谈。
|
||||
|
||||
---
|
||||
|
||||
## 十、相关文档
|
||||
|
||||
- Issue: [#7443](https://git.1814.love:8443/wx/HL/issues/7443)
|
||||
- 本次订正的对象: 同目录 `18_7443_接送机用车需求分叉PR1派车入参新增需求类别kind-修改接口-管理后台.md`
|
||||
(该文件本身不做修改,原字面保留接 grep)
|
||||
- `kind` 字段与 `PUT /vehicle-requirement` 端点的原始契约: 同目录
|
||||
`13_7439_团期车务地基-用车需求分家-修改接口-管理后台.md`
|
||||
- 关联但已提前修复、未受本次影响: 同目录
|
||||
`14_7667_提交车务前拦截未回填服务日的接送机需求-修复-管理后台.md`
|
||||
- AC-24 基线复核修复的合并记录(部署证据的依据,非本次交付物):
|
||||
[c527e48c3](https://git.1814.love:8443/wx/HL/commit/c527e48c3)(PR #7952)——该 PR 对应的
|
||||
changelog 草稿尚未推送到本仓,暂无稳定链接可引用
|
||||
|
||||
## 关联 / 联系人
|
||||
|
||||
### 链接
|
||||
|
||||
- **Issue**: [#7443](https://git.1814.love:8443/wx/HL/issues/7443)
|
||||
- **PR**: 无(配置变更,非代码 PR)
|
||||
|
||||
### 联系人
|
||||
|
||||
- **后端**: @wx
|
||||
在新工单中引用
屏蔽一个用户