build-flow.api/docs/superpowers/plans/2026-07-19-uhaozu-order-list.md
xiangning 51eea796e2 refactor(rag): 重构AI模型相关代码结构和数据库迁移逻辑
- 将AI模型相关端点、命令、处理器移动到模块内部统一管理
- 优化数据库迁移脚本,添加对不同环境表状态的兼容处理逻辑
- 为异常处理添加错误码枚举参数,统一错误处理方式
- 重构多处业务逻辑中的异常抛出方式,增强代码一致性
- 移除独立的组件清单分组和项目定义,简化前端物料面板数据结构
- 修复测试代码中实体引用路径错误问题
- 添加新的监控模块测试项目到解决方案文件中
2026-07-20 08:25:18 +08:00

6.2 KiB
Raw Blame History

U号租登录后订单列表 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 用户完成 u号租腾讯验证码登录后,系统立即同步订单,并在外部系统详情页分页展示已同步订单。

Architecture: 复用现有 UHaoZuLoginService -> SyncProcessor -> b_synced_records 数据链路,不新增订单表。Monitoring Application 新增只读分页 Query,BuildFlow.Host 新增 Endpoint;前端详情页通过 VxeGrid 查询并展示订单,未知业务字段保留在原始 Payload 中。

Tech Stack: .NET 10、EF Core、MediatR、FastEndpoints、xUnit、Vue 3、TypeScript、Vben VxeGrid、Vitest。


Task 1: 建立 Monitoring 测试项目并为订单分页查询写失败测试

Files:

  • Create: tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj

  • Create: tests/BuildFlow.Monitoring.Tests/MonitoringTestDb.cs

  • Create: tests/BuildFlow.Monitoring.Tests/Reports/GetOrderRecordsQueryHandlerTests.cs

  • Modify: BuildFlow.slnx

  • 创建测试项目,引用 Monitoring Application/Infrastructure,并使用仓库现有版本的 xUnit、FluentAssertions 和 EF Core InMemory。

  • 写失败测试:两个系统、三条 order、一条非 order;断言只返回目标系统的 order,按发生时间倒序分页。

  • 运行 dotnet test tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj --no-restore,确认因缺少 Query/DTO/Handler 而失败。

测试核心断言:

var result = await handler.Handle(new GetOrderRecordsQuery(systemId, 1, 2), default);
result.Total.Should().Be(3);
result.Items.Select(x => x.ExternalId).Should().Equal("order-3", "order-2");

Task 2: 实现订单分页 Query 和 HTTP Endpoint

Files:

  • Create: src/modules/monitoring/Application/Reports/DTOs/OrderRecordDto.cs

  • Create: src/modules/monitoring/Application/Reports/DTOs/OrderRecordPageDto.cs

  • Create: src/modules/monitoring/Application/Reports/Queries/GetOrderRecordsQuery.cs

  • Create: src/modules/monitoring/Application/Reports/Handlers/GetOrderRecordsQueryHandler.cs

  • Create: src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsRequest.cs

  • Create: src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsRequestValidator.cs

  • Create: src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsEndpoint.cs

  • 创建一文件一类型 DTO:订单记录包含 Id、ExternalSystemId、ExternalId、UTC 毫秒时间戳 OccurredAt 和 Payload;分页 DTO 包含 Items/Total/PageIndex/PageSize。

  • Handler 先校验系统存在,再过滤 ExternalSystemId 与 RecordType == "order",按 OccurredAt、UpdatedAt 倒序分页;物化后读取 Data.Payload。

  • Endpoint 使用 GET /monitoring/systems/{systemId}/orders 和 monitoring.view 权限。

  • Validator 要求 PageIndex > 0,PageSize 在 1 到 100 之间。

  • 运行 Monitoring 测试并确认 GREEN。

Task 3: 补齐登录请求校验并收敛敏感日志

Files:

  • Create: src/BuildFlow.Host/Endpoints/Monitoring/LoginExternalSystemRequestValidator.cs

  • Create: src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginPayloadFactory.cs

  • Modify: src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs

  • Create: tests/BuildFlow.Monitoring.Tests/ExternalSystems/LoginExternalSystemRequestValidatorTests.cs

  • Create: tests/BuildFlow.Monitoring.Tests/Connectors/UHaoZuLoginPayloadFactoryTests.cs

  • 写失败测试:空账号、密码、ticket、randstr 被拒绝;密码 321 生成 caf1a3dfb505ffed0d024130f58c5cfa,票据字段为 verificationCode.randStr。

  • 实现 Validator 和 Payload Factory,登录服务复用工厂。

  • 日志只记录 HTTP 状态、业务响应码和 Cookie 名称数量,不记录响应体、密码、票据、Cookie 值或原始 Set-Cookie。

  • 无 Set-Cookie 时使用 TryGetValues,避免二次异常。

  • 运行 Monitoring 测试并确认 GREEN。

Task 4: 前端订单 API、展示模型和详情页表格

Files:

  • Modify: build-flow.web/apps/web-antdv-next/src/api/core/monitoring.ts

  • Create: build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/order-record.ts

  • Create: build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/order-record.test.ts

  • Modify: build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/index.vue

  • Create: build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/uhaozu-captcha.ts

  • Create: build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/uhaozu-captcha.test.ts

  • Modify: build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/credential-form.vue

  • 先写失败测试:订单展示模型从 Payload 提取订单号、状态、商品/账号、金额、租期并提供兜底;验证码编排覆盖成功和取消。

  • 运行 ../../node_modules/.bin/vitest run --dom src/views/monitoring/detail/order-record.test.ts src/views/monitoring/systems/modules/uhaozu-captcha.test.ts,确认 RED。

  • 新增 MonitoringApi.OrderRecord、OrderRecordPage 和 getMonitoringOrdersApi()。

  • 详情页增加服务端分页 VxeGrid,列为订单号、状态、商品/账号、实付金额、租期、下单时间;手动同步后刷新订单表。

  • credential-form.vue 使用可测试的 requestUHaoZuCaptcha(),仍只调用腾讯原生验证码,不识别或自动点击。

  • 运行两个前端测试文件并确认 GREEN。

Task 5: 完整验证

Files:

  • Verify only

  • 运行 dotnet test tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj --no-restore。

  • 运行 dotnet build BuildFlow.slnx --no-restore,要求 0 warning / 0 error。

  • 运行前端两个目标 Vitest、vue-tsc --noEmit --skipLibCheck 和 vite build --mode production。

  • 浏览器确认 TencentCaptcha(192192826) 仍渲染真实弹窗;用 mock API 验证订单表格非空且布局稳定。

  • 检查没有新增数据库表或 Migration,没有敏感凭证日志,没有覆盖用户其他修改。