hl-api-changelog/changelogs/2026-04/2026-04-21_order-v2_finance-dto-field-align.md
yaosutu 053a5bdd64 fix(order-v2): 财务 Tab 优惠/附加费 DTO 字段对齐契约 (#1100/#1101)
- DiscountRequest: name→discountName, amount→discountAmount
- SurchargeRequest: name→surchargeName, amount→surchargeAmount
- 清除死字段 discountType/remark
- 金额新增 @DecimalMin(0.01) 正数校验
2026-04-21 16:20:37 +08:00

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/discountAmountsurchargeName/surchargeAmount 发请求,本次修复让后端与契约一致,提交即可成功。


七、关联

  • Issue: wx/HL#1100
  • PR: wx/HL#1101(已合并到 dev
  • 原始契约:2026-03-20_order_surcharge.md