hl-api-changelog/changelogs/2026-03/2026-03-20_comprehensive_frontend_guide.md
API Changelog Bot 5f78dd09fb feat: 综合前端对接指南 — 产品自动化+保险+合同+配房+配车
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 13:17:26 +08:00

22 KiB

综合前端对接指南 — 产品自动化配置 + 保险 + 合同 + 配房 + 配车

日期: 2026-03-20 后端状态: 已完成,可直接对接 涉及服务: hl-product-service、hl-order-service、hl-insurance-service、hl-contract-service、hl-resource-service


一、整体变更说明

核心改动

  1. 产品新增10个保险+合同配置字段(创建时必填):产品绑定保险方案和合同配置
  2. 订单支付后自动投保+自动签约:出行人补全后系统自动完成,无需管理员手动操作
  3. 去掉「确认订单」步骤原6步待办缩减为5步,CONFIRM_ORDER 已删除
  4. PROCESSING 流程状态已删除PENDING_INFO 直接跳到 PENDING_INSURANCE
  5. 配房改为按天粒度:每天每个家庭一条记录,新增房型升级差价自动计算
  6. 配房升级差价预览:提交配房前可预览差价明细

新的订单内部流程

支付成功 → 创建5个待办 → 出行人补全 → 系统自动确认订单
  → 自动投保(按产品绑定的保险方案)  ← INSURANCE待办自动完成
  → 自动签约(按产品绑定的合同配置)  ← CONTRACT待办等签署回调完成
  → 手动配房 (ARRANGE_ROOM)
  → 手动配车 (ARRANGE_VEHICLE)
  → 手动确认清单 (CONFIRM_CHECKLIST)

容错:自动投保/签约失败时,待办保持 PENDING,管理员可手动处理。


二、破坏性变更(前端必须适配)

1. 待办类型变更

原 todoType 原序号 新 todoType 新序号 说明
CONFIRM_ORDER 1 已删除 - 不再需要手动确认
INSURANCE 2 INSURANCE 1 可被系统自动完成
CONTRACT 3 CONTRACT 2 可被系统自动完成
ARRANGE_ROOM 4 ARRANGE_ROOM 3 手动
ARRANGE_VEHICLE 5 ARRANGE_VEHICLE 4 手动
CONFIRM_CHECKLIST 6 CONFIRM_CHECKLIST 5 手动

前端注意

  • 不要 hardcode CONFIRM_ORDER 的判断
  • 待办序号已变化INSURANCE 从 2 变为 1
  • INSURANCE/CONTRACT 待办可能被系统自动完成,展示时注意区分

2. processStatus 变更

原流程 新流程
PENDING_INFO → PROCESSING → PENDING_INSURANCE → ... PENDING_INFO → PENDING_INSURANCE → ...

PROCESSING 状态已删除,相关状态标签/过滤条件需要去掉。

有效的 processStatus 值 PENDING_INFO / PENDING_INSURANCE / PENDING_CONTRACT / PENDING_ROOM / PENDING_VEHICLE / PENDING_FINANCE / READY / INTERNAL_CONFIRMED

3. 配房接口破坏性变更

从「按日期区间」改为「按天粒度」,详见下方配房章节。


三、产品服务 — 新增保险与合同配置

页面布局建议

在产品编辑页基本信息之后增加「保险与合同配置」区域:

┌─────────────────────────────────────────┐
│ 保险与合同配置                            │
├─────────────────────────────────────────┤
│ 保险方案:[下拉选择] ← GET /admin/insurance/scheme/list │
│                                         │
│ 合同平台:[12301 ▼] / [法大大 ▼]          │
│ 合同模板:[下拉选择] ← GET /admin/contract/templates │
│ 签约模式:[电子签约 ▼] / [线下报备 ▼]     │
│ 签署模式:[短信 ▼] / [现场 ▼] / [线下 ▼]  │
│ 旅行社:  [下拉选择] ← GET /admin/insurance/entities │
│ 争议解决:[仲裁 ▼] / [诉讼 ▼]            │
│ 经办人姓名:[________]                    │
│ 经办人电话:[________]                    │
│ 补充条款:[________________] (可选)       │
└─────────────────────────────────────────┘

