文件
hl-api-changelog/changelogs-v2/2026-08/23_6174_供应商归档无清账契约时失败关闭-修改接口-管理后台.md
T
lc d58a2baca5
changelog-filename-gate / validate (push) Successful in 2s
docs(changelog): 发布供应商归档失败关闭说明
Refs #6174
2026-08-23 13:57:49 +08:00

107 行
4.7 KiB
Markdown

---
schema: "hl-changelog/v2"
ticket: "6174"
title: "供应商归档在权威清账契约缺失时失败关闭"
consumer: "admin"
author: "lc(GIT)"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "PR #6203 已合并 dev-v3,提交 041fb6d492 已部署 TEST。真实 Token 经 Gateway 实测:SUPER_ADMIN 且拥有生命周期权限时稳定返回 395032;ADMIN 先返回 395004;匿名与伪造身份返回 401。失败路径未进入供应商数据库,未创建审批或变更记录。"
updated_at: "2026-08-23"
base: "dev-v3"
---
# 供应商归档:无权威清账契约时失败关闭
供应商归档是不可逆生命周期操作。在 Finance 权威清账契约尚未交付时,现有接口不再创建本地审批或返回清账证据为空的假成功,而是在服务端权限校验后稳定失败关闭。
## 修改接口
| 方法 | 路径 | 请求体 | 权限 |
|------|------|--------|------|
| POST | `/admin/supplier/items/{supplierId}/archive` | 无 | 可信角色必须为 `SUPER_ADMIN`,且拥有 `supplier:status:manage` |
请求路径、请求参数和响应包络均未改变;本次修改的是业务失败语义。
## 行为变化
| 场景 | 修改前 | 修改后 |
|------|--------|--------|
| 清账能力尚未提供,权限通过 | 仍可能创建审批并把供应商推进至 `ARCHIVED` | 返回 `395032`,不进入审批准备、Provider 或结果应用 |
| ADMIN / FINANCE 请求归档 | 由既有生命周期角色门禁拒绝 | 保持不变,返回 `395004` |
| 未认证或伪造 `X-Admin-*` | Gateway 拒绝 | 保持不变,返回 `401` |
| 非法 `supplierId` | 参数绑定失败 | 保持不变,返回 `400` |
## 代表性响应
### SUPER_ADMIN 权限通过,但无法取得权威清账结果
```json
{
"code": 395032,
"message": "暂无法确认财务已清账,不能归档",
"data": null,
"success": false
}
```
### ADMIN 或 FINANCE 请求归档
```json
{
"code": 395004,
"message": "无权执行该供应商状态操作",
"data": null,
"success": false
}
```
统一响应可能以 HTTP 200 承载业务失败,调用方必须同时检查 `code` 和 `success`。
## 边界与兼容性
- 本次未新增错误码;`395032` 已在供应商错误码契约中冻结。
- 未修改 DTO 字段、数据库 migration、Redis、MQ、Nacos、Gateway 路由或 User 权限数据。
- 失败路径不调用审批 Provider、准备事务或结果应用器,不新增 `supplier_approval_log` / `supplier_change_log`,也不更新 `supplier_main`。
- 正向清账查询、账本版本证据和归档成功能力由后续工单 #6173 承接。在该依赖交付前,客户端应把 `395032` 视为暂不可归档,不应重试为“已归档”。
- 既有客户端已经按统一业务失败包络处理,无前端代码同步要求。
## 验证证据
- 最终部署提交:`041fb6d492cfe9552f443c592160dbd5dc5d6965`。
- 自动化回归:Supplier 套件 `149/149` 通过且 0 跳过;Resource 全量 `1905` 项,0 失败、0 错误;独立审计定向 `17/17` 通过。
- 真实登录经 Gateway 验收:
- 匿名和仅伪造身份头均返回 `401`;
- SUPER_ADMIN 连续两次请求均返回 `395032`;
- 切换 ADMIN 后先返回 `395004`;
- 非法 `supplierId` 返回 `400`。
- TEST 的本地 `hl_resource_service` 当前未初始化 `supplier_*` 表,且 Flyway 明确关闭;本接口在任何供应商数据库访问前返回 `395032`,验证前后未创建表、未产生供应商业务写入。
- 验收后已恢复原 `SUPER_ADMIN` 角色并注销访问令牌与刷新令牌,Redis Token 键无残留;正常登录和失败操作审计按合规要求保留。
- Gateway、User、Resource 健康检查均为 200;Nacos 中 Resource 仅有 `127.0.0.1:8082` 健康实例。
## 撤回
1. 停止归档流量,revert 合并提交 `041fb6d492` 并重新构建、部署 `hl-resource-service`。
2. 本次无数据库、配置、Redis 或 MQ 恢复项。
3. 若 #6173 尚未交付,代码撤回会重新暴露“未清账即归档”风险,必须同时阻断本接口流量;只有在权威清账门禁及其成功/失败测试均已交付后才能恢复归档成功路径。
4. 撤回后经 Gateway 验证归档不可达,供应商查询、更新、提交等其他接口保持正常。
## 关联 / 联系人
### 链接
- **Issue**: [#6174](https://git.1814.love:8443/wx/HL/issues/6174)
- **PR**: [#6203](https://git.1814.love:8443/wx/HL/pulls/6203)
- **依赖 Issue**: [#6173](https://git.1814.love:8443/wx/HL/issues/6173)
- **合并提交**: [041fb6d492](https://git.1814.love:8443/wx/HL/commit/041fb6d492cfe9552f443c592160dbd5dc5d6965)
### 联系人
- **后端负责人**: @lc