5.1 KiB
5.1 KiB
接口变更记录 — 2026-03-20(定价字段精简 + 保险校验)
类型 refactor + feature
定价配置精简(移除6个冗余字段)+ 保险方案天数校验 + 保险费自动回填
一、定价配置字段精简
1. 移除 maxGroupSize(最多成团人数)
原因:业务上只需要"成团人数"一个概念,不需要区分最少/最多。
前端需要调整:
- 定价规则页面:移除"最多成团"输入框,只保留"成团人数"(字段
minGroupSize) minGroupSize语义变为"成团人数",不再是"最少成团"
| 字段 | 变更 | 说明 |
|---|---|---|
maxGroupSize |
已移除 | 请求和响应都不再有此字段 |
minGroupSize |
含义变更 | 现在代表"成团人数"(原为"最少成团人数") |
2. 移除4个未使用的价格体系字段
原因:这4个字段从未参与任何价格计算逻辑,只是存储和展示,属于冗余数据。
| 移除的字段 | 原含义 | 说明 |
|---|---|---|
singleRoomDiff |
单房差 | 已移除 |
adultExtraBed |
成人加床 | 已移除 |
childNoBed |
儿童不占床 | 已移除 |
companionPrice |
陪同价 | 已移除 |
保留的价格字段(实际参与计算):
| 字段 | 含义 | 说明 |
|---|---|---|
childWithBed |
儿童占床价 | 保留,参与儿童价计算 |
childDiscountPercent |
儿童折扣百分比 | 保留,参与儿童价计算 |
babyPrice |
婴儿价 | 保留,参与婴儿价计算 |
insuranceFee |
保险费 | 保留,参与成本计算 |
mealBudget |
餐费预算 | 保留 |
extraCostPerPerson |
每人额外成本 | 保留 |
受影响的接口
POST /admin/product/item/{productId}/pricing — 保存定价规则
请求参数变更:
| 字段 | 变更 |
|---|---|
maxGroupSize |
已移除 |
singleRoomDiff |
已移除 |
adultExtraBed |
已移除 |
childNoBed |
已移除 |
companionPrice |
已移除 |
GET /admin/product/item/{productId}/pricing — 获取定价规则
响应变更:同上5个字段从响应中移除。
小程序端 — 定制产品详情
MpCustomProductDetailVO.PricingItem 同步移除以上5个字段。
二、保险方案天数校验
功能说明
产品选择保险方案时,系统会校验保险方案的适用行程天数是否与产品行程天数一致。不一致时拒绝保存。
保险方案列表新增字段
GET /admin/insurance/scheme — 保险方案列表
响应新增字段:
| 字段 | 类型 | 说明 |
|---|---|---|
totalDays |
Integer | 适用行程天数(根据保障段自动计算) |
产品保存时校验逻辑
- 创建/编辑产品时,如果设置了
insuranceSchemeId,系统自动调用保险服务校验 - 如果保险方案的
totalDays与产品行程天数不匹配,返回错误提示:保险方案「{方案名}」适用{N}天行程,但本产品行程为{M}天,请选择匹配的方案
三、保险费自动回填
功能说明
产品选择保险方案后,系统自动计算每人保险费并回填到定价配置的 insuranceFee 字段。
新增接口:保险费预览
GET /admin/product/item/{productId}/pricing/insurance-fee-preview
用途:前端选择保险方案时实时预览保险费,不保存。
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
schemeId |
Long | 是 | 保险方案ID |
响应:Result<Map>
{
"code": 200,
"data": {
"schemeId": "1234567890",
"schemeName": "测试3日方案",
"totalDays": 3,
"tripDays": 3,
"perPersonPremium": 45.00
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
schemeId |
String | 保险方案ID |
schemeName |
String | 方案名称 |
totalDays |
Integer | 方案适用天数 |
tripDays |
Integer | 产品行程天数 |
perPersonPremium |
BigDecimal | 每人保险费(元) |
错误场景:
- 产品不存在 → 404
- 保险服务不可用 → 500("保险服务暂不可用")
- 天数不匹配 → 400(提示不匹配原因)
自动回填逻辑
产品保存(创建/编辑)时:
- 如果设置了
insuranceSchemeId,自动调用保险服务获取每人保险费 - 校验天数匹配(不匹配则报错)
- 自动将
perPersonPremium写入ProductPricing.insuranceFee - 前端定价页面的"保险费"字段会自动更新为计算值(仍可手动修改)
数据库变更
-- 1. 移除 maxGroupSize
ALTER TABLE product_pricing DROP COLUMN max_group_size;
-- 2. 保险方案新增 totalDays
ALTER TABLE insurance_scheme ADD COLUMN total_days INT DEFAULT NULL COMMENT '适用行程天数';
-- 3. 移除4个未使用的定价字段
ALTER TABLE product_pricing DROP COLUMN single_room_diff;
ALTER TABLE product_pricing DROP COLUMN adult_extra_bed;
ALTER TABLE product_pricing DROP COLUMN child_no_bed;
ALTER TABLE product_pricing DROP COLUMN companion_price;
已在本地和测试环境执行完毕。