changelog: e6c349d - feat: 定制需求模块+管理员发票管理接口+Knife4j分组

这个提交包含在:
API Changelog Bot 2026-03-17 15:40:15 +08:00
父节点 b4adea7dc3
当前提交 8feb0abfb9

查看文件

@ -0,0 +1,623 @@
# 接口变更记录 — 2026-03-17 15:40
> **提交** `e6c349d` · **作者** wx · **时间** 2026-03-17 15:40:15 +0800
>
> feat: 定制需求模块+管理员发票管理接口+Knife4j分组
## 变更总览
- **订单服务**
- 🆕 AdminInvoice (+5 接口)
- 🆕 AdminCustomize (+5 接口)
- 🆕 InternalCustomize (+4 接口)
---
## 订单服务
### 🆕 新增: AdminInvoice
#### `GET` /admin/invoice/page — 发票分页列表
**响应** `Result<PageResult<InvoiceVO>>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `id` | `String` | 发票ID |
| `orderId` | `String` | 订单ID |
| `orderNo` | `String` | 订单号 |
| `amount` | `String` | 金额 |
| `titleType` | `String` | 抬头类型personal=个人/company=企业) |
| `invoiceTitle` | `String` | 发票抬头 |
| `taxNumber` | `String` | 税号 |
| `email` | `String` | 接收邮箱 |
| `invoiceType` | `String` | 发票类型 |
| `invoiceContent` | `String` | 发票内容 |
| `status` | `String` | 发票状态 |
| `fileUrl` | `String` | 发票文件URL |
| `failReason` | `String` | 失败原因 |
| `contactPhone` | `String` | 联系电话 |
| `remark` | `String` | 备注信息 |
| `bankName` | `String` | 开户行(企业发票) |
| `bankAccount` | `String` | 银行账号(企业发票) |
| `companyAddress` | `String` | 企业地址(企业发票) |
| `companyPhone` | `String` | 企业电话(企业发票) |
| `invoiceNo` | `String` | 发票号码 |
| `issuedAt` | `LocalDateTime` | 开票时间 |
| `issuedBy` | `String` | 开票操作人ID |
| `userId` | `String` | 用户ID |
| `originalInvoiceId` | `String` | 原发票ID(换开时关联) |
| `reissueCount` | `Integer` | 换开次数 |
| `createdAt` | `LocalDateTime` | 创建时间 |
| `updatedAt` | `LocalDateTime` | 更新时间 |
#### `GET` /admin/invoice/{id} — 发票详情
**参数**
- `{id}` (Long) — 路径参数
**响应** `Result<InvoiceVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `id` | `String` | 发票ID |
| `orderId` | `String` | 订单ID |
| `orderNo` | `String` | 订单号 |
| `amount` | `String` | 金额 |
| `titleType` | `String` | 抬头类型personal=个人/company=企业) |
| `invoiceTitle` | `String` | 发票抬头 |
| `taxNumber` | `String` | 税号 |
| `email` | `String` | 接收邮箱 |
| `invoiceType` | `String` | 发票类型 |
| `invoiceContent` | `String` | 发票内容 |
| `status` | `String` | 发票状态 |
| `fileUrl` | `String` | 发票文件URL |
| `failReason` | `String` | 失败原因 |
| `contactPhone` | `String` | 联系电话 |
| `remark` | `String` | 备注信息 |
| `bankName` | `String` | 开户行(企业发票) |
| `bankAccount` | `String` | 银行账号(企业发票) |
| `companyAddress` | `String` | 企业地址(企业发票) |
| `companyPhone` | `String` | 企业电话(企业发票) |
| `invoiceNo` | `String` | 发票号码 |
| `issuedAt` | `LocalDateTime` | 开票时间 |
| `issuedBy` | `String` | 开票操作人ID |
| `userId` | `String` | 用户ID |
| `originalInvoiceId` | `String` | 原发票ID(换开时关联) |
| `reissueCount` | `Integer` | 换开次数 |
| `createdAt` | `LocalDateTime` | 创建时间 |
| `updatedAt` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/invoice/{id}/issue — 开票完成
**参数**
- `{id}` (Long) — 路径参数
**请求体** `AdminInvoiceIssueRequest`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `fileUrl` | `String` | 发票文件URL |
| `invoiceNo` | `String` | 发票号码 |
**响应** `Result<InvoiceVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `id` | `String` | 发票ID |
| `orderId` | `String` | 订单ID |
| `orderNo` | `String` | 订单号 |
| `amount` | `String` | 金额 |
| `titleType` | `String` | 抬头类型personal=个人/company=企业) |
| `invoiceTitle` | `String` | 发票抬头 |
| `taxNumber` | `String` | 税号 |
| `email` | `String` | 接收邮箱 |
| `invoiceType` | `String` | 发票类型 |
| `invoiceContent` | `String` | 发票内容 |
| `status` | `String` | 发票状态 |
| `fileUrl` | `String` | 发票文件URL |
| `failReason` | `String` | 失败原因 |
| `contactPhone` | `String` | 联系电话 |
| `remark` | `String` | 备注信息 |
| `bankName` | `String` | 开户行(企业发票) |
| `bankAccount` | `String` | 银行账号(企业发票) |
| `companyAddress` | `String` | 企业地址(企业发票) |
| `companyPhone` | `String` | 企业电话(企业发票) |
| `invoiceNo` | `String` | 发票号码 |
| `issuedAt` | `LocalDateTime` | 开票时间 |
| `issuedBy` | `String` | 开票操作人ID |
| `userId` | `String` | 用户ID |
| `originalInvoiceId` | `String` | 原发票ID(换开时关联) |
| `reissueCount` | `Integer` | 换开次数 |
| `createdAt` | `LocalDateTime` | 创建时间 |
| `updatedAt` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/invoice/{id}/fail — 开票失败
**参数**
- `{id}` (Long) — 路径参数
**请求体** `AdminInvoiceFailRequest`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `failReason` | `String` | 失败原因 |
**响应** `Result<InvoiceVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `id` | `String` | 发票ID |
| `orderId` | `String` | 订单ID |
| `orderNo` | `String` | 订单号 |
| `amount` | `String` | 金额 |
| `titleType` | `String` | 抬头类型personal=个人/company=企业) |
| `invoiceTitle` | `String` | 发票抬头 |
| `taxNumber` | `String` | 税号 |
| `email` | `String` | 接收邮箱 |
| `invoiceType` | `String` | 发票类型 |
| `invoiceContent` | `String` | 发票内容 |
| `status` | `String` | 发票状态 |
| `fileUrl` | `String` | 发票文件URL |
| `failReason` | `String` | 失败原因 |
| `contactPhone` | `String` | 联系电话 |
| `remark` | `String` | 备注信息 |
| `bankName` | `String` | 开户行(企业发票) |
| `bankAccount` | `String` | 银行账号(企业发票) |
| `companyAddress` | `String` | 企业地址(企业发票) |
| `companyPhone` | `String` | 企业电话(企业发票) |
| `invoiceNo` | `String` | 发票号码 |
| `issuedAt` | `LocalDateTime` | 开票时间 |
| `issuedBy` | `String` | 开票操作人ID |
| `userId` | `String` | 用户ID |
| `originalInvoiceId` | `String` | 原发票ID(换开时关联) |
| `reissueCount` | `Integer` | 换开次数 |
| `createdAt` | `LocalDateTime` | 创建时间 |
| `updatedAt` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/invoice/{id}/void — 作废发票
**参数**
- `{id}` (Long) — 路径参数
**响应** `Result<InvoiceVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `id` | `String` | 发票ID |
| `orderId` | `String` | 订单ID |
| `orderNo` | `String` | 订单号 |
| `amount` | `String` | 金额 |
| `titleType` | `String` | 抬头类型personal=个人/company=企业) |
| `invoiceTitle` | `String` | 发票抬头 |
| `taxNumber` | `String` | 税号 |
| `email` | `String` | 接收邮箱 |
| `invoiceType` | `String` | 发票类型 |
| `invoiceContent` | `String` | 发票内容 |
| `status` | `String` | 发票状态 |
| `fileUrl` | `String` | 发票文件URL |
| `failReason` | `String` | 失败原因 |
| `contactPhone` | `String` | 联系电话 |
| `remark` | `String` | 备注信息 |
| `bankName` | `String` | 开户行(企业发票) |
| `bankAccount` | `String` | 银行账号(企业发票) |
| `companyAddress` | `String` | 企业地址(企业发票) |
| `companyPhone` | `String` | 企业电话(企业发票) |
| `invoiceNo` | `String` | 发票号码 |
| `issuedAt` | `LocalDateTime` | 开票时间 |
| `issuedBy` | `String` | 开票操作人ID |
| `userId` | `String` | 用户ID |
| `originalInvoiceId` | `String` | 原发票ID(换开时关联) |
| `reissueCount` | `Integer` | 换开次数 |
| `createdAt` | `LocalDateTime` | 创建时间 |
| `updatedAt` | `LocalDateTime` | 更新时间 |
### 🆕 新增: AdminCustomize
#### `GET` /admin/order/customize/page — 定制请求列表
**响应** `Result<PageResult<CustomizeRequestListVO>>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `createTime` | `LocalDateTime` | 创建时间 |
#### `GET` /admin/order/customize/{requestId} — 定制请求详情
**参数**
- `{requestId}` (Long) — 路径参数
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/order/customize/{requestId}/accept — 接受定制请求
**参数**
- `{requestId}` (Long) — 路径参数
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/order/customize/{requestId}/reply — 回复/报价
**参数**
- `{requestId}` (Long) — 路径参数
**请求体** `AdminReplyRequest`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `reply` | `String` | 回复内容 |
| `productId` | `Long` | 关联产品ID定制产品已创建时传入 |
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
#### `PUT` /admin/order/customize/{requestId}/complete — 标记完成
**参数**
- `{requestId}` (Long) — 路径参数
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
### 🆕 新增: InternalCustomize
#### `POST` /internal/mp/customize/submit — 提交定制请求
**参数**
- `userId` (Long) — 查询参数
**请求体** `CreateCustomizeRequestDTO`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `designerId` | `Long` | 指定定制师ID可为空=系统分配) |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
#### `GET` /internal/mp/customize/list — 定制请求列表
**参数**
- `userId` (Long) — 查询参数
- `page` (int) — 查询参数
- `pageSize` (int) — 查询参数
**响应** `Result<PageResult<CustomizeRequestListVO>>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `createTime` | `LocalDateTime` | 创建时间 |
#### `GET` /internal/mp/customize/{requestId} — 定制请求详情
**参数**
- `{requestId}` (Long) — 路径参数
- `userId` (Long) — 查询参数
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
#### `POST` /internal/mp/customize/{requestId}/cancel — 取消定制请求
**参数**
- `{requestId}` (Long) — 路径参数
- `userId` (Long) — 查询参数
**响应** `Result<CustomizeRequestVO>`
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的字典travel_purpose |
| `requestType` | `String` | 需求类型字典customize_request_type |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围字典customize_budget |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态字典customize_request_status |
| `statusLabel` | `String` | 状态标签 |
| `designerName` | `String` | 定制师姓名 |
| `designerAvatar` | `String` | 定制师头像 |
| `productId` | `Long` | 关联产品ID |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
---
## 📦 其他数据对象变更
> 以下变更未直接关联到本次接口变更,但可能影响现有接口的请求/响应
### 订单服务
#### 🆕 AdminCustomizeQueryRequest
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `keyword` | `String` | 搜索关键词(联系人/目标地区/需求描述) |
| `status` | `String` | 状态字典customize_request_status |
| `designerId` | `Long` | 定制师ID |
| `sortBy` | `String` | 排序字段createTime/startDate |
| `sortDir` | `String` | 排序方向desc/asc |
#### 🆕 AdminInvoiceQueryRequest
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `status` | `String` | 发票状态字典invoice_status |
| `orderNo` | `String` | 订单编号(模糊搜索) |
| `userId` | `Long` | 用户ID |
#### 🆕 CustomizeRequest
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `requestId` | `Long` | 请求ID |
| `userId` | `Long` | 用户ID |
| `designerId` | `Long` | 指定定制师ID可为空=系统分配) |
| `destination` | `String` | 目标地区 |
| `travelPurpose` | `String` | 旅游目的 |
| `requestType` | `String` | 需求类型 |
| `startDate` | `LocalDate` | 期望出发日期 |
| `endDate` | `LocalDate` | 期望结束日期 |
| `days` | `Integer` | 期望天数 |
| `adultCount` | `Integer` | 成人数 |
| `childCount` | `Integer` | 儿童数 |
| `budget` | `String` | 预算范围 |
| `requirements` | `String` | 详细需求描述 |
| `contactPhone` | `String` | 联系电话 |
| `contactName` | `String` | 联系人 |
| `status` | `String` | 状态PENDING/ACCEPTED/DESIGNING/QUOTED/COMPLETED/CANCELLED |
| `designerName` | `String` | 定制师姓名(冗余) |
| `designerAvatar` | `String` | 定制师头像(冗余) |
| `productId` | `Long` | 关联产品ID定制师创建的定制产品 |
| `reply` | `String` | 定制师回复 |
| `repliedAt` | `LocalDateTime` | 回复时间 |
| `deletedAt` | `LocalDateTime` | 删除时间(软删除) |
| `createTime` | `LocalDateTime` | 创建时间 |
| `updateTime` | `LocalDateTime` | 更新时间 |
<details>
<summary>📁 全部变更文件 (点击展开)</summary>
```
M hl-order-service/src/main/java/com/hulalv/order/OrderServiceApplication.java
M hl-order-service/src/main/java/com/hulalv/order/config/Knife4jConfig.java
A hl-order-service/src/main/java/com/hulalv/order/controller/AdminInvoiceController.java
A hl-order-service/src/main/java/com/hulalv/order/customize/constant/CustomizeConstants.java
A hl-order-service/src/main/java/com/hulalv/order/customize/controller/AdminCustomizeController.java
A hl-order-service/src/main/java/com/hulalv/order/customize/controller/InternalCustomizeController.java
A hl-order-service/src/main/java/com/hulalv/order/customize/dto/AdminCustomizeQueryRequest.java
A hl-order-service/src/main/java/com/hulalv/order/customize/dto/AdminReplyRequest.java
A hl-order-service/src/main/java/com/hulalv/order/customize/dto/CreateCustomizeRequestDTO.java
A hl-order-service/src/main/java/com/hulalv/order/customize/entity/CustomizeRequest.java
A hl-order-service/src/main/java/com/hulalv/order/customize/mapper/CustomizeRequestMapper.java
A hl-order-service/src/main/java/com/hulalv/order/customize/service/CustomizeRequestService.java
A hl-order-service/src/main/java/com/hulalv/order/customize/vo/CustomizeRequestListVO.java
A hl-order-service/src/main/java/com/hulalv/order/customize/vo/CustomizeRequestVO.java
A hl-order-service/src/main/java/com/hulalv/order/dto/AdminInvoiceFailRequest.java
A hl-order-service/src/main/java/com/hulalv/order/dto/AdminInvoiceIssueRequest.java
A hl-order-service/src/main/java/com/hulalv/order/dto/AdminInvoiceQueryRequest.java
A sql/customize_request.sql
```
</details>