hl-api-changelog/2026-03/17_0928/hl-resource-service.md
2026-03-17 09:28:57 +08:00

6999 行
267 KiB
Markdown

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

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

# 资源服务 API 文档
**服务**: `hl-resource-service`
**接口总数**: 183
## 目录
- **住宿标签管理** (8 个接口)
- **住宿管理** (10 个接口)
- **增值服务管理** (9 个接口)
- **备品标签管理** (8 个接口)
- **备品管理** (9 个接口)
- **房型价格日历** (4 个接口)
- **房型管理** (7 个接口)
- **景区价格日历** (4 个接口)
- **景区季节内容** (3 个接口)
- **景区标签管理** (8 个接口)
- **景区管理** (9 个接口)
- **服务人员价格日历** (4 个接口)
- **服务人员标签管理** (8 个接口)
- **服务人员管理** (9 个接口)
- **服务价格日历** (4 个接口)
- **服务标签管理** (8 个接口)
- **游玩项目价格日历** (4 个接口)
- **游玩项目标签管理** (8 个接口)
- **游玩项目管理** (9 个接口)
- **费用项价格日历** (3 个接口)
- **费用项管理** (8 个接口)
- **车型价格日历** (4 个接口)
- **车型标签管理** (8 个接口)
- **车型管理** (10 个接口)
- **餐厅标签管理** (8 个接口)
- **餐厅管理** (9 个接口)
---
## 住宿标签管理
### `PUT` /admin/hotel/item/{hotelId}/tags
**设置住宿标签**
全量替换指定住宿的标签列表。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**请求体** `酒店标签更新请求_1`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表全量替换 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/hotel/items/batch/tags
**批量添加/移除标签**
对多个住宿批量添加/移除标签。增量操作,不影响未指定的标签。
**请求体** `酒店批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `hotelIds` | `string[]` | 是 | 酒店ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/hotel/tag
**创建标签**
创建预设标签,标签名不可重复。
**请求体** `酒店标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«酒店标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/hotel/tag/adhoc
**查找或创建自定义标签**
按名称查找标签,不存在则自动创建。用于住宿编辑时快速输入新标签。
**请求体** `酒店标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«酒店标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/hotel/tag/{tagId}
**更新标签**
修改标签名称或颜色,所有关联住宿自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `酒店标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«酒店标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/hotel/tag/{tagId}
**删除标签**
删除标签并解除所有住宿与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/hotel/tags
**预设标签列表(分页)**
分页查询住宿标签库,支持按关键词搜索。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«酒店标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«酒店标签VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `酒店标签VO[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/hotel/tags/all
**所有标签列表**
不分页返回所有标签,用于住宿编辑时的标签选择。
**响应** `统一响应结果«List«酒店标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店标签VO[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 住宿管理
### `POST` /admin/hotel/item
**创建住宿**
新建住宿资源(酒店/民宿/营地等),初始状态为草稿(status=0)。创建后需通过「提交启用/禁用审批」走企微OA审批流程才能上架。住宿下可继续创建房型RoomType,房型有独立的价格日历。
**关联字典**
- hotel_type住宿类型表单选择
- hotel_star_level酒店星级表单选择
- hotel_facility酒店设施表单多选
**请求体** `酒店创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | 是 | 详细地址 |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `checkInNotes` | `string` | | 入住须知 |
| `checkInTime` | `string` | | 入住时间 |
| `checkOutTime` | `string` | | 退房时间 |
| `city` | `string` | | 城市 |
| `contactPerson` | `string` | | 联系人姓名 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 酒店描述 |
| `diamondLevel` | `int` | | 钻级0-5 |
| `district` | `string` | | 区县 |
| `facilities` | `string` | | 设施配置JSON |
| `highlights` | `string` | | 酒店亮点JSON |
| `hotelType` | `string` | 是 | 住宿类型 |
| `latitude` | `number` | 是 | 纬度 |
| `longitude` | `number` | 是 | 经度 |
| `luggageInfo` | `string` | | 行李服务说明 |
| `name` | `string` | 是 | 酒店名称 |
| `parkingInfo` | `string` | | 停车信息 |
| `province` | `string` | | 省份 |
| `shuttleInfo` | `string` | | 接驳服务说明 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `starLevel` | `int` | | 星级1-5 |
| `subtitle` | `string` | | 副标题 |
| `usageNotes` | `string` | | 使用须知 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«酒店详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `checkInNotes` | `string` | | 入住须知 |
|   `checkInTime` | `string` | | 入住时间 |
|   `checkOutTime` | `string` | | 退房时间 |
|   `city` | `string` | | 城市 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 酒店描述 |
|   `diamondLevel` | `int` | | 钻级0-5 |
|   `district` | `string` | | 区县 |
|   `facilities` | `string` | | 设施配置JSON |
|   `highlights` | `string` | | 酒店亮点JSON |
|   `hotelId` | `string` | | 酒店ID |
|   `hotelType` | `string` | | 住宿类型 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `luggageInfo` | `string` | | 行李服务说明 |
|   `name` | `string` | | 酒店名称 |
|   `parkingInfo` | `string` | | 停车信息 |
|   `province` | `string` | | 省份 |
|   `roomTypeCount` | `int` | | 房型数量 |
|   `shuttleInfo` | `string` | | 接驳服务说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `starLevel` | `int` | | 星级1-5 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `酒店标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/hotel/item/{hotelId}
**住宿详情**
获取住宿完整信息,包含素材URL、标签列表、房型列表等。素材ID会自动解析为OSS访问地址。
**关联字典**
- hotel_type住宿类型详情显示
- hotel_star_level酒店星级详情显示
- hotel_facility酒店设施详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**响应** `统一响应结果«酒店详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `checkInNotes` | `string` | | 入住须知 |
|   `checkInTime` | `string` | | 入住时间 |
|   `checkOutTime` | `string` | | 退房时间 |
|   `city` | `string` | | 城市 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 酒店描述 |
|   `diamondLevel` | `int` | | 钻级0-5 |
|   `district` | `string` | | 区县 |
|   `facilities` | `string` | | 设施配置JSON |
|   `highlights` | `string` | | 酒店亮点JSON |
|   `hotelId` | `string` | | 酒店ID |
|   `hotelType` | `string` | | 住宿类型 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `luggageInfo` | `string` | | 行李服务说明 |
|   `name` | `string` | | 酒店名称 |
|   `parkingInfo` | `string` | | 停车信息 |
|   `province` | `string` | | 省份 |
|   `roomTypeCount` | `int` | | 房型数量 |
|   `shuttleInfo` | `string` | | 接驳服务说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `starLevel` | `int` | | 星级1-5 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `酒店标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/hotel/item/{hotelId}
**更新住宿**
更新住宿基本信息。更新不会改变当前状态,已上架的住宿修改后仍保持上架状态。
**关联字典**
- hotel_type住宿类型表单选择
- hotel_star_level酒店星级表单选择
- hotel_facility酒店设施表单多选
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**请求体** `酒店更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `checkInNotes` | `string` | | 入住须知 |
| `checkInTime` | `string` | | 入住时间 |
| `checkOutTime` | `string` | | 退房时间 |
| `city` | `string` | | 城市 |
| `contactPerson` | `string` | | 联系人姓名 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 酒店描述 |
| `diamondLevel` | `int` | | 钻级0-5 |
| `district` | `string` | | 区县 |
| `facilities` | `string` | | 设施配置JSON |
| `highlights` | `string` | | 酒店亮点JSON |
| `hotelType` | `string` | | 住宿类型 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `luggageInfo` | `string` | | 行李服务说明 |
| `name` | `string` | | 酒店名称 |
| `parkingInfo` | `string` | | 停车信息 |
| `province` | `string` | | 省份 |
| `shuttleInfo` | `string` | | 接驳服务说明 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `starLevel` | `int` | | 星级1-5 |
| `subtitle` | `string` | | 副标题 |
| `usageNotes` | `string` | | 使用须知 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«酒店详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `checkInNotes` | `string` | | 入住须知 |
|   `checkInTime` | `string` | | 入住时间 |
|   `checkOutTime` | `string` | | 退房时间 |
|   `city` | `string` | | 城市 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 酒店描述 |
|   `diamondLevel` | `int` | | 钻级0-5 |
|   `district` | `string` | | 区县 |
|   `facilities` | `string` | | 设施配置JSON |
|   `highlights` | `string` | | 酒店亮点JSON |
|   `hotelId` | `string` | | 酒店ID |
|   `hotelType` | `string` | | 住宿类型 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `luggageInfo` | `string` | | 行李服务说明 |
|   `name` | `string` | | 酒店名称 |
|   `parkingInfo` | `string` | | 停车信息 |
|   `province` | `string` | | 省份 |
|   `roomTypeCount` | `int` | | 房型数量 |
|   `shuttleInfo` | `string` | | 接驳服务说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `starLevel` | `int` | | 星级1-5 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `酒店标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/hotel/item/{hotelId}
**删除住宿**
软删除住宿。仅SUPER_ADMIN或创建者可操作。删除住宿会同时删除其下所有房型和价格日历数据。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/hotel/item/{hotelId}/status
**启用/禁用切换**
直接修改住宿状态跳过审批,仅限SUPER_ADMIN使用。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**请求体** `酒店状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelIds` | `string[]` | | 酒店ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/hotel/item/{hotelId}/submit-approval
**提交启用/禁用审批**
向企微OA提交住宿启用/禁用审批。targetStatus=1申请上架,targetStatus=2申请下架。审批通过后自动更新状态。返回企微审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**请求体** `酒店审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/hotel/items
**住宿列表**
分页查询住宿列表,支持按名称关键词、状态、住宿类型等条件筛选。返回列表摘要信息,按sortOrder倒序+创建时间倒序排列。
**关联字典**
- hotel_type住宿类型筛选+列表显示)
- hotel_star_level酒店星级筛选+列表显示)
- hotel_facility酒店设施列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `city` | `string` | | 城市筛选 | 丽江市 |
| `cityKeyword` | `string` | | 城市/区域关键词模糊搜索(匹配城市名、省份、地址) | 海拉尔 |
| `hotelType` | `string` | | 住宿类型筛选 | HOTEL |
| `keyword` | `string` | | 搜索关键词(名称/地址模糊匹配) | 丽江 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `starLevel` | `integer(int32)` | | 星级筛选 | 5 |
| `status` | `integer(int32)` | | 状态筛选0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID单个 | |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 1,2,3 |
**响应** `统一响应结果«分页结果«酒店列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«酒店列表VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `酒店列表VO[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批单号 |
|     `city` | `string` | | 城市 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `diamondLevel` | `int` | | 钻级0-5 |
|     `hotelId` | `string` | | 酒店ID |
|     `hotelType` | `string` | | 住宿类型 |
|     `name` | `string` | | 酒店名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `roomTypeCount` | `int` | | 房型数量 |
|     `sortOrder` | `int` | | 排序权重 |
|     `starLevel` | `int` | | 星级1-5 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `tags` | `酒店标签VO[]` | | 标签列表 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/hotel/items/all-simple
**所有启用的住宿不分页,仅ID和名称**
返回所有已上架(status=1)的住宿简要信息,用于下拉选择框。每项只含hotelId和name字段。适用于房型管理时选择所属住宿、产品编排时绑定住宿资源等场景。
**响应** `统一响应结果«List«Map«string,object»»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `Map«string,object»[]` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/hotel/items/batch
**批量删除**
批量软删除多个住宿及其关联的房型和价格日历。仅SUPER_ADMIN或创建者可操作。
**请求体** `酒店批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelIds` | `string[]` | 是 | 酒店ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/hotel/items/batch/status
**批量启用/禁用**
批量修改多个住宿的状态,跳过审批流程。hotelIds为住宿ID列表字符串格式
**请求体** `酒店状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelIds` | `string[]` | | 酒店ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
## 增值服务管理
### `POST` /admin/service/item
**创建增值服务**
新建增值服务项目(如保险、签证代办、接送机等),初始状态为草稿(status=0)。支持免费(isPaid=false)和付费两种模式,付费服务有独立的价格日历。需走企微审批上架。
**关联字典**
- service_category服务分类表单选择
- billing_type_service服务计费方式表单选择
- service_unit服务计量单位表单选择
**请求体** `服务项创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `advanceBookingHours` | `int` | | 提前预订时间(小时) |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础价格(元) |
| `billingType` | `string` | | 计费方式 |
| `cancellationPolicy` | `string` | | 取消政策说明 |
| `capacityMax` | `int` | | 最多服务人数 |
| `capacityMin` | `int` | | 最少服务人数 |
| `categoryCode` | `string` | 是 | 分类编码 |
| `city` | `string` | | 城市 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 服务描述 |
| `durationHours` | `number` | | 服务时长(小时) |
| `equipmentList` | `string` | | 设备清单JSON |
| `freeCancelHours` | `int` | | 免费取消期限(小时) |
| `highlights` | `string` | | 服务亮点 |
| `includedItems` | `string` | | 包含项目说明 |
| `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
| `isPaid` | `int` | 是 | 是否收费0=免费 1=收费 |
| `languageSupport` | `string` | | 语言支持 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `name` | `string` | 是 | 服务名称 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `province` | `string` | | 省份 |
| `serviceHours` | `string` | | 服务时段 |
| `serviceProcess` | `string` | | 服务流程说明 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `staffCount` | `int` | | 服务人员数量 |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计价单位 |
| `usageNotes` | `string` | | 使用须知 |
| `vehicleType` | `string` | | 配套车型 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«服务项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务项详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `advanceBookingHours` | `int` | | 提前预订时间(小时) |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础价格(元) |
|   `billingType` | `string` | | 计费方式 |
|   `cancellationPolicy` | `string` | | 取消政策说明 |
|   `capacityMax` | `int` | | 最多服务人数 |
|   `capacityMin` | `int` | | 最少服务人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 服务描述 |
|   `durationHours` | `number` | | 服务时长(小时) |
|   `equipmentList` | `string` | | 设备清单JSON |
|   `freeCancelHours` | `int` | | 免费取消期限(小时) |
|   `highlights` | `string` | | 服务亮点 |
|   `includedItems` | `string` | | 包含项目说明 |
|   `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
|   `isPaid` | `int` | | 是否收费0=免费 1=收费 |
|   `languageSupport` | `string` | | 语言支持 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 服务名称 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `province` | `string` | | 省份 |
|   `serviceHours` | `string` | | 服务时段 |
|   `serviceId` | `string` | | 服务项ID |
|   `serviceProcess` | `string` | | 服务流程说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `staffCount` | `int` | | 服务人员数量 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `服务标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计价单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleType` | `string` | | 配套车型 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/service/item/{serviceId}
**增值服务详情**
获取增值服务完整信息,包含素材URL、标签、计费方式等。
**关联字典**
- service_category服务分类详情显示
- billing_type_service服务计费方式详情显示
- service_unit服务计量单位详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**响应** `统一响应结果«服务项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务项详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `advanceBookingHours` | `int` | | 提前预订时间(小时) |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础价格(元) |
|   `billingType` | `string` | | 计费方式 |
|   `cancellationPolicy` | `string` | | 取消政策说明 |
|   `capacityMax` | `int` | | 最多服务人数 |
|   `capacityMin` | `int` | | 最少服务人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 服务描述 |
|   `durationHours` | `number` | | 服务时长(小时) |
|   `equipmentList` | `string` | | 设备清单JSON |
|   `freeCancelHours` | `int` | | 免费取消期限(小时) |
|   `highlights` | `string` | | 服务亮点 |
|   `includedItems` | `string` | | 包含项目说明 |
|   `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
|   `isPaid` | `int` | | 是否收费0=免费 1=收费 |
|   `languageSupport` | `string` | | 语言支持 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 服务名称 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `province` | `string` | | 省份 |
|   `serviceHours` | `string` | | 服务时段 |
|   `serviceId` | `string` | | 服务项ID |
|   `serviceProcess` | `string` | | 服务流程说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `staffCount` | `int` | | 服务人员数量 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `服务标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计价单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleType` | `string` | | 配套车型 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/service/item/{serviceId}
**更新增值服务**
更新增值服务基本信息,不改变当前状态。
**关联字典**
- service_category服务分类表单选择
- billing_type_service服务计费方式表单选择
- service_unit服务计量单位表单选择
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `advanceBookingHours` | `int` | | 提前预订时间(小时) |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础价格(元) |
| `billingType` | `string` | | 计费方式 |
| `cancellationPolicy` | `string` | | 取消政策说明 |
| `capacityMax` | `int` | | 最多服务人数 |
| `capacityMin` | `int` | | 最少服务人数 |
| `categoryCode` | `string` | | 分类编码 |
| `city` | `string` | | 城市 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 服务描述 |
| `durationHours` | `number` | | 服务时长(小时) |
| `equipmentList` | `string` | | 设备清单JSON |
| `freeCancelHours` | `int` | | 免费取消期限(小时) |
| `highlights` | `string` | | 服务亮点 |
| `includedItems` | `string` | | 包含项目说明 |
| `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
| `isPaid` | `int` | | 是否收费0=免费 1=收费 |
| `languageSupport` | `string` | | 语言支持 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `name` | `string` | | 服务名称 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `province` | `string` | | 省份 |
| `serviceHours` | `string` | | 服务时段 |
| `serviceProcess` | `string` | | 服务流程说明 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `staffCount` | `int` | | 服务人员数量 |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计价单位 |
| `usageNotes` | `string` | | 使用须知 |
| `vehicleType` | `string` | | 配套车型 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«服务项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务项详情VO` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `advanceBookingHours` | `int` | | 提前预订时间(小时) |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础价格(元) |
|   `billingType` | `string` | | 计费方式 |
|   `cancellationPolicy` | `string` | | 取消政策说明 |
|   `capacityMax` | `int` | | 最多服务人数 |
|   `capacityMin` | `int` | | 最少服务人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 服务描述 |
|   `durationHours` | `number` | | 服务时长(小时) |
|   `equipmentList` | `string` | | 设备清单JSON |
|   `freeCancelHours` | `int` | | 免费取消期限(小时) |
|   `highlights` | `string` | | 服务亮点 |
|   `includedItems` | `string` | | 包含项目说明 |
|   `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
|   `isPaid` | `int` | | 是否收费0=免费 1=收费 |
|   `languageSupport` | `string` | | 语言支持 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 服务名称 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `province` | `string` | | 省份 |
|   `serviceHours` | `string` | | 服务时段 |
|   `serviceId` | `string` | | 服务项ID |
|   `serviceProcess` | `string` | | 服务流程说明 |
|   `sortOrder` | `int` | | 排序权重 |
|   `staffCount` | `int` | | 服务人员数量 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `服务标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计价单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleType` | `string` | | 配套车型 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/service/item/{serviceId}
**删除增值服务**
软删除增值服务。仅SUPER_ADMIN或创建者可操作。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/service/item/{serviceId}/status
**启用/禁用切换**
直接修改状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceIds` | `string[]` | | 服务ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/service/item/{serviceId}/submit-approval
**提交启用/禁用审批**
向企微OA提交审批。targetStatus=1申请上架,targetStatus=2申请下架。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/service/items
**增值服务列表**
分页查询增值服务列表,支持按名称、状态、分类等条件筛选。
**关联字典**
- service_category服务分类筛选+列表显示)
- billing_type_service服务计费方式列表显示
- service_unit服务计量单位列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `billingType` | `string` | | 计费方式筛选 | PER_DAY |
| `categoryCode` | `string` | | 分类编码筛选 | GUIDE |
| `city` | `string` | | 城市筛选 | 丽江市 |
| `cityKeyword` | `string` | | 城市/区域关键词模糊搜索(匹配城市名、省份、地址) | 海拉尔 |
| `instantConfirm` | `integer(int32)` | | 是否即时确认筛选0=否 1=是 | 1 |
| `isPaid` | `integer(int32)` | | 是否收费筛选0=免费 1=收费 | 1 |
| `keyword` | `string` | | 搜索关键词(名称模糊匹配) | 导游 |
| `maxPrice` | `number` | | 最高价格筛选 | 1000.0 |
| `minPrice` | `number` | | 最低价格筛选 | 100.0 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `status` | `integer(int32)` | | 状态筛选0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID单个 | |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 1,2,3 |
| `vehicleType` | `string` | | 配套车型筛选 | 商务车 |
**响应** `统一响应结果«分页结果«服务项列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«服务项列表VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `服务项列表VO[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批单号 |
|     `basePrice` | `number` | | 基础价格(元) |
|     `billingType` | `string` | | 计费方式 |
|     `categoryCode` | `string` | | 分类编码 |
|     `city` | `string` | | 城市 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `durationHours` | `number` | | 服务时长(小时) |
|     `highlights` | `string` | | 服务亮点 |
|     `instantConfirm` | `int` | | 是否即时确认0=否 1=是 |
|     `isPaid` | `int` | | 是否收费0=免费 1=收费 |
|     `latitude` | `number` | | 纬度 |
|     `longitude` | `number` | | 经度 |
|     `name` | `string` | | 服务名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `serviceId` | `string` | | 服务项ID |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `tags` | `服务标签VO[]` | | 标签列表 |
|     `unit` | `string` | | 计价单位 |
|     `vehicleType` | `string` | | 配套车型 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/service/items/batch
**批量删除**
批量软删除多个增值服务。仅SUPER_ADMIN或创建者可操作。
**请求体** `服务项批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceIds` | `string[]` | 是 | 服务ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/service/items/batch/status
**批量启用/禁用**
批量修改多个增值服务的状态,跳过审批流程。
**请求体** `服务项状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceIds` | `string[]` | | 服务ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
## 备品标签管理
### `PUT` /admin/supplies/item/{suppliesId}/tags
**更新备品标签**
全量替换指定备品的标签列表。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**请求体** `备品标签更新请求_1`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/supplies/items/batch/tags
**批量打标签**
对多个备品批量添加/移除标签。增量操作。
**请求体** `备品批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
| `suppliesIds` | `string[]` | 是 | 备品ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/supplies/tag
**创建管理标签**
创建预设标签,标签名不可重复。
**请求体** `备品标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«备品标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/supplies/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。
**请求体** `备品标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«备品标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/supplies/tag/{tagId}
**编辑标签**
修改标签名称或颜色,所有关联备品自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `备品标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«备品标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/supplies/tag/{tagId}
**删除标签**
删除标签并解除所有备品与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/supplies/tags
**获取管理标签列表(分页)**
分页查询备品标签库,支持按关键词搜索。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«备品标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«备品标签视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `备品标签视图[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/supplies/tags/all
**获取全部标签**
不分页返回所有标签,用于备品编辑时的标签选择下拉。
**响应** `统一响应结果«List«备品标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品标签视图[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 备品管理
### `POST` /admin/supplies/item
**创建备品**
新建备品资源(帐篷、睡袋、炊具等物资),初始状态为草稿(status=0)。需走企微审批上架。支持按件(PER_ITEM)和按人(PER_PERSON)计费。
**关联字典**
- supplies_category备品分类表单选择
- billing_type计费方式表单选择
**请求体** `备品创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `basePrice` | `number` | 是 | 基础单价(元) |
| `billingType` | `string` | 是 | 计费方式PER_ITEM=按件 PER_DAY=按天 |
| `brand` | `string` | | 品牌 |
| `categoryCode` | `string` | 是 | 分类编码 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 备品描述 |
| `featureIntro` | `string` | | 图文详情JSON格式 |
| `highlights` | `string` | | 亮点摘要 |
| `includes` | `string[]` | | 包含物品清单 |
| `model` | `string` | | 型号 |
| `name` | `string` | 是 | 备品名称 |
| `recommended` | `int` | | 是否推荐0=否 1=是 |
| `sizeOptions` | `string[]` | | 可选尺码列表 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `specifications` | `string` | | 规格参数JSON格式 |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计量单位 |
| `usageNotes` | `string` | | 使用注意事项 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `weight` | `number` | | 重量kg |
**响应** `统一响应结果«备品详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品详情视图` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `basePrice` | `number` | | 基础单价(元) |
|   `billingType` | `string` | | 计费方式编码 |
|   `billingTypeName` | `string` | | 计费方式名称 |
|   `brand` | `string` | | 品牌 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `description` | `string` | | 备品描述 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `highlights` | `string` | | 亮点摘要 |
|   `includes` | `string[]` | | 包含物品清单 |
|   `model` | `string` | | 型号 |
|   `name` | `string` | | 备品名称 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `sizeOptions` | `string[]` | | 可选尺码列表 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specifications` | `string` | | 规格参数JSON格式 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `suppliesId` | `string` | | 备品ID |
|   `tags` | `备品标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weight` | `number` | | 重量kg |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/supplies/item/{suppliesId}
**备品详情**
获取备品完整信息,包含素材URL、标签等。
**关联字典**
- supplies_category备品分类详情显示
- billing_type计费方式详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**响应** `统一响应结果«备品详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品详情视图` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `basePrice` | `number` | | 基础单价(元) |
|   `billingType` | `string` | | 计费方式编码 |
|   `billingTypeName` | `string` | | 计费方式名称 |
|   `brand` | `string` | | 品牌 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `description` | `string` | | 备品描述 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `highlights` | `string` | | 亮点摘要 |
|   `includes` | `string[]` | | 包含物品清单 |
|   `model` | `string` | | 型号 |
|   `name` | `string` | | 备品名称 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `sizeOptions` | `string[]` | | 可选尺码列表 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specifications` | `string` | | 规格参数JSON格式 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `suppliesId` | `string` | | 备品ID |
|   `tags` | `备品标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weight` | `number` | | 重量kg |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/supplies/item/{suppliesId}
**更新备品**
更新备品基本信息,不改变当前状态。
**关联字典**
- supplies_category备品分类表单选择
- billing_type计费方式表单选择
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**请求体** `备品更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `basePrice` | `number` | | 基础单价(元) |
| `billingType` | `string` | | 计费方式PER_ITEM=按件 PER_DAY=按天 |
| `brand` | `string` | | 品牌 |
| `categoryCode` | `string` | | 分类编码 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 备品描述 |
| `featureIntro` | `string` | | 图文详情JSON格式 |
| `highlights` | `string` | | 亮点摘要 |
| `includes` | `string[]` | | 包含物品清单 |
| `model` | `string` | | 型号 |
| `name` | `string` | | 备品名称 |
| `recommended` | `int` | | 是否推荐0=否 1=是 |
| `sizeOptions` | `string[]` | | 可选尺码列表 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `specifications` | `string` | | 规格参数JSON格式 |
| `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计量单位 |
| `usageNotes` | `string` | | 使用注意事项 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `weight` | `number` | | 重量kg |
**响应** `统一响应结果«备品详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `备品详情视图` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `basePrice` | `number` | | 基础单价(元) |
|   `billingType` | `string` | | 计费方式编码 |
|   `billingTypeName` | `string` | | 计费方式名称 |
|   `brand` | `string` | | 品牌 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `description` | `string` | | 备品描述 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `highlights` | `string` | | 亮点摘要 |
|   `includes` | `string[]` | | 包含物品清单 |
|   `model` | `string` | | 型号 |
|   `name` | `string` | | 备品名称 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `sizeOptions` | `string[]` | | 可选尺码列表 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specifications` | `string` | | 规格参数JSON格式 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `suppliesId` | `string` | | 备品ID |
|   `tags` | `备品标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weight` | `number` | | 重量kg |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/supplies/item/{suppliesId}
**删除备品**
软删除备品。仅SUPER_ADMIN或创建者可操作。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/supplies/item/{suppliesId}/status
**上下架切换**
直接修改状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**请求体** `备品状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
| `suppliesIds` | `string[]` | | 备品ID列表批量操作 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/supplies/item/{suppliesId}/submit-approval
**提交启用/禁用审批**
向企微OA提交审批。targetStatus=1申请上架,targetStatus=2申请下架。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesId` | `integer` | | 备品ID |
**请求体** `备品审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/supplies/items
**备品列表**
分页查询备品列表,支持按名称、状态、分类等条件筛选。
**关联字典**
- supplies_category备品分类筛选+列表显示)
- billing_type计费方式列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `billingType` | `string` | | 计费方式PER_ITEM=按件 PER_DAY=按天 | PER_ITEM |
| `categoryCode` | `string` | | 分类编码 | OUTDOOR_GEAR |
| `keyword` | `string` | | 搜索关键词(名称/副标题模糊搜索) | 登山杖 |
| `maxPrice` | `number` | | 最高价格 | 500.0 |
| `minPrice` | `number` | | 最低价格 | 10.0 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `recommended` | `integer(int32)` | | 是否推荐0=否 1=是 | 1 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc=升序 desc=降序 | desc |
| `status` | `integer(int32)` | | 状态0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID | 100 |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 100,101,102 |
**响应** `统一响应结果«分页结果«备品列表视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«备品列表视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `备品列表视图[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批编号 |
|     `basePrice` | `number` | | 基础单价(元) |
|     `billingType` | `string` | | 计费方式编码 |
|     `billingTypeName` | `string` | | 计费方式名称 |
|     `categoryCode` | `string` | | 分类编码 |
|     `categoryName` | `string` | | 分类名称 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `highlights` | `string` | | 亮点摘要 |
|     `name` | `string` | | 备品名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `recommended` | `int` | | 是否推荐0=否 1=是 |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `suppliesId` | `string` | | 备品ID |
|     `tags` | `备品标签视图[]` | | 标签列表 |
|     `unit` | `string` | | 计量单位 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/supplies/items/batch
**批量删除**
批量软删除多个备品。仅SUPER_ADMIN或创建者可操作。
**请求体** `备品批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `suppliesIds` | `string[]` | 是 | 备品ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/supplies/items/batch/status
**批量上下架**
批量修改多个备品的状态,跳过审批流程。
**请求体** `备品状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
| `suppliesIds` | `string[]` | | 备品ID列表批量操作 |
**响应** `统一响应结果«Void»`
---
## 房型价格日历
### `GET` /admin/hotel/room-type/{roomTypeId}/prices
**查询价格日历**
按月查询房型的每日价格和可售状态。每个房型有独立的价格日历。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«酒店房型价格日历VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `酒店房型价格日历VO` | | 响应数据 |
|   `hotelId` | `string` | | 酒店ID |
|   `month` | `int` | | 月份 |
|   `prices` | `酒店房型价格日历日VO[]` | | 价格日历明细列表 |
|     `costPrice` | `number` | | 成本价(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可售 1=可售 |
|     `stock` | `int` | | 库存数量 |
|     `stockUsed` | `int` | | 已用库存 |
|   `roomTypeId` | `string` | | 房型ID |
|   `roomTypeName` | `string` | | 房型名称 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/hotel/room-type/{roomTypeId}/prices
**批量设置价格日历**
在指定日期范围内批量设置房型的成本价和可售状态。支持按星期过滤和排除特定日期。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**请求体** `酒店房型价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 成本价(元) |
| `endDate` | `string` | 是 | 结束日期yyyy-MM-dd |
| `excludeDates` | `string[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期yyyy-MM-dd |
| `status` | `int` | | 状态0=不可售 1=可售 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 是否仅工作日 |
| `weekendOnly` | `boolean` | | 是否仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/hotel/room-type/{roomTypeId}/prices
**删除价格日历**
删除指定日期范围内房型的所有价格记录。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string` | | 结束日期 | |
| `startDate` | `string` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/hotel/room-type/{roomTypeId}/prices/batch-status
**批量修改日期可售状态**
批量修改指定日期范围内房型的可售状态,不影响价格。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**请求体** `酒店房型价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期yyyy-MM-dd |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期yyyy-MM-dd |
| `status` | `int` | 是 | 状态0=不可售 1=可售 |
**响应** `统一响应结果«Void»`
---
## 房型管理
### `GET` /admin/hotel/room-type/{roomTypeId}
**房型详情**
获取房型完整信息,包含价格、入住人数、素材等。
**关联字典**
- room_category房型分类列表/详情显示)
- bed_type床型列表/详情显示)
- window_type窗户类型列表/详情显示)
- bathroom_type卫浴类型列表/详情显示)
- room_facility房间设施列表/详情显示)
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**响应** `统一响应结果«房型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `房型详情VO` | | 响应数据 |
|   `approvalNo` | `string` | | 审批单号 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础成本价(元) |
|   `bathroomType` | `string` | | 卫浴类型 |
|   `bedCount` | `int` | | 床位数量 |
|   `bedSize` | `string` | | 床尺寸 |
|   `bedType` | `string` | | 床型 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 房型描述 |
|   `floorInfo` | `string` | | 楼层信息 |
|   `hotelId` | `string` | | 所属酒店ID |
|   `maxOccupancy` | `int` | | 最多入住人数 |
|   `name` | `string` | | 房型名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `roomArea` | `number` | | 房间面积(平方米) |
|   `roomCategory` | `string` | | 房型分类 |
|   `roomFacilities` | `string` | | 房间设施JSON |
|   `roomTypeId` | `string` | | 房型ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `totalRooms` | `int` | | 总房间数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialId` | `string` | | 视频素材ID |
|   `videoUrl` | `string` | | 视频URL |
|   `windowType` | `string` | | 窗型 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/hotel/room-type/{roomTypeId}
**更新房型**
更新房型基本信息,不改变当前状态。
**关联字典**
- room_category房型分类表单选择
- bed_type床型表单选择
- window_type窗户类型表单选择
- bathroom_type卫浴类型表单选择
- room_facility房间设施表单多选
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**请求体** `房型更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础成本价(元) |
| `bathroomType` | `string` | | 卫浴类型 |
| `bedCount` | `int` | | 床位数量 |
| `bedSize` | `string` | | 床尺寸 |
| `bedType` | `string` | | 床型 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 房型描述 |
| `floorInfo` | `string` | | 楼层信息 |
| `maxOccupancy` | `int` | | 最多入住人数 |
| `name` | `string` | | 房型名称 |
| `roomArea` | `number` | | 房间面积(平方米) |
| `roomCategory` | `string` | | 房型分类 |
| `roomFacilities` | `string` | | 房间设施JSON |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `totalRooms` | `int` | | 总房间数 |
| `videoMaterialId` | `string` | | 视频素材ID |
| `windowType` | `string` | | 窗型 |
**响应** `统一响应结果«房型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `房型详情VO` | | 响应数据 |
|   `approvalNo` | `string` | | 审批单号 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础成本价(元) |
|   `bathroomType` | `string` | | 卫浴类型 |
|   `bedCount` | `int` | | 床位数量 |
|   `bedSize` | `string` | | 床尺寸 |
|   `bedType` | `string` | | 床型 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 房型描述 |
|   `floorInfo` | `string` | | 楼层信息 |
|   `hotelId` | `string` | | 所属酒店ID |
|   `maxOccupancy` | `int` | | 最多入住人数 |
|   `name` | `string` | | 房型名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `roomArea` | `number` | | 房间面积(平方米) |
|   `roomCategory` | `string` | | 房型分类 |
|   `roomFacilities` | `string` | | 房间设施JSON |
|   `roomTypeId` | `string` | | 房型ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `totalRooms` | `int` | | 总房间数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialId` | `string` | | 视频素材ID |
|   `videoUrl` | `string` | | 视频URL |
|   `windowType` | `string` | | 窗型 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/hotel/room-type/{roomTypeId}
**删除房型**
软删除房型及其价格日历数据。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/hotel/room-type/{roomTypeId}/status
**启用/禁用房型**
直接修改房型状态跳过审批。status=0禁用,status=1启用。禁用后该房型不会出现在C端展示中。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**请求体** `房型状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `status` | `int` | 是 | 状态0=禁用 1=启用 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/hotel/room-type/{roomTypeId}/submit-approval
**提交房型启用/禁用审批**
向企微OA提交房型启用/禁用审批。审批流程与住宿共享同一模板。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `roomTypeId` | `integer` | | 房型ID |
**请求体** `酒店审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/hotel/{hotelId}/room-type
**创建房型**
在指定住宿下创建房型(如标准间、大床房、套房等)。每个房型有独立的价格日历、最大入住人数(maxOccupancy)和基础价格(basePrice)。房型初始状态为草稿(status=0),需独立审批后才能启用。创建后可通过「提交房型启用审批」接口提交企微OA审批。
**关联字典**
- room_category房型分类表单选择
- bed_type床型表单选择
- window_type窗户类型表单选择
- bathroom_type卫浴类型表单选择
- room_facility房间设施表单多选
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**请求体** `房型创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础成本价(元) |
| `bathroomType` | `string` | | 卫浴类型 |
| `bedCount` | `int` | | 床位数量 |
| `bedSize` | `string` | | 床尺寸 |
| `bedType` | `string` | 是 | 床型 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 房型描述 |
| `floorInfo` | `string` | | 楼层信息 |
| `maxOccupancy` | `int` | | 最多入住人数 |
| `name` | `string` | 是 | 房型名称 |
| `roomArea` | `number` | | 房间面积(平方米) |
| `roomCategory` | `string` | 是 | 房型分类 |
| `roomFacilities` | `string` | | 房间设施JSON |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `totalRooms` | `int` | | 总房间数 |
| `videoMaterialId` | `string` | | 视频素材ID |
| `windowType` | `string` | | 窗型 |
**响应** `统一响应结果«房型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `房型详情VO` | | 响应数据 |
|   `approvalNo` | `string` | | 审批单号 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础成本价(元) |
|   `bathroomType` | `string` | | 卫浴类型 |
|   `bedCount` | `int` | | 床位数量 |
|   `bedSize` | `string` | | 床尺寸 |
|   `bedType` | `string` | | 床型 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 房型描述 |
|   `floorInfo` | `string` | | 楼层信息 |
|   `hotelId` | `string` | | 所属酒店ID |
|   `maxOccupancy` | `int` | | 最多入住人数 |
|   `name` | `string` | | 房型名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `roomArea` | `number` | | 房间面积(平方米) |
|   `roomCategory` | `string` | | 房型分类 |
|   `roomFacilities` | `string` | | 房间设施JSON |
|   `roomTypeId` | `string` | | 房型ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `totalRooms` | `int` | | 总房间数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialId` | `string` | | 视频素材ID |
|   `videoUrl` | `string` | | 视频URL |
|   `windowType` | `string` | | 窗型 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/hotel/{hotelId}/room-types
**房型列表**
获取指定住宿下的所有房型列表不分页,按sortOrder排序。
**关联字典**
- room_category房型分类列表/详情显示)
- bed_type床型列表/详情显示)
- window_type窗户类型列表/详情显示)
- bathroom_type卫浴类型列表/详情显示)
- room_facility房间设施列表/详情显示)
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `hotelId` | `integer` | | 住宿ID |
**响应** `统一响应结果«List«房型详情VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `房型详情VO[]` | | 响应数据 |
|   `approvalNo` | `string` | | 审批单号 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础成本价(元) |
|   `bathroomType` | `string` | | 卫浴类型 |
|   `bedCount` | `int` | | 床位数量 |
|   `bedSize` | `string` | | 床尺寸 |
|   `bedType` | `string` | | 床型 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 房型描述 |
|   `floorInfo` | `string` | | 楼层信息 |
|   `hotelId` | `string` | | 所属酒店ID |
|   `maxOccupancy` | `int` | | 最多入住人数 |
|   `name` | `string` | | 房型名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `roomArea` | `number` | | 房间面积(平方米) |
|   `roomCategory` | `string` | | 房型分类 |
|   `roomFacilities` | `string` | | 房间设施JSON |
|   `roomTypeId` | `string` | | 房型ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `totalRooms` | `int` | | 总房间数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialId` | `string` | | 视频素材ID |
|   `videoUrl` | `string` | | 视频URL |
|   `windowType` | `string` | | 窗型 |
| `message` | `string` | | 响应消息 |
---
## 景区价格日历
### `GET` /admin/scenic/spot/{scenicId}/prices
**查询价格日历**
按月查询景区的每日价格和可售状态。返回指定年月中所有已设置价格的日期,未设置的日期不返回。用于前端日历组件渲染。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«价格日历月视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `价格日历月视图` | | 响应数据 |
|   `month` | `int` | | 月份 |
|   `prices` | `价格日历日数据[]` | | 每日价格列表 |
|     `costPrice` | `number` | | 成本价(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可用 1=可用 |
|     `stock` | `int` | | 总库存 |
|     `stockUsed` | `int` | | 已用库存 |
|   `scenicId` | `string` | | 景区ID |
|   `scenicName` | `string` | | 景区名称 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/scenic/spot/{scenicId}/prices
**批量设置价格**
在指定日期范围内批量设置成本价、库存和可售状态。支持weekdayOnly/weekendOnly/selectedWeekdays过滤特定星期,支持excludeDates排除特定日期。已有价格的日期会被覆盖更新。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `价格日历批量设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 成本价(元) |
| `endDate` | `string` | 是 | 结束日期 |
| `excludeDates` | `string[]` | | 排除的日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 选中的星期1=周一...7=周日),为空时不做过滤 |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | | 状态0=不可用 1=可用 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 仅工作日 |
| `weekendOnly` | `boolean` | | 仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/scenic/spot/{scenicId}/prices
**批量清除价格**
删除指定日期范围内的所有价格记录。删除后该日期范围将显示为未设置状态。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string` | | 结束日期 | |
| `startDate` | `string` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/scenic/spot/{scenicId}/prices/status
**批量修改可售状态**
批量修改指定日期范围内的可售状态,不影响价格和库存。status=0不可售,status=1可售。用于临时关闭/开放某些日期的售卖。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期 |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | 是 | 目标状态0=不可用 1=可用 |
**响应** `统一响应结果«Void»`
---
## 景区季节内容
### `PUT` /admin/scenic/spot/{scenicId}/season/{seasonType}
**保存/更新季节内容**
创建或更新指定景区的季节内容。seasonType为季节标识如spring/summer/autumn/winter。如果该季节已存在则更新,不存在则创建。支持设置季节别名如「樱花季」、月份范围、独立封面和轮播图。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
| `seasonType` | `string` | | 季节类型 |
**请求体** `景区季节保存请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 季节描述 |
| `highlights` | `string` | | 季节亮点 |
| `monthEnd` | `int` | 是 | 结束月份1-12 |
| `monthStart` | `int` | 是 | 开始月份1-12 |
| `playGuide` | `string` | | 游玩攻略富文本JSON |
| `seasonName` | `string` | | 季节别名 |
| `tips` | `string` | | 温馨提示 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«景区季节内容»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区季节内容` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 季节描述 |
|   `highlights` | `string` | | 季节亮点 |
|   `monthEnd` | `int` | | 结束月份 |
|   `monthStart` | `int` | | 开始月份 |
|   `playGuide` | `string` | | 游玩攻略富文本JSON |
|   `scenicId` | `string` | | 景区ID |
|   `seasonId` | `string` | | 季节ID |
|   `seasonName` | `string` | | 季节别名 |
|   `seasonType` | `string` | | 季节类型spring/summer/autumn/winter |
|   `tips` | `string` | | 温馨提示 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/scenic/spot/{scenicId}/season/{seasonType}
**删除季节内容**
删除指定景区的某个季节内容,同时清理关联的素材引用。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
| `seasonType` | `string` | | 季节类型 |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/scenic/spot/{scenicId}/seasons
**获取景区全部季节内容**
返回景区的所有季节内容列表(春/夏/秋/冬)。季节内容是景区独有功能,其他资源类型没有此概念。每个季节可设置独立的封面、轮播图、亮点描述和游玩攻略。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**响应** `统一响应结果«List«景区季节内容»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区季节内容[]` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `description` | `string` | | 季节描述 |
|   `highlights` | `string` | | 季节亮点 |
|   `monthEnd` | `int` | | 结束月份 |
|   `monthStart` | `int` | | 开始月份 |
|   `playGuide` | `string` | | 游玩攻略富文本JSON |
|   `scenicId` | `string` | | 景区ID |
|   `seasonId` | `string` | | 季节ID |
|   `seasonName` | `string` | | 季节别名 |
|   `seasonType` | `string` | | 季节类型spring/summer/autumn/winter |
|   `tips` | `string` | | 温馨提示 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
| `message` | `string` | | 响应消息 |
---
## 景区标签管理
### `PUT` /admin/scenic/spot/{scenicId}/tags
**更新景区标签**
全量替换指定景区的标签列表。传入tagIds为该景区最终要关联的标签ID列表,为空则清除所有标签。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `景区标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表全量替换 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/scenic/spots/batch/tags
**批量打标签**
对多个景区批量添加或移除标签。addTagIds为要添加的标签,removeTagIds为要移除的标签,两者可同时使用。增量操作,不影响未指定的标签。
**请求体** `景区批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
| `scenicIds` | `string[]` | 是 | 景区ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/scenic/tag
**创建管理标签**
创建预设标签,标签名不可重复。可指定颜色(tagColor),默认为#409EFF。预设标签在标签管理页面展示和维护。
**请求体** `标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«景区标签»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区标签` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/scenic/tag/adhoc
**解析自定义标签**
输入标签名称,如果已存在则直接返回,不存在则自动创建。用于景区编辑时快速输入新标签,避免先到标签管理页面创建。
**请求体** `标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«景区标签»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区标签` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/scenic/tag/{tagId}
**编辑标签**
修改标签名称或颜色。修改后所有关联此标签的景区会自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«景区标签»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区标签` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/scenic/tag/{tagId}
**删除标签**
删除标签并自动解除所有景区与该标签的关联关系。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/scenic/tags
**获取管理标签列表(分页)**
分页查询景区标签库中的所有标签,支持按关键词搜索。标签分为预设标签管理员创建和自定义标签adhoc接口创建,此接口返回全部类型。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«景区标签»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«景区标签»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `景区标签[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/scenic/tags/all
**获取全部标签**
不分页返回所有标签,用于景区编辑时的标签选择下拉列表。
**响应** `统一响应结果«List«景区标签»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区标签[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 景区管理
### `POST` /admin/scenic/spot
**创建景区**
新建一个景区资源,初始状态为草稿(status=0)。创建后需通过「提交启用审批」接口走企微OA审批流程才能上架。支持富文本字段featureIntro/detailContent等,素材ID从素材库获取。
**关联字典**
- scenic_facility景区设施表单多选
- scenic_honor景区荣誉表单多选
**请求体** `景区创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `arrangement` | `string` | | 行程安排富文本JSON |
| `backupContactPerson` | `string` | | 备用联系人姓名 |
| `backupContactPhone` | `string` | | 备用联系人电话 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `city` | `string` | 是 | 城市(行政区划) |
| `cityName` | `string` | 是 | 所在城市(展示用) |
| `closedDay` | `string` | | 闭园日 |
| `contactPerson` | `string` | | 联系人姓名 |
| `contactPhone` | `string` | | 联系人电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `cultureExperience` | `string` | | 文化体验富文本JSON |
| `description` | `string` | | 景区描述 |
| `detailContent` | `string` | | 详情内容富文本JSON |
| `district` | `string` | | 区/县 |
| `facilities` | `string[]` | | 设施编码列表 |
| `featureIntro` | `string` | | 特色介绍富文本JSON |
| `highlightSpots` | `string` | | 亮点景点富文本JSON |
| `highlights` | `string` | | 亮点简介 |
| `honors` | `string[]` | | 荣誉称号列表 |
| `interactiveExperience` | `string` | | 互动体验富文本JSON |
| `latitude` | `number` | 是 | 纬度 |
| `longitude` | `number` | 是 | 经度 |
| `name` | `string` | 是 | 景区名称 |
| `openTime` | `string` | | 开放时间 |
| `photographyGuide` | `string` | | 摄影指南富文本JSON |
| `province` | `string` | 是 | 省份 |
| `sceneryExperience` | `string` | | 风景体验富文本JSON |
| `sortOrder` | `int` | | 排序权重,越大越靠前 |
| `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
| `travelPrep` | `string` | | 出行准备富文本JSON |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«景区详情»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区详情` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 行程安排富文本JSON |
|   `backupContactPerson` | `string` | | 备用联系人姓名 |
|   `backupContactPhone` | `string` | | 备用联系人电话 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `city` | `string` | | 城市(行政区划) |
|   `cityName` | `string` | | 所在城市(展示用) |
|   `closedDay` | `string` | | 闭园日 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系人电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cultureExperience` | `string` | | 文化体验富文本JSON |
|   `description` | `string` | | 景区描述 |
|   `detailContent` | `string` | | 详情内容富文本JSON |
|   `district` | `string` | | 区/县 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 特色介绍富文本JSON |
|   `highlightSpots` | `string` | | 亮点景点富文本JSON |
|   `highlights` | `string` | | 亮点简介 |
|   `honors` | `string[]` | | 荣誉称号列表 |
|   `interactiveExperience` | `string` | | 互动体验富文本JSON |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 景区名称 |
|   `openTime` | `string` | | 开放时间 |
|   `photographyGuide` | `string` | | 摄影指南富文本JSON |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评论数 |
|   `sceneryExperience` | `string` | | 风景体验富文本JSON |
|   `scenicId` | `string` | | 景区ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `tags` | `景区标签[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|     `useCount` | `int` | | 使用次数 |
|   `travelPrep` | `string` | | 出行准备富文本JSON |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/scenic/spot/{scenicId}
**景区详情**
获取景区完整信息,包含富文本内容、素材URL、标签列表、季节内容等。素材ID会自动解析为OSS访问地址。
**关联字典**
- scenic_facility景区设施详情显示
- scenic_honor景区荣誉详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**响应** `统一响应结果«景区详情»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区详情` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 行程安排富文本JSON |
|   `backupContactPerson` | `string` | | 备用联系人姓名 |
|   `backupContactPhone` | `string` | | 备用联系人电话 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `city` | `string` | | 城市(行政区划) |
|   `cityName` | `string` | | 所在城市(展示用) |
|   `closedDay` | `string` | | 闭园日 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系人电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cultureExperience` | `string` | | 文化体验富文本JSON |
|   `description` | `string` | | 景区描述 |
|   `detailContent` | `string` | | 详情内容富文本JSON |
|   `district` | `string` | | 区/县 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 特色介绍富文本JSON |
|   `highlightSpots` | `string` | | 亮点景点富文本JSON |
|   `highlights` | `string` | | 亮点简介 |
|   `honors` | `string[]` | | 荣誉称号列表 |
|   `interactiveExperience` | `string` | | 互动体验富文本JSON |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 景区名称 |
|   `openTime` | `string` | | 开放时间 |
|   `photographyGuide` | `string` | | 摄影指南富文本JSON |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评论数 |
|   `sceneryExperience` | `string` | | 风景体验富文本JSON |
|   `scenicId` | `string` | | 景区ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `tags` | `景区标签[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|     `useCount` | `int` | | 使用次数 |
|   `travelPrep` | `string` | | 出行准备富文本JSON |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/scenic/spot/{scenicId}
**更新景区**
更新景区基本信息和富文本内容。更新不会改变当前状态。如果景区已上架,修改后仍保持上架状态,无需重新审批。
**关联字典**
- scenic_facility景区设施表单多选
- scenic_honor景区荣誉表单多选
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `景区更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `arrangement` | `string` | | 行程安排富文本JSON |
| `backupContactPerson` | `string` | | 备用联系人姓名 |
| `backupContactPhone` | `string` | | 备用联系人电话 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `city` | `string` | | 城市(行政区划) |
| `cityName` | `string` | | 所在城市(展示用) |
| `closedDay` | `string` | | 闭园日 |
| `contactPerson` | `string` | | 联系人姓名 |
| `contactPhone` | `string` | | 联系人电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `cultureExperience` | `string` | | 文化体验富文本JSON |
| `description` | `string` | | 景区描述 |
| `detailContent` | `string` | | 详情内容富文本JSON |
| `district` | `string` | | 区/县 |
| `facilities` | `string[]` | | 设施编码列表 |
| `featureIntro` | `string` | | 特色介绍富文本JSON |
| `highlightSpots` | `string` | | 亮点景点富文本JSON |
| `highlights` | `string` | | 亮点简介 |
| `honors` | `string[]` | | 荣誉称号列表 |
| `interactiveExperience` | `string` | | 互动体验富文本JSON |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `name` | `string` | | 景区名称 |
| `openTime` | `string` | | 开放时间 |
| `photographyGuide` | `string` | | 摄影指南富文本JSON |
| `province` | `string` | | 省份 |
| `sceneryExperience` | `string` | | 风景体验富文本JSON |
| `sortOrder` | `int` | | 排序权重,越大越靠前 |
| `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
| `travelPrep` | `string` | | 出行准备富文本JSON |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«景区详情»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `景区详情` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 行程安排富文本JSON |
|   `backupContactPerson` | `string` | | 备用联系人姓名 |
|   `backupContactPhone` | `string` | | 备用联系人电话 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `city` | `string` | | 城市(行政区划) |
|   `cityName` | `string` | | 所在城市(展示用) |
|   `closedDay` | `string` | | 闭园日 |
|   `contactPerson` | `string` | | 联系人姓名 |
|   `contactPhone` | `string` | | 联系人电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cultureExperience` | `string` | | 文化体验富文本JSON |
|   `description` | `string` | | 景区描述 |
|   `detailContent` | `string` | | 详情内容富文本JSON |
|   `district` | `string` | | 区/县 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 特色介绍富文本JSON |
|   `highlightSpots` | `string` | | 亮点景点富文本JSON |
|   `highlights` | `string` | | 亮点简介 |
|   `honors` | `string[]` | | 荣誉称号列表 |
|   `interactiveExperience` | `string` | | 互动体验富文本JSON |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 景区名称 |
|   `openTime` | `string` | | 开放时间 |
|   `photographyGuide` | `string` | | 摄影指南富文本JSON |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评论数 |
|   `sceneryExperience` | `string` | | 风景体验富文本JSON |
|   `scenicId` | `string` | | 景区ID |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `tags` | `景区标签[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统预设 |
|     `useCount` | `int` | | 使用次数 |
|   `travelPrep` | `string` | | 出行准备富文本JSON |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/scenic/spot/{scenicId}
**删除景区**
软删除景区设置deleted_at。仅SUPER_ADMIN角色或创建者本人可删除。已上架的景区需先下架再删除。删除后会同时清理关联的素材引用。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/scenic/spot/{scenicId}/status
**上下架切换**
直接修改景区状态跳过审批流程,仅限SUPER_ADMIN使用。普通管理员应使用「提交启用/禁用审批」接口。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `景区状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicIds` | `string[]` | | 景区ID列表 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/scenic/spot/{scenicId}/submit-approval
**提交启用/禁用审批**
向企微OA提交审批申请。targetStatus=1表示申请上架,targetStatus=2表示申请下架。提交后景区进入PENDING_APPROVAL状态,企微审批通过/拒绝后通过回调自动更新状态。返回企微审批单号spNo。同一景区不可重复提交未完成的审批。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicId` | `integer` | | 景区ID |
**请求体** `审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/scenic/spots
**景区列表**
分页查询景区列表,支持按名称关键词、状态(0草稿/1上架/2下架)、城市等条件筛选。返回列表摘要信息不含富文本详情,按sortOrder倒序+创建时间倒序排列。
**关联字典**
- scenic_facility景区设施列表显示
- scenic_honor景区荣誉列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `city` | `string` | | 城市筛选(行政区划) | 杭州市 |
| `cityKeyword` | `string` | | 城市/区域关键词模糊搜索(匹配城市名、省份、地址) | 海拉尔 |
| `cityName` | `string` | | 城市名称筛选(展示用) | 杭州 |
| `facility` | `string` | | 设施编码筛选 | parking |
| `keyword` | `string` | | 搜索关键词(名称/地址模糊匹配) | 西湖 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `province` | `string` | | 省份筛选 | 浙江省 |
| `sortBy` | `string` | | 排序字段name/rating/viewCount/sortOrder/createdAt | sortOrder |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `status` | `integer(int32)` | | 状态筛选0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID筛选单个 | |
| `tagIds` | `string` | | 标签ID筛选多个,逗号分隔 | 1,2,3 |
**响应** `统一响应结果«分页结果«景区列表项»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«景区列表项»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `景区列表项[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批编号(审批中时有值) |
|     `cityName` | `string` | | 所在城市 |
|     `contactPerson` | `string` | | 联系人姓名 |
|     `contactPhone` | `string` | | 联系人电话 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `highlights` | `string` | | 亮点简介 |
|     `honors` | `string[]` | | 荣誉称号列表 |
|     `latitude` | `number` | | 纬度 |
|     `longitude` | `number` | | 经度 |
|     `name` | `string` | | 景区名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `rating` | `number` | | 评分 |
|     `reviewCount` | `int` | | 评论数 |
|     `scenicId` | `string` | | 景区ID |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `tags` | `景区标签[]` | | 标签列表 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/scenic/spots/batch
**批量删除**
批量软删除多个景区。权限校验同单个删除仅SUPER_ADMIN或创建者可操作。部分失败不影响其他景区的删除。
**请求体** `景区批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicIds` | `string[]` | 是 | 景区ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/scenic/spots/batch/status
**批量上下架**
批量修改多个景区的状态。scenicIds为景区ID列表字符串格式,status为目标状态。跳过审批流程,适用于批量管理场景。
**请求体** `景区状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `scenicIds` | `string[]` | | 景区ID列表 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
## 服务人员价格日历
### `GET` /admin/staff/type/{staffType}/prices
**查询价格日历(按人员类型)**
按月查询指定人员类型的每日服务费用和可调度状态。注意:价格日历按人员类型维度管理,非按个人维度。同一类型的所有人员共享同一套价格。
**关联字典**
- staff_type人员类型→ staffType路径参数
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffType` | `string` | | 人员类型: GUIDE/GUIDE_ASSISTANT/PHOTOGRAPHER/LEADER/OTHER |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«服务人员价格日历VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员价格日历VO` | | 响应数据 |
|   `month` | `int` | | 月份 |
|   `prices` | `服务人员价格日历日VO[]` | | 价格日历明细列表 |
|     `costPrice` | `number` | | 日薪(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可用 1=可用 |
|     `stock` | `int` | | 库存数量 |
|     `stockUsed` | `int` | | 已用库存 |
|   `staffType` | `string` | | 人员类型: GUIDE/GUIDE_ASSISTANT/PHOTOGRAPHER/LEADER/OTHER |
|   `staffTypeName` | `string` | | 人员类型名称 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/staff/type/{staffType}/prices
**批量设置价格(按人员类型)**
在指定日期范围内批量设置该类型人员的服务成本价和可调度状态。
**关联字典**
- staff_type人员类型→ staffType路径参数
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffType` | `string` | | 人员类型: GUIDE/GUIDE_ASSISTANT/PHOTOGRAPHER/LEADER/OTHER |
**请求体** `服务人员价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 日薪(元) |
| `endDate` | `string` | 是 | 结束日期 |
| `excludeDates` | `LocalDate[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | | 状态0=不可用 1=可用 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 是否仅工作日 |
| `weekendOnly` | `boolean` | | 是否仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/staff/type/{staffType}/prices
**清除价格日历(按人员类型)**
删除指定日期范围内该类型人员的价格记录。日期格式yyyy-MM-dd。
**关联字典**
- staff_type人员类型→ staffType路径参数
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffType` | `string` | | 人员类型: GUIDE/GUIDE_ASSISTANT/PHOTOGRAPHER/LEADER/OTHER |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string(date)` | | 结束日期 | |
| `startDate` | `string(date)` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/staff/type/{staffType}/prices/batch-status
**批量修改调度状态(按人员类型)**
批量修改日期范围内的可调度状态,不影响价格。
**关联字典**
- staff_type人员类型→ staffType路径参数
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffType` | `string` | | 人员类型: GUIDE/GUIDE_ASSISTANT/PHOTOGRAPHER/LEADER/OTHER |
**请求体** `服务人员价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期 |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | 是 | 状态0=不可用 1=可用 |
**响应** `统一响应结果«Void»`
---
## 服务人员标签管理
### `PUT` /admin/staff/batch/tags
**批量添加/移除标签**
对多个人员批量添加/移除标签。增量操作。
**请求体** `人员批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `long[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `long[]` | | 要移除的标签ID列表 |
| `staffIds` | `long[]` | 是 | 人员ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/staff/tag
**创建标签**
创建预设标签,标签名不可重复。
**请求体** `服务人员标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«服务人员标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/staff/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。
**请求体** `服务人员标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«服务人员标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/staff/tag/{tagId}
**更新标签**
修改标签名称或颜色。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `服务人员标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«服务人员标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/staff/tag/{tagId}
**删除标签**
删除标签并解除所有人员与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/staff/tags
**预设标签列表(分页)**
分页查询服务人员标签库,支持按关键词搜索。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«服务人员标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«服务人员标签VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `服务人员标签VO[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/staff/tags/all
**全部标签列表**
不分页返回所有标签,用于人员编辑时的标签选择。
**响应** `统一响应结果«List«服务人员标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员标签VO[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/staff/{staffId}/tags
**设置人员标签**
全量替换指定人员的标签列表。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**请求体** `设置人员标签请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `long[]` | 是 | 标签ID列表 |
**响应** `统一响应结果«Void»`
---
## 服务人员管理
### `POST` /admin/staff
**创建服务人员**
新建服务人员(导游/领队/摄影师/助理等)。人员类型(staffType)决定了其在价格日历中的归类。需走企微审批上架后才能被产品引用。
**关联字典**
- staff_type人员类型表单选择
- guide_level导游等级表单选择
- driver_license_type驾照类型表单选择
- language语言能力表单多选
- guide_specialty导游专长表单多选
- guide_service_area服务区域表单多选
**请求体** `服务人员创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `birthDate` | `string` | | 出生日期 |
| `certificateUrls` | `string[]` | | 资质证书URL列表 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 人员描述 |
| `emergencyContact` | `string` | | 紧急联系人 |
| `emergencyPhone` | `string` | | 紧急联系电话 |
| `ethnicity` | `string` | | 民族 |
| `gender` | `int` | | 性别0=女 1=男 |
| `guideCardNo` | `string` | | 导游证号 |
| `guideLanguage` | `string` | | 导游语种 |
| `guideLevel` | `string` | | 导游等级 |
| `highlights` | `string` | | 人员亮点 |
| `idCardUrls` | `string[]` | | 证件照URL列表 |
| `languages` | `string[]` | | 掌握语言JSON数组 |
| `licenseExpiry` | `string` | | 执照到期日 |
| `licenseNo` | `string` | | 执照编号 |
| `licenseType` | `string` | | 执照类型 |
| `name` | `string` | 是 | 姓名 |
| `nationality` | `string` | | 国籍 |
| `nativePlace` | `string` | | 籍贯 |
| `phone` | `string` | | 手机号 |
| `photoUrls` | `string[]` | | 个人照片URL列表 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `serviceAreas` | `string[]` | | 服务区域JSON数组 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `specialties` | `string[]` | | 擅长领域JSON数组 |
| `staffType` | `string` | 是 | 人员类型 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `yearsOfExperience` | `int` | | 从业年限 |
**响应** `统一响应结果«服务人员详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `birthDate` | `string` | | 出生日期 |
|   `certificateUrls` | `string[]` | | 资质证书URL列表 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 人员描述 |
|   `emergencyContact` | `string` | | 紧急联系人 |
|   `emergencyPhone` | `string` | | 紧急联系电话 |
|   `ethnicity` | `string` | | 民族 |
|   `gender` | `int` | | 性别0=女 1=男 |
|   `guideCardNo` | `string` | | 导游证号 |
|   `guideLanguage` | `string` | | 导游语种 |
|   `guideLevel` | `string` | | 导游等级 |
|   `highlights` | `string` | | 人员亮点 |
|   `idCardUrls` | `string[]` | | 证件照URL列表 |
|   `languages` | `string[]` | | 掌握语言 |
|   `licenseExpiry` | `string` | | 执照到期日 |
|   `licenseNo` | `string` | | 执照编号 |
|   `licenseType` | `string` | | 执照类型 |
|   `name` | `string` | | 姓名 |
|   `nationality` | `string` | | 国籍 |
|   `nativePlace` | `string` | | 籍贯 |
|   `phone` | `string` | | 手机号 |
|   `photoUrls` | `string[]` | | 个人照片URL列表 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评价数 |
|   `serviceAreas` | `string[]` | | 服务区域 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specialties` | `string[]` | | 擅长领域 |
|   `staffId` | `string` | | 人员ID |
|   `staffType` | `string` | | 人员类型 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `tags` | `服务人员标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `yearsOfExperience` | `int` | | 从业年限 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/staff/batch
**批量删除**
批量软删除多个服务人员。仅SUPER_ADMIN或创建者可操作。
**请求体** `人员批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffIds` | `long[]` | 是 | 人员ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/staff/batch/status
**批量更新状态**
批量修改多个服务人员的状态,跳过审批流程。
**请求体** `人员状态请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffIds` | `long[]` | | 人员ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/staff/list
**服务人员列表**
分页查询服务人员列表,支持按姓名、状态、人员类型等条件筛选。
**关联字典**
- staff_type人员类型筛选+列表显示)
- guide_level导游等级列表显示
- driver_license_type驾照类型列表显示
- language语言能力列表显示
- guide_specialty导游专长列表显示
- guide_service_area服务区域列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 搜索关键词(姓名/描述模糊匹配) | 张导 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `staffType` | `string` | | 人员类型筛选 | GUIDE |
| `status` | `integer(int32)` | | 状态筛选0=禁用 1=启用 | 1 |
| `tagId` | `integer(int64)` | | 标签ID单个 | |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 1,2,3 |
**响应** `统一响应结果«分页结果«服务人员列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«服务人员列表VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `服务人员列表VO[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批单号 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `highlights` | `string` | | 人员亮点 |
|     `name` | `string` | | 姓名 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `phone` | `string` | | 手机号 |
|     `rating` | `number` | | 评分 |
|     `sortOrder` | `int` | | 排序权重 |
|     `staffId` | `string` | | 人员ID |
|     `staffType` | `string` | | 人员类型 |
|     `status` | `int` | | 状态0=禁用 1=启用 |
|     `tags` | `服务人员标签VO[]` | | 标签列表 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/staff/{staffId}
**服务人员详情**
获取服务人员完整信息,包含素材URL、标签、技能描述等。
**关联字典**
- staff_type人员类型详情显示
- guide_level导游等级详情显示
- driver_license_type驾照类型详情显示
- language语言能力详情显示
- guide_specialty导游专长详情显示
- guide_service_area服务区域详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**响应** `统一响应结果«服务人员详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `birthDate` | `string` | | 出生日期 |
|   `certificateUrls` | `string[]` | | 资质证书URL列表 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 人员描述 |
|   `emergencyContact` | `string` | | 紧急联系人 |
|   `emergencyPhone` | `string` | | 紧急联系电话 |
|   `ethnicity` | `string` | | 民族 |
|   `gender` | `int` | | 性别0=女 1=男 |
|   `guideCardNo` | `string` | | 导游证号 |
|   `guideLanguage` | `string` | | 导游语种 |
|   `guideLevel` | `string` | | 导游等级 |
|   `highlights` | `string` | | 人员亮点 |
|   `idCardUrls` | `string[]` | | 证件照URL列表 |
|   `languages` | `string[]` | | 掌握语言 |
|   `licenseExpiry` | `string` | | 执照到期日 |
|   `licenseNo` | `string` | | 执照编号 |
|   `licenseType` | `string` | | 执照类型 |
|   `name` | `string` | | 姓名 |
|   `nationality` | `string` | | 国籍 |
|   `nativePlace` | `string` | | 籍贯 |
|   `phone` | `string` | | 手机号 |
|   `photoUrls` | `string[]` | | 个人照片URL列表 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评价数 |
|   `serviceAreas` | `string[]` | | 服务区域 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specialties` | `string[]` | | 擅长领域 |
|   `staffId` | `string` | | 人员ID |
|   `staffType` | `string` | | 人员类型 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `tags` | `服务人员标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `yearsOfExperience` | `int` | | 从业年限 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/staff/{staffId}
**更新服务人员**
更新服务人员基本信息,不改变当前状态。
**关联字典**
- staff_type人员类型表单选择
- guide_level导游等级表单选择
- driver_license_type驾照类型表单选择
- language语言能力表单多选
- guide_specialty导游专长表单多选
- guide_service_area服务区域表单多选
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**请求体** `服务人员更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `birthDate` | `string` | | 出生日期 |
| `certificateUrls` | `string[]` | | 资质证书URL列表 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 人员描述 |
| `emergencyContact` | `string` | | 紧急联系人 |
| `emergencyPhone` | `string` | | 紧急联系电话 |
| `ethnicity` | `string` | | 民族 |
| `gender` | `int` | | 性别0=女 1=男 |
| `guideCardNo` | `string` | | 导游证号 |
| `guideLanguage` | `string` | | 导游语种 |
| `guideLevel` | `string` | | 导游等级 |
| `highlights` | `string` | | 人员亮点 |
| `idCardUrls` | `string[]` | | 证件照URL列表 |
| `languages` | `string[]` | | 掌握语言JSON数组 |
| `licenseExpiry` | `string` | | 执照到期日 |
| `licenseNo` | `string` | | 执照编号 |
| `licenseType` | `string` | | 执照类型 |
| `name` | `string` | | 姓名 |
| `nationality` | `string` | | 国籍 |
| `nativePlace` | `string` | | 籍贯 |
| `phone` | `string` | | 手机号 |
| `photoUrls` | `string[]` | | 个人照片URL列表 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `serviceAreas` | `string[]` | | 服务区域JSON数组 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `specialties` | `string[]` | | 擅长领域JSON数组 |
| `staffType` | `string` | | 人员类型 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `yearsOfExperience` | `int` | | 从业年限 |
**响应** `统一响应结果«服务人员详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务人员详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `birthDate` | `string` | | 出生日期 |
|   `certificateUrls` | `string[]` | | 资质证书URL列表 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 人员描述 |
|   `emergencyContact` | `string` | | 紧急联系人 |
|   `emergencyPhone` | `string` | | 紧急联系电话 |
|   `ethnicity` | `string` | | 民族 |
|   `gender` | `int` | | 性别0=女 1=男 |
|   `guideCardNo` | `string` | | 导游证号 |
|   `guideLanguage` | `string` | | 导游语种 |
|   `guideLevel` | `string` | | 导游等级 |
|   `highlights` | `string` | | 人员亮点 |
|   `idCardUrls` | `string[]` | | 证件照URL列表 |
|   `languages` | `string[]` | | 掌握语言 |
|   `licenseExpiry` | `string` | | 执照到期日 |
|   `licenseNo` | `string` | | 执照编号 |
|   `licenseType` | `string` | | 执照类型 |
|   `name` | `string` | | 姓名 |
|   `nationality` | `string` | | 国籍 |
|   `nativePlace` | `string` | | 籍贯 |
|   `phone` | `string` | | 手机号 |
|   `photoUrls` | `string[]` | | 个人照片URL列表 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `rating` | `number` | | 评分 |
|   `reviewCount` | `int` | | 评价数 |
|   `serviceAreas` | `string[]` | | 服务区域 |
|   `sortOrder` | `int` | | 排序权重 |
|   `specialties` | `string[]` | | 擅长领域 |
|   `staffId` | `string` | | 人员ID |
|   `staffType` | `string` | | 人员类型 |
|   `status` | `int` | | 状态0=禁用 1=启用 |
|   `tags` | `服务人员标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=预设 1=自定义 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `yearsOfExperience` | `int` | | 从业年限 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/staff/{staffId}
**删除服务人员**
软删除服务人员。仅SUPER_ADMIN或创建者可操作。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/staff/{staffId}/status
**更新状态**
直接修改人员状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=启用,2=禁用。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**请求体** `人员状态请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffIds` | `long[]` | | 人员ID列表批量操作时使用 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/staff/{staffId}/submit-approval
**提交审批**
向企微OA提交人员启用/禁用审批。targetStatus=1申请启用,targetStatus=2申请禁用。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `staffId` | `integer` | | 人员ID |
**请求体** `人员审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | | 审批原因 |
| `targetStatus` | `int` | 是 | 目标状态 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
## 服务价格日历
### `GET` /admin/service/item/{serviceId}/prices
**查询价格日历**
按月查询增值服务的每日价格和可售状态。仅付费服务(isPaid=true)需要设置价格日历。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«服务项价格日历VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务项价格日历VO` | | 响应数据 |
|   `month` | `int` | | 月份 |
|   `prices` | `服务项价格日历日VO[]` | | 价格日历明细列表 |
|     `costPrice` | `number` | | 成本价(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可售 1=可售 |
|     `stock` | `int` | | 库存数量 |
|     `stockUsed` | `int` | | 已用库存 |
|   `serviceId` | `string` | | 服务项ID |
|   `serviceName` | `string` | | 服务项名称 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/service/item/{serviceId}/prices
**批量设置价格**
在指定日期范围内批量设置服务的成本价和可售状态。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 成本价(元) |
| `endDate` | `string` | 是 | 结束日期yyyy-MM-dd |
| `excludeDates` | `string[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期yyyy-MM-dd |
| `status` | `int` | | 状态0=不可售 1=可售 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 是否仅工作日 |
| `weekendOnly` | `boolean` | | 是否仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/service/item/{serviceId}/prices
**批量清除价格**
删除指定日期范围内的价格记录。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string` | | 结束日期 | |
| `startDate` | `string` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/service/item/{serviceId}/prices/batch-status
**批量修改可售状态**
批量修改日期范围内的可售状态,不影响价格。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期yyyy-MM-dd |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期yyyy-MM-dd |
| `status` | `int` | 是 | 状态0=不可售 1=可售 |
**响应** `统一响应结果«Void»`
---
## 服务标签管理
### `PUT` /admin/service/item/{serviceId}/tags
**更新服务标签**
全量替换指定服务的标签列表。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `serviceId` | `integer` | | 服务ID |
**请求体** `服务项标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表全量替换 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/service/items/batch/tags
**批量打标签**
对多个服务批量添加/移除标签。增量操作。
**请求体** `服务项批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
| `serviceIds` | `string[]` | 是 | 服务ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/service/tag
**创建管理标签**
创建预设标签,标签名不可重复。
**请求体** `服务标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«服务标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/service/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。
**请求体** `服务标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«服务标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/service/tag/{tagId}
**编辑标签**
修改标签名称或颜色,所有关联服务自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `服务标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«服务标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/service/tag/{tagId}
**删除标签**
删除标签并解除所有服务与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/service/tags
**获取管理标签列表(分页)**
分页查询增值服务标签库,支持按关键词搜索。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«服务标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«服务标签VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `服务标签VO[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/service/tags/all
**获取全部标签**
不分页返回所有标签,用于服务编辑时的标签选择。
**响应** `统一响应结果«List«服务标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `服务标签VO[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 游玩项目价格日历
### `GET` /admin/activity/item/{activityId}/prices
**查询价格日历**
按月查询游玩项目的每日价格和可接待状态。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«活动价格日历视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动价格日历视图` | | 响应数据 |
|   `activityId` | `string` | | 活动项目ID |
|   `activityName` | `string` | | 活动项目名称 |
|   `month` | `int` | | 月份 |
|   `prices` | `活动价格日历日视图[]` | | 价格日历每日数据列表 |
|     `costPrice` | `number` | | 成本价(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可用 1=可用 |
|     `stock` | `int` | | 库存数量 |
|     `stockUsed` | `int` | | 已用库存 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/activity/item/{activityId}/prices
**批量设置价格**
在指定日期范围内批量设置成本价和可接待状态。支持按星期过滤和排除特定日期。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 成本价(元) |
| `endDate` | `string` | 是 | 结束日期 |
| `excludeDates` | `string[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | | 状态0=不可用 1=可用 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 是否仅工作日 |
| `weekendOnly` | `boolean` | | 是否仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/activity/item/{activityId}/prices
**批量清除价格**
删除指定日期范围内的所有价格记录。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string` | | 结束日期 | |
| `startDate` | `string` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/activity/item/{activityId}/prices/batch-status
**批量修改可接待状态**
批量修改指定日期范围内的可接待状态,不影响价格。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期 |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | 是 | 状态0=不可用 1=可用 |
**响应** `统一响应结果«Void»`
---
## 游玩项目标签管理
### `PUT` /admin/activity/item/{activityId}/tags
**更新项目标签**
全量替换指定项目的标签列表。传入tagIds为最终关联的标签ID列表,为空则清除所有标签。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动项目标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/activity/items/batch/tags
**批量打标签**
对多个项目批量添加/移除标签。增量操作,不影响未指定的标签。
**请求体** `活动项目批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityIds` | `string[]` | 是 | 活动项目ID列表 |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/activity/tag
**创建管理标签**
创建预设标签,标签名不可重复。可指定颜色(tagColor),默认#409EFF
**请求体** `活动标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«活动标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/activity/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。用于项目编辑时快速输入新标签。
**请求体** `活动标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«活动标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/activity/tag/{tagId}
**编辑标签**
修改标签名称或颜色,所有关联项目自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `活动标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«活动标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/activity/tag/{tagId}
**删除标签**
删除标签并自动解除所有项目与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/activity/tags
**获取管理标签列表(分页)**
分页查询游玩项目标签库,支持按关键词搜索。包含预设标签和自定义标签。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«活动标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«活动标签视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `活动标签视图[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/activity/tags/all
**获取全部标签**
不分页返回所有标签,用于项目编辑时的标签选择下拉。
**响应** `统一响应结果«List«活动标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动标签视图[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 游玩项目管理
### `POST` /admin/activity/item
**创建游玩项目**
新建游玩项目资源(如漂流、骑行、篝火晚会等),初始状态为草稿(status=0)。需通过「提交启用/禁用审批」走企微审批后上架。支持按项收费(PER_ITEM)和按人收费(PER_PERSON)两种计费方式。
**关联字典**
- activity_category活动分类表单选择
- activity_billing_type计费方式表单选择
**请求体** `活动项目创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `ageMax` | `int` | | 最大年龄限制 |
| `ageMin` | `int` | | 最小年龄限制 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `bestSeason` | `string` | | 最佳季节 |
| `billingType` | `string` | 是 | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 |
| `categoryCode` | `string` | 是 | 分类编码 |
| `city` | `string` | | 城市 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `dailyCapacity` | `int` | | 每日接待上限 |
| `description` | `string` | | 项目描述 |
| `district` | `string` | | 区县 |
| `durationMinutes` | `int` | | 体验时长(分钟) |
| `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
| `groupSizeMax` | `int` | | 单次最多人数 |
| `groupSizeMin` | `int` | | 最少成行人数 |
| `healthNotes` | `string` | | 健康须知 |
| `highlights` | `string` | | 项目亮点 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `name` | `string` | 是 | 项目名称 |
| `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
| `providedEquipment` | `string` | | 提供装备说明 |
| `province` | `string` | | 省份 |
| `requiredEquipment` | `string` | | 需自备装备说明 |
| `safetyNotes` | `string` | | 安全须知 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计量单位 |
| `usageNotes` | `string` | | 使用注意事项 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
| `whatExcluded` | `string` | | 费用不包含说明 |
| `whatIncluded` | `string` | | 费用包含说明 |
**响应** `统一响应结果«活动项目详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动项目详情视图` | | 响应数据 |
|   `activityId` | `string` | | 活动项目ID |
|   `address` | `string` | | 详细地址 |
|   `ageMax` | `int` | | 最大年龄限制 |
|   `ageMin` | `int` | | 最小年龄限制 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `bestSeason` | `string` | | 最佳季节 |
|   `billingType` | `string` | | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `dailyCapacity` | `int` | | 每日接待上限 |
|   `description` | `string` | | 项目描述 |
|   `district` | `string` | | 区县 |
|   `durationMinutes` | `int` | | 体验时长(分钟) |
|   `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
|   `groupSizeMax` | `int` | | 单次最多人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `healthNotes` | `string` | | 健康须知 |
|   `highlights` | `string` | | 项目亮点 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 项目名称 |
|   `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
|   `providedEquipment` | `string` | | 提供装备说明 |
|   `province` | `string` | | 省份 |
|   `requiredEquipment` | `string` | | 需自备装备说明 |
|   `safetyNotes` | `string` | | 安全须知 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `活动标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
|   `whatExcluded` | `string` | | 费用不包含说明 |
|   `whatIncluded` | `string` | | 费用包含说明 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/activity/item/{activityId}
**游玩项目详情**
获取游玩项目完整信息,包含富文本内容、素材URL、标签、价格日历等。
**关联字典**
- activity_category活动分类详情显示
- activity_billing_type计费方式详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**响应** `统一响应结果«活动项目详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动项目详情视图` | | 响应数据 |
|   `activityId` | `string` | | 活动项目ID |
|   `address` | `string` | | 详细地址 |
|   `ageMax` | `int` | | 最大年龄限制 |
|   `ageMin` | `int` | | 最小年龄限制 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `bestSeason` | `string` | | 最佳季节 |
|   `billingType` | `string` | | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `dailyCapacity` | `int` | | 每日接待上限 |
|   `description` | `string` | | 项目描述 |
|   `district` | `string` | | 区县 |
|   `durationMinutes` | `int` | | 体验时长(分钟) |
|   `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
|   `groupSizeMax` | `int` | | 单次最多人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `healthNotes` | `string` | | 健康须知 |
|   `highlights` | `string` | | 项目亮点 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 项目名称 |
|   `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
|   `providedEquipment` | `string` | | 提供装备说明 |
|   `province` | `string` | | 省份 |
|   `requiredEquipment` | `string` | | 需自备装备说明 |
|   `safetyNotes` | `string` | | 安全须知 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `活动标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
|   `whatExcluded` | `string` | | 费用不包含说明 |
|   `whatIncluded` | `string` | | 费用包含说明 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/activity/item/{activityId}
**更新游玩项目**
更新游玩项目基本信息,不改变当前状态。已上架的项目修改后仍保持上架。
**关联字典**
- activity_category活动分类表单选择
- activity_billing_type计费方式表单选择
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动项目更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `ageMax` | `int` | | 最大年龄限制 |
| `ageMin` | `int` | | 最小年龄限制 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `bestSeason` | `string` | | 最佳季节 |
| `billingType` | `string` | | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 |
| `categoryCode` | `string` | | 分类编码 |
| `city` | `string` | | 城市 |
| `contactPhone` | `string` | | 联系电话 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `dailyCapacity` | `int` | | 每日接待上限 |
| `description` | `string` | | 项目描述 |
| `district` | `string` | | 区县 |
| `durationMinutes` | `int` | | 体验时长(分钟) |
| `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
| `groupSizeMax` | `int` | | 单次最多人数 |
| `groupSizeMin` | `int` | | 最少成行人数 |
| `healthNotes` | `string` | | 健康须知 |
| `highlights` | `string` | | 项目亮点 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `name` | `string` | | 项目名称 |
| `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
| `providedEquipment` | `string` | | 提供装备说明 |
| `province` | `string` | | 省份 |
| `requiredEquipment` | `string` | | 需自备装备说明 |
| `safetyNotes` | `string` | | 安全须知 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `subtitle` | `string` | | 副标题 |
| `unit` | `string` | | 计量单位 |
| `usageNotes` | `string` | | 使用注意事项 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
| `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
| `whatExcluded` | `string` | | 费用不包含说明 |
| `whatIncluded` | `string` | | 费用包含说明 |
**响应** `统一响应结果«活动项目详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `活动项目详情视图` | | 响应数据 |
|   `activityId` | `string` | | 活动项目ID |
|   `address` | `string` | | 详细地址 |
|   `ageMax` | `int` | | 最大年龄限制 |
|   `ageMin` | `int` | | 最小年龄限制 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `bestSeason` | `string` | | 最佳季节 |
|   `billingType` | `string` | | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 |
|   `categoryCode` | `string` | | 分类编码 |
|   `city` | `string` | | 城市 |
|   `contactPhone` | `string` | | 联系电话 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `dailyCapacity` | `int` | | 每日接待上限 |
|   `description` | `string` | | 项目描述 |
|   `district` | `string` | | 区县 |
|   `durationMinutes` | `int` | | 体验时长(分钟) |
|   `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
|   `groupSizeMax` | `int` | | 单次最多人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `healthNotes` | `string` | | 健康须知 |
|   `highlights` | `string` | | 项目亮点 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `name` | `string` | | 项目名称 |
|   `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
|   `providedEquipment` | `string` | | 提供装备说明 |
|   `province` | `string` | | 省份 |
|   `requiredEquipment` | `string` | | 需自备装备说明 |
|   `safetyNotes` | `string` | | 安全须知 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `活动标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `unit` | `string` | | 计量单位 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用注意事项 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
|   `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
|   `whatExcluded` | `string` | | 费用不包含说明 |
|   `whatIncluded` | `string` | | 费用包含说明 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/activity/item/{activityId}
**删除游玩项目**
软删除游玩项目。仅SUPER_ADMIN或创建者可操作。删除后关联的素材引用会被清理。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/activity/item/{activityId}/status
**启用/禁用切换**
直接修改状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动项目状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityIds` | `string[]` | | 活动项目ID列表批量操作 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/activity/item/{activityId}/submit-approval
**提交启用/禁用审批**
向企微OA提交审批。targetStatus=1申请上架,targetStatus=2申请下架。审批通过后自动更新状态,返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityId` | `integer` | | 游玩项目ID |
**请求体** `活动项目审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/activity/items
**游玩项目列表**
分页查询游玩项目列表,支持按名称、状态、分类等条件筛选。返回摘要信息,按sortOrder倒序+创建时间倒序排列。
**关联字典**
- activity_category活动分类筛选+列表显示)
- activity_billing_type计费方式列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `billingType` | `string` | | 计费方式PER_PERSON=按人 PER_GROUP=按团 PER_HOUR=按时 | PER_PERSON |
| `categoryCode` | `string` | | 分类编码 | OUTDOOR |
| `city` | `string` | | 城市 | 拉萨市 |
| `cityKeyword` | `string` | | 城市/区域关键词模糊搜索(匹配城市名、省份、地址) | 海拉尔 |
| `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 | OUTDOOR |
| `keyword` | `string` | | 搜索关键词(名称/副标题模糊搜索) | 骑马 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 | MEDIUM |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc=升序 desc=降序 | desc |
| `status` | `integer(int32)` | | 状态0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID | 100 |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 100,101,102 |
| `weatherDependent` | `integer(int32)` | | 是否受天气影响0=否 1=是 | 1 |
**响应** `统一响应结果«分页结果«活动项目列表视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«活动项目列表视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `活动项目列表视图[]` | | 数据列表 |
|     `activityId` | `string` | | 活动项目ID |
|     `approvalNo` | `string` | | 审批编号 |
|     `billingType` | `string` | | 计费方式编码 |
|     `categoryCode` | `string` | | 分类编码 |
|     `city` | `string` | | 城市 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `durationMinutes` | `int` | | 体验时长(分钟) |
|     `environmentType` | `string` | | 环境类型INDOOR=室内 OUTDOOR=室外 BOTH=室内外 |
|     `highlights` | `string` | | 项目亮点 |
|     `latitude` | `number` | | 纬度 |
|     `longitude` | `number` | | 经度 |
|     `name` | `string` | | 项目名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `physicalLevel` | `string` | | 体力要求LOW=低 MEDIUM=中 HIGH=高 |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `tags` | `活动标签视图[]` | | 标签列表 |
|     `unit` | `string` | | 计量单位 |
|     `viewCount` | `int` | | 浏览量 |
|     `weatherDependent` | `int` | | 是否受天气影响0=否 1=是 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/activity/items/batch
**批量删除**
批量软删除多个游玩项目。仅SUPER_ADMIN或创建者可操作。
**请求体** `活动项目批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityIds` | `string[]` | 是 | 活动项目ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/activity/items/batch/status
**批量启用/禁用**
批量修改多个游玩项目的状态,跳过审批流程。
**请求体** `活动项目状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `activityIds` | `string[]` | | 活动项目ID列表批量操作 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
## 费用项价格日历
### `GET` /admin/cost/item/{costId}/prices
**查询价格日历**
按月查询费用项的每日价格。费用项价格日历用于产品报价计算时按日期获取成本价。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«费用项价格日历VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项价格日历VO` | | 响应数据 |
|   `days` | `费用项价格日历日VO[]` | | 价格日历明细列表 |
|     `date` | `string` | | 日期yyyy-MM-dd |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可用 1=可用 |
|     `unitPrice` | `number` | | 单价(元) |
|   `yearMonth` | `string` | | 年月yyyy-MM |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/cost/item/{costId}/prices
**批量设置价格**
在指定日期范围内批量设置费用项的成本价。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**请求体** `费用项价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `dayFilter` | `string` | | 日期过滤weekday=仅工作日 weekend=仅周末 |
| `endDate` | `string` | 是 | 结束日期 |
| `excludeDates` | `LocalDate[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期 |
| `unitPrice` | `number` | 是 | 单价(元) |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/cost/item/{costId}/prices
**清除价格日历**
删除指定日期范围内费用项的价格记录。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string(date)` | | 结束日期 | |
| `startDate` | `string(date)` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
## 费用项管理
### `POST` /admin/cost/item
**创建费用项**
新建费用项(如门票成本、餐费、保险费等),用于产品报价计算。费用项有独立的价格日历,价格变更会记录变更日志。创建后需走企微审批上架。
**关联字典**
- cost_category费用分类表单选择
- cost_apply_role适用角色表单选择
- cost_unit计量单位表单选择
**请求体** `费用项创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `applyRole` | `string` | 是 | 适用角色 |
| `calcHint` | `string` | | 计算提示 |
| `categoryCode` | `string` | 是 | 费用分类编码 |
| `defaultFormula` | `string` | | 默认计算公式 |
| `description` | `string` | | 费用描述 |
| `name` | `string` | 是 | 费用名称 |
| `remark` | `string` | | 备注 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `unit` | `string` | | 计价单位 |
| `unitPrice` | `number` | 是 | 单价(元) |
**响应** `统一响应结果«费用项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项详情VO` | | 响应数据 |
|   `applyRole` | `string` | | 适用角色 |
|   `approvalNo` | `string` | | 审批单号 |
|   `calcHint` | `string` | | 计算提示 |
|   `categoryCode` | `string` | | 费用分类编码 |
|   `costId` | `string` | | 费用项ID |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `defaultFormula` | `string` | | 默认计算公式 |
|   `description` | `string` | | 费用描述 |
|   `name` | `string` | | 费用名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `refCount` | `int` | | 引用次数 |
|   `remark` | `string` | | 备注 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `unit` | `string` | | 计价单位 |
|   `unitPrice` | `number` | | 单价(元) |
|   `updatedAt` | `string` | | 更新时间 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/cost/item/{costId}
**费用项详情**
获取费用项完整信息,包含当前价格、引用计数等。
**关联字典**
- cost_category费用分类详情显示
- cost_apply_role适用角色详情显示
- cost_unit计量单位详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**响应** `统一响应结果«费用项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项详情VO` | | 响应数据 |
|   `applyRole` | `string` | | 适用角色 |
|   `approvalNo` | `string` | | 审批单号 |
|   `calcHint` | `string` | | 计算提示 |
|   `categoryCode` | `string` | | 费用分类编码 |
|   `costId` | `string` | | 费用项ID |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `defaultFormula` | `string` | | 默认计算公式 |
|   `description` | `string` | | 费用描述 |
|   `name` | `string` | | 费用名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `refCount` | `int` | | 引用次数 |
|   `remark` | `string` | | 备注 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `unit` | `string` | | 计价单位 |
|   `unitPrice` | `number` | | 单价(元) |
|   `updatedAt` | `string` | | 更新时间 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/cost/item/{costId}
**更新费用项**
更新费用项信息。如果修改了价格,会自动记录价格变更日志。
**关联字典**
- cost_category费用分类表单选择
- cost_apply_role适用角色表单选择
- cost_unit计量单位表单选择
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**请求体** `费用项更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `applyRole` | `string` | | 适用角色 |
| `calcHint` | `string` | | 计算提示 |
| `categoryCode` | `string` | | 费用分类编码 |
| `changeReason` | `string` | | 价格变更原因(修改单价时必填) |
| `defaultFormula` | `string` | | 默认计算公式 |
| `description` | `string` | | 费用描述 |
| `name` | `string` | | 费用名称 |
| `remark` | `string` | | 备注 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `unit` | `string` | | 计价单位 |
| `unitPrice` | `number` | | 单价(元) |
**响应** `统一响应结果«费用项详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项详情VO` | | 响应数据 |
|   `applyRole` | `string` | | 适用角色 |
|   `approvalNo` | `string` | | 审批单号 |
|   `calcHint` | `string` | | 计算提示 |
|   `categoryCode` | `string` | | 费用分类编码 |
|   `costId` | `string` | | 费用项ID |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `defaultFormula` | `string` | | 默认计算公式 |
|   `description` | `string` | | 费用描述 |
|   `name` | `string` | | 费用名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `refCount` | `int` | | 引用次数 |
|   `remark` | `string` | | 备注 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `unit` | `string` | | 计价单位 |
|   `unitPrice` | `number` | | 单价(元) |
|   `updatedAt` | `string` | | 更新时间 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/cost/item/{costId}
**删除费用项**
软删除费用项。仅SUPER_ADMIN或创建者可操作。被产品引用(refCount>0)的费用项不建议删除。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/cost/item/{costId}/price-logs
**费用项价格变更记录**
查询费用项的历史价格变更记录,按时间倒序排列。用于追溯价格调整历史。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**响应** `统一响应结果«List«费用项价格变更日志VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项价格变更日志VO[]` | | 响应数据 |
|   `changeReason` | `string` | | 变更原因 |
|   `changedAt` | `string` | | 变更时间 |
|   `changedBy` | `string` | | 变更人ID |
|   `costId` | `string` | | 费用项ID |
|   `id` | `long` | | 日志ID |
|   `newPrice` | `number` | | 变更后价格(元) |
|   `oldPrice` | `number` | | 变更前价格(元) |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/cost/item/{costId}/submit-approval
**提交审批**
向企微OA提交费用项启用/禁用审批。targetStatus=1申请上架,targetStatus=2申请下架。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costId` | `integer` | | 费用项ID |
**请求体** `费用项审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | | 审批原因 |
| `targetStatus` | `int` | 是 | 目标状态 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/cost/items
**费用项列表**
分页查询费用项列表,支持按名称、状态等条件筛选。
**关联字典**
- cost_category费用分类筛选+列表显示)
- cost_apply_role适用角色筛选+列表显示)
- cost_unit计量单位列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `applyRole` | `string` | | 适用角色筛选 | ADULT |
| `categoryCode` | `string` | | 费用分类编码筛选 | GUIDE |
| `keyword` | `string` | | 搜索关键词(名称模糊匹配) | 导游 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `status` | `integer(int32)` | | 状态筛选0=草稿 1=上架 2=下架 | 1 |
**响应** `统一响应结果«分页结果«费用项列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«费用项列表VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `费用项列表VO[]` | | 数据列表 |
|     `applyRole` | `string` | | 适用角色 |
|     `approvalNo` | `string` | | 审批单号 |
|     `categoryCode` | `string` | | 费用分类编码 |
|     `costId` | `string` | | 费用项ID |
|     `createdAt` | `string` | | 创建时间 |
|     `name` | `string` | | 费用名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `refCount` | `int` | | 引用次数 |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `unit` | `string` | | 计价单位 |
|     `unitPrice` | `number` | | 单价(元) |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/cost/items/enabled
**启用的费用项列表**
查询所有已启用(status=1)的费用项,不分页。用于产品编排时选择费用项的下拉列表。
**关联字典**
- cost_category费用分类列表显示
- cost_apply_role适用角色列表显示
- cost_unit计量单位列表显示
**响应** `统一响应结果«List«费用项详情VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `费用项详情VO[]` | | 响应数据 |
|   `applyRole` | `string` | | 适用角色 |
|   `approvalNo` | `string` | | 审批单号 |
|   `calcHint` | `string` | | 计算提示 |
|   `categoryCode` | `string` | | 费用分类编码 |
|   `costId` | `string` | | 费用项ID |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `defaultFormula` | `string` | | 默认计算公式 |
|   `description` | `string` | | 费用描述 |
|   `name` | `string` | | 费用名称 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `refCount` | `int` | | 引用次数 |
|   `remark` | `string` | | 备注 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `unit` | `string` | | 计价单位 |
|   `unitPrice` | `number` | | 单价(元) |
|   `updatedAt` | `string` | | 更新时间 |
| `message` | `string` | | 响应消息 |
---
## 车型价格日历
### `GET` /admin/vehicle/model/{vehicleId}/prices
**查询价格日历**
按月查询车型的每日租赁价格和可调度状态。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `month` | `integer(int32)` | | 月份 | |
| `year` | `integer(int32)` | | 年份 | |
**响应** `统一响应结果«车型价格日历VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车型价格日历VO` | | 响应数据 |
|   `month` | `int` | | 月份 |
|   `prices` | `车型价格日历日VO[]` | | 价格日历明细列表 |
|     `costPrice` | `number` | | 日租价(元) |
|     `date` | `string` | | 日期 |
|     `remark` | `string` | | 备注 |
|     `status` | `int` | | 状态0=不可租 1=可租 |
|     `stock` | `int` | | 库存数量 |
|     `stockUsed` | `int` | | 已用库存 |
|   `stockEnabled` | `boolean` | | 是否启用库存管理 |
|   `vehicleId` | `string` | | 车型ID |
|   `vehicleName` | `string` | | 车型名称 |
|   `year` | `int` | | 年份 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/vehicle/model/{vehicleId}/prices
**批量设置价格**
在指定日期范围内批量设置车型的租赁成本价和可调度状态。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `车型价格日历设置请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `costPrice` | `number` | 是 | 日租价(元) |
| `endDate` | `string` | 是 | 结束日期 |
| `excludeDates` | `LocalDate[]` | | 排除日期列表 |
| `remark` | `string` | | 备注 |
| `selectedWeekdays` | `int[]` | | 指定星期几1=周一 7=周日) |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | | 状态0=不可租 1=可租 |
| `stock` | `int` | | 库存数量 |
| `weekdayOnly` | `boolean` | | 是否仅工作日 |
| `weekendOnly` | `boolean` | | 是否仅周末 |
**响应** `统一响应结果«Void»`
---
### `DELETE` /admin/vehicle/model/{vehicleId}/prices
**清除价格日历**
删除指定日期范围内车型的价格记录。日期格式yyyy-MM-dd。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `endDate` | `string(date)` | | 结束日期 | |
| `startDate` | `string(date)` | | 开始日期 | |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/vehicle/model/{vehicleId}/prices/batch-status
**批量修改调度状态**
批量修改日期范围内车型的可调度状态,不影响价格。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `车型价格日历状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `endDate` | `string` | 是 | 结束日期 |
| `remark` | `string` | | 备注 |
| `startDate` | `string` | 是 | 开始日期 |
| `status` | `int` | 是 | 状态0=不可租 1=可租 |
**响应** `统一响应结果«Void»`
---
## 车型标签管理
### `PUT` /admin/vehicle/model/{vehicleId}/tags
**设置车型标签**
全量替换指定车型的标签列表。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `设置车型标签请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `long[]` | 是 | 标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/vehicle/models/batch/tags
**批量添加/移除标签**
对多个车型批量添加/移除标签。增量操作。
**请求体** `车型批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `long[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `long[]` | | 要移除的标签ID列表 |
| `vehicleIds` | `long[]` | 是 | 车型ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/vehicle/tag
**创建标签**
创建预设标签,标签名不可重复。
**请求体** `车辆标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«车辆标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车辆标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/vehicle/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。
**请求体** `车辆标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«车辆标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车辆标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/vehicle/tag/{tagId}
**更新标签**
修改标签名称或颜色。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `车辆标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«车辆标签VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车辆标签VO` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/vehicle/tag/{tagId}
**删除标签**
删除标签并解除所有车型与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/vehicle/tags
**预设标签列表(分页)**
分页查询车型标签库,支持按关键词搜索。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«车辆标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«车辆标签VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `车辆标签VO[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/vehicle/tags/all
**全部标签列表**
不分页返回所有标签,用于车型编辑时的标签选择。
**响应** `统一响应结果«List«车辆标签VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车辆标签VO[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色(十六进制) |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 车型管理
### `POST` /admin/vehicle/model
**创建车型**
新建车型资源如7座商务车、14座中巴等,初始状态为草稿(status=0)。车型有独立的价格日历用于报价计算。需走企微审批上架。
**关联字典**
- vehicle_type车辆类型表单选择
**请求体** `车型创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础日租价(元) |
| `brand` | `string` | 是 | 品牌 |
| `comfortFeatures` | `string` | | 舒适配置JSON |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 车型描述 |
| `driveType` | `string` | | 驱动方式 |
| `engineType` | `string` | | 动力类型 |
| `highlights` | `string` | | 车型亮点 |
| `luggageCapacity` | `string` | | 行李容量描述 |
| `modelSeries` | `string` | | 车系 |
| `modelYear` | `int` | | 年款 |
| `name` | `string` | 是 | 车型名称 |
| `passengerCount` | `int` | 是 | 可乘坐人数 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `seatCount` | `int` | 是 | 座位数 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `subtitle` | `string` | | 副标题 |
| `transmission` | `string` | | 变速箱类型 |
| `usageNotes` | `string` | | 使用须知 |
| `vehicleType` | `string` | 是 | 车型分类 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«车型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车型详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础日租价(元) |
|   `brand` | `string` | | 品牌 |
|   `comfortFeatures` | `string` | | 舒适配置JSON |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 车型描述 |
|   `driveType` | `string` | | 驱动方式 |
|   `engineType` | `string` | | 动力类型 |
|   `highlights` | `string` | | 车型亮点 |
|   `luggageCapacity` | `string` | | 行李容量描述 |
|   `modelSeries` | `string` | | 车系 |
|   `modelYear` | `int` | | 年款 |
|   `name` | `string` | | 车型名称 |
|   `passengerCount` | `int` | | 可乘坐人数 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `seatCount` | `int` | | 座位数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `车辆标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `transmission` | `string` | | 变速箱类型 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleId` | `string` | | 车型ID |
|   `vehicleType` | `string` | | 车型分类 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/vehicle/model/{vehicleId}
**车型详情**
获取车型完整信息,包含座位数、品牌、素材URL、标签等。
**关联字典**
- vehicle_type车辆类型详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**响应** `统一响应结果«车型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车型详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础日租价(元) |
|   `brand` | `string` | | 品牌 |
|   `comfortFeatures` | `string` | | 舒适配置JSON |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 车型描述 |
|   `driveType` | `string` | | 驱动方式 |
|   `engineType` | `string` | | 动力类型 |
|   `highlights` | `string` | | 车型亮点 |
|   `luggageCapacity` | `string` | | 行李容量描述 |
|   `modelSeries` | `string` | | 车系 |
|   `modelYear` | `int` | | 年款 |
|   `name` | `string` | | 车型名称 |
|   `passengerCount` | `int` | | 可乘坐人数 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `seatCount` | `int` | | 座位数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `车辆标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `transmission` | `string` | | 变速箱类型 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleId` | `string` | | 车型ID |
|   `vehicleType` | `string` | | 车型分类 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/vehicle/model/{vehicleId}
**更新车型**
更新车型基本信息,不改变当前状态。
**关联字典**
- vehicle_type车辆类型表单选择
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `车型更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
| `basePrice` | `number` | | 基础日租价(元) |
| `brand` | `string` | | 品牌 |
| `comfortFeatures` | `string` | | 舒适配置JSON |
| `coverMaterialId` | `string` | | 封面素材ID |
| `description` | `string` | | 车型描述 |
| `driveType` | `string` | | 驱动方式 |
| `engineType` | `string` | | 动力类型 |
| `highlights` | `string` | | 车型亮点 |
| `luggageCapacity` | `string` | | 行李容量描述 |
| `modelSeries` | `string` | | 车系 |
| `modelYear` | `int` | | 年款 |
| `name` | `string` | | 车型名称 |
| `passengerCount` | `int` | | 可乘坐人数 |
| `priceExcludes` | `string` | | 价格不包含内容 |
| `priceIncludes` | `string` | | 价格包含内容 |
| `seatCount` | `int` | | 座位数 |
| `sortOrder` | `int` | | 排序权重,值越大越靠前 |
| `subtitle` | `string` | | 副标题 |
| `transmission` | `string` | | 变速箱类型 |
| `usageNotes` | `string` | | 使用须知 |
| `vehicleType` | `string` | | 车型分类 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«车型详情VO»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车型详情VO` | | 响应数据 |
|   `bannerMaterialIds` | `string[]` | | 横幅素材ID列表 |
|   `bannerUrls` | `string[]` | | 横幅图URL列表 |
|   `basePrice` | `number` | | 基础日租价(元) |
|   `brand` | `string` | | 品牌 |
|   `comfortFeatures` | `string` | | 舒适配置JSON |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建者ID |
|   `description` | `string` | | 车型描述 |
|   `driveType` | `string` | | 驱动方式 |
|   `engineType` | `string` | | 动力类型 |
|   `highlights` | `string` | | 车型亮点 |
|   `luggageCapacity` | `string` | | 行李容量描述 |
|   `modelSeries` | `string` | | 车系 |
|   `modelYear` | `int` | | 年款 |
|   `name` | `string` | | 车型名称 |
|   `passengerCount` | `int` | | 可乘坐人数 |
|   `priceExcludes` | `string` | | 价格不包含内容 |
|   `priceIncludes` | `string` | | 价格包含内容 |
|   `seatCount` | `int` | | 座位数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `车辆标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `transmission` | `string` | | 变速箱类型 |
|   `updatedAt` | `string` | | 更新时间 |
|   `usageNotes` | `string` | | 使用须知 |
|   `vehicleId` | `string` | | 车型ID |
|   `vehicleType` | `string` | | 车型分类 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/vehicle/model/{vehicleId}
**删除车型**
软删除车型。仅SUPER_ADMIN或创建者可操作。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/vehicle/model/{vehicleId}/status
**更新状态**
直接修改车型状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `车型状态请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
| `vehicleIds` | `long[]` | | 车型ID列表批量操作时使用 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/vehicle/model/{vehicleId}/submit-approval
**提交审批**
向企微OA提交车型启用/禁用审批。targetStatus=1申请上架,targetStatus=2申请下架。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleId` | `integer` | | 车型ID |
**请求体** `车型审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | | 审批原因 |
| `targetStatus` | `int` | 是 | 目标状态 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/vehicle/models
**车型列表**
分页查询车型列表,支持按名称、状态、车辆类型等条件筛选。
**关联字典**
- vehicle_type车辆类型筛选+列表显示)
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `brand` | `string` | | 品牌筛选 | 别克 |
| `keyword` | `string` | | 搜索关键词(名称/品牌模糊匹配) | 别克 |
| `maxPrice` | `number` | | 最高价格筛选 | 2000.0 |
| `maxSeatCount` | `integer(int32)` | | 最多座位数筛选 | 15 |
| `minPrice` | `number` | | 最低价格筛选 | 500.0 |
| `minSeatCount` | `integer(int32)` | | 最少座位数筛选 | 5 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc/desc | desc |
| `status` | `integer(int32)` | | 状态筛选0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID单个 | |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 1,2,3 |
| `vehicleType` | `string` | | 车型分类筛选 | MPV |
**响应** `统一响应结果«分页结果«车型列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«车型列表VO»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `车型列表VO[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批单号 |
|     `basePrice` | `number` | | 基础日租价(元) |
|     `brand` | `string` | | 品牌 |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `highlights` | `string` | | 车型亮点 |
|     `modelSeries` | `string` | | 车系 |
|     `name` | `string` | | 车型名称 |
|     `passengerCount` | `int` | | 可乘坐人数 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `seatCount` | `int` | | 座位数 |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `tags` | `车辆标签VO[]` | | 标签列表 |
|     `vehicleId` | `string` | | 车型ID |
|     `vehicleType` | `string` | | 车型分类 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/vehicle/models/all
**车型全量列表(不分页,用于下拉选择)**
返回所有车型列表,可选按状态筛选。适用于产品编排时选择车型的下拉选择框。不分页返回全部数据。
**关联字典**
- vehicle_type车辆类型列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `status` | `integer(int32)` | | 状态筛选1=上架 | |
**响应** `统一响应结果«List«车型列表VO»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `车型列表VO[]` | | 响应数据 |
|   `approvalNo` | `string` | | 审批单号 |
|   `basePrice` | `number` | | 基础日租价(元) |
|   `brand` | `string` | | 品牌 |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `highlights` | `string` | | 车型亮点 |
|   `modelSeries` | `string` | | 车系 |
|   `name` | `string` | | 车型名称 |
|   `passengerCount` | `int` | | 可乘坐人数 |
|   `pendingStatus` | `int` | | 待审批目标状态 |
|   `seatCount` | `int` | | 座位数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `车辆标签VO[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色(十六进制) |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型0=自定义 1=系统 |
|     `useCount` | `int` | | 使用次数 |
|   `vehicleId` | `string` | | 车型ID |
|   `vehicleType` | `string` | | 车型分类 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/vehicle/models/batch
**批量删除**
批量软删除多个车型。仅SUPER_ADMIN或创建者可操作。
**请求体** `车型批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `vehicleIds` | `long[]` | 是 | 车型ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/vehicle/models/batch/status
**批量更新状态**
批量修改多个车型的状态,跳过审批流程。
**请求体** `车型状态请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
| `vehicleIds` | `long[]` | | 车型ID列表批量操作时使用 |
**响应** `统一响应结果«Void»`
---
## 餐厅标签管理
### `PUT` /admin/restaurant/item/{restaurantId}/tags
**更新餐厅标签**
全量替换指定餐厅的标签列表。传入tagIds为最终关联的标签ID列表,为空则清除所有标签。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**请求体** `餐厅标签更新请求_1`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagIds` | `string[]` | | 标签ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/restaurant/items/batch/tags
**批量打标签**
对多个餐厅批量添加/移除标签。增量操作,不影响未指定的标签。
**请求体** `餐厅批量标签操作请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `addTagIds` | `string[]` | | 要添加的标签ID列表 |
| `removeTagIds` | `string[]` | | 要移除的标签ID列表 |
| `restaurantIds` | `string[]` | 是 | 餐厅ID列表 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/restaurant/tag
**创建管理标签**
创建预设标签,标签名不可重复。可指定颜色(tagColor),默认#409EFF
**请求体** `餐厅标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«餐厅标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `POST` /admin/restaurant/tag/adhoc
**解析自定义标签**
按名称查找或自动创建标签。用于餐厅编辑时快速输入新标签。
**请求体** `餐厅标签创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | 是 | 标签名称 |
**响应** `统一响应结果«餐厅标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/restaurant/tag/{tagId}
**编辑标签**
修改标签名称或颜色,所有关联餐厅自动生效。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**请求体** `餐厅标签更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagColor` | `string` | | 标签颜色(十六进制) |
| `tagName` | `string` | | 标签名称 |
**响应** `统一响应结果«餐厅标签视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅标签视图` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/restaurant/tag/{tagId}
**删除标签**
删除标签并解除所有餐厅与该标签的关联。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `tagId` | `integer` | | 标签ID |
**响应** `统一响应结果«Void»`
---
### `GET` /admin/restaurant/tags
**获取管理标签列表(分页)**
分页查询餐厅标签库,支持按关键词搜索。包含预设标签和自定义标签。
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `keyword` | `string` | | 关键词 | |
| `page` | `integer(int32)` | | 页码 | |
| `pageSize` | `integer(int32)` | | 每页条数 | |
**响应** `统一响应结果«分页结果«餐厅标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«餐厅标签视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `餐厅标签视图[]` | | 数据列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/restaurant/tags/all
**获取全部标签**
不分页返回所有标签,用于餐厅编辑时的标签选择下拉。
**响应** `统一响应结果«List«餐厅标签视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅标签视图[]` | | 响应数据 |
|   `createdAt` | `string` | | 创建时间 |
|   `tagColor` | `string` | | 标签颜色 |
|   `tagId` | `string` | | 标签ID |
|   `tagName` | `string` | | 标签名称 |
|   `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|   `useCount` | `int` | | 使用次数 |
| `message` | `string` | | 响应消息 |
---
## 餐厅管理
### `POST` /admin/restaurant/item
**创建餐厅**
新建餐厅资源,初始状态为草稿(status=0)。餐厅没有价格日历,费用通过产品报价中的费用项管理。需走企微审批流程上架。
**关联字典**
- restaurant_category餐厅分类表单选择
- cuisine_type菜系类型表单多选
- environment_type环境类型表单多选
- restaurant_facility餐厅设施表单多选
**纯文本字段**
- cityName城市名称手动输入,如「拉萨」「海拉尔」
**请求体** `餐厅创建请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `arrangement` | `string` | | 座位布局说明 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `businessHours` | `string` | | 营业时间 |
| `capacity` | `int` | | 容纳人数 |
| `categoryCode` | `string` | 是 | 分类编码 |
| `city` | `string` | 是 | 城市 |
| `cityName` | `string` | 是 | 城市名称(纯文本输入) |
| `closedDay` | `string` | | 休息日 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `cuisineType` | `string` | | 菜系类型 |
| `description` | `string` | | 餐厅描述 |
| `district` | `string` | | 区县 |
| `environmentType` | `string` | | 环境类型 |
| `facilities` | `string[]` | | 设施列表 |
| `featureIntro` | `string` | | 图文详情JSON格式 |
| `featuredMenu` | `string` | | 招牌菜单JSON格式 |
| `groupSizeMax` | `int` | | 最多接待人数 |
| `groupSizeMin` | `int` | | 最少成行人数 |
| `hasPrivateRoom` | `int` | | 是否有包间0=无 1=有 |
| `highlights` | `string` | | 亮点摘要 |
| `latitude` | `number` | 是 | 纬度 |
| `longitude` | `number` | 是 | 经度 |
| `minAdvanceHours` | `int` | | 最少提前预约小时数 |
| `name` | `string` | 是 | 餐厅名称 |
| `phone` | `string` | | 联系电话 |
| `pricePerPerson` | `number` | | 人均消费(元) |
| `province` | `string` | 是 | 省份 |
| `recommended` | `int` | | 是否推荐0=否 1=是 |
| `reservationRequired` | `int` | | 是否需要预约0=否 1=是 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `subtitle` | `string` | | 副标题 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«餐厅详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅详情视图` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 座位布局说明 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `businessHours` | `string` | | 营业时间 |
|   `capacity` | `int` | | 容纳人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `city` | `string` | | 城市 |
|   `cityName` | `string` | | 城市名称(纯文本) |
|   `closedDay` | `string` | | 休息日 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cuisineType` | `string` | | 菜系类型编码 |
|   `cuisineTypeName` | `string` | | 菜系类型名称 |
|   `description` | `string` | | 餐厅描述 |
|   `district` | `string` | | 区县 |
|   `environmentType` | `string` | | 环境类型 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `featuredMenu` | `string` | | 招牌菜单JSON格式 |
|   `groupSizeMax` | `int` | | 最多接待人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `hasPrivateRoom` | `int` | | 是否有包间0=无 1=有 |
|   `highlights` | `string` | | 亮点摘要 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `minAdvanceHours` | `int` | | 最少提前预约小时数 |
|   `name` | `string` | | 餐厅名称 |
|   `phone` | `string` | | 联系电话 |
|   `pricePerPerson` | `number` | | 人均消费(元) |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `reservationRequired` | `int` | | 是否需要预约0=否 1=是 |
|   `restaurantId` | `string` | | 餐厅ID |
|   `reviewCount` | `int` | | 评论数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `餐厅标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/restaurant/item/{restaurantId}
**餐厅详情**
获取餐厅完整信息,包含素材URL、标签、富文本介绍等。
**关联字典**
- restaurant_category餐厅分类详情显示
- cuisine_type菜系类型详情显示
- environment_type环境类型详情显示
- restaurant_facility餐厅设施详情显示
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**响应** `统一响应结果«餐厅详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅详情视图` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 座位布局说明 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `businessHours` | `string` | | 营业时间 |
|   `capacity` | `int` | | 容纳人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `city` | `string` | | 城市 |
|   `cityName` | `string` | | 城市名称(纯文本) |
|   `closedDay` | `string` | | 休息日 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cuisineType` | `string` | | 菜系类型编码 |
|   `cuisineTypeName` | `string` | | 菜系类型名称 |
|   `description` | `string` | | 餐厅描述 |
|   `district` | `string` | | 区县 |
|   `environmentType` | `string` | | 环境类型 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `featuredMenu` | `string` | | 招牌菜单JSON格式 |
|   `groupSizeMax` | `int` | | 最多接待人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `hasPrivateRoom` | `int` | | 是否有包间0=无 1=有 |
|   `highlights` | `string` | | 亮点摘要 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `minAdvanceHours` | `int` | | 最少提前预约小时数 |
|   `name` | `string` | | 餐厅名称 |
|   `phone` | `string` | | 联系电话 |
|   `pricePerPerson` | `number` | | 人均消费(元) |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `reservationRequired` | `int` | | 是否需要预约0=否 1=是 |
|   `restaurantId` | `string` | | 餐厅ID |
|   `reviewCount` | `int` | | 评论数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `餐厅标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `PUT` /admin/restaurant/item/{restaurantId}
**更新餐厅**
更新餐厅基本信息,不改变当前状态。
**关联字典**
- restaurant_category餐厅分类表单选择
- cuisine_type菜系类型表单多选
- environment_type环境类型表单多选
- restaurant_facility餐厅设施表单多选
**纯文本字段**
- cityName城市名称手动输入
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**请求体** `餐厅更新请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `address` | `string` | | 详细地址 |
| `arrangement` | `string` | | 座位布局说明 |
| `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
| `businessHours` | `string` | | 营业时间 |
| `capacity` | `int` | | 容纳人数 |
| `categoryCode` | `string` | | 分类编码 |
| `city` | `string` | | 城市 |
| `cityName` | `string` | | 城市名称(纯文本输入) |
| `closedDay` | `string` | | 休息日 |
| `coverMaterialId` | `string` | | 封面素材ID |
| `cuisineType` | `string` | | 菜系类型 |
| `description` | `string` | | 餐厅描述 |
| `district` | `string` | | 区县 |
| `environmentType` | `string` | | 环境类型 |
| `facilities` | `string[]` | | 设施列表 |
| `featureIntro` | `string` | | 图文详情JSON格式 |
| `featuredMenu` | `string` | | 招牌菜单JSON格式 |
| `groupSizeMax` | `int` | | 最多接待人数 |
| `groupSizeMin` | `int` | | 最少成行人数 |
| `hasPrivateRoom` | `int` | | 是否有包间0=无 1=有 |
| `highlights` | `string` | | 亮点摘要 |
| `latitude` | `number` | | 纬度 |
| `longitude` | `number` | | 经度 |
| `minAdvanceHours` | `int` | | 最少提前预约小时数 |
| `name` | `string` | | 餐厅名称 |
| `phone` | `string` | | 联系电话 |
| `pricePerPerson` | `number` | | 人均消费(元) |
| `province` | `string` | | 省份 |
| `recommended` | `int` | | 是否推荐0=否 1=是 |
| `reservationRequired` | `int` | | 是否需要预约0=否 1=是 |
| `sortOrder` | `int` | | 排序权重(数字越大越靠前) |
| `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
| `subtitle` | `string` | | 副标题 |
| `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
**响应** `统一响应结果«餐厅详情视图»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `餐厅详情视图` | | 响应数据 |
|   `address` | `string` | | 详细地址 |
|   `arrangement` | `string` | | 座位布局说明 |
|   `bannerMaterialIds` | `string[]` | | 轮播图素材ID列表 |
|   `bannerUrls` | `string[]` | | 轮播图URL列表 |
|   `businessHours` | `string` | | 营业时间 |
|   `capacity` | `int` | | 容纳人数 |
|   `categoryCode` | `string` | | 分类编码 |
|   `categoryName` | `string` | | 分类名称 |
|   `city` | `string` | | 城市 |
|   `cityName` | `string` | | 城市名称(纯文本) |
|   `closedDay` | `string` | | 休息日 |
|   `coverMaterialId` | `string` | | 封面素材ID |
|   `coverUrl` | `string` | | 封面图URL |
|   `createdAt` | `string` | | 创建时间 |
|   `createdBy` | `string` | | 创建人ID |
|   `createdByName` | `string` | | 创建人姓名 |
|   `cuisineType` | `string` | | 菜系类型编码 |
|   `cuisineTypeName` | `string` | | 菜系类型名称 |
|   `description` | `string` | | 餐厅描述 |
|   `district` | `string` | | 区县 |
|   `environmentType` | `string` | | 环境类型 |
|   `facilities` | `string[]` | | 设施编码列表 |
|   `facilityNames` | `string[]` | | 设施名称列表 |
|   `featureIntro` | `string` | | 图文详情JSON格式 |
|   `featuredMenu` | `string` | | 招牌菜单JSON格式 |
|   `groupSizeMax` | `int` | | 最多接待人数 |
|   `groupSizeMin` | `int` | | 最少成行人数 |
|   `hasPrivateRoom` | `int` | | 是否有包间0=无 1=有 |
|   `highlights` | `string` | | 亮点摘要 |
|   `latitude` | `number` | | 纬度 |
|   `longitude` | `number` | | 经度 |
|   `minAdvanceHours` | `int` | | 最少提前预约小时数 |
|   `name` | `string` | | 餐厅名称 |
|   `phone` | `string` | | 联系电话 |
|   `pricePerPerson` | `number` | | 人均消费(元) |
|   `province` | `string` | | 省份 |
|   `rating` | `number` | | 评分 |
|   `recommended` | `int` | | 是否推荐0=否 1=是 |
|   `reservationRequired` | `int` | | 是否需要预约0=否 1=是 |
|   `restaurantId` | `string` | | 餐厅ID |
|   `reviewCount` | `int` | | 评论数 |
|   `sortOrder` | `int` | | 排序权重 |
|   `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|   `subtitle` | `string` | | 副标题 |
|   `tags` | `餐厅标签视图[]` | | 标签列表 |
|     `createdAt` | `string` | | 创建时间 |
|     `tagColor` | `string` | | 标签颜色 |
|     `tagId` | `string` | | 标签ID |
|     `tagName` | `string` | | 标签名称 |
|     `tagType` | `int` | | 标签类型1=系统标签 2=自定义标签 |
|     `useCount` | `int` | | 使用次数 |
|   `updatedAt` | `string` | | 更新时间 |
|   `videoMaterialIds` | `string[]` | | 视频素材ID列表 |
|   `videoUrls` | `string[]` | | 视频URL列表 |
|   `viewCount` | `int` | | 浏览量 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/restaurant/item/{restaurantId}
**删除餐厅**
软删除餐厅。仅SUPER_ADMIN或创建者可操作。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/restaurant/item/{restaurantId}/status
**上下架切换**
直接修改状态跳过审批,仅限SUPER_ADMIN。状态值0=草稿,1=上架,2=下架。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**请求体** `餐厅状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantIds` | `string[]` | | 餐厅ID列表批量操作 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---
### `POST` /admin/restaurant/item/{restaurantId}/submit-approval
**提交启用/禁用审批**
向企微OA提交审批。targetStatus=1申请上架,targetStatus=2申请下架。返回审批单号spNo。
**路径参数**
| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantId` | `integer` | | 餐厅ID |
**请求体** `餐厅审批提交请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `reason` | `string` | 是 | 审批理由 |
| `targetStatus` | `int` | 是 | 目标状态1=上架 2=下架 |
**响应** `统一响应结果«Map«string,string»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `object` | | 响应数据 |
| `message` | `string` | | 响应消息 |
---
### `GET` /admin/restaurant/items
**餐厅列表**
分页查询餐厅列表,支持按名称、状态、分类、城市等条件筛选。
**关联字典**
- restaurant_category餐厅分类筛选+列表显示)
- cuisine_type菜系类型列表显示
- environment_type环境类型列表显示
- restaurant_facility餐厅设施列表显示
**查询参数**
| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `categoryCode` | `string` | | 分类编码 | TIBETAN |
| `city` | `string` | | 城市 | 拉萨市 |
| `cityName` | `string` | | 城市名称筛选(纯文本) | 拉萨 |
| `cuisineType` | `string` | | 菜系类型 | TIBETAN |
| `keyword` | `string` | | 搜索关键词(名称/副标题模糊搜索) | 藏餐 |
| `page` | `integer(int32)` | | 页码 | 1 |
| `pageSize` | `integer(int32)` | | 每页条数 | 20 |
| `province` | `string` | | 省份 | 西藏自治区 |
| `recommended` | `integer(int32)` | | 是否推荐0=否 1=是 | 1 |
| `sortBy` | `string` | | 排序字段 | createdAt |
| `sortDir` | `string` | | 排序方向asc=升序 desc=降序 | desc |
| `status` | `integer(int32)` | | 状态0=草稿 1=上架 2=下架 | 1 |
| `tagId` | `integer(int64)` | | 标签ID | 100 |
| `tagIds` | `string` | | 标签ID列表逗号分隔 | 100,101,102 |
**响应** `统一响应结果«分页结果«餐厅列表视图»»`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `code` | `int` | | 状态码 |
| `data` | `分页结果«餐厅列表视图»` | | 响应数据 |
|   `page` | `int` | | 当前页码 |
|   `pageSize` | `int` | | 每页条数 |
|   `records` | `餐厅列表视图[]` | | 数据列表 |
|     `approvalNo` | `string` | | 审批编号 |
|     `categoryCode` | `string` | | 分类编码 |
|     `categoryName` | `string` | | 分类名称 |
|     `cityName` | `string` | | 城市名称(纯文本) |
|     `coverUrl` | `string` | | 封面图URL |
|     `createdAt` | `string` | | 创建时间 |
|     `cuisineType` | `string` | | 菜系类型编码 |
|     `cuisineTypeName` | `string` | | 菜系类型名称 |
|     `highlights` | `string` | | 亮点摘要 |
|     `name` | `string` | | 餐厅名称 |
|     `pendingStatus` | `int` | | 待审批目标状态 |
|     `pricePerPerson` | `number` | | 人均消费(元) |
|     `rating` | `number` | | 评分 |
|     `recommended` | `int` | | 是否推荐0=否 1=是 |
|     `restaurantId` | `string` | | 餐厅ID |
|     `reviewCount` | `int` | | 评论数 |
|     `sortOrder` | `int` | | 排序权重 |
|     `status` | `int` | | 状态0=草稿 1=上架 2=下架 |
|     `subtitle` | `string` | | 副标题 |
|     `tags` | `餐厅标签视图[]` | | 标签列表 |
|     `viewCount` | `int` | | 浏览量 |
|   `total` | `int` | | 总记录数 |
| `message` | `string` | | 响应消息 |
---
### `DELETE` /admin/restaurant/items/batch
**批量删除**
批量软删除多个餐厅。仅SUPER_ADMIN或创建者可操作。
**请求体** `餐厅批量删除请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantIds` | `string[]` | 是 | 餐厅ID列表 |
**响应** `统一响应结果«Void»`
---
### `PUT` /admin/restaurant/items/batch/status
**批量上下架**
批量修改多个餐厅的状态,跳过审批流程。
**请求体** `餐厅状态变更请求`
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `restaurantIds` | `string[]` | | 餐厅ID列表批量操作 |
| `status` | `int` | 是 | 目标状态0=草稿 1=上架 2=下架 |
**响应** `统一响应结果«Void»`
---