docs(changelog): 8768 资金账户盘盈盘亏整功能下线(inventory-adjust 删除 + INVENTORY 枚举删除,管理后台)
changelog-filename-gate / validate (push) Failing after 1s
changelog-filename-gate / validate (push) Failing after 1s
- POST /admin/finance/fund-accounts/{id}/inventory-adjust 已删,调用一律 404
- 资金流水 bizType 枚举删 INVENTORY(历史残留行 bizTypeName 返 null)
- 错误码 595106 废弃(码位保留不重发)
- 关联:Issue #8768 / PR #8773(代码)/ PR #8781(原型+文档)
这个提交包含在:
@@ -0,0 +1,331 @@
|
||||
---
|
||||
schema: "hl-changelog/v2"
|
||||
ticket: "8768"
|
||||
title: "资金账户盘盈盘亏整功能下线(inventory-adjust 接口删除 + INVENTORY 业务类型枚举删除)"
|
||||
consumer: "admin"
|
||||
author: "yst"
|
||||
change_type: "删除接口"
|
||||
backend_status: "deployed"
|
||||
gateway_status: "verified"
|
||||
frontend_status: "pending"
|
||||
frontend_owner: "hl-admin"
|
||||
frontend_ref: ""
|
||||
target_release: ""
|
||||
verified_at: "2026-10-04"
|
||||
updated_at: "2026-10-04"
|
||||
base: "dev-v3"
|
||||
status_note: "后端已合 dev-v3(PR #8773 代码 + PR #8781 原型/文档)并部署测试服。盘盈盘亏属无审批直接轧平账户结存=资金挪用通道,整功能删除;账户差异改走对账补记具体业务流水。"
|
||||
---
|
||||
|
||||
# 【删除接口·管理后台】资金账户盘盈盘亏整功能下线 (#8768)
|
||||
|
||||
> **PR**: #8773(代码)/ #8781(原型+文档) | **服务**: hl-order-service-v3(finance 域同进程) | **更新时间**: 2026-10-04
|
||||
|
||||
## 1. 接口背景
|
||||
|
||||
「盘盈盘亏」功能允许在资金账户上**无审批直接提交一笔差额流水轧平账户结存**(盘盈补收 IN / 盘亏补付 OUT),属于资金挪用通道:任何人都可以一句话把账面结存改成任意值,不留业务依据。同时银行账户 / 现金账本的差异本不该用库存盘点语义处理。
|
||||
|
||||
因此整功能**下线删除**:账户差异改走「对账找原因 → 补记具体业务流水」路径,不允许直接轧平。删除范围 = 1 个写接口 + 1 个业务类型枚举值 + 1 个错误码 + 2 个请求/响应 VO + 1 个方向枚举。
|
||||
|
||||
## 2. 变更清单
|
||||
|
||||
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|
||||
|---|------|------|------|----------|------|
|
||||
| 1 | 盘盈盘亏 | POST | `/admin/finance/fund-accounts/{id}/inventory-adjust` | ⚠️ **删除** | 接口已删,调用一律 404 |
|
||||
| 2 | 资金明细分页 | GET | `/admin/finance/fund-flows/page` | 🔧 行为变更 | `bizType` 筛选项删除 `INVENTORY`(业务类型枚举删该值),不再会产生新的 INVENTORY 流水 |
|
||||
| 3 | 错误码 595106 | — | — | ⚠️ **废弃** | `INVENTORY_DIRECTION_INVALID` 随功能删除,码位保留不重发 |
|
||||
|
||||
配套删除(前端不可见但供完整性说明):请求 VO `InventoryAdjustReqVO`、响应 VO `InventoryAdjustRespVO`、方向枚举 `InventoryDirectionEnum`(SURPLUS/DEFICIT)、业务类型枚举值 `FundFlowBizTypeEnum.INVENTORY`。
|
||||
|
||||
## 3. 接口详情
|
||||
|
||||
### 3.1 盘盈盘亏(已删除)
|
||||
|
||||
- **方法 + 路径**:`POST /admin/finance/fund-accounts/{id}/inventory-adjust`
|
||||
- **接口描述(删除前)**:盘盈盘亏(提交即记一笔资金流水轧平该账户结存:盘盈补收 IN / 盘亏补付 OUT)
|
||||
- **认证**:管理后台 JWT
|
||||
- **幂等性(删除前)**:有幂等键(账户ID + direction + amount,5 秒窗口);删除后无意义
|
||||
- **现状**:**接口已删除,任何调用一律返回 404**
|
||||
|
||||
### 3.2 资金明细分页(bizType 筛选项变化)
|
||||
|
||||
- **方法 + 路径**:`GET /admin/finance/fund-flows/page`
|
||||
- **接口描述**:资金流水分页查询(账户台账 / 资金明细页数据源)
|
||||
- **认证**:管理后台 JWT
|
||||
- **变化点**:query 参数 `bizType` 的业务类型可选值集合中删除 `INVENTORY`(盘盈盘亏)。该筛选为字符串等值匹配,不做枚举合法性校验——传 `INVENTORY` 不报错,仍可捞出库中残留的历史 INVENTORY 流水;但不会再有任何新 INVENTORY 流水产生
|
||||
|
||||
## 4. 接口入参
|
||||
|
||||
### 4.1 盘盈盘亏请求体(已随接口删除,仅存档备查)
|
||||
|
||||
`POST /admin/finance/fund-accounts/{id}/inventory-adjust`
|
||||
|
||||
路径参数:
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | ✅ | 账户 ID |
|
||||
|
||||
请求体字段(`InventoryAdjustReqVO`,已删除):
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 | 校验规则 |
|
||||
|------|------|------|------|----------|
|
||||
| direction | String | ✅ | 方向:SURPLUS 盘盈(补收)/ DEFICIT 盘亏(补付) | 仅 SURPLUS/DEFICIT,否则 595106 |
|
||||
| amount | BigDecimal | ✅ | 差额金额 | 须 > 0,否则 595102 |
|
||||
| reason | String | ✅ | 原因(进留痕) | 长度 ≤ 200 |
|
||||
| voucherUrl | String | ❌ | 佐证影像 | 长度 ≤ 500 |
|
||||
|
||||
### 4.2 资金明细分页 query 参数(bizType 说明变化)
|
||||
|
||||
`GET /admin/finance/fund-flows/page`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| bizType | String | ❌ | 业务类型筛选。变更后可选值:`PAYMENT` / `PREPAY` / `EXPENSE` / `REIMBURSE` / `RECEIPT` / `STAFF_LOAN` / `COMPANY_LOAN` / `NONBIZ` / `ADVANCE` / `TRANSFER` / `ORDER_PAY` / `ORDER_REFUND` / `OPENING`。**`INVENTORY` 已从可选值中删除** |
|
||||
|
||||
其余 query 参数(page / pageSize / fundAccountId / accountType / direction / bizId / flowNo / flowAtStart / flowAtEnd)无变化。
|
||||
|
||||
## 5. 出参(响应)
|
||||
|
||||
### 5.1 盘盈盘亏响应(已随接口删除,仅存档备查)
|
||||
|
||||
`InventoryAdjustRespVO`(已删除):
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| fundFlowId | String(Long 序列化为字符串) | 生成的资金流水 ID |
|
||||
| balanceAfter | BigDecimal | 调后结存 |
|
||||
|
||||
### 5.2 资金明细分页行(历史 INVENTORY 行的展示变化)
|
||||
|
||||
`FundFlowRowRespVO` 字段结构**无增删**,仅历史残留数据的取值变化:
|
||||
|
||||
| 字段 | 类型 | 说明 | 本次变化 |
|
||||
|------|------|------|----------|
|
||||
| id | String | 流水 ID | — |
|
||||
| flowNo | String | 流水号 | — |
|
||||
| fundAccountId | String | 账户 ID | — |
|
||||
| accountName | String | 账户名称 | — |
|
||||
| accountType | String | 账户类型:BANK / CASH / THIRD_PARTY / INTERNAL_VIRTUAL | — |
|
||||
| direction | String | 方向:OUT / IN | — |
|
||||
| amount | BigDecimal | 金额 | — |
|
||||
| bizType | String | 业务类型码值 | ⚠️ 历史残留行可能为 `INVENTORY`(不会再有新行) |
|
||||
| bizTypeName | String 或 null | 业务类型中文名 | ⚠️ **历史 `INVENTORY` 行该字段为 `null`**(枚举值已删,解析不到);其余业务类型正常返回中文名 |
|
||||
| bizId | String 或 null | 关联业务单据 ID | — |
|
||||
| bizNo | String 或 null | 业务单据号 | — |
|
||||
| balanceAfter | BigDecimal | 本笔记完后账户结存快照 | — |
|
||||
| transferGroupId | String 或 null | 互转成对组号(仅 TRANSFER) | — |
|
||||
| fee | BigDecimal 或 null | 手续费(仅 TRANSFER,挂转出行) | — |
|
||||
| counterparty | String 或 null | 对方户名(展示层脱敏) | — |
|
||||
| flowAt | String | 收付时间 | — |
|
||||
| voucherUrl | String 或 null | 回单凭证影像 | — |
|
||||
| remark | String 或 null | 备注(互转备注 / 期初调整原因) | — |
|
||||
|
||||
流水详情接口 `GET /admin/finance/fund-flows/{flowId}` 的 `bizTypeName` 口径同列表:历史 INVENTORY 行返回 `null`。
|
||||
|
||||
## 6. 枚举 / 数据字典
|
||||
|
||||
### 6.1 direction(InventoryDirectionEnum,已删除)
|
||||
|
||||
**所属字段**:`InventoryAdjustReqVO.direction` | **类型**:`String` | **必填**:✅(删除前)
|
||||
|
||||
| 值 | 中文 | 说明 |
|
||||
|----|------|------|
|
||||
| `SURPLUS` | 盘盈 | 实存多于账面 → 记 IN 流水增结存(补收) |
|
||||
| `DEFICIT` | 盘亏 | 实存少于账面 → 记 OUT 流水减结存(补付) |
|
||||
|
||||
**枚举已随功能整体删除,无任何现存接口使用。**
|
||||
|
||||
### 6.2 bizType(FundFlowBizTypeEnum)
|
||||
|
||||
**所属字段**:`FundFlowPageReqVO.bizType`(入参筛选)/ `FundFlowRowRespVO.bizType` + `bizTypeName`(出参) | **类型**:`String`
|
||||
|
||||
变更后值表(`INVENTORY` 已删除):
|
||||
|
||||
| 值 | 中文 | 说明 |
|
||||
|----|------|------|
|
||||
| `PAYMENT` | 应付款付款 | — |
|
||||
| `PREPAY` | 预付款 | — |
|
||||
| `EXPENSE` | 费用报销 | — |
|
||||
| `REIMBURSE` | 报账 | — |
|
||||
| `RECEIPT` | 收款 | — |
|
||||
| `STAFF_LOAN` | 员工借款 | — |
|
||||
| `COMPANY_LOAN` | 公司借款 | — |
|
||||
| `NONBIZ` | 非业务收支 | — |
|
||||
| `ADVANCE` | 订单预支 | — |
|
||||
| `TRANSFER` | 账户互转 | 成对记,不算对外收支 |
|
||||
| `ORDER_PAY` | 对公收款 | 订单支付自动生成,不经出纳 |
|
||||
| `ORDER_REFUND` | 订单退款 | 自动生成,不经出纳 |
|
||||
| `OPENING` | 期初调整 | 仅审计留痕,不计净影响 |
|
||||
|
||||
已删除值:`INVENTORY`(盘盈盘亏,#8768 下线)。库中历史残留行 `bizType` 仍为该值,`bizTypeName` 返回 `null`。
|
||||
|
||||
## 7. 错误码
|
||||
|
||||
| code | 含义 | 触发场景 | 本次变化 |
|
||||
|------|------|----------|----------|
|
||||
| 595106 | 盘盈盘亏方向无效(须 SURPLUS/DEFICIT) | 删除前 inventory-adjust 的 direction 非法 | ⚠️ **已废弃**(码位保留不重发,防码值复用歧义;不会再有任何接口返回该码) |
|
||||
| 595102 | 金额无效(须大于0) | 互转金额 ≤ 0 | 语义不变(不再覆盖盘盈盘亏场景) |
|
||||
|
||||
## 8. 示例(3 组:典型 / 边界 / 异常)
|
||||
|
||||
### 8.1 典型:调旧 inventory-adjust 路径 → 404
|
||||
|
||||
**场景说明**:旧路径已删除,任何调用一律 404(路由不存在)。
|
||||
|
||||
**请求**:
|
||||
```http
|
||||
POST /admin/finance/fund-accounts/1234567890/inventory-adjust HTTP/1.1
|
||||
Authorization: Bearer <管理后台JWT>
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"direction": "SURPLUS",
|
||||
"amount": 100.00,
|
||||
"reason": "月末现金盘点多出100元",
|
||||
"voucherUrl": "https://oss.example.com/voucher/xxx.jpg"
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```http
|
||||
HTTP/1.1 404 Not Found
|
||||
```
|
||||
|
||||
(网关 / 服务路由无该端点,返回 404,无业务响应体。)
|
||||
|
||||
### 8.2 边界:bizType 传 INVENTORY 筛选 → 仅命中库中历史残留行
|
||||
|
||||
**场景说明**:`bizType` 筛选为字符串等值匹配、不做枚举合法性校验。传 `INVENTORY` 不报错、不拒绝,仍按 biz_type 等值过滤,可捞出库中残留的历史盘盈盘亏流水;但不会再产生任何新 INVENTORY 流水。
|
||||
|
||||
**请求**:
|
||||
```http
|
||||
GET /admin/finance/fund-flows/page?page=1&pageSize=20&bizType=INVENTORY HTTP/1.1
|
||||
Authorization: Bearer <管理后台JWT>
|
||||
```
|
||||
|
||||
(无请求体)
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"list": [
|
||||
{
|
||||
"id": "9876543210987654321",
|
||||
"flowNo": "LS20260915000042",
|
||||
"fundAccountId": "1234567890",
|
||||
"accountName": "基本户-工行",
|
||||
"accountType": "BANK",
|
||||
"direction": "IN",
|
||||
"amount": 100.00,
|
||||
"bizType": "INVENTORY",
|
||||
"bizTypeName": null,
|
||||
"bizId": null,
|
||||
"bizNo": null,
|
||||
"balanceAfter": 50100.00,
|
||||
"transferGroupId": null,
|
||||
"fee": null,
|
||||
"counterparty": null,
|
||||
"flowAt": "2026-09-15 10:30:00",
|
||||
"voucherUrl": "https://oss.example.com/voucher/xxx.jpg",
|
||||
"remark": "月末现金盘点多出100元"
|
||||
}
|
||||
],
|
||||
"total": 1,
|
||||
"page": 1,
|
||||
"pageSize": 20
|
||||
},
|
||||
"message": "ok",
|
||||
"success": true
|
||||
}
|
||||
```
|
||||
|
||||
注意示例中 `bizTypeName` 为 `null`(历史行枚举值已删,解析不到中文名)。
|
||||
|
||||
### 8.3 业务失败:本功能已删除,无业务错误码场景
|
||||
|
||||
**场景说明**:盘盈盘亏功能整体删除后,原 `595106 INVENTORY_DIRECTION_INVALID` 错误码不会再由任何接口返回。对该功能的唯一「失败」表现就是 8.1 的 404。
|
||||
|
||||
**请求**:
|
||||
```http
|
||||
POST /admin/finance/fund-accounts/1234567890/inventory-adjust HTTP/1.1
|
||||
Authorization: Bearer <管理后台JWT>
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"direction": "INVALID",
|
||||
"amount": -1,
|
||||
"reason": ""
|
||||
}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```http
|
||||
HTTP/1.1 404 Not Found
|
||||
```
|
||||
|
||||
(不再进入参数校验,直接 404。)
|
||||
|
||||
## 9. 业务边界
|
||||
|
||||
- ❌ **不再适用**:资金账户上的任何「盘点轧平」操作——该入口已彻底移除
|
||||
- ✅ **替代路径**:账户账面与实际有差异时,走对账定位差异原因,再补记**具体业务类型**的流水(收款 / 费用 / 非业务收支等),不允许无业务依据直接轧平
|
||||
- ⚠️ **历史数据**:库中存量 INVENTORY 流水保留不删,流水列表 / 详情仍可查到;这些历史行的 `bizTypeName` 为 `null`,流水列表对该字段做判空展示即可
|
||||
- ⚠️ **筛选兼容**:`bizType=INVENTORY` 作为 query 筛选传入不报错(字符串等值匹配),但属于已废弃值,筛选下拉中应移除该选项
|
||||
|
||||
## 10. 修改前后对比
|
||||
|
||||
### 10.1 字段级对比
|
||||
|
||||
| 字段 | 改前 | 改后 |
|
||||
|------|------|------|
|
||||
| `FundFlowPageReqVO.bizType` 可选值 | 13 个值(含 `INVENTORY`) | 12 个值(删 `INVENTORY`) |
|
||||
| `FundFlowRowRespVO.bizTypeName`(历史 INVENTORY 行) | `盘盈盘亏` | `null`(枚举已删,解析不到) |
|
||||
| `FundFlowDetailRespVO.bizTypeName`(历史 INVENTORY 行) | `盘盈盘亏` | `null`(同上) |
|
||||
| 错误码 595106 | 有效(direction 非法时返回) | 废弃,不再返回(码位保留不重发) |
|
||||
|
||||
### 10.2 行为级对比
|
||||
|
||||
| 行为 | 改前 | 改后 |
|
||||
|------|------|------|
|
||||
| `POST /admin/finance/fund-accounts/{id}/inventory-adjust` | 正常受理:记一笔 INVENTORY 流水轧平结存,返回 `fundFlowId + balanceAfter` | **接口已删,调用一律 404** |
|
||||
| 账户差异处理 | 可直接盘盈盘亏轧平 | 只能对账找原因 → 补记具体业务流水 |
|
||||
| 流水列表 `bizType` 筛选下拉 | 含「盘盈盘亏」选项 | 应移除「盘盈盘亏」选项(传值不报错但仅命中历史残留) |
|
||||
|
||||
## 11. 影响评估 / 回滚
|
||||
|
||||
### 11.1 影响评估
|
||||
|
||||
- **是否破坏向后兼容**:**是**。写接口直接删除(404),属破坏性变更
|
||||
- **前端是否必须同步上线**:**是**。资金账户页「盘盈盘亏」入口(按钮 + 弹窗)与资金明细筛选下拉的「盘盈盘亏」选项已失去对应接口,必须随本变更移除;流水列表 `bizTypeName` 需判空展示(历史 INVENTORY 行为 null)
|
||||
- **影响已有数据**:库中历史 INVENTORY 流水保留,无需数据迁移
|
||||
|
||||
### 11.2 回滚方案
|
||||
|
||||
- **回滚方式**:revert PR #8773(后端代码)可恢复接口
|
||||
- **回滚后清理**:无脏数据(下线期间不可能产生新 INVENTORY 流水,接口已 404)
|
||||
- 前后端同步:若后端回滚而前端已删入口,需前端同步恢复;建议前后端同批上线 / 回滚
|
||||
|
||||
## 12. 注意事项
|
||||
|
||||
- **旧路径已删,调用一律 404**:前端如仍残留 inventory-adjust 调用点必须全部移除,否则用户操作直接报 404
|
||||
- **bizTypeName 判空**:流水列表 / 详情渲染 `bizTypeName` 时,历史 INVENTORY 行该字段为 `null`,请判空展示(如显示空白或「-」),不要按非空字符串处理
|
||||
- **bizType 筛选不做枚举校验**:后端按字符串等值匹配,传 `INVENTORY` 不报错,仅命中历史残留行;筛选下拉请以后端现行 12 个值为准
|
||||
- 原盘盈盘亏弹窗里的「佐证影像上传」「方向选择 SURPLUS/DEFICIT」相关逻辑已失去对应接口
|
||||
- 如前端曾对 595106 错误码做过特判提示,该特判分支已不会触发(该码不会再返回)
|
||||
|
||||
## 13. 关联 / 联系人
|
||||
|
||||
### 13.1 链接
|
||||
|
||||
- **Issue**: [#8768](https://git.1814.love/wx/HL/issues/8768)
|
||||
- **PR(代码)**: [#8773](https://git.1814.love/wx/HL/pulls/8773)
|
||||
- **PR(原型+文档)**: [#8781](https://git.1814.love/wx/HL/pulls/8781)
|
||||
- **Merge commit(代码)**: [669f84bd3b](https://git.1814.love/wx/HL/commit/669f84bd3b5fdd532a1d7817dd69db8141119013)
|
||||
- **Merge commit(文档)**: [df99bfedfd](https://git.1814.love/wx/HL/commit/df99bfedfd)
|
||||
|
||||
### 13.2 联系人
|
||||
|
||||
- **后端负责人**: @yst(腰苏图)
|
||||
在新工单中引用
屏蔽一个用户