diff --git a/changelogs-v2/2026-06/18_4017_景区车辆价格日历可售判定修复-行为修复-管理后台.md b/changelogs-v2/2026-06/18_4017_景区车辆价格日历可售判定修复-行为修复-管理后台.md new file mode 100644 index 0000000..5f163a6 --- /dev/null +++ b/changelogs-v2/2026-06/18_4017_景区车辆价格日历可售判定修复-行为修复-管理后台.md @@ -0,0 +1,35 @@ +# 景区/车辆价格日历「可售判定 + 扣库存」守卫修复 — 行为修复 — 管理后台 + +> 变更类型:🐛 行为修复(String 引用比较 `!=` 改值比较 `.equals`),**无接口契约变更** +> 端类型:管理后台(资源价格日历可售性,间接影响下单可售校验) +> 日期:2026-06-18 +> 服务:hl-resource-service(scenic / vehicle 价格日历) +> PR:https://git.1814.love:8443/wx/HL/pulls/4017 (每日定时代码审查发现,无关联工单) + +--- + +## ⚠️ 关键说明 + +今日 PR #3957 把资源价格日历可售/扣库存守卫从 String **引用比较** `getStatus() != CONST` 系统性改为**值比较** `!CONST.equals(getStatus())`(DB 反序列化的 String 与编译期常量非同一引用,`!=` 恒为 true → 状态永不等于「AVAILABLE」),但 **scenic 与 vehicle 两处漏改**。 + +本次补齐三处守卫,使景区/车辆「可售判定」与「扣库存」恢复正确: + +- `ScenicPriceCalendarService.isAvailable` +- `VehiclePriceCalendarService.deductStock` +- `VehiclePriceCalendarService.isAvailable` + +**影响面:** 修复前,景区/车辆即便价格日历状态为「可售」也会被判为不可售、车辆库存无法扣减(下单/可售校验侧表现为该日期不可用)。修复后行为恢复正常。 + +**前端影响:** 无。接口路径、出入参、响应结构均不变,仅内部判定逻辑纠正,前端无需改动。已部署测试服双实例(8082/8182)Nacos 注册 healthy,网关 9443 链路正常。 + +--- + +## 1. 变更明细(无接口契约变更) + +| 文件 / 方法 | 旧(错误) | 新(正确,对齐 service/staff 兄弟实现) | +|------|------|------| +| `ScenicPriceCalendarService.isAvailable` | `price.getStatus() != ScenicConstants.PRICE_STATUS_AVAILABLE` | `!ScenicConstants.PRICE_STATUS_AVAILABLE.equals(price.getStatus())` | +| `VehiclePriceCalendarService.deductStock` | `record.getStatus() != VehicleConstants.PRICE_STATUS_AVAILABLE` | `!VehicleConstants.PRICE_STATUS_AVAILABLE.equals(record.getStatus())` | +| `VehiclePriceCalendarService.isAvailable` | `record.getStatus() != VehicleConstants.PRICE_STATUS_AVAILABLE` | `!VehicleConstants.PRICE_STATUS_AVAILABLE.equals(record.getStatus())` | + +> 同类守卫在 hotel/activity/staff/service 五服务已于 PR #3957 修正,本次补齐 scenic/vehicle,全资源价格日历可售判定写法统一。 diff --git a/changelogs-v2/2026-06/18_4018_出行人新增拦截未来出生日期-修改接口-管理后台.md b/changelogs-v2/2026-06/18_4018_出行人新增拦截未来出生日期-修改接口-管理后台.md new file mode 100644 index 0000000..4e1c13b --- /dev/null +++ b/changelogs-v2/2026-06/18_4018_出行人新增拦截未来出生日期-修改接口-管理后台.md @@ -0,0 +1,44 @@ +# 出行人新增(单加)拦截未来出生日期 — 修改接口 — 管理后台 + +> 变更类型:⚠️ 校验增强(新增 `@PastOrPresent` 守卫,未来出生日期被拒) +> 端类型:管理后台(订单 → 出行人 → 单个新增) +> 日期:2026-06-18 +> 服务:hl-order-service-v3(traveler 模块) +> PR:https://git.1814.love:8443/wx/HL/pulls/4018 (每日定时代码审查发现,无关联工单) + +--- + +## ⚠️ 关键说明 + +出行人类型(成人/儿童/小童/幼童)今日改为**后端按出生日期自动派生**(#3981),不再由前端传 `travelerType`。此前**单个新增**路径 `birthday` 仅校验 `@NotNull`,未拦截「未来日期」——传一个未来出生日期会被静默派生成「幼童(BABY)」,与批量编辑路径(已显式抛 `581114 出生日期不能晚于今天`)口径不一。 + +本次给单加请求 `birthday` 补 `@PastOrPresent` 守卫对齐:**允许「今天」、只拒「未来」**。 + +**前端影响:** 调 `POST /v3/admin/order/{id}/traveler` 时若 `birthday` 晚于今天,现返回 **400 参数校验失败**(message:`出生日期不能晚于今天`),不再静默落库为幼童。请前端日期选择器侧限制出生日期 ≤ 今天(与既有批量编辑校验一致)。 + +--- + +## 1. 受影响接口 + +**`POST /v3/admin/order/{id}/traveler`**(单个出行人新增,路径与出入参结构均不变) + +请求体 `birthday` 字段校验规则变化: + +| 字段 | 旧规则 | 新规则 | +|------|--------|--------| +| `birthday` | `@NotNull`(仅非空) | `@NotNull` + `@PastOrPresent`(非空且 ≤ 今天) | + +### 反例(未来日期)请求 + +```json +POST /v3/admin/order/123456/traveler +{ "name": "测试", "birthday": "2099-01-01", "idType": "ID_CARD", "idNo": "..." } +``` + +响应(400,Bean 校验失败): + +```json +{ "code": 400, "message": "出生日期不能晚于今天", "data": null } +``` + +合法日期(今天及以前)行为不变。批量编辑路径 `PUT .../travelers/batch` 早已有等价拦截,本次仅补齐单加路径。