- DiscountRequest: name→discountName, amount→discountAmount - SurchargeRequest: name→surchargeName, amount→surchargeAmount - 清除死字段 discountType/remark - 金额新增 @DecimalMin(0.01) 正数校验
3.1 KiB
3.1 KiB
管理端优惠/附加费接口字段修复 — 2026-04-21
服务 hl-order-service-v2(端口 8094)· 类型 fix · 关联 Issue #1100 / PR #1101 场景:管理端订单详情 · 财务 Tab · 添加/修改 优惠项 / 费用增加项
一、问题现象
在管理端订单详情财务 Tab 的「添加优惠项」/「添加费用增加项」窗口中填入名称和金额后提交,接口返回:
name: 优惠名称不能为空; amount: 优惠金额不能为空
二、根因
后端请求 DTO 的字段名与早期发布的接口契约不一致:
| 接口 | 契约字段(前端用) | 之前后端 DTO |
|---|---|---|
POST/PUT /admin/order/{orderId}/discount |
discountName / discountAmount |
name / amount ❌ |
POST/PUT /admin/order/{orderId}/surcharge |
surchargeName / surchargeAmount |
name / amount ❌ |
前端按契约发请求 → 字段对不上 → @NotBlank / @NotNull 同时命中空值,一并报错。
三、修复内容
1. 字段名对齐契约
DiscountRequest:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
discountName |
String |
✅ | 优惠名称 |
discountAmount |
BigDecimal |
✅ >= 0.01 |
优惠金额(必须大于0) |
SurchargeRequest:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
surchargeName |
String |
✅ | 费用名称 |
surchargeAmount |
BigDecimal |
✅ >= 0.01 |
费用金额(必须大于0) |
2. 移除死字段
前端无需再传的字段,传了也会被忽略:
DiscountRequest.discountType— Service 强制写入MANUAL,前端传值被丢弃DiscountRequest.remark— Entity/DB 均无此列SurchargeRequest.remark— Entity/DB 均无此列
3. 新增金额正数校验
| 校验 | 提示 |
|---|---|
discountAmount < 0.01 |
优惠金额必须大于0 |
surchargeAmount < 0.01 |
费用金额必须大于0 |
防止负数优惠 = 变相加钱;负数附加费 = 变相减钱。
四、正确请求示例
POST /admin/order/700001/discount
{
"discountName": "老客户优惠",
"discountAmount": 100.00
}
POST /admin/order/700001/surcharge
{
"surchargeName": "升级房型补差价",
"surchargeAmount": 200.00
}
响应结构(OrderDiscountVO / OrderSurchargeVO)未变。
五、错误码
HTTP 始终返回 200,错误码在 Result.code 中。
| code | 触发 | 说明 |
|---|---|---|
| 200 | 正常 | 成功 |
| 400 | 字段缺失 | 优惠名称不能为空 / 优惠金额不能为空 / 费用名称不能为空 / 费用金额不能为空 |
| 400 | 金额非正 | 优惠金额必须大于0 / 费用金额必须大于0 |
六、前端影响
无需改动。前端本来就在按 discountName/discountAmount、surchargeName/surchargeAmount 发请求,本次修复让后端与契约一致,提交即可成功。
七、关联
- Issue: wx/HL#1100
- PR: wx/HL#1101(已合并到 dev)
- 原始契约:
2026-03-20_order_surcharge.md