diff --git a/changelogs/2026-04/2026-04-18_product-v2_schedule-max-participants-required.md b/changelogs/2026-04/2026-04-18_product-v2_schedule-max-participants-required.md new file mode 100644 index 0000000..168ddfa --- /dev/null +++ b/changelogs/2026-04/2026-04-18_product-v2_schedule-max-participants-required.md @@ -0,0 +1,36 @@ +# 班期保存 - 最大参与人数 强制必填校验 + +**日期**: 2026-04-18 +**PR**: #861 → 合并到 dev +**影响端**: 管理后台 Web (hl-ui-admin) +**影响接口**: +- `POST /admin/product/item/{id}/schedule` (Step4 创建班期) +- `PUT /admin/product/item/{id}/schedule` (Step4 修改班期) +- `POST /admin/product/item/{id}/schedule/batch-create` (Step4 班期批量创建) + +## 背景 + +测试反馈:保存班期时填了价格、班期名、出发日,**没填最大参与人数**,后端报错"数据操作违反约束,请检查输入"——容易让运营误以为是价格问题。 + +根因是 `ScheduleSaveReqVO.maxParticipants` 缺 `@NotNull` 校验,NULL 直接打到 SQL(`group_tour_batch.max_participants` 是 NOT NULL 列),DB 抛异常被全局兜底为模糊消息。 + +## 行为变化 + +| 场景 | 修复前 | 修复后 | +|---|---|---| +| `maxParticipants` 不传或传 null | `{"code":400,"message":"数据操作违反约束,请检查输入"}` | `{"code":400,"message":"最大参与人数不能为空"}` | +| `maxParticipants` 传具体数字 | 200 入库 | 200 入库(无变化) | + +## 前端建议 + +`maxParticipants` 字段在表单上加 **required + 数字校验**,避免提交空值再被后端打回。文档中 `ApiModelProperty(required=true)` 一直存在,本次只是把 runtime 校验补齐。 + +`ScheduleBatchCreateReqVO`(批量创建)同步加了 `@NotNull`,前端表单一致处理。 + +## 不影响 + +- 字段名、字段类型、字段语义不变 +- 其他字段校验规则不变 +- 业务流程(Step4 班期生命周期)不变 + +🤖 Generated with [Claude Code](https://claude.com/claude-code)