Files
cmautobuy/docs/task/169-采购完成状态与重复采购保护.md
T
2026-08-11 18:10:39 +08:00

4.5 KiB

169 Admin:采购完成后更新顺运宝状态并阻止重复采购

背景与目标

顺运宝明细创建采购任务后,页面原来只识别 pending/assigned/claimed 活动任务。 任务成功进入 succeeded 后,页面会错误回退到“可创建采购任务”,既没有显示采购完成, 也存在通过旧页面或构造请求重复采购的风险。

本任务让顺运宝页面正确显示采购完成和待人工核对状态,并在 Admin 服务端阻止可能已经 下单的明细再次创建采购任务。

最终方案

  • Repository 从现有 tasks 表实时提供成功、待人工核对和活动采购任务事实,不新增状态列或迁移。
  • Service 按“成功 → 待人工核对 → 活动任务 → 其他处理阶段”的优先级计算顺运宝阶段。
  • succeeded 显示“采购完成”和“查看采购结果”;manual_review 显示“采购待人工核对” 和禁止重新采购说明。两种状态都不能勾选采购。
  • 采购任务创建事务内再次检查成功和待人工核对任务;即使绕过页面直接提交,请求也会被拒绝, 任务数量不增加。
  • failed/cancelled 继续沿用现有人工判断后重新创建策略;Client 四接口及结果提交语义不变。
  • 生产发布没有数据库迁移。部署时首次备份因业务账号没有 tablespace 所需的 PROCESS 权限而 不合格,随后使用 --no-tablespaces 重新生成并校验成功,不合格文件已删除。首次创建发布目录 受临时 umask 077 影响为 700,导致 systemd 203/EXEC;修正目录为 755 后服务恢复,未回滚数据。

改了哪些

  • admin/repository/syb.go:查询成功、待人工核对和活动采购任务事实。
  • admin/service/syb.go:新增两个处理阶段、筛选、优先级和批量操作能力控制。
  • admin/service/purchase_workflow.go:增加成功/待核对采购任务的服务端重复采购门禁。
  • admin/templates/syb/list.html:完成和待核对状态跳转到对应采购任务列表。
  • admin/service/*_test.go、admin/syb_interaction_template_test.go:覆盖阶段优先级、筛选、 页面动作、伪造请求拒绝和任务数量不增加。
  • docs/admin/01-requirements.md、docs/admin/05-ui-specification.md:记录稳定业务规则和页面反馈。

验收结果

验收标准 结果
成功采购任务显示“采购完成”,不能勾选或再次创建采购任务 通过
采购完成可进入采集采购页面查看 PDD 核单结果 通过
manual_review 显示“采购待人工核对”并禁止重新采购 通过
构造请求仍被服务端拒绝,任务数量不增加 通过
活动任务继续显示“已创建采购任务” 通过
failed/cancelled 现有人工处理策略不变 通过
新阶段筛选、计数和分页正确 通过
Client 四接口和提交语义不变 通过
固定 Go 1.23.0 测试、vet 和构建通过 通过
生产已有成功采购无需改数据即可进入新阶段 通过;生产存在 2 条关联成功采购任务

测试

  • 执行的命令:
    • GOTOOLCHAIN=go1.23.0 go test ./repository ./service . -count=1
    • GOTOOLCHAIN=go1.23.0 go test ./... -count=1
    • GOTOOLCHAIN=go1.23.0 go vet ./...
    • GOTOOLCHAIN=go1.23.0 go build ./...
    • Linux amd64 交叉编译、SHA-256 核对、systemd、本机 HTTP、公网 HTTPS、schema 版本和生产任务聚合核对。
  • 结果:全部自动化测试、vet、构建和差异检查通过。Linux 二进制 SHA-256 为 e6f33c8ebb2edbd91d06bd4942ed2b1035e59323b3cca7eb84cd4882e20159eb,生产服务切换到 /opt/cmautobuy/releases/5528b4b/ 后为 active/enabled;本机根路径返回 303,公网登录页返回 200, schema 为 v12,近期应用启动错误为 0。有效备份为 /opt/cmautobuy/backups/autobuy-before-169-20260811T100957Z-notablespaces.sql.gz,权限 600 且 gzip 校验通过。
  • 没验证到的部分:未使用生产采购员账号登录后,在真实浏览器人工查看两条成功采购明细的 状态文字和任务详情;生产任务事实、模板动作和阶段推导已分别通过只读数据库核对与自动化测试。

相关提交

  • 5528b4b 修复顺运宝采购完成状态与重复采购