# 资源服务 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»` ---