From b2c99840b3d33ef250f507c4a28078bfcc1ed4c3 Mon Sep 17 00:00:00 2001 From: chengma Date: Tue, 11 Aug 2026 18:10:39 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#169?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/169-采购完成状态与重复采购保护.md | 75 +++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/task/169-采购完成状态与重复采购保护.md diff --git a/docs/task/169-采购完成状态与重复采购保护.md b/docs/task/169-采购完成状态与重复采购保护.md new file mode 100644 index 0000000..b21141d --- /dev/null +++ b/docs/task/169-采购完成状态与重复采购保护.md @@ -0,0 +1,75 @@ +# 169 Admin:采购完成后更新顺运宝状态并阻止重复采购 + +- 类型:缺陷 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 Admin 四模块可用闭环 +- 状态:已完成 +- 日期:2026-08-11 +- Gitea 工单: + +## 背景与目标 + +顺运宝明细创建采购任务后,页面原来只识别 `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` 修复顺运宝采购完成状态与重复采购