docs(changelog): #8749 定制师待办 5 个接口出参新增团期号、返团日期、行程天数、本户人数房数
changelog-filename-gate / validate (push) Failing after 2s
changelog-filename-gate / validate (push) Failing after 2s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
这个提交包含在:
@@ -0,0 +1,647 @@
|
||||
---
|
||||
schema: "hl-changelog/v2"
|
||||
ticket: "8749"
|
||||
title: "定制师待办 5 个接口出参新增团期号、返团日期、行程天数、本户人数房数;手动待办返回补齐产品名与出发日"
|
||||
consumer: "admin"
|
||||
author: "jw(GIT)"
|
||||
change_type: "修改接口"
|
||||
backend_status: "deployed"
|
||||
gateway_status: "verified"
|
||||
frontend_status: "pending"
|
||||
frontend_owner: ""
|
||||
frontend_ref: ""
|
||||
target_release: ""
|
||||
verified_at: ""
|
||||
status_note: "已合并 dev-v3(b49ad81ee)并部署 TEST(order-v3 @ d778c9a71),自签定制师 token 经网关实测:名下 108 条待办逐字段对库零差异(团期子订单 81 条、11 个团期;散客单 27 条),teamNo 与部署前快照 108/108 逐字一致,手动待办新增/修改/完成/重开四个返回字段齐全,整页团期号只查一次。前端待做:待办列表与卡片展示团期号、出发至返回日期、行程天数、本户人数和房数;teamNo 不要再当团期号用。"
|
||||
updated_at: "2026-10-03"
|
||||
base: "dev-v3"
|
||||
---
|
||||
|
||||
# order-v3: 定制师待办补团期号、行程日期与本户人数房数
|
||||
|
||||
**服务**: hl-order-service-v3
|
||||
**PR**: `#8761`(已合入 `dev-v3`,合并提交 `b49ad81ee`)
|
||||
**Issue**: #8749
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 关键变化
|
||||
|
||||
🟢 **5 个接口的出参纯新增 10 个字段**:`groupBatchId`、`batchNo`、`batchName`、`returnDate`、`tripDays`、`adultCount`、`childCount`、`youngChildCount`、`babyCount`、`roomCount`。入参、判权、错误码不变。
|
||||
|
||||
🔴 **`teamNo` 是户团号,不是团期号。** `teamNo` 取 `order_main.team_no`(订金付款后生成,形如 `26-6559`),每户一个;团期号是新增的 `batchNo`(`order_group_batch.batch_no`,形如 `T26-3963`),同一团期的各户相同。前端现在把 `teamNo · productName · departDate` 当团信息展示,团期号请改读 `batchNo`。
|
||||
|
||||
🟢 **手动待办新增、修改、完成、重开的返回补齐了 `productName`、`departDate`**,改前这两项恒为 `null`。
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
实施单 15「定制师代办与导摄物资分工」规则 3(AC-TD-03)要求待办带齐填表要用的数据:团期号、出发结束日、行程天数、本户人数房数。改前待办只带户团号、产品名、出发日;团期号和返团日期在所有接口里都没有,手动待办四个写接口的返回里连产品名和出发日都是 `null`。
|
||||
|
||||
---
|
||||
|
||||
## 二、变更接口清单
|
||||
|
||||
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|
||||
|---|------|------|------|----------|------|
|
||||
| 1 | 我的订单待办分页 | GET | `/v3/admin/order-todos/my/page` | 修改 | `records[]` 新增 10 个字段 |
|
||||
| 2 | 手动新增订单待办 | POST | `/v3/admin/order-todos/manual` | 修改 | 返回体新增 10 个字段,`productName` / `departDate` 由恒 `null` 改为有值 |
|
||||
| 3 | 修改手动订单待办 | PUT | `/v3/admin/order-todos/:todoId` | 修改 | 同上 |
|
||||
| 4 | 完成手动订单待办 | PUT | `/v3/admin/order-todos/:todoId/complete` | 修改 | 同上 |
|
||||
| 5 | 重开手动订单待办 | PUT | `/v3/admin/order-todos/:todoId/reopen` | 修改 | 同上 |
|
||||
|
||||
---
|
||||
|
||||
## 三、接口详情
|
||||
|
||||
**新增字段的取值**(5 个接口相同,都取待办所属订单的当前值):
|
||||
|
||||
| 字段 | 类型 | 来源 | 散客单 |
|
||||
|---|---|---|---|
|
||||
| groupBatchId | String(Long 序列化为字符串) | `order_main.group_batch_id`;非空 = 团期子订单 | `null` |
|
||||
| batchNo | String | `order_group_batch.batch_no`,与订单详情 `main.batchNo` 同义 | `null` |
|
||||
| batchName | String | `order_group_batch.batch_name`,与订单详情 `main.batchName` 同义 | `null` |
|
||||
| returnDate | String(yyyy-MM-dd) | `order_main.return_date` | 照填 |
|
||||
| tripDays | Integer | `order_main.trip_days` | 照填 |
|
||||
| adultCount / childCount / youngChildCount / babyCount | Integer | `order_main` 四档人数 | 照填 |
|
||||
| roomCount | Integer | `order_main.room_count`;创单时未定为 `null` | 照填 |
|
||||
|
||||
团期已软删(解散)查不到时,`batchNo` / `batchName` 为 `null`,`groupBatchId` 照常返回。
|
||||
|
||||
### 1. 我的订单待办分页 `GET /v3/admin/order-todos/my/page`
|
||||
|
||||
**VO**: `OrderTodoPageReqVO` → `Result<PageResult<OrderTodoRespVO>>`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师工作台「我的待办」列表与卡片。团期子订单的待办据 `batchNo`、`departDate`~`returnDate`、`tripDays`、人数房数直接展示填表信息,不用再点进订单详情。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| page | Query | Integer | ❌ | ≥1 | **不变** |
|
||||
| pageSize | Query | Integer | ❌ | ≥1 | **不变** |
|
||||
| status | Query | String | ❌ | PENDING / COMPLETED / CANCELLED | **不变** |
|
||||
| todoSource | Query | String | ❌ | SYSTEM / MANUAL | **不变** |
|
||||
| orderId | Query | Long | ❌ | 订单 ID | **不变** |
|
||||
| fromDate | Query | String | ❌ | yyyy-MM-dd | **不变** |
|
||||
| toDate | Query | String | ❌ | yyyy-MM-dd | **不变** |
|
||||
| keyword | Query | String | ❌ | 待办标题 / 订单号 / 户团号 / 产品名 | **不变**(不按团期号搜) |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| records[].groupBatchId | String | 🆕 运营团期 ID,散客单 `null` |
|
||||
| records[].batchNo | String | 🆕 团期号(T26-xxxx),散客单 `null` |
|
||||
| records[].batchName | String | 🆕 团期名称,散客单 `null` |
|
||||
| records[].returnDate | String | 🆕 返团日期 |
|
||||
| records[].tripDays | Integer | 🆕 行程天数 |
|
||||
| records[].adultCount | Integer | 🆕 本户成人数 |
|
||||
| records[].childCount | Integer | 🆕 本户儿童数 |
|
||||
| records[].youngChildCount | Integer | 🆕 本户幼童数 |
|
||||
| records[].babyCount | Integer | 🆕 本户婴儿数 |
|
||||
| records[].roomCount | Integer | 🆕 本户房间数 |
|
||||
| records[].teamNo | String | **取值不变**;说明改为「户团号,不是团期号」 |
|
||||
| 其余字段 | — | **不变** |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```http
|
||||
GET /v3/admin/order-todos/my/page?page=1&pageSize=20 HTTP/1.1
|
||||
Authorization: Bearer <定制师 token>
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
字段值取自 TEST 实际返回(团期子订单、散客单各一条),省略了 `actionType`、`completedAt` 等未变字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"records": [
|
||||
{
|
||||
"todoId": "2104839975281496066",
|
||||
"orderId": "2104839729176514562",
|
||||
"orderNo": "HL20260929154432061",
|
||||
"teamNo": "26-6559",
|
||||
"productName": "jw测试产品",
|
||||
"departDate": "2026-11-01",
|
||||
"returnDate": "2026-11-07",
|
||||
"tripDays": 7,
|
||||
"groupBatchId": "2104839654727618562",
|
||||
"batchNo": "T26-3963",
|
||||
"batchName": "11月1日额济纳胡杨林深秋4日游",
|
||||
"adultCount": 3,
|
||||
"childCount": 0,
|
||||
"youngChildCount": 0,
|
||||
"babyCount": 0,
|
||||
"roomCount": 2,
|
||||
"todoType": "FILL_TRAVELER",
|
||||
"todoTypeName": "补全出行人",
|
||||
"todoLabel": "补全出行人信息 · 待提交",
|
||||
"todoSource": "SYSTEM",
|
||||
"todoDate": "2026-11-01",
|
||||
"status": "COMPLETED",
|
||||
"statusName": "已处理"
|
||||
},
|
||||
{
|
||||
"todoId": "2104976495388856322",
|
||||
"orderId": "2104976481551806465",
|
||||
"orderNo": "HL20260930004756321",
|
||||
"teamNo": "26-4912",
|
||||
"productName": "游牧的森林-短途版",
|
||||
"departDate": "2026-09-30",
|
||||
"returnDate": "2026-10-03",
|
||||
"tripDays": 4,
|
||||
"groupBatchId": null,
|
||||
"batchNo": null,
|
||||
"batchName": null,
|
||||
"adultCount": 2,
|
||||
"childCount": 0,
|
||||
"youngChildCount": 0,
|
||||
"babyCount": 0,
|
||||
"roomCount": 1,
|
||||
"todoType": "FILL_TRAVELER",
|
||||
"todoTypeName": "补全出行人",
|
||||
"todoLabel": "补全出行人信息 · 待提交",
|
||||
"todoSource": "SYSTEM",
|
||||
"todoDate": "2026-09-30",
|
||||
"status": "CANCELLED",
|
||||
"statusName": "已取消"
|
||||
}
|
||||
],
|
||||
"total": 2,
|
||||
"page": 1,
|
||||
"pageSize": 20
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
无待办时 `records` 为空数组(不变)。团期已软删时 `batchNo` / `batchName` 为 `null`、`groupBatchId` 照常返回;整页都是散客单时不查团期表。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
判权不变:取不到当前账号返回 `581701`。
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 581701,
|
||||
"message": "无权操作该待办",
|
||||
"data": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- 只返回指派给当前账号的待办(不变)。
|
||||
- 团期号按整页去重后一次批量查出,不随条数增长。
|
||||
- `keyword` 不匹配团期号;按团期号搜要另提需求。
|
||||
|
||||
---
|
||||
|
||||
### 2. 手动新增订单待办 `POST /v3/admin/order-todos/manual`
|
||||
|
||||
**VO**: `ManualOrderTodoCreateReqVO` → `Result<OrderTodoRespVO>`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师给自己名下的订单加一条手动待办,返回体直接用来在列表顶部插入新卡片,不必再刷新整页。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| orderId | Body | Long | ✅ | 当前账号是该单定制师 | **不变** |
|
||||
| todoLabel | Body | String | ✅ | 非空白 | **不变** |
|
||||
| todoDate | Body | String | ✅ | yyyy-MM-dd | **不变** |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| productName | String | 改前恒 `null`,改后取订单产品名 |
|
||||
| departDate | String | 改前恒 `null`,改后取订单出发日 |
|
||||
| groupBatchId / batchNo / batchName | String | 🆕 同分页接口 |
|
||||
| returnDate / tripDays | String / Integer | 🆕 同分页接口 |
|
||||
| adultCount / childCount / youngChildCount / babyCount / roomCount | Integer | 🆕 同分页接口 |
|
||||
| 其余字段 | — | **不变** |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"orderId": "2104839729176514562",
|
||||
"todoLabel": "出发前一天电话确认集合地点与证件",
|
||||
"todoDate": "2026-10-31"
|
||||
}
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"todoId": "2106307263901954050",
|
||||
"orderId": "2104839729176514562",
|
||||
"orderNo": "HL20260929154432061",
|
||||
"teamNo": "26-6559",
|
||||
"productName": "jw测试产品",
|
||||
"departDate": "2026-11-01",
|
||||
"returnDate": "2026-11-07",
|
||||
"tripDays": 7,
|
||||
"groupBatchId": "2104839654727618562",
|
||||
"batchNo": "T26-3963",
|
||||
"batchName": "11月1日额济纳胡杨林深秋4日游",
|
||||
"adultCount": 3,
|
||||
"childCount": 0,
|
||||
"youngChildCount": 0,
|
||||
"babyCount": 0,
|
||||
"roomCount": 2,
|
||||
"todoType": "MANUAL",
|
||||
"todoTypeName": "手动待办",
|
||||
"todoLabel": "出发前一天电话确认集合地点与证件",
|
||||
"todoSource": "MANUAL",
|
||||
"todoSourceName": "手动添加",
|
||||
"todoDate": "2026-10-31",
|
||||
"actionType": "manual",
|
||||
"status": "PENDING",
|
||||
"statusName": "待处理"
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
订单查不到(已删)时订单侧字段全部为 `null`,不报错(与改前 `teamNo` 的口径一致)。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
校验与判权不变:不是该单定制师返回 `581707`,缺订单 / 标题 / 日期分别返回 `581702` / `581704` / `581705`。
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 581707,
|
||||
"message": "仅订单定制师可维护该订单待办",
|
||||
"data": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- 只读订单当前值,不在待办上存快照:订单人数或日期后来改了,待办返回跟着变。
|
||||
|
||||
---
|
||||
|
||||
### 3. 修改手动订单待办 `PUT /v3/admin/order-todos/:todoId`
|
||||
|
||||
**VO**: `ManualOrderTodoUpdateReqVO` → `Result<OrderTodoRespVO>`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师改手动待办的标题或日期,返回体用来就地刷新卡片。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| todoId | Path | Long | ✅ | 本人的手动待办 | **不变** |
|
||||
| todoLabel | Body | String | ❌ | 非空白才生效 | **不变** |
|
||||
| todoDate | Body | String | ❌ | yyyy-MM-dd | **不变** |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| productName / departDate | String | 改前恒 `null`,改后有值 |
|
||||
| 10 个新增字段 | — | 🆕 同分页接口 |
|
||||
| 其余字段 | — | **不变** |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```json
|
||||
{
|
||||
"todoDate": "2026-10-30"
|
||||
}
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"todoId": "2106307263901954050",
|
||||
"teamNo": "26-6559",
|
||||
"productName": "jw测试产品",
|
||||
"departDate": "2026-11-01",
|
||||
"returnDate": "2026-11-07",
|
||||
"tripDays": 7,
|
||||
"groupBatchId": "2104839654727618562",
|
||||
"batchNo": "T26-3963",
|
||||
"batchName": "11月1日额济纳胡杨林深秋4日游",
|
||||
"adultCount": 3,
|
||||
"roomCount": 2,
|
||||
"todoDate": "2026-10-30",
|
||||
"status": "PENDING",
|
||||
"statusName": "待处理"
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
标题和日期都不传时原样返回(不变),新增字段照常有值。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
不是本人的手动待办返回 `581701`(不变)。
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 581701,
|
||||
"message": "无权操作该待办",
|
||||
"data": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- 系统待办不能用本接口改(不变)。
|
||||
|
||||
---
|
||||
|
||||
### 4. 完成手动订单待办 `PUT /v3/admin/order-todos/:todoId/complete`
|
||||
|
||||
**VO**: `Long todoId` → `Result<OrderTodoRespVO>`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师把手动待办标为已完成,返回体用来就地刷新卡片状态。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| todoId | Path | Long | ✅ | 本人的手动待办 | **不变** |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| productName / departDate | String | 改前恒 `null`,改后有值 |
|
||||
| 10 个新增字段 | — | 🆕 同分页接口 |
|
||||
| status | String | `COMPLETED`(不变) |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```http
|
||||
PUT /v3/admin/order-todos/2106307263901954050/complete HTTP/1.1
|
||||
Authorization: Bearer <定制师 token>
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"todoId": "2106307263901954050",
|
||||
"teamNo": "26-6559",
|
||||
"productName": "jw测试产品",
|
||||
"departDate": "2026-11-01",
|
||||
"returnDate": "2026-11-07",
|
||||
"tripDays": 7,
|
||||
"batchNo": "T26-3963",
|
||||
"adultCount": 3,
|
||||
"roomCount": 2,
|
||||
"status": "COMPLETED",
|
||||
"statusName": "已处理"
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
已完成的再点完成,原样返回(不变)。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 581701,
|
||||
"message": "无权操作该待办",
|
||||
"data": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- 状态流转与改前相同,本单只扩出参。
|
||||
|
||||
---
|
||||
|
||||
### 5. 重开手动订单待办 `PUT /v3/admin/order-todos/:todoId/reopen`
|
||||
|
||||
**VO**: `Long todoId` → `Result<OrderTodoRespVO>`
|
||||
|
||||
#### 使用场景
|
||||
|
||||
定制师把已完成的手动待办重新打开,返回体用来就地刷新卡片。
|
||||
|
||||
#### 入参字段表
|
||||
|
||||
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|
||||
|------|------|------|------|------|------|
|
||||
| todoId | Path | Long | ✅ | 本人的手动待办 | **不变** |
|
||||
|
||||
#### 出参字段表
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| productName / departDate | String | 改前恒 `null`,改后有值 |
|
||||
| 10 个新增字段 | — | 🆕 同分页接口 |
|
||||
| status | String | `PENDING`(不变) |
|
||||
|
||||
#### 请求示例
|
||||
|
||||
```http
|
||||
PUT /v3/admin/order-todos/2106307263901954050/reopen HTTP/1.1
|
||||
Authorization: Bearer <定制师 token>
|
||||
```
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "成功",
|
||||
"data": {
|
||||
"todoId": "2106307263901954050",
|
||||
"teamNo": "26-6559",
|
||||
"productName": "jw测试产品",
|
||||
"departDate": "2026-11-01",
|
||||
"returnDate": "2026-11-07",
|
||||
"tripDays": 7,
|
||||
"batchNo": "T26-3963",
|
||||
"adultCount": 3,
|
||||
"roomCount": 2,
|
||||
"status": "PENDING",
|
||||
"statusName": "待处理"
|
||||
},
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 空数据 / 降级响应
|
||||
|
||||
待处理的再点重开,原样返回(不变)。
|
||||
|
||||
#### 错误响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 581701,
|
||||
"message": "无权操作该待办",
|
||||
"data": null,
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
#### 业务边界
|
||||
|
||||
- 状态流转与改前相同,本单只扩出参。
|
||||
|
||||
---
|
||||
|
||||
## 四、契约约束与正确调用方式
|
||||
|
||||
- 展示团期号读 `batchNo`,**不要**再用 `teamNo` 冒充团期号;`teamNo` 是户团号,同一团期里每户不同。
|
||||
- 判断是不是团期子订单看 `groupBatchId` 是否为空,不要看 `batchNo`(团期软删时 `batchNo` 为空但仍是团期子订单)。
|
||||
- 出发至返回日期用 `departDate` ~ `returnDate`,天数用 `tripDays`,不要自己按日期差推算。
|
||||
- 新增字段都是订单当前值,不是待办生成时的快照。
|
||||
|
||||
---
|
||||
|
||||
## 五、数据库行为
|
||||
|
||||
- 零 DDL、零数据迁移、零新增写入。
|
||||
- 分页联查 `order_main` 时多取 8 列(返团日期、行程天数、团期 ID、四档人数、房数);团期号对整页去重后的团期 ID 做一次主键批量查询。
|
||||
- 手动待办四个写接口的写库逻辑不变;返回前按订单 ID 读一次订单,团期子订单再按主键读一次团期。
|
||||
|
||||
---
|
||||
|
||||
## 六、边界行为
|
||||
|
||||
- 散客单:`groupBatchId` / `batchNo` / `batchName` 为 `null`,不查团期表,其余字段照填。
|
||||
- 团期已软删:`batchNo` / `batchName` 为 `null`,`groupBatchId` 照常返回。
|
||||
- 订单的 `roomCount` 创单时未定的为 `null`,原样透出。
|
||||
- `teamNo` 订金未付时仍为 `null`,不回退订单号(#7537 口径不变)。
|
||||
|
||||
## 六.6、修改前后对比
|
||||
|
||||
| 场景 | 改前 | 改后 |
|
||||
|---|---|---|
|
||||
| 分页里的团期子订单待办 | 只有户团号、产品名、出发日 | 另有团期号、团期名、返团日期、行程天数、四档人数、房数 |
|
||||
| 分页里的散客单待办 | 同上 | 团期三项为 `null`,其余新字段有值 |
|
||||
| 手动待办新增 / 修改 / 完成 / 重开的返回 | `productName`、`departDate` 恒 `null` | 有值,并带全部新字段 |
|
||||
| `teamNo` | 户团号 | 户团号,取值不变 |
|
||||
|
||||
## 六.7、影响评估
|
||||
|
||||
- **是否破坏向后兼容**:否,纯新增字段;`productName` / `departDate` 由 `null` 变为有值。
|
||||
- **前端是否必须同步上线**:否。不改前端时展示与改前相同;要显示团期号与行程人数需前端配合。
|
||||
- **性能**:分页每页最多多一次主键批量查询,手动待办写接口多一到两次主键查询。
|
||||
- **回滚**:revert PR #8761 后重新部署 order-v3。
|
||||
|
||||
---
|
||||
|
||||
## 七、不影响范围
|
||||
|
||||
- 待办的生成、关闭、打回与指派逻辑:不变。
|
||||
- 各接口入参、判权、错误码:不变。
|
||||
- 手动待办订单下拉 `GET /v3/admin/order-todos/order-options`、取消手动待办 `DELETE /v3/admin/order-todos/:todoId`:不变。
|
||||
- 小程序端:无影响。
|
||||
|
||||
---
|
||||
|
||||
## 八、测试环境已验证
|
||||
|
||||
**环境**:TEST(`https://api.test.1814.love`) **验证时间**:2026-10-03 16:55~16:58
|
||||
**构建身份**:order-v3 部署 `dev-v3 @ d778c9a71`(含本单合并提交 `b49ad81ee`),16:52 两实例滚动完成。探针:部署前分页返回无 `batchNo` 键,部署后每条都有。
|
||||
**身份**:自签定制师 token 直打网关,账号 `cw_test_7443`(名下 108 条待办,团期子订单 81 条分属 11 个团期,散客单 27 条)。
|
||||
|
||||
### 8.1 分页逐条对库
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 团期子订单 81 条 | `batchNo` / `batchName` 与 `order_group_batch` 一致、均为 `T` 开头;返团日期、天数、四档人数、房数与 `order_main` 一致;差异 0 条 |
|
||||
| 散客单 27 条 | 团期三项全为 `null`;产品名、出发返团日期、天数、人数、房数无一为 `null` 且与订单一致;差异 0 条 |
|
||||
| `teamNo` | 部署前快照与部署后 108/108 条逐字一致;产品名、出发日也一致 |
|
||||
|
||||
### 8.2 手动待办四个返回
|
||||
|
||||
在团期子订单 `HL20260929154432061`(户团号 26-6559,团期 T26-3963,3 成人 2 间房)上依次新增 → 修改日期 → 完成 → 重开,四个返回的产品名、出发日与 10 个新字段逐字段对库差异 0。验完已调取消接口收尾(库内该行 `CANCELLED`)。
|
||||
|
||||
### 8.3 团期号只查一次
|
||||
|
||||
开日志流后各发一页请求,抓同一实例上的 SQL:
|
||||
|
||||
| 页 | 团期子订单 / 团期数 | 团期表查询 |
|
||||
|---|---|---|
|
||||
| 部署前 10 条 | — | 0 次 |
|
||||
| 部署后 10 条 | 4 条 / 1 个团期 | 1 次,`IN (?)` |
|
||||
| 部署后 50 条 | 32 条 / 7 个团期 | 1 次,`IN (7 个 ?)` |
|
||||
|
||||
### 8.4 反例
|
||||
|
||||
| 操作 | 结果 |
|
||||
|---|---|
|
||||
| 不带 token 调分页 | `code 401`「缺少有效的 Authorization 头」 |
|
||||
| 另一位定制师修改上面那条手动待办 | `581701`「无权操作该待办」 |
|
||||
|
||||
### 本地证据
|
||||
|
||||
| 项 | 读数 |
|
||||
|---|---|
|
||||
| 待办 4 个测试类定向 | 37/0/0/0(新增 11 例) |
|
||||
| 变异 | 三处同时变异(去掉团期 ID 去重、去掉单对象团期回填、去掉联查 `trip_days`),恰好对应的 6 例红(去重 1、四个单对象动作 4、联查投影 1),其余不受影响;已还原 |
|
||||
| order-v3 全量(有 Docker,两半) | A 10955 / 4 失败,B 4933 / 2 失败 / 7 跳过;1142 个可执行测试类全部有报告;6 条失败在基底 `954d43705` 上逐条复现,本单零新增 |
|
||||
|
||||
---
|
||||
|
||||
## 十、相关文档
|
||||
|
||||
- Issue `#8749`;PR `#8761`
|
||||
- 需求:`docs/group/实施单/15-定制师代办与导摄物资分工.html` 规则 3、AC-TD-03
|
||||
- 前置:#7537(单对象路径补 `teamNo`)、#8497(团期号改 T26-xxxx)、#7142(订单详情 `main.batchNo` / `main.batchName`)
|
||||
|
||||
## 关联 / 联系人
|
||||
|
||||
### 链接
|
||||
|
||||
- **Issue**: [#8749](https://git.1814.love/wx/HL/issues/8749)
|
||||
- **PR**: [#8761](https://git.1814.love/wx/HL/pulls/8761)
|
||||
- **Merge commit**: [b49ad81ee](https://git.1814.love/wx/HL/commit/b49ad81ee)
|
||||
|
||||
### 联系人
|
||||
|
||||
- **后端负责人**: @jw
|
||||
在新工单中引用
屏蔽一个用户