修改原因:6 条 changelog 前端已落地并交付(sync-log 已记 done),但 frontmatter 仍为 pending, 导致发布门禁的前端核验状态与真实交付不符。 修改内容:按 hl-changelog/v2 口径回写 frontend_status=verified、frontend_owner=mmg、 frontend_ref=对应业务 commit 短哈希、verified_at=2026-09-04;target_release 与 status_note 保持原值。 - #6926 导出补 opsStage 筛选 -> ea1b9803 - #7059 设置供应商候选按资源上下文过滤 -> a1a78906 - #7069 供应商企微在途状态统一审核中 -> f6ddd94c - #7070 房务列表/详情补产品类型标签 productType -> 7476250d - #7078 供应商企微审核中冻结资料修改 -> f4d3e1c9 - #7087 供应商新建修改必填资料校验 -> 72d63c8e 实际验证:逐条 diff 核对仅改 frontmatter 5 字段,status_note/target_release/正文未动。
14 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | 7078 | 供应商企微审核中冻结资料修改 | admin | lc(GIT) | 修改接口 | deployed | verified | verified | mmg | f4d3e1c9 | 2026-09-04 | 后端已部署并通过 TEST;前端需在 statusName="审核中" 时制灰供应商、账户、合同及冲突状态写操作。 | 2026-09-04 | dev-v3 |
供应商模块:企微审核中冻结资料修改
服务:
hl-resource-serviceIssue: #7078 PR: #7086 日期: 2026-09-04 影响范围: 管理后台供应商详情、账户、合同和状态操作
⚠️ 关键变化
statusName="审核中" 时,前端统一制灰供应商资料、账户、合同及冲突状态写入口;详情和审批记录仍可查看,注册审批撤销等合法审批退出路径保持可用。statusName 是 #7069 已交付字段,本次未新增请求字段、响应字段或错误码。
二、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|---|---|---|---|---|
| 1 | 更新供应商 | PUT | /admin/supplier/items/{supplierId}/update |
行为修改 | 企微主体审批中返回 395005 |
| 2 | 新增合同 | POST | /admin/supplier/items/{supplierId}/contracts/add |
行为修改 | 企微主体审批中返回 395005 |
| 3 | 更新合同 | PUT | /admin/supplier/items/{supplierId}/contracts/{contractId}/update |
行为修改 | 企微主体审批中返回 395005 |
| 4 | 删除合同 | DELETE | /admin/supplier/items/{supplierId}/contracts/{contractId}/del |
行为修改 | 企微主体审批中返回 395005 |
| 5 | 恢复合作 | POST | /admin/supplier/items/{supplierId}/resume |
行为修改 | 状态审批中不得绕过审批恢复合作 |
三、接口详情
1. 更新供应商 PUT /admin/supplier/items/{supplierId}/update
VO: SupplierUpdateReqVO → SupplierWriteRespVO
使用场景
修改供应商主体、类型、联系人、资质、评价或其他档案资料。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
supplierId |
Path | String | 是 | 正整数 | 供应商 ID |
expectedUpdateTime |
Body | String | 是 | yyyy-MM-dd HH:mm:ss |
当前供应商版本 |
changeReason |
Body | String | 条件必填 | 最长 500 | 非草稿修改必填 |
| 资料字段 | Body | 原类型 | 否 | 沿用原契约 | 至少提交一个可变更字段 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
data |
SupplierWriteRespVO |
成功响应结构不变 |
请求示例
{"remark":"更新备注","changeReason":"资料修正","expectedUpdateTime":"2026-09-04 10:00:00"}
响应示例
{"code":200,"message":"成功","data":{"supplierId":"2095000000000000001","status":"ACTIVE","updateTime":"2026-09-04 10:01:00"},"success":true}
空数据 / 降级响应
写接口无空成功结果,也不提供降级成功。
错误响应
{"code":395005,"message":"当前状态不允许执行该操作","data":null,"success":false}
业务边界
- 企微注册或主体状态审批为
PENDING时拒绝,供应商主档及聚合子项均保持不变。 - 其他权限、字段校验、并发和审计规则不变。
2. 新增合同 POST /admin/supplier/items/{supplierId}/contracts/add
VO: SupplierContractCreateReqVO → SupplierContractRespVO
使用场景
为供应商独立登记一份线下合同。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
supplierId |
Path | String | 是 | 正整数 | 供应商 ID |
changeReason |
Body | String | 是 | 最长 500 | 登记原因 |
| 合同资料字段 | Body | 原类型 | 否 | 沿用原契约 | 名称、编号、日期、金额等字段不变 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
data |
SupplierContractRespVO |
成功响应结构不变 |
请求示例
{"contractName":"年度框架合同","changeReason":"线下签署后登记"}
响应示例
{"code":200,"message":"成功","data":{"contractId":"2095000000000000002","contractName":"年度框架合同","updateTime":"2026-09-04 10:02:00"},"success":true}
空数据 / 降级响应
除 changeReason 外的合同业务字段可空;成功仍返回合同对象,不提供降级成功。
错误响应
{"code":395005,"message":"当前状态不允许执行该操作","data":null,"success":false}
业务边界
- 企微注册或主体状态审批为
PENDING时不新增合同或审计记录。 - 合同字段、权限、锁和幂等规则不变。
3. 更新合同 PUT /admin/supplier/items/{supplierId}/contracts/{contractId}/update
VO: SupplierContractUpdateReqVO → SupplierContractRespVO
使用场景
完整替换一份已有合同的业务资料。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
supplierId / contractId |
Path | String | 是 | 正整数 | 供应商和合同 ID |
changeReason |
Body | String | 是 | 最长 500 | 修改原因 |
expectedUpdateTime |
Body | String | 否 | yyyy-MM-dd HH:mm:ss |
合同并发版本 |
| 合同资料字段 | Body | 原类型 | 否 | 沿用原契约 | 完整替换语义不变 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
data |
SupplierContractRespVO |
成功响应结构不变 |
请求示例
{"contractName":"年度框架合同(修订)","changeReason":"合同修订","expectedUpdateTime":"2026-09-04 10:02:00"}
响应示例
{"code":200,"message":"成功","data":{"contractId":"2095000000000000002","contractName":"年度框架合同(修订)","updateTime":"2026-09-04 10:03:00"},"success":true}
空数据 / 降级响应
合同业务字段保持既有可空和完整替换语义;写接口不提供降级成功。
错误响应
{"code":395005,"message":"当前状态不允许执行该操作","data":null,"success":false}
业务边界
- 企微注册或主体状态审批为
PENDING时,先于合同查询拒绝,不修改合同或审计记录。 - 合同归属、可选版本及无变化校验不变。
4. 删除合同 DELETE /admin/supplier/items/{supplierId}/contracts/{contractId}/del
VO: SupplierContractDeleteReqVO → Void
使用场景
软删除一份已有合同。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
supplierId / contractId |
Path | String | 是 | 正整数 | 供应商和合同 ID |
changeReason |
Body | String | 是 | 最长 500 | 删除原因 |
expectedUpdateTime |
Body | String | 否 | yyyy-MM-dd HH:mm:ss |
合同并发版本 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
data |
null | 成功时为空 |
请求示例
{"changeReason":"合同登记作废","expectedUpdateTime":"2026-09-04 10:03:00"}
响应示例
{"code":200,"message":"成功","data":null,"success":true}
空数据 / 降级响应
成功时 data=null;请求体不能省略,也不提供降级成功。
错误响应
{"code":395005,"message":"当前状态不允许执行该操作","data":null,"success":false}
业务边界
- 企微注册或主体状态审批为
PENDING时,先于合同查询拒绝,不删除合同或新增审计记录。 - 合同归属、可选版本、软删除及幂等规则不变。
5. 恢复合作 POST /admin/supplier/items/{supplierId}/resume
VO: SupplierStatusChangeReqVO → SupplierStatusChangeRespVO
使用场景
将没有在途主体审批的暂停合作供应商恢复合作。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
supplierId |
Path | String | 是 | 正整数 | 供应商 ID |
reason |
Body | String | 是 | 1~500 字符 | 恢复原因 |
expectedUpdateTime |
Body | String | 是 | yyyy-MM-dd HH:mm:ss |
当前供应商版本 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
data.status / data.statusName |
String | 成功后为 ACTIVE / “合作中” |
data.updateTime |
String | 新并发版本 |
请求示例
{"reason":"恢复合作","expectedUpdateTime":"2026-09-04 10:00:00"}
响应示例
{"code":200,"message":"成功","data":{"supplierId":"2095000000000000003","status":"ACTIVE","statusName":"合作中","updateTime":"2026-09-04 10:04:00"},"success":true}
空数据 / 降级响应
写接口无空成功结果,也不提供降级成功。
错误响应
{"code":395005,"message":"当前状态不允许执行该操作","data":null,"success":false}
业务边界
- 暂停合作供应商已有企微主体状态审批时不得恢复合作,来源状态保持不变。
- 原有权限、来源状态、并发、审计和幂等规则不变。
四、契约约束与正确调用方式
- 后端以企微注册或主体状态审批
PENDING为权威门禁;页面即使状态滞后,写请求仍可能返回395005。 - 前端展示和制灰统一读取列表或详情的
statusName;status继续用于筛选和生命周期判断。 - 账户新增和设默认接口的后端契约未变:注册审批中的
VETTING、状态审批来源的SUSPENDED/BLACKLIST均不满足账户写入所需的ACTIVE状态,仍返回既有395010。 - 详情、账户详情、审批记录和变更记录等读取入口保持可用;注册审批撤销
POST /admin/supplier/items/{supplierId}/approval/revoke保持可用。
五、数据库行为
- 本次没有数据库结构、初始化数据或迁移变化。
- 审核中被拒绝的请求不修改供应商、账户、合同、状态或审计数据。
六、边界行为
- 五类展示场景:注册、列入黑名单、解除黑名单、“终止且账清”和“拉黑且账清”在企微审核中均返回
statusName="审核中"。 - 审批结束后刷新列表或详情,再按最终生命周期状态恢复原有可用操作。
- 请求参数、成功响应、认证、权限、配置、Redis 和 MQ 契约均未改变。
六.6、修改前后对比
| 行为 | 修改前 | 修改后 |
|---|---|---|
| 企微主体审批中修改供应商资料 | 部分入口可能继续写入 | 返回 395005,业务数据不变 |
| 企微主体审批中新增、更新或删除合同 | 部分入口可能继续写入 | 返回 395005,业务数据不变 |
| 状态审批中恢复合作 | 可能绕过审批候选来源状态 | 返回 395005,来源状态不变 |
| 账户写入 | 既有规则要求供应商为 ACTIVE |
规则不变;前端在“审核中”时提前制灰 |
| 详情与合法审批退出 | 可用 | 保持可用 |
六.7、影响评估
- 是否破坏向后兼容: 是;审批中的资料和合同写请求由可能成功调整为业务拒绝。
- 前端是否必须同步上线: 是。
- 前端 workaround 清理点: 不再仅按
status放开写按钮,增加statusName="审核中"的统一制灰条件。
七、不影响范围
- 仅影响: 企微注册或主体状态审批中的供应商资料、账户、合同和冲突状态操作。
- 零影响: 详情及审批记录读取、注册审批撤销、企微回调与轮询、审批结束后的原有业务规则。
- 无变化: 请求/响应字段、错误码定义、数据库、配置、Redis、MQ;后端仓库未修改前端代码。
八、测试环境已验证
部署提交:6462397526ad61acfbcf503486d8507c9c1c7293。
GET /admin/supplier/items/list?limit=200 → 200;注册审批返回 VETTING / 审核中 ✓
GET /admin/supplier/items/{supplierId}/basic-info/view → 200;详情同为 VETTING / 审核中 ✓
PUT /admin/supplier/items/{supplierId}/update → 395005 ✓
POST /admin/supplier/items/{supplierId}/contracts/add → 395005 ✓
PUT /admin/supplier/items/{supplierId}/contracts/{contractId}/update → 395005 ✓
DELETE /admin/supplier/items/{supplierId}/contracts/{contractId}/del → 395005 ✓
POST /admin/supplier/items/{supplierId}/bank-accounts/add → 395010 ✓
上述拒绝请求前后,供应商版本、账户、合同、审批和审计的只读数据库快照哈希一致。TEST 当前没有四类状态审批的在途样本,因此没有发起企微审批造数;对应子类型、来源状态、“审核中”投影及全部写入口由合并提交中的精确自动化测试覆盖。
十、相关文档
前端动作与当前状态
statusName="审核中"时,统一制灰供应商资料编辑/保存、账户新增/设默认、合同新增/编辑/删除,以及暂停、恢复、拉黑、解除拉黑和归档等冲突写入口。- 保留详情、审批记录、审批进度刷新和合法审批退出。
- 当前状态:待前端处理。
关联 / 联系人
链接
- Issue: #7078
- PR: #7086
- Merge commit: 6462397526ad61acfbcf503486d8507c9c1c7293
联系人
- 后端负责人: @lc