From 44c1df0179d86c6d73b5eaedbcf4ababe6d607e6 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 20 Mar 2026 16:45:40 +0800 Subject: [PATCH] =?UTF-8?q?changelog:=20297ce93=20-=20feat:=20=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=87=AA=E5=8A=A8=E4=BF=9D=E9=99=A9+=E5=90=88?= =?UTF-8?q?=E5=90=8C=20+=20=E4=BA=A7=E5=93=81=E5=90=88=E5=90=8C/=E4=BF=9D?= =?UTF-8?q?=E9=99=A9=E5=AD=97=E6=AE=B5=20+=20=E6=88=BF=E9=97=B4=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E9=A2=84=E8=A7=88=20+=20=E8=AE=A2=E5=8D=95=E4=BB=B7?= =?UTF-8?q?=E5=B7=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-03/2026-03-20_1645_297ce93_feat.md | 379 ++++++++++++++++++ 1 file changed, 379 insertions(+) create mode 100644 changelogs/2026-03/2026-03-20_1645_297ce93_feat.md diff --git a/changelogs/2026-03/2026-03-20_1645_297ce93_feat.md b/changelogs/2026-03/2026-03-20_1645_297ce93_feat.md new file mode 100644 index 0000000..5564e55 --- /dev/null +++ b/changelogs/2026-03/2026-03-20_1645_297ce93_feat.md @@ -0,0 +1,379 @@ +# 接口变更记录 — 2026-03-20 16:45 + +> **提交** `297ce93` · **作者** wx · **时间** 2026-03-20 16:45:40 +0800 +> +> feat: 订单自动保险+合同 + 产品合同/保险字段 + 房间升级预览 + 订单价差服务 + +## 变更总览 + +- **产品服务** + - InternalProduct (+1) +- **保险服务** + - InternalInsurance (+1) +- **合同服务** + - InternalContract (+2) +- **订单服务** + - AdminOrder (+1, 改1) + - InternalPaymentOrder (+1) +- **资源服务** + - InternalResourcePrice (+1) + +--- + +## 产品服务 + +### InternalProduct + +> 📖 **接口文档**: [http://192.168.100.236:8085/doc.html](http://192.168.100.236:8085/doc.html) → 标签 **「【内部接口】产品(Feign调用)」** + +### 🆕 `GET` /internal/product/{productId}/automation-config + +**参数** + + - `{productId}` (`Long`) — 路径参数 + +**响应** `Result` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `insuranceSchemeId` | `Long` | | +| `contractPlatform` | `String` | | +| `contractTemplateCode` | `String` | | +| `contractMode` | `String` | | +| `signatoryMode` | `Integer` | | +| `agencyCode` | `String` | | +| `disputeResolution` | `Integer` | | +| `supplementaryClause` | `String` | | +| `transactorName` | `String` | | +| `transactorPhone` | `String` | | +| `productName` | `String` | | +| `destinationCity` | `String` | | +| `departureCity` | `String` | | +| `tripDays` | `Integer` | | +| `tripNights` | `Integer` | | + +--- + +## 保险服务 + +### InternalInsurance + +> 📖 **接口文档**: [http://192.168.100.236:8098/doc.html](http://192.168.100.236:8098/doc.html) → 标签 **「【内部接口】保险(Feign调用)」** + +### 🆕 `POST` /internal/insurance/auto-purchase — 按方案自动投保(内部调用) + +> 内部服务间调用。根据保险方案自动为订单所有出行人投保: + +**响应** `Result` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `success` | `boolean` | 是否全部成功 | +| `purchasedCount` | `int` | 成功投保段数 | +| `failedCount` | `int` | 失败段数 | +| `failureReason` | `String` | 失败原因(部分失败或全部失败时返回第一个错误) | + +--- + +## 合同服务 + +### InternalContract + +> 📖 **接口文档**: [http://192.168.100.236:8095/doc.html](http://192.168.100.236:8095/doc.html) → 标签 **「【内部接口】合同(Feign调用)」** + +### 🆕 `POST` /internal/contract/create — 创建合同(内部调用) + +> 内部服务调用创建合同,adminId固定为0表示系统自动创建。返回contractId和status + +**请求体** `CreateContractRequest` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `orderId` | `Long` | 订单ID | +| `contractType` | `String` | 合同类型: TOUR-旅游合同(默认), INSURANCE-保险单 | +| `platform` | `String` | 合同平台(字典:contract_platform): 12301-全国旅游监管平台, FADADA-法大大, ESIGN-e签宝, TENCENT_ESS-腾讯电子签。不传则根据模板自动确定 | +| `templateCode` | `String` | 模板编码 | +| `agencyCode` | `String` | 旅行社编号(可选,默认使用配置值) | +| `transactorName` | `String` | 经办人姓名 | +| `transactorPhone` | `String` | 经办人电话 | +| `destination` | `String` | 目的地 | +| `routeName` | `String` | 线路名称 | +| `days` | `Integer` | 行程天数 | +| `nights` | `Integer` | 住宿晚数 | +| `departureDate` | `LocalDate` | 出发日期 | +| `returnDate` | `LocalDate` | 返回日期 | +| `departureCity` | `String` | 出发城市 | +| `groupId` | `String` | 团号 | +| `signatoryName` | `String` | 签署人姓名 | +| `signatoryPhone` | `String` | 签署人电话 | +| `signatoryIdNumber` | `String` | 签署人证件号码 | +| `signingPlace` | `String` | 签约地点 | +| `adultCost` | `BigDecimal` | 成人费用 | +| `childCost` | `BigDecimal` | 儿童费用 | +| `totalAmount` | `BigDecimal` | 合同总金额 | +| `contactName` | `String` | 联系人姓名 | +| `contactPhone` | `String` | 联系人电话 | +| `supplementaryClause` | `String` | 补充约定内容 | +| `vehicleModel` | `String` | 车型名称(产品快照) | +| `travelers` | `List` | 出行人列表 | +| `name` | `String` | 姓名 | +| `gender` | `String` | 性别: male/female | +| `age` | `Integer` | 年龄 | +| `idCardNo` | `String` | 证件号码 | +| `phone` | `String` | 手机号 | +| `health` | `String` | 健康信息 | + +**响应** `Result>` + +### 🆕 `POST` /internal/contract/report — 报备合同(内部调用) + +> 内部服务调用报备合同(同步模式),adminId固定为0表示系统自动创建。返回contractId和status + +**请求体** `ReportContractRequest` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `orderId` | `Long` | 订单ID | +| `contractType` | `String` | 合同类型: TOUR-旅游合同(默认), INSURANCE-保险单 | +| `platform` | `String` | 合同平台(字典:contract_platform): 12301-全国旅游监管平台, FADADA-法大大, ESIGN-e签宝, TENCENT_ESS-腾讯电子签 | +| `templateCode` | `String` | 模板编码 | +| `agencyCode` | `String` | 旅行社编号 | +| `transactorName` | `String` | 经办人姓名 | +| `transactorPhone` | `String` | 经办人电话 | +| `destination` | `String` | 目的地 | +| `routeName` | `String` | 线路名称 | +| `days` | `Integer` | 行程天数 | +| `nights` | `Integer` | 住宿晚数 | +| `departureDate` | `LocalDate` | 出发日期 | +| `returnDate` | `LocalDate` | 返回日期 | +| `departureCity` | `String` | 出发城市 | +| `groupId` | `String` | 团号 | +| `signatoryName` | `String` | 签署人姓名 | +| `signatoryPhone` | `String` | 签署人电话 | +| `signatoryIdNumber` | `String` | 签署人证件号码 | +| `signingPlace` | `String` | 签约地点 | +| `adultCost` | `BigDecimal` | 成人费用 | +| `childCost` | `BigDecimal` | 儿童费用 | +| `totalAmount` | `BigDecimal` | 合同总金额 | +| `contactName` | `String` | 联系人姓名 | +| `contactPhone` | `String` | 联系人电话 | +| `supplementaryClause` | `String` | 补充约定内容 | + +**响应** `Result>` + +--- + +## 订单服务 + +### AdminOrder + +> 📖 **接口文档**: [http://192.168.100.236:8084/doc.html](http://192.168.100.236:8084/doc.html) → 分组 **「3.1 订单管理」** → 标签 **「管理端订单接口」** + +### 🆕 `POST` /admin/order/{orderId}/hotel-assignment/preview — 配房升级差价预览 + +> 预览配房时的房型升级差价(不创建记录)。 + +**参数** + + - `{orderId}` (`Long`) — 路径参数:订单ID + +**响应** `Result` + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `details` | `List` | 各天差价明细 | +| `totalDiff` | `BigDecimal` | 差价合计(正数=需补款,负数=可退款) | +| `direction` | `String` | 差价方向:UPGRADE=升级加价, DOWNGRADE=降级减价, SAME=价格不变, MIXED=部分升级部分降级 | +| `description` | `String` | 描述 | +| `familyIndex` | `Integer` | 家庭序号 | +| `date` | `String` | 日期 | +| `defaultRoomTypeId` | `Long` | 产品默认房型ID | +| `defaultRoomTypeName` | `String` | 产品默认房型名称 | +| `assignedRoomTypeId` | `Long` | 实际分配房型ID | +| `assignedRoomTypeName` | `String` | 实际分配房型名称 | +| `defaultPrice` | `BigDecimal` | 默认房型当天单价 | +| `assignedPrice` | `BigDecimal` | 实际房型当天单价 | +| `dayDiff` | `BigDecimal` | 当天差价 | +| `direction` | `String` | 差价方向 | +| `remark` | `String` | 备注 | + +### ✏️ `GET` /admin/order/{orderId}/available-hotels — 配房可选酒店列表 + +- 参数: orderId(Long) → orderId(Long), dayIndex(Integer) + +### InternalPaymentOrder + +> 📖 **接口文档**: [http://192.168.100.236:8084/doc.html](http://192.168.100.236:8084/doc.html) → 标签 **「【内部接口】订单-支付/合同/保险(Feign调用)」** + +### 🆕 `GET` /internal/order/{orderId}/travelers — 获取订单出行人列表(供保险服务调用) + +> 内部服务间调用。返回订单下所有出行人的基本信息(姓名、证件号、性别、生日、手机号), + +**参数** + + - `{orderId}` (`Long`) — 路径参数:旅行订单ID + +**响应** `Result>>` + +--- + +## 资源服务 + +### InternalResourcePrice + +> 📖 **接口文档**: [http://192.168.100.236:8082/doc.html](http://192.168.100.236:8082/doc.html) → 标签 **「【内部接口】资源价格(Feign调用)」** + +### 🆕 `GET` /internal/resource/prices/standard-room-type/{hotelId} + +**参数** + + - `{hotelId}` (`Long`) — 路径参数 + +**响应** `Result` + +--- + +## 📦 其他数据对象变更 + +> 以下变更未直接关联到本次接口变更,但可能影响现有接口的请求/响应 + +### 产品服务 + +#### ✏️ ProductCreateRequest + + - 🆕 `insuranceSchemeId` (`Long`) — 保险方案ID + - 🆕 `contractPlatform` (`String`) — 合同平台(12301/FADADA) + - 🆕 `contractTemplateCode` (`String`) — 合同模板编码 + - 🆕 `contractMode` (`String`) — 签约模式(STANDARD/SYNC) + - 🆕 `signatoryMode` (`Integer`) — 签署模式(1=短信/2=现场/3=线下) + - 🆕 `agencyCode` (`String`) — 旅行社编码 + - 🆕 `disputeResolution` (`Integer`) — 争议解决方式(1=仲裁/2=诉讼) + - 🆕 `supplementaryClause` (`String`) — 补充条款 + - 🆕 `transactorName` (`String`) — 经办人姓名 + - 🆕 `transactorPhone` (`String`) — 经办人电话 + +#### ✏️ ProductListVO + + - 🆕 `insuranceSchemeId` (`String`) — 保险方案ID + - 🆕 `contractPlatform` (`String`) — 合同平台(12301/FADADA) + - 🆕 `contractTemplateCode` (`String`) — 合同模板编码 + - 🆕 `contractMode` (`String`) — 签约模式(STANDARD/SYNC) + - 🆕 `signatoryMode` (`Integer`) — 签署模式(1=短信/2=现场/3=线下) + - 🆕 `agencyCode` (`String`) — 旅行社编码 + - 🆕 `disputeResolution` (`Integer`) — 争议解决方式(1=仲裁/2=诉讼) + - 🆕 `supplementaryClause` (`String`) — 补充条款 + - 🆕 `transactorName` (`String`) — 经办人姓名 + - 🆕 `transactorPhone` (`String`) — 经办人电话 + +#### ✏️ ProductSaveRequest + + - 🆕 `insuranceSchemeId` (`Long`) — 保险方案ID + - 🆕 `contractPlatform` (`String`) — 合同平台(12301/FADADA) + - 🆕 `contractTemplateCode` (`String`) — 合同模板编码 + - 🆕 `contractMode` (`String`) — 签约模式(STANDARD/SYNC) + - 🆕 `signatoryMode` (`Integer`) — 签署模式(1=短信/2=现场/3=线下) + - 🆕 `agencyCode` (`String`) — 旅行社编码 + - 🆕 `disputeResolution` (`Integer`) — 争议解决方式(1=仲裁/2=诉讼) + - 🆕 `supplementaryClause` (`String`) — 补充条款 + - 🆕 `transactorName` (`String`) — 经办人姓名 + - 🆕 `transactorPhone` (`String`) — 经办人电话 + +#### ✏️ ProductUpdateRequest + + - 🆕 `insuranceSchemeId` (`Long`) — 保险方案ID + - 🆕 `contractPlatform` (`String`) — 合同平台(12301/FADADA) + - 🆕 `contractTemplateCode` (`String`) — 合同模板编码 + - 🆕 `contractMode` (`String`) — 签约模式(STANDARD/SYNC) + - 🆕 `signatoryMode` (`Integer`) — 签署模式(1=短信/2=现场/3=线下) + - 🆕 `agencyCode` (`String`) — 旅行社编码 + - 🆕 `disputeResolution` (`Integer`) — 争议解决方式(1=仲裁/2=诉讼) + - 🆕 `supplementaryClause` (`String`) — 补充条款 + - 🆕 `transactorName` (`String`) — 经办人姓名 + - 🆕 `transactorPhone` (`String`) — 经办人电话 + +#### ✏️ ProductVO + + - 🆕 `insuranceSchemeId` (`String`) — 保险方案ID + - 🆕 `contractPlatform` (`String`) — 合同平台(12301/FADADA) + - 🆕 `contractTemplateCode` (`String`) — 合同模板编码 + - 🆕 `contractMode` (`String`) — 签约模式(STANDARD/SYNC) + - 🆕 `signatoryMode` (`Integer`) — 签署模式(1=短信/2=现场/3=线下) + - 🆕 `agencyCode` (`String`) — 旅行社编码 + - 🆕 `disputeResolution` (`Integer`) — 争议解决方式(1=仲裁/2=诉讼) + - 🆕 `supplementaryClause` (`String`) — 补充条款 + - 🆕 `transactorName` (`String`) — 经办人姓名 + - 🆕 `transactorPhone` (`String`) — 经办人电话 + +### 保险服务 + +#### 🆕 AutoPurchaseRequest + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `orderId` | `Long` | 旅行订单ID | +| `schemeId` | `Long` | 保险方案ID | + +### 订单服务 + +#### ✏️ HotelAssignmentRequest + + - 🆕 `hotelId` (`Long`) — 酒店ID + - 🆕 `roomTypeId` (`Long`) — 房型ID + - 🆕 `date` (`String`) — 日期(yyyy-MM-dd),单天 + - 🆕 `remark` (`String`) — 当天备注 + - 🆕 `upgradePrice` (`BigDecimal`) — 手动覆盖升级差价(null=使用系统计算值,仅当房型与产品默认不同时有效) + - ❌ ~~`checkInDate`~~ (`String`) — 入住日期(yyyy-MM-dd) + - ❌ ~~`checkOutDate`~~ (`String`) — 退房日期(yyyy-MM-dd) + - ✏️ `assignments`: 说明 "酒店分配列表" → "酒店分配列表(按天粒度,每天每个家庭一条记录)" + - ✏️ `roomType`: 说明 "房型" → "房型名称" + +
+📁 全部变更文件 (点击展开) + +``` +M docs/CLAUDE_WORKFLOW/README.md +A docs/requirements/order-auto-insurance-contract.md +M hl-contract-service/src/main/java/com/hulalv/contract/controller/InternalContractController.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/controller/InternalInsuranceController.java +A hl-insurance-service/src/main/java/com/hulalv/insurance/dto/AutoPurchaseRequest.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/feign/OrderInsuranceFeignClient.java +M hl-insurance-service/src/main/java/com/hulalv/insurance/service/InsuranceOrderService.java +A hl-insurance-service/src/main/java/com/hulalv/insurance/vo/AutoPurchaseResultVO.java +M hl-mp-service/src/main/java/com/hulalv/mp/config/WebMvcConfig.java +M hl-order-service/src/main/java/com/hulalv/order/constant/OrderConstants.java +M hl-order-service/src/main/java/com/hulalv/order/controller/AdminOrderController.java +M hl-order-service/src/main/java/com/hulalv/order/controller/InternalPaymentOrderController.java +M hl-order-service/src/main/java/com/hulalv/order/dto/HotelAssignmentRequest.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ContractFeignClient.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ContractFeignFallbackFactory.java +M hl-order-service/src/main/java/com/hulalv/order/feign/InsuranceFeignClient.java +M hl-order-service/src/main/java/com/hulalv/order/feign/InsuranceFeignFallbackFactory.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ProductFeignClient.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ProductFeignFallbackFactory.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ResourcePriceFeignClient.java +M hl-order-service/src/main/java/com/hulalv/order/feign/ResourcePriceFeignFallbackFactory.java +M hl-order-service/src/main/java/com/hulalv/order/service/NotificationEventHelper.java +A hl-order-service/src/main/java/com/hulalv/order/service/OrderAutoProcessingService.java +M hl-order-service/src/main/java/com/hulalv/order/service/OrderItineraryEditService.java +M hl-order-service/src/main/java/com/hulalv/order/service/OrderPriceDiffService.java +M hl-order-service/src/main/java/com/hulalv/order/service/OrderService.java +M hl-order-service/src/main/java/com/hulalv/order/service/OrderTodoService.java +A hl-order-service/src/main/java/com/hulalv/order/vo/RoomUpgradePreviewVO.java +M hl-order-service/src/test/java/com/hulalv/order/constant/OrderConstantsTest.java +M hl-order-service/src/test/java/com/hulalv/order/service/OrderPriceDiffServiceTest.java +M hl-order-service/src/test/java/com/hulalv/order/service/OrderServiceTest.java +M hl-order-service/src/test/java/com/hulalv/order/service/OrderTodoServiceTest.java +M hl-order-service/src/test/java/com/hulalv/order/service/RefundPolicyServiceTest.java +A hl-product-service/src/main/java/com/hulalv/product/config/MapOrNullDeserializer.java +M hl-product-service/src/main/java/com/hulalv/product/controller/InternalProductController.java +M hl-product-service/src/main/java/com/hulalv/product/dto/ProductCreateRequest.java +M hl-product-service/src/main/java/com/hulalv/product/dto/ProductSaveRequest.java +M hl-product-service/src/main/java/com/hulalv/product/dto/ProductUpdateRequest.java +M hl-product-service/src/main/java/com/hulalv/product/entity/Product.java +A hl-product-service/src/main/java/com/hulalv/product/vo/ProductAutomationConfigVO.java +M hl-product-service/src/main/java/com/hulalv/product/vo/ProductListVO.java +M hl-product-service/src/main/java/com/hulalv/product/vo/ProductVO.java +M hl-resource-service/src/main/java/com/hulalv/resource/controller/InternalResourcePriceController.java +A sql/product_automation_fields.sql +``` +
\ No newline at end of file