Files
cmautobuy/docs/task/229-Admin-AI规格匹配失败弹窗与生产密钥配置.md
T
2026-08-14 17:51:55 +08:00

4.3 KiB
Raw Blame History

229 Admin:AI 规格匹配失败弹窗反馈并补齐生产密钥配置

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#199 / AI规格批量匹配
  • 状态:已完成,待用户验收
  • 日期:2026-08-14
  • Gitea 工单:#229

背景与目标

生产发布重启后没有加载 CMAUTOBUY_AI_SECRETS_PATH,导致顺运宝 AI 规格匹配在 创建批次前失败。页面只把原因放在重定向消息中,采购员容易忽略。本任务补齐生产密钥 存储配置,并让 AI 匹配创建前的失败自动弹窗,明确说明数据没有被改动。

最终方案

  • AI 服务商、密钥或批次输入在创建前失败时,使用独立 ai_error 参数返回顺运宝列表; 普通同步、采集和采购结果继续使用 msg,两类反馈不会混淆。
  • 顺运宝页面根据 ai_error 渲染 alertdialog 并自动打开,复用公共的关闭按钮、Esc、 遮罩点击和焦点恢复规则。错误正文继续由 html/template 自动转义。
  • 生产密钥放在 release、仓库和 data/ 之外的专用目录,文件权限为 600;环境文件只 保存路径。服务账号只获得专用密钥目录的读写权限,不能修改数据库环境文件。
  • 服务器使用旧版 systemd,不支持 ProtectSystem=strict 和 ReadWritePaths。最终 unit 使用兼容的 ProtectSystem=true 和 ReadWriteDirectories,继续由 Unix 属主和目录权限 隔离 /etc/cmautobuy/admin.env。
  • 首次部署因旧 systemd 指令和新 release 缺少 config.yaml、data 链接而触发健康检查 失败,发布脚本自动恢复旧二进制;补齐兼容 unit 和 release 链接后再次发布成功。

改了哪些

  • admin/handler/web/ai_match.go:AI 创建前失败改用独立错误跳转。
  • admin/handler/web/others.go:向顺运宝模板传递 AI 错误。
  • admin/templates/syb/list.html:增加自动打开的 AI 错误弹窗。
  • admin/static/js/app.js:自动打开服务端指定弹窗并复用公共交互。
  • admin/handler/web/others_test.go、admin/syb_interaction_template_test.go:增加跳转状态、 弹窗和 HTML 转义回归测试。
  • admin/deploy/cmautobuy-admin.service、admin/config.example.yaml:补齐旧 systemd 兼容的 密钥目录写白名单和生产路径示例。
  • docs/admin/02-architecture.md、docs/admin/05-ui-specification.md、 docs/admin/06-quality-security.md:同步部署、安全和失败反馈基线。
  • 生产服务器:发布 /opt/cmautobuy/releases/0208dc6/cmautobuy-admin,配置独立密钥目录 和环境路径;密钥内容未进入代码、数据库、日志、工单或本文档。

验收结果

验收标准 结果
AI 创建前失败自动打开明确错误弹窗 通过(模板和 Handler 自动化测试)
弹窗支持关闭按钮、Esc、遮罩点击和焦点规则 通过(复用现有公共弹窗实现)
普通消息不会误触发 AI 失败弹窗 通过
已创建批次继续显示整体和逐条失败原因 通过(原进度弹窗保持并完成全量回归)
错误内容自动转义且不泄露 API Key 通过
生产密钥路径、属主、权限和服务进程环境正确 通过
真实模型最小健康请求成功 通过
指定订单从浏览器重新创建批次并显示结果 待用户登录后验收
固定 Go 1.23.0 构建、测试、vet 和 JS 检查 通过

测试

  • 执行的命令:
    • $env:GOTOOLCHAIN='go1.23.0'; go test ./... -count=1
    • $env:GOTOOLCHAIN='go1.23.0'; go build ./...
    • $env:GOTOOLCHAIN='go1.23.0'; go vet ./...
    • node --check static/js/app.js
    • git diff --check
    • 生产 systemd unit 验证、服务健康检查、公网登录页和静态资源检查。
    • 生产启用服务商与密钥文件编号一致性检查、真实模型最小健康请求。
  • 结果:固定 Go 1.23.0 的全量测试、构建和 vet 通过;JavaScript、差异格式、生产服务、 公网资源和真实模型健康检查通过。
  • 没验证到的部分:没有采购员登录会话,未代替用户在浏览器对订单 2608139NVHNBKG 重新点击 AI 匹配;浏览器 1366×768 的人工视觉与键盘验收待用户完成。

相关提交

  • 0208dc6 fix: 增加 AI 匹配失败弹窗并补齐部署配置 (#229)