接口 1创建产品新增必填字段

POST /admin/product

新增请求字段(所有字段必填,supplementaryClause 除外):

字段 类型 必填 说明
insuranceSchemeId Long 保险方案ID,从 GET /admin/insurance/scheme/list 获取
contractPlatform String 合同平台:12301(全国旅游监管平台)/ FADADA(法大大)
contractTemplateCode String 合同模板编码,从 GET /admin/contract/templates 获取
contractMode String 签约模式:STANDARD(电子签约)/ SYNC(线下报备)
signatoryMode Integer 签署模式:1=短信签署 / 2=现场签署 / 3=线下签署
agencyCode String 旅行社编码,从 GET /admin/insurance/entities 获取
disputeResolution Integer 争议解决方式:1=仲裁 / 2=诉讼
supplementaryClause String 合同补充条款
transactorName String 经办人姓名
transactorPhone String 经办人电话

接口 2编辑产品新增可选字段

PUT /admin/product/{productId}

同上 10 个字段,全部可选(不传则不更新)。

接口 3统一保存产品新增字段

POST /admin/product/save

同上 10 个字段,创建时必填,更新时可选。

接口 4产品详情响应新增返回字段

GET /admin/product/{productId}

响应新增字段ProductVO 和 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 经办人电话

下拉数据源接口

保险方案列表(产品编辑页下拉)

GET /admin/insurance/scheme/list

使用场景:产品编辑页「保险方案」下拉选择。

响应示例

{
  "code": 200,
  "data": [
    {
      "id": "1901234567890",
      "name": "国内5天标准保障",
      "description": "覆盖5天国内行程的基础保障方案",
      "isOverseas": false,
      "status": "ACTIVE",
      "segments": [
        {
          "segmentIndex": 1,
          "insuranceProductId": "100",
          "planId": "200",
          "startDayOffset": 0,
          "endDayOffset": 4
        }
      ]
    }
  ]
}

合同模板列表(产品编辑页下拉)

GET /admin/contract/templates

使用场景:产品编辑页「合同模板」下拉选择。

响应示例

{
  "code": 200,
  "data": [
    {
      "templateCode": "TOURAGE_STANDARD",
      "templateName": "国内旅游标准合同",
      "platform": "12301",
      "mode": "STANDARD"
    }
  ]
}

合同平台列表(产品编辑页下拉)

GET /admin/contract/platforms

使用场景:产品编辑页「合同平台」下拉选择。

旅行社列表(产品编辑页下拉)

GET /admin/insurance/entities

使用场景产品编辑页「旅行社」下拉选择agencyCode 使用此列表中的 code 值)。

响应示例

{
  "code": 200,
  "data": [
    {
      "code": "HLNMG",
      "companyName": "内蒙古呼籁国际旅行社有限公司"
    }
  ]
}

四、保险服务 — 手动配置保险

订单保险在正常流程中会自动完成(支付后系统自动投保),但管理员也可以手动操作。手动配保险有两种方式:

页面布局建议

┌─────────────────────────────────────────┐
│ 保险配置                                 │
├─────────────────────────────────────────┤
│ ● 选择保险方案(推荐)                    │
│   [方案下拉] → 预览 → 确认投保            │
│                                         │
│ ○ 按天手动配置                            │
│   保险产品:[下拉]                        │
│   保险计划:[下拉]                        │
│   开始日期:[____] 结束日期:[____]        │
│   [试算保费] [确认投保]                   │
└─────────────────────────────────────────┘

方式一:选择保险方案投保(推荐)

步骤1选择方案 → 预览

POST /admin/insurance/scheme/preview-apply

使用场景:管理员选择保险方案后,预览投保效果(各段日期、保费明细)。

