diff --git a/changelogs/2026-03/2026-03-17_1244_87da085_feat.md b/changelogs/2026-03/2026-03-17_1244_87da085_feat.md new file mode 100644 index 0000000..c16a251 --- /dev/null +++ b/changelogs/2026-03/2026-03-17_1244_87da085_feat.md @@ -0,0 +1,181 @@ +# 接口变更记录 — 2026-03-17 12:44 + +> **提交** `87da085` · **作者** wx · **时间** 2026-03-17 12:44:59 +0800 +> +> feat: 产品统一保存接口 + 资源价格日历字段增强 + Knife4j分组名修复 + +## 变更总览 + +- **产品服务** + - Product (+1) + +--- + +## 产品服务 + +### Product + +#### 🆕 `POST` /admin/product/item/save — 保存产品(统一创建/更新) + +**请求体** `ProductSaveRequest` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `productId` | `Long` | 产品ID(传入则更新,不传则创建) | +| `name` | `String` | 产品名称 | +| `subtitle` | `String` | 副标题 | +| `productType` | `String` | 产品类型:CORE=核心产品 ROUTE=线路产品 CUSTOM=定制产品 GROUP=小蒙马拼团(创建时必填,更新时忽略) | +| `tripDays` | `Integer` | 行程天数 | +| `departureCity` | `String` | 出发城市 | +| `destinationCity` | `String` | 目的地城市 | +| `seasons` | `List` | 适用季节列表,如 [\ | +| `tags` | `List` | 产品标签列表,如 [\ | +| `isBooking` | `Boolean` | 是否预约产品 | +| `adultCount` | `Integer` | 成人人数 | +| `childCount` | `Integer` | 儿童人数 | +| `youngChildCount` | `Integer` | 小童人数 | +| `babyCount` | `Integer` | 婴儿人数 | +| `minAdultPerOrder` | `Integer` | 每单最少成人数(不填默认1) | +| `maxAdultPerOrder` | `Integer` | 每单最大成人数(不填则不限制) | +| `maxChildPerOrder` | `Integer` | 每单最大儿童数(不填则不限制) | +| `coverImageUrl` | `String` | 封面图URL | +| `carouselImages` | `List` | 轮播图列表 | +| `carouselVideoUrl` | `String` | 轮播视频URL | +| `folderId` | `String` | 所属文件夹ID | +| `lineId` | `String` | 产品线ID | +| `creatorAvatarUrl` | `String` | 定制师头像URL | +| `creatorIntro` | `String` | 创作者寄语 | +| `groupChatQrUrl` | `String` | 群聊二维码URL | +| `chatMessages` | `List` | 群聊消息列表 | +| `showReview` | `Boolean` | 是否显示评价 | +| `showChatGroup` | `Boolean` | 是否显示群聊入口 | +| `showTripTime` | `Boolean` | 是否显示行程时间 | +| `showTripDistance` | `Boolean` | 是否显示行程距离 | +| `bookingNotice` | `String` | 预定须知 | +| `cancelPolicy` | `String` | 退改政策 | +| `warmTips` | `String` | 温馨提示 | +| `customizerId` | `String` | 定制师ID | +| `sortOrder` | `Integer` | 排序序号 | +| `teamExperienceYears` | `Integer` | 团队经验年数 | +| `lineSubtitle` | `String` | 产品线副标题 | +| `mchId` | `String` | 商户号:shanhe/wenlu | +| `groupRoomId` | `String` | 企微群聊ID(用于会话存档展示群消息) | + +**响应** `Result` + +--- + +## 📦 其他数据对象变更 + +> 以下变更未直接关联到本次接口变更,但可能影响现有接口的请求/响应 + +### 保险服务 + +#### ✏️ PolicyShareVO + + - ✏️ `pdfBase64`: 说明 "merged PDF as base64" → "合并后的PDF(Base64编码)" + - ✏️ `personName`: 说明 "insured person name" → "被保人姓名" + - ✏️ `policyCount`: 说明 "number of policies included" → "包含的保单数量" + - ✏️ `failedCount`: 说明 "number of policies that failed to download (skipped)" → "下载失败的保单数量(已跳过)" + +#### ✏️ SharePolicyRequest + + - ✏️ `orderId`: 说明 "travel order ID" → "旅游订单ID" + - ✏️ `insuredName`: 说明 "insured person name" → "被保人姓名" + - ✏️ `insuredIdCardNo`: 说明 "insured person ID card number" → "被保人证件号码" + +### 资源服务 + +#### ✏️ PriceCalendarDayVO + + - ✏️ `status`: 类型 `Integer` → `String`, 说明 "状态:0=不可租 1=可租" → "日历状态(字典 calendar_status:AVAILABLE=可售 SOLD_OUT=已售罄 CLOSED=已关闭)" + +#### ✏️ PriceCalendarSetRequest + + - ✏️ `status`: 类型 `Integer` → `String`, 说明 "状态:0=不可租 1=可租" → "日历状态(字典 calendar_status:AVAILABLE=可售 SOLD_OUT=已售罄 CLOSED=已关闭)" + +#### ✏️ PriceCalendarStatusRequest + + - ✏️ `status`: 类型 `Integer` → `String`, 说明 "状态:0=不可租 1=可租" → "目标状态(字典 calendar_status:AVAILABLE=可售 SOLD_OUT=已售罄 CLOSED=已关闭)" + +## 📋 实体变更 + +### ✏️ ActivityPriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ CostPriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ RoomPriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ ScenicPriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ ServicePriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ StaffPriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +### ✏️ VehiclePriceCalendar + + - ✏️ `status`: 类型 `Integer` → `String` + +
+📁 全部变更文件 (点击展开) + +``` +M hl-insurance-service/src/main/java/com/hulalv/insurance/config/Knife4jConfig.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/dto/SharePolicyRequest.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/service/BaoyouApiClient.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/service/InsuranceProductSyncService.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/vo/PolicyShareVO.java +M hl-product-service/src/main/java/com/hulalv/product/config/Knife4jConfig.java +M hl-product-service/src/main/java/com/hulalv/product/controller/ProductController.java +A hl-product-service/src/main/java/com/hulalv/product/dto/ProductSaveRequest.java +M hl-product-service/src/main/java/com/hulalv/product/service/ProductService.java +M hl-resource-service/src/main/java/com/hulalv/resource/activity/constant/ActivityConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/activity/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/activity/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/activity/entity/ActivityPriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/activity/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/cost/constant/CostConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/cost/entity/CostPriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/cost/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/hotel/constant/HotelConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/hotel/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/hotel/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/hotel/entity/RoomPriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/hotel/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/constant/ScenicConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/entity/ScenicPriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/service/ScenicPriceCalendarService.java +M hl-resource-service/src/main/java/com/hulalv/resource/scenic/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/service/constant/ServiceConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/service/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/service/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/service/entity/ServicePriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/service/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/staff/constant/StaffConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/staff/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/staff/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/staff/entity/StaffPriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/staff/vo/PriceCalendarDayVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/vehicle/constant/VehicleConstants.java +M hl-resource-service/src/main/java/com/hulalv/resource/vehicle/dto/PriceCalendarSetRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/vehicle/dto/PriceCalendarStatusRequest.java +M hl-resource-service/src/main/java/com/hulalv/resource/vehicle/entity/VehiclePriceCalendar.java +M hl-resource-service/src/main/java/com/hulalv/resource/vehicle/vo/PriceCalendarDayVO.java +A scripts/api-changelog-sync.py +A scripts/sync-api-docs.py +``` +
\ No newline at end of file