fix(order-v2): 财务 Tab 优惠/附加费 DTO 字段对齐契约 (#1100/#1101)
- DiscountRequest: name→discountName, amount→discountAmount - SurchargeRequest: name→surchargeName, amount→surchargeAmount - 清除死字段 discountType/remark - 金额新增 @DecimalMin(0.01) 正数校验
这个提交包含在:
父节点
f4f767863d
当前提交
053a5bdd64
@ -0,0 +1,108 @@
|
||||
# 管理端优惠/附加费接口字段修复 — 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` |
|
||||
|
||||
防止负数优惠 = 变相加钱;负数附加费 = 变相减钱。
|
||||
|
||||
---
|
||||
|
||||
## 四、正确请求示例
|
||||
|
||||
```json
|
||||
POST /admin/order/700001/discount
|
||||
{
|
||||
"discountName": "老客户优惠",
|
||||
"discountAmount": 100.00
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
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](https://git.1814.love:8443/wx/HL/issues/1100)
|
||||
- PR: [wx/HL#1101](https://git.1814.love:8443/wx/HL/pulls/1101)(已合并到 dev)
|
||||
- 原始契约:`2026-03-20_order_surcharge.md`
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户