字段 类型 必填 说明
schemeId Long 保险方案ID从方案列表获取
orderId Long 订单ID自动获取出行日期和人数

响应:返回各段的日期范围、计划信息、单人保费、总保费、日期间隙警告。

步骤2确认后逐段投保

确认后前端按预览结果中的各段信息,逐段调用 purchase 接口(参考方式二)。

方式二:按天手动投保

接口 1查询保险产品列表

GET /admin/insurance/products?isOverseas=false

使用场景:按天手动投保时,选择保险产品。

参数 类型 必填 说明
isOverseas Boolean 是否境外保险,默认 false
page Integer 页码
pageSize Integer 每页条数

接口 2查询保险计划列表

GET /admin/insurance/products/{productId}/plans

使用场景:选择保险产品后,查看该产品下的保险计划及费率。

接口 3保费试算

POST /admin/insurance/trial-price

使用场景:选择计划和日期后,试算保费(不下单)。

字段 类型 必填 说明
planId Long 保险计划ID
startDate String 保障开始日期 yyyy-MM-dd
endDate String 保障结束日期 yyyy-MM-dd
insuredCount Integer 被保人数

接口 4确认投保

POST /admin/insurance/purchase

使用场景:确认投保,创建保险订单。

字段 类型 必填 说明
orderId Long 关联的旅行订单ID
planId Long 保险计划ID
startDate String 保障开始日期 yyyy-MM-dd
endDate String 保障结束日期 yyyy-MM-dd
insuredPersons Array 被保人列表至少1人
insuredPersons[].name String 姓名
insuredPersons[].idCardType String 证件类型:ID_CARD/PASSPORT/OTHER,默认 ID_CARD
insuredPersons[].idCardNo String 证件号
insuredPersons[].birthday String 出生日期 yyyy-MM-dd
insuredPersons[].gender String 性别:MALE/FEMALE
entityCode String 投保公司编码,默认使用系统默认主体

响应List<InsuranceOrderDetailVO>,每条包含保险单号、状态、被保人信息等。

保险查询与管理接口

# 接口 方法 路径 说明
1 按订单查保险 GET /admin/insurance/orders/by-order/{orderId} 查询订单关联的保险单列表
2 保险保障详情 GET /admin/insurance/coverage/{orderId} 查询订单保险保障(含被保人详情)
3 保险订单详情 GET /admin/insurance/orders/{id} 单条保险订单详情
4 退保 POST /admin/insurance/cancel/{id} 退保(管理员手动退保)
5 下载保单 GET /admin/insurance/policy/{id}/download 下载保单PDFBase64
6 分享保单 POST /admin/insurance/share-policy 分享保单给用户
7 账户余额 GET /admin/insurance/balance 查询保游网账户余额
8 在线充值 POST /admin/insurance/recharge 保游网在线充值

五、合同服务 — 手动配置合同

订单合同在正常流程中会自动完成(支付后系统自动发起签约),但管理员也可以手动操作。

接口 1创建合同电子签约模式 STANDARD

POST /admin/contract/create

使用场景:手动创建合同,发送签署短信给游客。合同签署完成后 CONTRACT 待办自动完成。

请求体CreateContractRequest字段较多,参见 Knife4j 文档)

接口 2报备合同线下报备模式 SYNC

POST /admin/contract/report

使用场景:线下签约后报备合同,报备成功 CONTRACT 待办自动完成。

合同查询与管理接口

# 接口 方法 路径 说明
1 合同列表 GET /admin/contract/list 分页查询,支持按订单/状态/旅行社筛选
2 合同详情 GET /admin/contract/{id} 单条合同详情
3 按订单查合同 GET /admin/contract/by-order/{orderId} 查询订单关联的所有合同(含已作废)
4 订单有效合同 GET /admin/contract/active-by-order/{orderId} 获取订单最新有效合同
5 刷新合同状态 GET /admin/contract/{id}/status 从平台同步最新签署状态
6 作废合同 POST /admin/contract/{id}/invalidate 作废合同(可重新签约)
7 重发签署短信 POST /admin/contract/{id}/resend-sms 重发签署短信STANDARD模式
8 上传已签署PDF POST /admin/contract/{id}/upload-pdf 上传线下签署的PDFSYNC模式
9 合同模板列表 GET /admin/contract/templates 可用合同模板(下拉选择)
10 合同平台列表 GET /admin/contract/platforms 可用合同平台
11 旅行社列表 GET /admin/contract/agencies 可用旅行社

