Files
baiyue-firstleg/docs/2026-07-31-P0-P2问题修复回归报告.md
2026-08-05 16:26:10 +08:00

5.5 KiB

P0-P2 问题修复回归报告

日期:2026-07-31 正式仓库:D:\baiyue-firstleg 范围:IAM 成员授权、Order/Warehouse 主数据链路、File 资质存储、Gateway CORS、服务文件日志。 测试边界:未连接或写入测试数据库,未启动业务服务,未占用业务端口。

1. 验证结论

本轮报告中的问题均属实,已完成代码、配置和自动化测试修复。目标模块自动化回归全部通过;测试环境是否达到最终业务验收,还需要发布 Nacos 配置、重新部署对应实例并执行真实接口联调,不能用单元测试结果替代环境验收。

2. P0 修复

2.1 成员越权授予角色

  • 新增成员携带非空 roleIds 时,除 merchant:member:create 外还必须具有 merchant:member:grant-role。
  • 编辑成员时,仅当角色集合实际变化时要求 merchant:member:grant-role;空集合清空已有角色也属于角色变更。
  • 只编辑姓名、联系方式等资料且角色集合不变时,不额外要求授角权限。
  • 跨租户成员先按当前租户查询并返回 404,不在确认租户归属前读取角色关系。

2.2 订单草稿主数据链路

  • config/nacos/local/order-service.yml 和 config/nacos/cn/order-service.yml 的 Warehouse URL 默认值统一为空。
  • 默认由 OpenFeign 使用注册名 warehouse-service 通过 Nacos 调用;只有隔离端口回归时才显式设置 WAREHOUSE_SERVICE_URL。
  • 修复了容器内默认访问 127.0.0.1:9205、实际回环到 Order 容器自身的问题。
  • Warehouse 内部接口统一返回:不存在或跨租户为 404,已停用为 409;Order 分别转换为业务不存在和业务冲突,下游 5xx、解码失败或内部令牌不一致转换为 S0503。

3. P1 修复

3.1 File 服务与资质文件

  • File 启动时不仅检查目录属性,还会在存储根目录真实创建、写入并删除随机探针文件;挂载不可写时直接启动失败,不再出现实例看似存活、首次上传才报错。
  • config/nacos/cn/file-service.yml 删除当前代码未实现的 OSS 假配置,改为显式读取 FILE_STORAGE_ROOT。
  • 运行期文件写入异常保持返回 S0503,避免把磁盘或挂载故障包装成普通业务错误。
  • 历史资质迁移脚本生成的前向和回滚 SQL 不再自动 COMMIT;执行人员必须核对 affected_rows=1 和真实文件预览后显式提交,否则回滚。
  • Gateway 的 File 路由契约已通过测试确认指向 lb://file-service。

宿主机 bind mount 不会继承镜像内目录属主。发布前必须保证 File 上传目录和各服务日志目录由容器用户 UID 10001 可写;历史 /phase1-seed/... 记录必须在取得真实脱敏文件后按《企业资质文件迁移说明》迁移,不能只改 URL。

4. P2 修复

  • Gateway 继续只允许明确配置的 CORS 来源,禁止通配符 *。
  • 精确覆盖 OPTIONS /api/auth/login、Origin: http://localhost:5174,预检无需 Token 并返回允许来源、方法和请求头。
  • 新增响应式请求标识过滤器,预检成功、拒绝来源和安全失败响应均携带 X-Request-Id。
  • 非白名单来源仍返回 403,不会因为放行 OPTIONS 而绕过 CORS 白名单。

5. 文件日志

Gateway、Auth、IAM、Firstleg、Order、Warehouse、File、Print、Integration、Event Bridge、Audit 共 11 个服务均在自己的 src/main/resources/application.yml 配置日志文件和滚动策略。

  • 默认本地路径:./logs/{spring.application.name}.log
  • 容器路径:由 LOG_PATH=/app/logs 覆盖,并使用现有 Docker Compose 宿主机挂载。
  • 默认单文件上限:100 MB
  • 默认保留:30 天
  • 默认总容量上限:5 GB
  • 所有值均可通过 LOGGING_* 环境变量覆盖。

6. 自动化回归

正式仓串行执行:

mvn -o "-Dmaven.repo.local=C:\Users\25137\.m2\repository" -pl iam,warehouse,order,file,gateway -am clean test

结果:11 个 Reactor 模块全部 SUCCESS,总耗时 59.223 秒。

目标模块 测试数 失败 错误 跳过
Gateway 9 0 0 0
IAM 64 0 0 0
Order 24 0 0 0
Warehouse 32 0 0 0
File 5 0 0 0
合计 134 0 0 0

git diff --check 通过。测试只使用单元测试和随机端口测试上下文,没有启动固定业务端口,也没有访问数据库。

7. 测试环境最终验收清单

  1. 发布更新后的 local/cn Nacos 配置并重新部署 Order、Warehouse、File、Gateway、IAM。
  2. 在宿主机预建 File 上传目录和 11 个日志目录,确认 UID 10001 可以创建和删除文件。
  3. 确认 Nacos 中只有当前版本实例,并验证 Gateway 到 file-service、warehouse-service 的负载均衡路由。
  4. 使用受限商户成员重放新增和编辑成员请求:携带角色但无授角权限必须返回 403;角色不变的资料编辑必须成功。
  5. 使用平台公共作用域 0 的启用仓库、启用往来单位创建头程草稿;再分别验证不存在、非平台公共作用域、停用和重复提交。
  6. 上传一张脱敏营业执照并完成商户、平台预览;不得继续使用 /phase1-seed/... 路径。
  7. 从 http://localhost:5174 直连 Gateway 验证登录预检、登录、401、403 和非白名单来源。
  8. 检查宿主机固定日志目录,确认每个服务产生独立日志文件并按策略滚动。

完成以上环境联调后,才能把本轮状态从“代码级回归通过”提升为“测试环境业务成熟验收通过”。