feat: 订单自动化(产品绑定保险方案+合同配置,支付后自动投保签约)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
09109dba9e
当前提交
1b06dd3680
@ -0,0 +1,247 @@
|
|||||||
|
# 订单自动化:产品绑定保险方案+合同配置,支付后自动投保+签约
|
||||||
|
|
||||||
|
> 日期:2026-03-20 | 涉及服务:hl-product-service、hl-order-service、hl-insurance-service、hl-contract-service
|
||||||
|
|
||||||
|
## 功能说明
|
||||||
|
|
||||||
|
### 核心变更
|
||||||
|
|
||||||
|
1. **产品新增保险+合同配置字段(必填)**:创建/编辑产品时必须绑定保险方案和合同配置
|
||||||
|
2. **订单支付后自动投保+签约**:出行人补全后系统自动完成保险和合同,无需管理员手动操作
|
||||||
|
3. **去掉"待确认订单"步骤**:原6步待办缩减为5步,CONFIRM_ORDER 不再存在
|
||||||
|
4. **保险手动配置支持按天配置或直接选方案**:管理员可手动按天投保(purchase 接口),也可直接选方案自动投保
|
||||||
|
|
||||||
|
### 新的订单内部流程
|
||||||
|
|
||||||
|
```
|
||||||
|
支付成功 → 创建5个待办 → 出行人补全 → 系统自动确认订单
|
||||||
|
→ 自动投保(按产品绑定的保险方案) ← INSURANCE待办自动完成
|
||||||
|
→ 自动签约(按产品绑定的合同配置) ← CONTRACT待办等签署回调完成
|
||||||
|
→ 手动配房 (ARRANGE_ROOM)
|
||||||
|
→ 手动配车 (ARRANGE_VEHICLE)
|
||||||
|
→ 手动确认清单 (CONFIRM_CHECKLIST)
|
||||||
|
```
|
||||||
|
|
||||||
|
**容错**:自动投保/签约失败时,待办保持 PENDING,管理员可手动处理。管理员也可手动退保/作废合同后重新操作。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 接口变更清单
|
||||||
|
|
||||||
|
### 一、产品服务
|
||||||
|
|
||||||
|
#### 1. 创建产品(新增必填字段)
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /admin/product
|
||||||
|
```
|
||||||
|
|
||||||
|
**新增请求字段**(所有字段必填,supplementaryClause 除外):
|
||||||
|
|
||||||
|
| 字段 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| 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 | 是 | 经办人电话 |
|
||||||
|
|
||||||
|
#### 2. 编辑产品(新增可选字段)
|
||||||
|
|
||||||
|
```
|
||||||
|
PUT /admin/product/{productId}
|
||||||
|
```
|
||||||
|
|
||||||
|
同上 10 个字段,全部可选(不传则不更新)。
|
||||||
|
|
||||||
|
#### 3. 统一保存产品(新增字段)
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /admin/product/save
|
||||||
|
```
|
||||||
|
|
||||||
|
同上 10 个字段,创建时必填,更新时可选。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 二、保险服务
|
||||||
|
|
||||||
|
#### 已有接口(手动配置保险)
|
||||||
|
|
||||||
|
**方式一:按天手动投保**(purchase 接口,按具体的计划+日期段投保)
|
||||||
|
|
||||||
|
```
|
||||||
|
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 | 否 | 投保公司编码,默认使用系统默认主体 |
|
||||||
|
|
||||||
|
**方式二:选择保险方案投保**(preview → 确认 → 自动按段投保)
|
||||||
|
|
||||||
|
步骤1:预览方案
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /admin/insurance/scheme/preview-apply
|
||||||
|
```
|
||||||
|
|
||||||
|
| 字段 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| schemeId | Long | 是 | 保险方案ID |
|
||||||
|
| orderId | Long | 是 | 订单ID(自动获取出行日期和人数) |
|
||||||
|
|
||||||
|
返回各段的日期范围、计划信息、单人保费、总保费、日期间隙警告。
|
||||||
|
|
||||||
|
步骤2:确认后逐段调用 purchase 接口(参考方式一)
|
||||||
|
|
||||||
|
**保险方案列表**(产品编辑页下拉使用):
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /admin/insurance/scheme/list
|
||||||
|
```
|
||||||
|
|
||||||
|
返回所有启用的保险方案列表(schemeId + name + description + isOverseas + 段列表)。
|
||||||
|
|
||||||
|
**保险产品/计划列表**(按天手动投保时使用):
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /admin/insurance/products?isOverseas=false
|
||||||
|
GET /admin/insurance/products/{productId}/plans
|
||||||
|
```
|
||||||
|
|
||||||
|
**保费试算**:
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /admin/insurance/trial-price
|
||||||
|
```
|
||||||
|
|
||||||
|
| 字段 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| planId | Long | 是 | 保险计划ID |
|
||||||
|
| startDate | String | 是 | yyyy-MM-dd |
|
||||||
|
| endDate | String | 是 | yyyy-MM-dd |
|
||||||
|
| insuredCount | Integer | 是 | 被保人数 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 三、合同服务
|
||||||
|
|
||||||
|
**合同模板列表**(产品编辑页下拉使用):
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /admin/contract/templates
|
||||||
|
```
|
||||||
|
|
||||||
|
返回可用的合同模板列表(templateCode + templateName + platform + mode)。
|
||||||
|
|
||||||
|
**投保主体/旅行社列表**(产品编辑页下拉使用):
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /admin/insurance/entities
|
||||||
|
```
|
||||||
|
|
||||||
|
返回投保公司主体列表(code + companyName)。agencyCode 使用此列表中的 code 值。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 四、订单服务
|
||||||
|
|
||||||
|
#### 待办定义变更(**破坏性变更**)
|
||||||
|
|
||||||
|
| 原 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 | 手动 |
|
||||||
|
|
||||||
|
#### processStatus 变更
|
||||||
|
|
||||||
|
| 原流程 | 新流程 |
|
||||||
|
|--------|--------|
|
||||||
|
| PENDING_INFO → **PROCESSING** → PENDING_INSURANCE → ... | PENDING_INFO → PENDING_INSURANCE → ... |
|
||||||
|
|
||||||
|
`PROCESSING` 状态已删除,`PENDING_INFO` 直接跳到 `PENDING_INSURANCE`。
|
||||||
|
|
||||||
|
#### 前端需要注意
|
||||||
|
|
||||||
|
1. **待办列表不再有 CONFIRM_ORDER 类型**:前端不要 hardcode "CONFIRM_ORDER" 的判断
|
||||||
|
2. **工作台待办序号变化**:INSURANCE 现在是 seq=1(原来是2),以此类推
|
||||||
|
3. **processStatus 没有 PROCESSING 了**:相关状态标签/过滤条件需要去掉
|
||||||
|
4. **INSURANCE/CONTRACT 待办可能被系统自动完成**:前端展示时注意区分系统完成和手动完成
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 页面布局建议
|
||||||
|
|
||||||
|
### 产品编辑页 — 新增"保险与合同配置"区域
|
||||||
|
|
||||||
|
建议放在产品基本信息之后,行程安排之前:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────┐
|
||||||
|
│ 保险与合同配置 │
|
||||||
|
├─────────────────────────────────────────┤
|
||||||
|
│ 保险方案:[下拉选择] ← GET /admin/insurance/scheme/list │
|
||||||
|
│ │
|
||||||
|
│ 合同平台:[12301 ▼] / [法大大 ▼] │
|
||||||
|
│ 合同模板:[下拉选择] ← GET /admin/contract/templates │
|
||||||
|
│ 签约模式:[电子签约 ▼] / [线下报备 ▼] │
|
||||||
|
│ 签署模式:[短信 ▼] / [现场 ▼] / [线下 ▼] │
|
||||||
|
│ 旅行社: [下拉选择] ← GET /admin/insurance/entities │
|
||||||
|
│ 争议解决:[仲裁 ▼] / [诉讼 ▼] │
|
||||||
|
│ 经办人姓名:[________] │
|
||||||
|
│ 经办人电话:[________] │
|
||||||
|
│ 补充条款:[________________] (可选) │
|
||||||
|
└─────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 订单详情页 — 保险手动操作
|
||||||
|
|
||||||
|
管理员手动配保险时有两种方式:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────┐
|
||||||
|
│ 保险配置 │
|
||||||
|
├─────────────────────────────────────────┤
|
||||||
|
│ ● 选择保险方案(推荐) │
|
||||||
|
│ [方案下拉] → 预览 → 确认投保 │
|
||||||
|
│ │
|
||||||
|
│ ○ 按天手动配置 │
|
||||||
|
│ 保险产品:[下拉] │
|
||||||
|
│ 保险计划:[下拉] │
|
||||||
|
│ 开始日期:[____] 结束日期:[____] │
|
||||||
|
│ [试算保费] [确认投保] │
|
||||||
|
└─────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 枚举/字典值
|
||||||
|
|
||||||
|
| 字段 | 可选值 | 说明 |
|
||||||
|
|------|--------|------|
|
||||||
|
| 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 已删除) |
|
||||||
正在加载...
x
在新工单中引用
屏蔽一个用户