hl-api-changelog/changelogs-v2/2026-06/07_3560_团期级staff两级配置-新增接口-管理后台.md
yaosutu d39345076e docs(changelog/order-v3): 团期级 staff 两级配置(团期共享+订单专属)#3560
新增 GET/PUT /v3/admin/group-batch/{groupBatchId}/staff(团期配置+扇出);
order/{id}/staff 出参加 source,团期共享行订单侧只读(582109)。管理后台 v3。
2026-06-07 14:47:31 +08:00

168 行
7.6 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 团期级 staff 两级配置(团期共享 + 订单专属)
> 端类型:**管理后台**v3变更类型**新增接口 + 修改接口**服务hl-order-service-v3
> Issue #3560 PR #3567 日期2026-06-07
## ① 接口背景
团期产品小蒙马等同一团期groupBatchId下多个订单**共享同一批出团团队**(领队/摄影/司导)。原先 staff 只能逐订单配置(`order_staff_assignment`),同团期 N 个订单要重复配 N 次。
本次新增**团期级**配置:按团期配一次,后端自动扇出到团内所有订单;同时保留**订单级专属**配置,两级叠加。前端形成两个配置入口:
- 独立的「团期 staff 配置页」(按 groupBatchId 配,本次新增接口)
- 订单详情「staff 配置」(订单专属,沿用原接口,出参新增 source 字段区分来源)
## ② 变更清单
| 接口 | 类型 | 说明 |
|---|---|---|
| `GET /v3/admin/group-batch/{groupBatchId}/staff` | 新增 | 查团期 staff 配置列表 |
| `PUT /v3/admin/group-batch/{groupBatchId}/staff` | 新增 | 全量保存团期配置 + 扇出团内订单 |
| `GET /v3/admin/order/{id}/staff` | 修改 | 出参新增 `source` 字段GROUP_BATCH/ORDER |
| `DELETE /v3/admin/order/{id}/staff/{staffAssignmentId}` | 行为变更 | 团期来源行source=GROUP_BATCH禁止在订单侧删除582109 |
| `PUT /v3/admin/order/{id}/staff/{staffAssignmentId}` | 行为变更 | 团期来源行禁止在订单侧编辑582109 |
## ③ 接口详情
### 接口 A查询团期 staff 配置
`GET /v3/admin/group-batch/{groupBatchId}/staff`
打开「团期 staff 配置页」时调用,回填当前团期已配的共享 staff。
### 接口 B保存团期 staff 配置(全量 + 扇出)
`PUT /v3/admin/group-batch/{groupBatchId}/staff`
**全量覆盖语义**:传入列表即为最终状态,后端软删旧配置后插入新配置。保存成功后**异步**扇出到团内所有活跃订单的 `order_staff_assignment`source=GROUP_BATCH,订单专属行source=ORDER不受影响。
### 接口 C订单 staff 列表(出参加字段)
`GET /v3/admin/order/{id}/staff` 出参每项新增 `source`,前端据此区分「团期共享」(置灰、不可在订单侧增删改)与「订单专属」(可增删改)。
## ④ 入参
### 接口 AGET
| 参数 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| groupBatchId | path | Long | 是 | 团期批次 ID |
### 接口 BPUT
路径参数:`groupBatchId`Long,必填
请求体 `BatchStaffConfigReqVO`
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
| staffList | List\<Item\> | 是 | staff 配置**全集**(全量覆盖,传空数组=清空团期配置) |
`Item`
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
| staffId | Long | 是 | 用户域员工 ID |
| staffRole | String | 是 | 员工角色(见枚举) |
| sortOrder | Integer | 否 | 展示排序(默认 0 |
| remark | String | 否 | 备注≤500 |
> 注:`staffName` / `staffPhone` / `avatarUrl` 由后端 Feign 反查冻结快照,**前端不传**。
**入参示例**
```json
{
"staffList": [
{"staffId": 40001, "staffRole": "LEADER", "sortOrder": 0, "remark": "首席领队"},
{"staffId": 40002, "staffRole": "PHOTOGRAPHER", "sortOrder": 1, "remark": "跟拍摄影"}
]
}
```
## ⑤ 出参
### 接口 A`Result<List<BatchStaffItemVO>>`
### 接口 B`Result<BatchStaffConfigRespVO>`
`BatchStaffConfigRespVO`
| 字段 | 类型 | 含义 |
|---|---|---|
| staffList | List\<BatchStaffItemVO\> | 保存后当前团期配置快照 |
| affectedOrderCount | int | 扇出影响的活跃订单数(已触发异步写入) |
`BatchStaffItemVO`
| 字段 | 类型 | 含义 |
|---|---|---|
| id | Long | 记录 IDbatch_staff_id |
| staffId | Long | 用户域员工 ID |
| staffRole | String | 员工角色 |
| staffName | String | 员工姓名(快照) |
| staffPhone | String | 员工手机(脱敏前 3 后 4 |
| avatarUrl | String | 头像 URL快照 |
| sortOrder | Integer | 展示排序 |
| remark | String | 备注 |
### 接口 C`GET /order/{id}/staff` 出参 `StaffAssignmentVO` 新增字段
| 字段 | 类型 | 含义 |
|---|---|---|
| source | String | **新增**。GROUP_BATCH=团期共享(不可在订单侧改) / ORDER=订单专属 |
**接口 B 出参示例**
```json
{
"code": 200, "message": "成功", "success": true,
"data": {
"staffList": [
{"id": 770001, "staffId": 40001, "staffRole": "LEADER", "staffName": "刘领队",
"staffPhone": "138****6677", "avatarUrl": "https://oss/40001.jpg", "sortOrder": 0, "remark": "首席领队"}
],
"affectedOrderCount": 3
}
}
```
## ⑥ 枚举 / 数据字典
| 枚举 | 取值 | 含义 |
|---|---|---|
| staffRole | LEADER / DRIVER / PHOTOGRAPHER / OTHER | 领队 / 司机 / 摄影师 / 其他 |
| source | GROUP_BATCH / ORDER | 团期共享 / 订单专属 |
## ⑦ 错误码
| code | message | 触发 |
|---|---|---|
| 582109 | 团期共享 staff 不可在订单侧增删改,请到团期配置页操作 | 对 source=GROUP_BATCH 的行调订单侧 DELETE/PUT staff |
| 400 | 参数校验失败 | staffId/staffRole 缺失等 |
| 401 | 缺少有效的 Authorization 头 | 未携带 token |
## ⑧ 示例(典型 / 边界 / 异常)
- **典型**:团期配「领队+摄影」→ 保存返回 affectedOrderCount=3团内 3 个活跃订单已扇出)。
- **边界**staffList 传 `[]` → 清空该团期配置,并扇出删除团内订单的所有 GROUP_BATCH 行(订单专属行保留)。
- **异常**:在订单详情对一个「团期共享」的领队点删除 → 返回 582109,前端应禁用团期行的删除/编辑按钮。
## ⑨ 业务边界
- **全量覆盖**:保存即最终状态,未在列表中的旧团期 staff 会被软删并从团内订单移除。
- **扇出范围**:仅团内**活跃**订单(已完成 / 已取消订单不被扇出刷新,保留历史团队记录)。
- **两级叠加**:订单详情 staff = 团期共享GROUP_BATCH + 订单专属ORDER,同一员工去重。
- **下单自动写入**:团期已配 staff 后新下单的订单,创建时自动带上团期 staff。
- **异步最终一致**扇出为异步,保存接口返回后团内订单的更新可能有秒级延迟affectedOrderCount 表示已触发的订单数)。
## ⑩ 修改前后对比
| | 修改前 | 修改后 |
|---|---|---|
| 团期共享配置 | 无,同团期逐单重复配 | 团期配一次自动扇出团内 |
| order/{id}/staff 出参 | 无 source | 每项带 sourceGROUP_BATCH/ORDER |
| 订单侧删/改团期行 | 可删(会造成与团期不一致) | 禁止582109,引导去团期页 |
## ⑪ 影响评估 / 回滚
- **存量兼容**`order_staff_assignment` 加 source 列默认 ORDER,存量行全部视为订单专属,原订单 staff 展示不变。
- **前端必改**:订单 staff 列表需按 source 渲染(团期行置灰禁操作);新增团期配置页对接 A/B 接口。
- **回滚**:接口为新增 + 加字段,回滚后前端忽略 source 字段即可,无破坏性。
## ⑫ 注意事项
- 团期配置页的「团期信息」(团期号/出发日期/产品)由**产品服务 admin 接口**提供,本接口只管 staff。
- 保存后 affectedOrderCount 是「已触发异步写入」数,非「已写完」数;前端如需精确状态可重查订单。
- staffPhone 出参已脱敏(前 3 后 4,列表展示直接用即可。
## ⑬ 关联 / 联系人
- Issuehttps://git.1814.love:8443/wx/HL/issues/3560
- PRhttps://git.1814.love:8443/wx/HL/pulls/3567
- 后端负责人:腰苏图(订单 v3