From 2cbdcfb13a4be84a0b720b6534953987ce2fb906 Mon Sep 17 00:00:00 2001 From: lc Date: Mon, 24 Aug 2026 21:18:26 +0800 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20=E8=AE=B0=E5=BD=95=20#6273?= =?UTF-8?q?=20=E5=AE=A1=E6=89=B9=E7=BC=96=E5=8F=B7=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...•†审批记录补充供应商编号-修改接口-管理后台.md | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 changelogs-v2/2026-08/24_6273_供应商审批记录补充供应商编号-修改接口-管理后台.md diff --git a/changelogs-v2/2026-08/24_6273_供应商审批记录补充供应商编号-修改接口-管理后台.md b/changelogs-v2/2026-08/24_6273_供应商审批记录补充供应商编号-修改接口-管理后台.md new file mode 100644 index 00000000..ae6b90d8 --- /dev/null +++ b/changelogs-v2/2026-08/24_6273_供应商审批记录补充供应商编号-修改接口-管理后台.md @@ -0,0 +1,117 @@ +--- +schema: "hl-changelog/v2" +ticket: "6273" +title: "供应商审批记录补充供应商编号" +consumer: "admin" +author: "lc(GIT)" +change_type: "修改接口" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "mmg" +frontend_ref: "" +target_release: "" +verified_at: "2026-08-24" +status_note: "PR #6274 已合并 dev-v3,合并提交 588573ae4 已随 Resource 双实例滚动部署到 TEST。审批记录分页项新增当前供应商编号 supplierNo;既有目标字段、脱敏字段、权限、分页和闭区间时间筛选保持不变。管理端列展示和自然日边界组装仍待前端交付。" +updated_at: "2026-08-24" +base: "dev-v3" +--- + +# 供应商审批记录补充供应商编号 + +供应商详情的审批记录分页项新增当前供应商编号 `supplierNo`,供管理端直接展示。此次是向后兼容的响应扩展,不删除或重命名既有字段,也不改变查询、权限和脱敏语义。 + +## 变更接口 + +| 方法 | 路径 | 权限 | 行为变化 | +|---|---|---|---| +| GET | `/admin/supplier/items/{supplierId}/approval-records/page` | `supplier:approval:read` | 每条分页记录新增 `supplierNo` | + +请求参数、分页外壳和排序规则均未变化。 + +## 新增响应字段 + +| 字段 | 类型 | 空值语义 | 说明 | +|---|---|---|---| +| `supplierNo` | String / null | 尚未生成编号的草稿返回 `null` | 当前供应商编号,直接来自供应商主体档案;不能从供应商 ID、审计 JSON 或展示摘要推导 | + +典型分页项如下;示例值仅说明字段结构: + +```json +{ + "supplierId": "2091715622923657217", + "supplierNo": "SUP2091715622923657217", + "supplierName": "示例供应商", + "supplierTypes": [], + "operationType": "UPDATE", + "targetType": "SUPPLIER", + "targetId": null, + "oldValueMasked": "统一社会信用代码:****", + "newValueMasked": "统一社会信用代码:****", + "changeReason": "提交注册前保存完整表单", + "status": "草稿", + "operatorName": "示例管理员", + "operatorRole": "超级管理员", + "createTime": "2026-08-24 10:34:34" +} +``` + +## 保持兼容的字段与行为 + +- `targetType` 和 `targetId` 继续返回;管理端可以隐藏“目标类型”列,但不能把前端隐藏等同于删除接口字段。 +- `oldValueMasked` 和 `newValueMasked` 继续返回脱敏后的业务摘要。管理端表头可简化为“变更前”“变更后”,但不得改为读取或展示未脱敏数据。 +- `page`、`pageSize`、`operationType`、`status`、`from`、`to`、`sortBy` 和 `sortDirection` 的请求约束不变。 +- 查询仍使用 `createTime >= from AND createTime <= to` 的闭区间语义;服务端不替客户端推导自然日边界。 +- 认证方式、`supplier:approval:read` 权限、管理员数据范围、排序、错误码、Gateway 路由和统一 `Result` 外壳均未变化。 +- 不新增数据库 migration,不修改配置、Redis、MQ、审批状态机、审计写入或跨服务契约。 + +## 管理端待办 + +1. 在审批记录表格最前面增加“供应商编号”列,绑定 `supplierNo`;空值显示 `—`。 +2. 隐藏“目标类型”列,但保留接口兼容字段,不要求后端删除 `targetType`。 +3. 将“变更前(脱敏)”“变更后(脱敏)”表头改为“变更前”“变更后”;单元格仍绑定 `oldValueMasked`、`newValueMasked`。 +4. 日期查询开始值组装为当天 `00:00:00`,结束值组装为当天 `23:59:59`,并在查询条件变化后重置到第 1 页。 + +若选择同一天,不能把开始和结束都提交为 `00:00:00`。例如查询 2026-08-24 应提交: + +```text +from=2026-08-24 00:00:00 +to=2026-08-24 23:59:59 +``` + +## 错误与边界语义 + +| 场景 | 结果 | +|---|---| +| `from` 晚于 `to` | 参数校验失败,消息为 `from不能晚于to` | +| 只传 `from` 或只传 `to` | 参数校验失败,时间边界必须成对提交 | +| 未认证 | 统一响应 `code=401`、`success=false`;HTTP 状态可能仍为 200 | +| 无读取权限或超出数据范围 | 服务端拒绝查询,不返回审批记录 | +| 筛选结果为空 | 返回空分页,`records=[]`,不返回 `null` | + +## 验证证据 + +- 自动化:供应商审批记录 Controller、投影和查询聚焦测试 16 项零失败;Resource 全量 1954 项零失败,38 项仓库既有条件跳过。 +- 部署:TEST 部署任务 `32288c37` 成功、退出码 0;`hl-resource-service` 的 8182、8082 双实例依次启动并健康。部署服务器 HEAD `435ae0a86` 包含目标合并提交 `588573ae4` 和功能提交 `9cf77177c`。 +- 真实 Gateway:使用现有有效超级管理员登录态查询 4 条审批记录,每条均返回当前 `supplierNo`;`targetType`、`targetId`、`oldValueMasked` 和 `newValueMasked` 同时保留,脱敏摘要仍包含掩码。 +- 分页兼容:请求 `page=1&pageSize=2` 返回 2 条记录、总数 4,新增字段不改变分页外壳。 +- 时间边界:同一自然日 `00:00:00` 至 `23:59:59` 返回 4 条;旧前端把结束值提交为 `00:00:00` 时返回 0 条,证明日期问题来自客户端结束边界组装。 +- 参数门禁:反向时间范围被拒绝并返回 `from不能晚于to`。 +- 认证门禁:不携带 Authorization 经 TEST Gateway 查询,返回 HTTP 200、业务码 `401`、`success=false`;该结果仅作为负向门禁验证,不计作正向验收。 +- 清理:本次 TEST 验收只执行只读分页查询,未产生数据库、Redis、MQ、文件或外部业务副作用,无需测试数据清理。 + +## 撤回 + +1. 先停止发布或回退依赖 `supplierNo` 的管理端版本,避免后端字段回退后出现空列。 +2. 从最新 `dev-v3` 创建回退分支,执行 `git revert -m 1 --no-edit 588573ae4ae016829d90dbb365f5c8ec3df981f0`,经独立 PR 合入。 +3. 重新构建并滚动部署 `hl-resource-service`;无需恢复数据库、配置、Redis 或 MQ,没有不可逆数据影响。 +4. 回退后接口不再保证返回 `supplierNo`;复测原有分页、权限、数据范围、脱敏字段、目标字段、排序和闭区间时间筛选。 +5. 撤回本 Changelog 时,以新的文档提交删除本文件或明确标记撤回,并通知管理端停止消费新增字段;不要重写已发布提交历史。 + +## 关联 / 联系人 + +- **Issue**: [#6273](https://git.1814.love:8443/wx/HL/issues/6273) +- **PR**: [#6274](https://git.1814.love:8443/wx/HL/pulls/6274) +- **合并提交**: [588573ae4](https://git.1814.love:8443/wx/HL/commit/588573ae4ae016829d90dbb365f5c8ec3df981f0) +- **后端负责人**: @lc +- **前端负责人**: @mmg