完善公共基础接入与全局审计闭环

This commit is contained in:
2026-07-23 19:10:30 +09:00
parent 17782d5f8e
commit 7e0171a8b4
32 changed files with 295 additions and 26 deletions

View File

@@ -201,7 +201,7 @@ FE/BE 研发需求开发完成
| INT-05 | 支付、代理钱包、信用和余额预警联调 | #48#38#34#36#96#97 | FE 11.5h / BE 11.5h,已含 | 支付配置、钱包领域和业务员接口完成 | 支付方式限制、扫码充值、信用扣款、角色默认额度、店铺调额、100元预警 |
| INT-06 | 企业微信审批、退款和线下充值联调 | #37#35#34#44 | FE 1.52h / BE 1.52h已含 | 企微模板、绑定、回调、轮询和业务详情完成 | 扫码绑定、发起审批、意见附件、通过/驳回/撤销、退款/充值终态和列表摘要 |
| INT-07 | Gateway卡限速联调 | #47 | FE 0.51h / BE 0.51h已含 | Gateway联调配置和卡/设备入口完成 | 单卡限速、设备解析当前卡、取消限速、无当前卡、失败审计 |
| INT-08 | 七月迭代全链路与停机发布验收 | 全部激活需求 | FE 34h / BE 45h额外 | INT-0107完成 | 权限、通知、审计、历史数据、旧入口关闭、Worker恢复和发布检查 |
| INT-08 | 七月迭代全链路与停机发布验收 | 全部激活需求及三项公共技术需求 | FE 34h / BE 45h额外 | INT-0107、公共基础12、全局审计19、公共通知08及各业务发布门禁完成 | 权限、通知、全系统审计覆盖、正式Adapter、事件消费者、历史数据、旧入口关闭、Worker恢复、生产阈值和发布检查 |
## 七、联调任务责任方式
@@ -231,7 +231,7 @@ FE/BE 研发需求开发完成
再分别拆分:
```text
[FE] 七月迭代公共状态与异步任务交互
[FE][TECH] 七月迭代公共状态与异步任务交互(当前先调整导出任务列表/详情的统一字段、五态、轮询与恢复;系统配置和 Outbox 运维页面不在本票)
[BE] 七月迭代公共迁移幂等与异步任务基础
[FE] 顶部通知铃铛与站内通知中心
[BE] 站内通知基础设施与受控跳转

View File

@@ -1598,17 +1598,22 @@
**描述**
```markdown
目标:为批量分配、批量订购、导出等页面提供一致的加载、错误和异步任务交互
目标:先统一现有导出任务接口与批量任务页面的加载、错误和异步任务交互;系统配置和 Outbox 运维页面不在本研发需求范围
预计工时前端12小时。
交付内容:
1. 统一加载、空数据、权限不足、接口失败和重试状态。
2. 统一异步任务进度结构状态固定为1待处理、2处理中、3已完成、4已失败、5已取消总数、成功数、失败数和失败明细独立返回部分成功只由计数表达不占状态码
3. 创建任务后按2秒、3秒、5秒递增轮询最大间隔10秒页面不可见暂停恢复后立即刷新
4. 页面刷新后通过task_id恢复任务详情
2. `GET /api/admin/export-tasks` 兼容新增或统一 `task_id``total_count``success_count``failed_count``error_code``error_summary``updated_at`,原字段不删除、不改名
3. `GET /api/admin/export-tasks/{id}` 同步新增或统一上述字段,字段语义与列表一致
4. 统一异步任务进度结构状态固定为1待处理、2处理中、3已完成、4已失败、5已取消部分成功仍为已完成只通过总数、成功数和失败数表达
5. 创建任务后保存 `task_id`;刷新或重新进入页面查询原任务,不得重新创建。
6. 按2秒、3秒、5秒递增轮询最大间隔10秒终态停止页面不可见暂停恢复后立即刷新。
7. 403显示无权限且不重试瞬时失败保留已有数据和输入并提供重试用户错误文案展示安全的 `error_summary`
完成标准:设备批量分配、批量订购和导出页面复用同一交互规则,不各自实现不同状态语义
不包含:`GET /api/admin/system-configs``PUT /api/admin/system-configs/{key}` 的新页面,以及 Outbox 监控/人工恢复页面。支付配置页面继续归 UR#48,待正式配置 Key 和审计 Adapter 就绪后联调
完成标准:导出页面先完成上述兼容字段和交互规则;设备批量分配、批量订购在对应业务接口落地后复用同一状态语义。
```
### 后端研发需求
@@ -1925,13 +1930,13 @@
**描述**
```markdown
关联需求:全部激活用户需求及全局审计技术需求。
关联需求:全部激活用户需求、七月迭代公共开发基础、全局审计和公共站内通知技术需求。
预计工时前端34小时、后端45小时本项为额外发布工时并计入总工时。
进入条件INT-01至INT-07完成迁移脚本、配置、Worker和发布清单已准备。
进入条件INT-01至INT-07完成公共基础12号票、全局审计19号票、公共站内通知08号票及各业务最终发布门禁完成迁移脚本、配置、Worker和发布清单已准备。
验收范围:权限与越权、通知跳转、审计多视角、历史数据兼容、旧审批接口下线、旧审计停止写入、异步任务恢复、停机迁移、配置校验和回滚边界。
验收范围:权限与越权、通知跳转、审计多视角、历史数据兼容、旧审批接口下线、旧审计停止写入、异步任务恢复、停机迁移、配置校验和回滚边界;全系统审计覆盖基线无未分类入口,系统配置更新和 Outbox 人工恢复已注入正式 Audit Writer每个实际投递事件已登记事件类型、载荷版本、消费者、幂等键、业务失败明细和通知策略告警阈值已填写具体数值与责任人
完成标准:前端和后端使用冻结接口契约,核心链路人工验收通过,发布检查项和已知风险已记录
完成标准:前端和后端使用冻结接口契约,能从样本回答谁在什么入口、对什么资源、如何操作、前后变化和关联请求/业务链路;旧 Writer 无新增,消费者先于生产者就绪,核心链路人工验收通过。任何审计覆盖空白、正式 Adapter 未装配、事件无消费者或阈值未确定都阻止放量
```

View File

@@ -43,7 +43,9 @@
2. PRD 已完成评审,没有尚未决定的业务问题。
3. 工作区没有来源不明的未提交修改。
4. 当前需求的跨 PRD 前置能力已经发布为具体 Issue不能只写“依赖公共基础”。
5. 记录拆票前或实现前的 commit供后续双轴评审使用
5. 当前完整用例已经明确 Audit Event、Domain Ledger、Integration Log、Outbox 的使用决定或 N/A 理由;涉及审计时已增量维护全系统审计覆盖基线。
6. 最终发布门禁已经引用具体公共基础 Ticket需要事件时已确认事件类型、载荷版本、消费者幂等键、业务失败明细和通知策略。
7. 记录拆票前或实现前的 commit供后续双轴评审使用
```bash
git status --short --branch
@@ -74,6 +76,8 @@ git rev-parse HEAD
- 适用的 DDD 架构通道;
- 当前票收口的完整业务边界;
- 明确不迁移的旧代码范围。
- Audit Event、Domain Ledger、Integration Log、Outbox 的逐项决定或 N/A 理由;
- 依赖公共能力时引用具体 Ticket并在本 PRD 最终发布票中收口装配和验收。
出现以下拆法时应要求重拆:
@@ -82,6 +86,7 @@ git rev-parse HEAD
- 阻塞项只写“公共基础设施”而没有具体 Issue
- 为简单 Query 或单表写操作强行创建聚合、工厂或多层接口;
- 在拆票阶段改变已评审 PRD 的业务或架构决定。
- 把“公共能力已经实现”当作业务组合根已经装配,遗漏正式 Adapter、事件消费者、监控或审计覆盖基线。
确认草稿后回复:
@@ -337,6 +342,7 @@ go test ./...
- 验收条件有行为或测试证据;
- 没有擅自改变架构或扩大迁移范围;
- 相关测试通过,或存量/环境失败已准确记录。
- 本票涉及的审计、领域流水、外部集成和可靠事件决定已经实现或按评审理由标记 N/A覆盖基线同步更新。
### 9.2 PRD 完成
@@ -345,6 +351,7 @@ go test ./...
- 累计 diff 通过 Standards + Spec 双轴 review
- 最终代码已经完成约定的全量测试;
- 文档、迁移和人工验收项按 PRD 处理。
- 最终发布票已验证正式 Adapter/消费者在生产组合根装配,事件版本与幂等键已登记,监控阈值有具体数值和责任人。
### 9.3 七月迭代完成
@@ -361,6 +368,8 @@ INT-07 Gateway 卡限速
INT-08 七月迭代全链路与停机发布验收
```
INT-08 还必须汇总验证:全系统审计覆盖基线无空白、旧 Writer 停写、系统配置与 Outbox 恢复使用正式审计 Adapter所有实际生产的 Outbox 事件均已有消费者、版本和幂等键;生产告警阈值已经依据容量基线填写。任一项未闭环均不能用“公共基础已完成”代替。
最终结论必须区分:
- 本地自动化完成;

View File

@@ -302,7 +302,7 @@ func (e WalletDebitedEvent) OccurredAt() time.Time { return e.occurredAt }
```text
数据库事务
├── 保存聚合
├── 保存操作日志
├── 保存 Audit Event该动作需要审计时
└── 保存 Outbox 事件
提交事务
@@ -330,9 +330,20 @@ func (uc *DebitWalletUseCase) Execute(ctx context.Context, cmd DebitCommand) err
```
- Outbox 写入失败:事务回滚,避免“业务成功但关键事件永久丢失”。
- 高风险成功操作的 Audit Event 写入失败:事务回滚,避免“业务事实存在但无法回答谁做了什么”。业务已回滚后的失败或拒绝审计使用独立短事务,禁止裸 goroutine。
- Asynq 暂时不可用不回滚已提交业务Relay 后续重试。
- 消费者必须幂等;涉及余额、退款、充值时使用业务键或状态条件更新。
### 公共能力决策
每个新增或修改的完整用例都必须在 PRD/Ticket 中明确以下决定,不能只写“接入公共基础”:
- 是否写 Audit Event若否写明 N/A 理由,并增量维护全系统审计覆盖基线;
- 是否已有 Domain Ledger 作为金额、订单或状态事实Audit Event 不得替代它;
- 是否存在外部请求或回调,需要 Integration Log
- 是否存在提交后可靠副作用,需要同事务 Outbox并明确事件类型、版本和消费者幂等键
- 最终发布门禁所依赖的具体公共 Ticket不得使用无法判断完成状态的模糊依赖。
---
## 八、仓储接口