合同状态字典contract_status

中文 说明
CREATED 已创建 合同已创建,待发起签署
SIGNING 签署中 已发送签署短信,等待签署
SIGNED 已签署 合同已签署完成
UPLOADED 已上传 已上传签署PDFSYNC模式
REPORTED 已报备 已向平台报备SYNC模式
INVALID 已作废 合同已作废

六、配房 — 按天粒度 + 房型升级差价

破坏性变更

配房接口从「按家庭+日期区间」改为「按天按家庭」粒度。checkInDatecheckOutDate 字段已删除,改用 date 单天日期。

接口 1配房升级差价预览新增

POST /admin/order/{orderId}/hotel-assignment/preview

使用场景:选择酒店和房型后,提交前预览房型升级差价。前端根据返回的差价信息展示给用户确认。

请求体:同分配酒店信息接口

响应RoomUpgradePreviewVO

字段 类型 说明
details Array 各天差价明细(仅有差价的天)
details[].familyIndex Integer 家庭序号
details[].date String 日期
details[].defaultRoomTypeId Long 产品默认房型ID
details[].defaultRoomTypeName String 产品默认房型名称
details[].assignedRoomTypeId Long 实际分配房型ID
details[].assignedRoomTypeName String 实际分配房型名称
details[].defaultPrice BigDecimal 默认房型当天单价
details[].assignedPrice BigDecimal 实际房型当天单价
details[].dayDiff BigDecimal 当天差价(正=补款,负=退款)
details[].direction String UPGRADE / DOWNGRADE / SAME
details[].remark String 备注
totalDiff BigDecimal 差价合计
direction String UPGRADE / DOWNGRADE / SAME / MIXED
description String 差价描述(如「共 2 天有差价,合计 +400.00」)

响应示例

{
  "code": 200,
  "data": {
    "details": [
      {
        "familyIndex": 1,
        "date": "2026-04-01",
        "defaultRoomTypeId": 2002,
        "defaultRoomTypeName": "标间",
        "assignedRoomTypeId": 2001,
        "assignedRoomTypeName": "豪华大床房",
        "defaultPrice": 300.00,
        "assignedPrice": 500.00,
        "dayDiff": 200.00,
        "direction": "UPGRADE",
        "remark": "需要加床"
      }
    ],
    "totalDiff": 200.00,
    "direction": "UPGRADE",
    "description": "共 1 天有差价,合计 +200.00"
  }
}

接口 2分配酒店信息破坏性变更

PUT /admin/order/{orderId}/hotel-assignment

使用场景:为订单按天按家庭分配具体酒店房间。每天每个家庭一条记录。

请求体

字段 类型 必填 说明
assignments Array 酒店分配列表(按天按家庭,每天每个家庭一条)
assignments[].familyIndex Integer 家庭序号
assignments[].hotelId Long 酒店ID
assignments[].hotelName String 酒店名称
assignments[].roomTypeId Long 房型ID
assignments[].roomType String 房型名称
assignments[].date String 单天日期 yyyy-MM-dd替代原 checkInDate/checkOutDate
assignments[].remark String 当天备注(新增)
assignments[].upgradePrice BigDecimal 手动覆盖升级差价null=使用系统计算值)

删除的字段checkInDatecheckOutDate

