From 053a5bdd64f9ab12f2153a3c0fe4591ba212ce56 Mon Sep 17 00:00:00 2001 From: yaosutu <770858045@qq.com> Date: Tue, 21 Apr 2026 16:20:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(order-v2):=20=E8=B4=A2=E5=8A=A1=20Tab=20?= =?UTF-8?q?=E4=BC=98=E6=83=A0/=E9=99=84=E5=8A=A0=E8=B4=B9=20DTO=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=AF=B9=E9=BD=90=E5=A5=91=E7=BA=A6=20(#1100?= =?UTF-8?q?/#1101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DiscountRequest: name→discountName, amount→discountAmount - SurchargeRequest: name→surchargeName, amount→surchargeAmount - 清除死字段 discountType/remark - 金额新增 @DecimalMin(0.01) 正数校验 --- ...-04-21_order-v2_finance-dto-field-align.md | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 changelogs/2026-04/2026-04-21_order-v2_finance-dto-field-align.md diff --git a/changelogs/2026-04/2026-04-21_order-v2_finance-dto-field-align.md b/changelogs/2026-04/2026-04-21_order-v2_finance-dto-field-align.md new file mode 100644 index 0000000..5ea1367 --- /dev/null +++ b/changelogs/2026-04/2026-04-21_order-v2_finance-dto-field-align.md @@ -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`