changelog(7189): 按门禁补齐 export/board/products 逐接口自包含段落与 TODO 反引号

这个提交包含在:
API Changelog Bot
2026-09-07 00:55:36 +08:00
父节点 b794316e5a
当前提交 f53f52ca15
@@ -49,7 +49,7 @@ wx 2026-09-06 看测试服「团期订单」看板:产品「冻干粉发短信
| 接口 | 结果 | | 接口 | 结果 |
|---|---| |---|---|
| 分页 `scope=ALL` | 8 行出发日升序;10-01 行 `groupBatchId` 非空 `batchLabel="7"`;其余 7 行 `groupBatchId=null` `batchStatus=RECRUITING` `chips` 六项 TODO | | 分页 `scope=ALL` | 8 行出发日升序;10-01 行 `groupBatchId` 非空 `batchLabel="7"`;其余 7 行 `groupBatchId=null` `batchStatus=RECRUITING` `chips` 六项 `TODO` |
| 分页默认(=ONGOING) | 2 行(10-01、12-01);`scope=FINISHED` 6 行 | | 分页默认(=ONGOING) | 2 行(10-01、12-01);`scope=FINISHED` 6 行 |
| summary 默认 | `RECRUIT=1 FORMED=1 其余 0 total=2`;`scope=ALL` → `total=8 RECRUIT=7 FORMED=1` | | summary 默认 | `RECRUIT=1 FORMED=1 其余 0 total=2`;`scope=ALL` → `total=8 RECRUIT=7 FORMED=1` |
| products | 该产品 `batchCount=8` | | products | 该产品 `batchCount=8` |
@@ -109,7 +109,7 @@ wx 2026-09-06 看测试服「团期订单」看板:产品「冻干粉发短信
| data.records[].departDate / endDate / enrollDeadline | String(yyyy-MM-dd) | 命中行 / 未建团行 product 实时;孤儿行快照 | | data.records[].departDate / endDate / enrollDeadline | String(yyyy-MM-dd) | 命中行 / 未建团行 product 实时;孤儿行快照 |
| data.records[].maxRooms / enrolledRooms / remainRooms | Integer | 未建团行:`enrolledRooms` = product 占房数(含线下占位),`remainRooms` = maxRooms − 占房(不限房 null) | | data.records[].maxRooms / enrolledRooms / remainRooms | Integer | 未建团行:`enrolledRooms` = product 占房数(含线下占位),`remainRooms` = maxRooms − 占房(不限房 null) |
| data.records[].orderCount / receivableAmount / receivedAmount | Integer / String | 未建团行 0 / "0.00" / "0.00" | | data.records[].orderCount / receivableAmount / receivedAmount | Integer / String | 未建团行 0 / "0.00" / "0.00" |
| data.records[].chips | Object | hotel / vehicle / guide / photographer / insurance / contract 六项;**子订单为 0 的行六项固定 TODO(不再为 null)** | | data.records[].chips | Object | hotel / vehicle / guide / photographer / insurance / contract 六项;**子订单为 0 的行六项固定 `TODO`(不再为 null)** |
| 其余字段 | — | 不变 | | 其余字段 | — | 不变 |
#### 请求示例 #### 请求示例
@@ -321,7 +321,7 @@ Authorization: Bearer <token>
### 3. 团期看板导出 `GET /v3/admin/order/group-batch/export` ### 3. 团期看板导出 `GET /v3/admin/order/group-batch/export`
**VO**: CSV 附件(查询参数 productId / scope / month / keyword / opsStage,无请求 VO) **VO**: `无请求 VO(查询参数 productId / scope / month / keyword / opsStage) → CSV 文件流 text/csv`
#### 使用场景 #### 使用场景
@@ -334,9 +334,13 @@ Authorization: Bearer <token>
| scope | query | String | 否 | ONGOING / FINISHED / ALL | **新增**。缺省规则同 GB-ADM-001;按 product 实时返团日过滤 | | scope | query | String | 否 | ONGOING / FINISHED / ALL | **新增**。缺省规则同 GB-ADM-001;按 product 实时返团日过滤 |
| productId / month / keyword / opsStage | query | — | 否 | 不变 | 不变 | | productId / month / keyword / opsStage | query | — | 否 | 不变 | 不变 |
#### 出参 #### 出参 `CSV 文件流`
CSV 字节流(BOM + 表头),**不含未建团行**(只导有团期的行);行数 = 同 scope 下 GB-ADM-001 中 `groupBatchId` 非空的行数(例外:产品侧班期已删且 0 活跃单的残留团期会出现在导出、不出现在列表)。 | 字段 | 类型 | 说明 |
|------|------|------|
| (响应体) | text/csv | BOM + 表头 `团期号,期号,日期,出团日,满团名额,已售,剩余,状态,子订单数,整团应收`,列与改前一致 |
| 行集 | — | **不含未建团行**(只导有团期的行);行数 = 同 scope 下 GB-ADM-001 中 `groupBatchId` 非空的行数(例外:产品侧班期已删且 0 活跃单的残留团期会出现在导出、不出现在列表) |
| 日期列 | — | 行内「日期 / 出团日」仍是订单快照;`scope` 的未结束判定用 product 实时返团日(AC-14 实测:改期后行进入导出,日期列仍显快照) |
#### 请求示例 #### 请求示例
@@ -348,7 +352,16 @@ Authorization: Bearer <token>
#### 响应示例 #### 响应示例
实测:`scope=ALL` 表头 + 1 行(10-01 团期);默认 ONGOING 1 行;`scope=FINISHED` 0 行。 文件流(Content-Type: text/csv; Content-Disposition: attachment),JSON 仅示意:
```json
{
"code": 200,
"message": "文件流(text/csv),实际响应体为下方 CSV"
}
```
实测(2026-09-07):`scope=ALL` 表头 + 1 行(10-01 团期);默认 ONGOING 1 行;`scope=FINISHED` 0 行。
```text ```text
团期号,期号,日期,出团日,满团名额,已售,剩余,状态,子订单数,整团应收 团期号,期号,日期,出团日,满团名额,已售,剩余,状态,子订单数,整团应收
@@ -357,11 +370,20 @@ Q202610012052935476548939777,没,那你,2026-10-01~2026-10-03,2026-10-01,8,4,4
#### 空数据 / 降级响应 #### 空数据 / 降级响应
无命中只返回表头一行。 无命中只返回表头一行;命中 > 2000 行返回 `589517`。
```json
{
"code": 589517,
"message": "导出行数超过上限,请缩小筛选范围",
"data": null,
"success": false
}
```
#### 错误响应 #### 错误响应
`productId` 有值且 `scope≠ALL` 时会调产品域取实时返团日,产品域不可用返回 589515(改前导出不依赖产品域);超过 2000 行 589517。 `productId` 有值且 `scope≠ALL` 时会调产品域取实时返团日,产品域不可用返回 589515(改前导出不依赖产品域)。
```json ```json
{ {
@@ -394,7 +416,13 @@ Q202610012052935476548939777,没,那你,2026-10-01~2026-10-03,2026-10-01,8,4,4
#### 出参 `Result<List<GroupBatchBoardItemRespVO>>` #### 出参 `Result<List<GroupBatchBoardItemRespVO>>`
字段不变;行为变化:产品班期全部删除时不再提前返回空,仍有活跃子订单的孤儿行照常输出(`productBatchRemoved=true`)。 | 字段 | 类型 | 说明 |
|------|------|------|
| data[] | Array | 行集:命中 / 未建团 / 孤儿三类行,出发日升序;本单结构不变 |
| data[].groupBatchId | String(Long) | 未建团行 null(不变) |
| data[].productBatchRemoved | Boolean | 孤儿行 true;**行为变化**:产品班期全部删除时不再提前返回空,仍有活跃子订单的孤儿行照常输出 |
| data[].batchLabel / batchName / batchNo / departureDate / endDate | String | 命中 / 未建团行 product 实时,孤儿行快照(不变) |
| 其余字段 | — | 不变 |
#### 请求示例 #### 请求示例
@@ -448,9 +476,27 @@ Authorization: Bearer <token>
产品无班期且无团期 → `data=[]`。 产品无班期且无团期 → `data=[]`。
```json
{
"code": 200,
"message": "成功",
"data": [],
"success": true
}
```
#### 错误响应 #### 错误响应
`589515` 产品域不可用;`589507` 无权限。 ```json
{
"code": 589515,
"message": "获取团期产品列表失败,请稍后重试",
"data": null,
"success": false
}
```
另:`589507` 无操作权限。
#### 业务边界 #### 业务边界
@@ -466,7 +512,9 @@ Authorization: Bearer <token>
#### 入参 #### 入参
无。 | 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|------|------|------|------|------|------|
| (无) | — | — | — | — | 无查询参数,返回当前账号可见的全部团期产品 |
#### 出参 `Result<List<GroupBatchProductItemRespVO>>` #### 出参 `Result<List<GroupBatchProductItemRespVO>>`
@@ -517,9 +565,25 @@ Authorization: Bearer <token>
无团期产品 → `data=[]`;产品无班期 → `batchCount=0`。 无团期产品 → `data=[]`;产品无班期 → `batchCount=0`。
```json
{
"code": 200,
"message": "成功",
"data": [],
"success": true
}
```
#### 错误响应 #### 错误响应
`589515` 产品域不可用。 ```json
{
"code": 589515,
"message": "获取团期产品列表失败,请稍后重试",
"data": null,
"success": false
}
```
#### 业务边界 #### 业务边界
@@ -544,7 +608,7 @@ Authorization: Bearer <token>
| ❌ 只给列表传 scope、统计条不传 | 统计条会按默认 ONGOING,与列表对不上账 | | ❌ 只给列表传 scope、统计条不传 | 统计条会按默认 ONGOING,与列表对不上账 |
| ❌ 用列表 total 当页签期数 | 默认 ONGOING 不含已结束期;徽标用 `batchCount` | | ❌ 用列表 total 当页签期数 | 默认 ONGOING 不含已结束期;徽标用 `batchCount` |
| ❌ 对 `groupBatchId=null` 的行调详情 / 子订单 / 团期操作 | 后端 589500 团期不存在 | | ❌ 对 `groupBatchId=null` 的行调详情 / 子订单 / 团期操作 | 后端 589500 团期不存在 |
| ❌ 把 `chips` 为 TODO 的未建团行当「待办」 | 未建团行没有子订单,六项 TODO 只是零户占位 | | ❌ 把 `chips` 为 `TODO` 的未建团行当「待办」 | 未建团行没有子订单,六项 `TODO` 只是零户占位 |
### 切换状态时的必要动作 ### 切换状态时的必要动作
@@ -593,7 +657,7 @@ Authorization: Bearer <token>
| GB-ADM-001 / 009 / 008 / board `scope` | 无 | 新增(缺省按 productId:有 → ONGOING,无 → ALL;board → ALL) | | GB-ADM-001 / 009 / 008 / board `scope` | 无 | 新增(缺省按 productId:有 → ONGOING,无 → ALL;board → ALL) |
| GB-ADM-001 `records[].productBatchStatus / productBatchStatusLabel / productBatchRemoved` | 无 | 新增 | | GB-ADM-001 `records[].productBatchStatus / productBatchStatusLabel / productBatchRemoved` | 无 | 新增 |
| GB-ADM-001 `records[].groupBatchId` | 恒非空 | 未建团行 null | | GB-ADM-001 `records[].groupBatchId` | 恒非空 | 未建团行 null |
| GB-ADM-001 `records[].chips`(0 子订单行) | null | 六项 TODO | | GB-ADM-001 `records[].chips`(0 子订单行) | null | 六项 `TODO` |
| GB-ADM-001 `records[].batchNo / batchName / 日期`(命中行) | 订单快照 | product 实时 | | GB-ADM-001 `records[].batchNo / batchName / 日期`(命中行) | 订单快照 | product 实时 |
| GB-ADM-000 `data[].batchCount` | 订单侧团期数 | product 侧未删班期数 | | GB-ADM-000 `data[].batchCount` | 订单侧团期数 | product 侧未删班期数 |
| product `GET /internal/product/group/all` `batchCount`、`/group/{productId}/detail` `batches[].occupiedRooms / manualOrderCount` | 无 | 新增(内部接口,前端不直接调) | | product `GET /internal/product/group/all` `batchCount`、`/group/{productId}/detail` `batches[].occupiedRooms / manualOrderCount` | 无 | 新增(内部接口,前端不直接调) |