房型升级逻辑(自动触发)

  • 分配的 roomTypeId 与产品默认房型不同 → 自动计算差价
  • CORE产品快照中 roomTypeId 为 null→ 默认基准为该酒店的标间STANDARD
  • 差价 = 新房型日价格 - 默认房型日价格(来自价格日历)
  • upgradePrice 可手动覆盖系统计算的差价
  • 定制师操作:差价自动确认,直接调整订单总售价
  • 其他角色操作:差价设为「待确认」临时加到尾款,通知定制师确认

请求示例

{
  "assignments": [
    {
      "familyIndex": 1,
      "hotelId": 1001,
      "hotelName": "呼伦贝尔大酒店",
      "roomTypeId": 2001,
      "roomType": "豪华大床房",
      "date": "2026-04-01",
      "remark": "需要加床"
    },
    {
      "familyIndex": 1,
      "hotelId": 1001,
      "hotelName": "呼伦贝尔大酒店",
      "roomTypeId": 2001,
      "roomType": "豪华大床房",
      "date": "2026-04-02",
      "remark": ""
    },
    {
      "familyIndex": 2,
      "hotelId": 1001,
      "hotelName": "呼伦贝尔大酒店",
      "roomTypeId": 2002,
      "roomType": "标间",
      "date": "2026-04-01",
      "remark": ""
    }
  ]
}

响应Result<Void>

接口 3查询可用酒店列表

GET /admin/order/{orderId}/available-hotels?dayIndex=1

使用场景:配房时根据行程天数查询可选酒店(产品快照中的酒店优先排序)。

参数 类型 必填 说明
dayIndex Integer 行程第几天1开始

推荐交互流程

选择酒店+房型 → 填写每天备注 → 点击「预览差价」
  → 调用 POST preview 接口
  → 展示差价明细(可修改 upgradePrice
  → 点击「确认配房」→ 调用 PUT hotel-assignment

七、配车

接口:分配车辆信息

PUT /admin/order/{orderId}/vehicle-assignment

使用场景:为订单分配具体车辆和司机信息。

字段 类型 必填 说明
vehicleModel String 车型如「别克GL8」
vehicleBrand String 品牌(如「别克」)
plateNumber String 车牌号
driverName String 司机姓名
driverPhone String 司机电话

响应Result<Void>


八、尾款调整汇总(字段增强)

GET /admin/order/{orderId}/itinerary/balance-summary

使用场景:订单详情页展示尾款调整明细,包含行程编辑和房型升级产生的差价。

响应新增字段

字段 类型 说明
confirmedAdjustment BigDecimal 已确认的调整金额(已计入总售价)
pendingAdjustment BigDecimal 待确认的调整金额(临时,待定制师确认)
totalAdjustment BigDecimal 合计(已确认 + 待确认)
details[].confirmStatus String CONFIRMED(已确认)或 PENDING_CONFIRM(待确认)

页面展示

  • 展示「已确认调整」和「待确认调整(临时)」两个金额
  • 待确认项标记为临时状态,提示「待定制师确认」

九、枚举/字典值汇总

字段 可选值 说明
contractPlatform 12301 / FADADA 合同平台
contractMode STANDARD / SYNC 签约模式:电子签约 / 线下报备
signatoryMode 1 / 2 / 3 签署模式1=短信 / 2=现场 / 3=线下
disputeResolution 1 / 2 争议解决1=仲裁 / 2=诉讼
todoType INSURANCE / CONTRACT / ARRANGE_ROOM / ARRANGE_VEHICLE / CONFIRM_CHECKLIST 待办类型CONFIRM_ORDER 已删除)
processStatus PENDING_INFO / PENDING_INSURANCE / PENDING_CONTRACT / PENDING_ROOM / PENDING_VEHICLE / PENDING_FINANCE / READY / INTERNAL_CONFIRMED 内部流程状态PROCESSING 已删除)
contract_status CREATED / SIGNING / SIGNED / UPLOADED / REPORTED / INVALID 合同状态
upgradeDirection UPGRADE / DOWNGRADE / SAME / MIXED 房型升级方向
confirmStatus CONFIRMED / PENDING_CONFIRM 尾款调整确认状态