归档
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m18s

This commit is contained in:
2026-04-13 15:03:02 +08:00
parent c1456f3c54
commit 7308afe801
17 changed files with 2526 additions and 6 deletions

View File

@@ -0,0 +1,52 @@
## 1. 现状分析
- [x] 1.1 使用 lsp_diagnostics 检查 client_realname.go、manual_trigger_service.go 的语法和类型错误
- [x] 1.2 分析现有 ClientRealnameHandler 和 ManualTriggerService 的依赖关系,确认无循环依赖风险
## 2. 配置管理和常量定义
- [x] 2.1 在 `pkg/config/` 中新增 `AutoTriggerSystemUserID int``EnableAutoTrigger bool`(默认 true配置字段通过环境变量 `JUNHONG_AUTO_TRIGGER_SYSTEM_USER_ID``JUNHONG_ENABLE_AUTO_TRIGGER` 注入
- [x] 2.2 更新 `pkg/config/defaults/config.yaml`,添加 `auto_trigger_system_user_id``enable_auto_trigger` 默认值
- [x] 2.3 运行 lsp_diagnostics 检查配置相关代码无错误
## 3. 手动触发服务 Bug 修复和优化
- [x] 3.1 在 `internal/service/polling/manual_trigger_service.go``TriggerSingle``TriggerBatch``TriggerByCondition` 三处将 `todayCount >= 100` 改为 `todayCount >= 500`
- [x] 3.2 在 `internal/service/polling/manual_trigger_service.go``TriggerSingle` 中将 `s.redis.Expire(ctx, dedupeKey, time.Hour)` 改为 `s.redis.Expire(ctx, dedupeKey, 24*time.Hour)`
- [x] 3.3 同步更新 `pkg/constants/redis.go``RedisPollingManualDedupeKey` 函数的注释,将 `// 过期时间1小时` 改为 `// 过期时间24小时`
- [x] 3.4 优化 `canManageCard``canManageCards` 权限检查函数,提取公共逻辑减少重复代码
- [x] 3.5 改进 `TriggerSingle` 的错误日志,增加 `triggeredBy``cardID` 等上下文字段
- [x] 3.6 运行 lsp_diagnostics 检查 ManualTriggerService 相关代码无错误
- [x] 3.7 使用 PostgreSQL MCP 和 Redis CLI 手动验证:触发同一张卡后 24 小时内重复触发被拒绝24 小时后允许重复触发
## 4. ClientRealnameHandler 集成自动触发功能
- [x] 4.1 在 `ClientRealnameHandler` 结构体中新增 `manualTriggerSvc *polling.ManualTriggerService` 字段
- [x] 4.2 修改 `NewClientRealnameHandler` 构造函数,新增 `manualTriggerSvc *polling.ManualTriggerService` 参数(可为 nilnil 时跳过自动触发)
- [x] 4.3 在 `GetRealnameLink` 成功返回实名链接前,若 `h.manualTriggerSvc != nil` 且配置 `EnableAutoTrigger=true`,则启动 goroutine 异步触发实名检查
- [x] 4.4 goroutine 内部必须使用 `context.WithTimeout(context.Background(), 3*time.Second)` 创建独立 context禁止复用 `c.UserContext()`(请求 context 在 handler 返回后失效)
- [x] 4.5 goroutine 内部构造系统用户 context注入 UserTypePlatform 和配置的 AutoTriggerSystemUserID调用 `manualTriggerSvc.TriggerSingle(sysCtx, targetCard.ID, constants.TaskTypePollingRealname, systemUserID)`
- [x] 4.6 goroutine 执行失败时记录 WARN 日志(含 customerID、ICCID、error成功时记录 INFO 日志(含 customerID、ICCID失败不影响主流程
- [x] 4.7 运行 lsp_diagnostics 检查 ClientRealnameHandler 相关代码无错误
## 5. 依赖注入配置更新
- [x] 5.1 在 `internal/bootstrap/handlers.go` 中更新 `ClientRealname` handler 的初始化,传入 ManualTriggerService
- [x] 5.2 确认 ManualTriggerService 在 bootstrap/services.go 中已初始化(检查是否已存在,若不存在则补充)
- [x] 5.3 更新 `cmd/api/docs.go``cmd/gendocs/main.go``NewClientRealnameHandler` 的调用,补充新增的 manualTriggerSvc 参数(传 nil 即可)
- [x] 5.4 运行 lsp_diagnostics 检查 bootstrap 和 docs.go 相关代码无编译错误
## 6. 手动验证
- [x] 6.1 使用 curl 调用 `GET /api/c/v1/realname/link` 接口,通过日志确认异步触发 goroutine 被启动
- [x] 6.2 通过 PostgreSQL MCP 查询 `tb_polling_manual_trigger_log`,确认自动触发记录的 `triggered_by` 为配置的系统用户 ID
- [x] 6.3 通过 Redis CLI 检查 `polling:manual:realname` 队列,确认 cardID 已写入
- [x] 6.4 使用 PostgreSQL MCP 查询 `tb_polling_manual_trigger_log`,验证今日触发次数计数正确(不超过 500 次限制)
- [x] 6.5 使用 Redis CLI 确认 dedup key TTL 为 24 小时(`TTL polling:manual:dedupe:realname`
- [x] 6.6 模拟 manualTriggerSvc 不可用场景(临时将 EnableAutoTrigger 设为 false确认接口正常返回实名链接日志无 panic
## 7. 最终验收
- [x] 7.1 运行 lsp_diagnostics 对所有修改过的文件做最终检查,确认无错误和警告
- [x] 7.2 确认环境变量 `JUNHONG_AUTO_TRIGGER_SYSTEM_USER_ID``JUNHONG_ENABLE_AUTO_TRIGGER` 已在部署文档中记录
- [x] 7.3 确认 `GetRealnameLink` handler 函数长度不超过 100 行(满足项目规范)