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

Closed
opened 2026-08-11 17:58:31 +08:00 by ila · 2 comments
Owner

1. 基本信息

  • 类型:缺陷修复
  • 父级大工单:#14
  • 所属 MVP/版本:#15 Admin 四模块可用闭环
  • 阶段:顺运宝货运单与采购任务
  • 当前状态:待验收

2. 要解决什么

顺运宝明细创建采购任务并成功完成后,顺运宝列表没有显示采购完成。当前阶段判断只识别 pending/assigned/claimed 采购任务;任务进入 succeeded 后便回退到“采购就绪”,导致采购员误以为还可以再次采购,并且伪造表单请求也可能创建重复采购任务。

复现:

  1. 从顺运宝明细创建采购任务。
  2. Client 领取并成功提交采购结果。
  3. 回到顺运宝数据页面。
  4. 实际:状态回退为“可创建采购任务”;预期:显示采购完成,且不能再次创建采购任务。

生产核对已确认存在成功采购任务而顺运宝上下文不再视其为活动任务。本缺陷涉及重复采购风险。

3. 做什么 / 不做什么

做:

  • 顺运宝阶段新增“采购完成”和“采购待人工核对”。
  • 成功任务显示采购完成,并提供查看采购结果入口。
  • manual_review 显示待人工核对,明确禁止重新采购。
  • Admin 服务端拒绝为已有成功或待人工核对采购任务的同一顺运宝明细再次创建采购任务。
  • 补充阶段筛选、列表交互、测试和 Admin 文档。

不做:

  • 不改变 Client 结果/失败提交接口及其“已派发结果必须接收”的契约。
  • 不自动付款,不增加重试下单逻辑。
  • 不改变 failed/cancelled 后现有人工重新创建策略。
  • 不新增数据库迁移,不修改历史任务结果。

4. 已确认的实现方案

  • admin/repository/syb.go:在顺运宝上下文中分别查询是否存在 succeeded、manual_review 和活动采购任务。
  • admin/service/syb.go:按“成功 → 待人工核对 → 活动任务 → 其他准备阶段”的优先级计算阶段;新增筛选项和明确说明。
  • admin/service/purchase_workflow.go:在事务内复用顺运宝上下文,服务端拦截已有成功或待核对任务的重复采购请求。
  • admin/templates/syb.html:完成和待核对状态只提供查看任务/结果入口,不显示创建采购动作。
  • 更新对应 service/repository/handler 测试及 docs/admin 稳定需求、界面说明。

预计修改:

  • admin/repository/syb.go
  • admin/service/syb.go
  • admin/service/purchase_workflow.go
  • admin/templates/syb.html
  • 对应测试文件
  • docs/admin/01-requirements.md
  • docs/admin/05-ui-specification.md

5. 验收标准

  • 顺运宝明细存在成功采购任务时显示“采购完成”,不能勾选或创建采购任务。
  • “采购完成”可进入采集采购页面查看对应任务及 PDD 订单结果。
  • 顺运宝明细存在 manual_review 采购任务时显示“采购待人工核对”,明确禁止重新采购。
  • 直接构造请求时,服务端仍拒绝成功/待核对明细重复创建采购任务,且任务数量不增加。
  • 活动采购任务继续显示“已创建采购任务”。
  • failed/cancelled 的现有人工处理策略不变。
  • 新阶段可在顺运宝列表筛选,计数和分页正确。
  • Client 四接口请求、响应和提交语义不变。
  • 固定 Go 1.23 的格式化、测试、构建和 vet 通过。
  • 生产部署后,已有成功采购的顺运宝明细无需数据修复即可显示“采购完成”。

6. 验证方式

从仓库根目录执行:

$env:GOTOOLCHAIN='go1.23.0'
Set-Location admin
gofmt -w repository/syb.go service/syb.go service/purchase_workflow.go

go test ./repository ./service ./handler

go test ./...
go vet ./...
go build ./cmd/admin

生产部署后,以已有成功采购任务的顺运宝货运单做只读页面核对;不得重新下单。

风险和回退

  • 风险:阶段优先级错误可能把历史失败任务误判为完成,或放开可能已经下单的任务。
  • 控制:只把 succeeded 判为完成、manual_review 判为待核对;活动、失败、取消状态维持各自现有语义,并以服务端校验作为最终门禁。
  • 回退:回退本工单代码并重启 Admin;无数据库迁移和历史数据写入需要回滚。

实施记录

  • 实现提交:5528b4b(顺运宝采购完成/待核对阶段、服务端重复采购门禁、测试和基线文档)。
  • 归档提交:b2c9984,归档:docs/task/169-采购完成状态与重复采购保护.md。
  • 固定 Go 1.23.0:go test ./... -count=1、go vet ./...、go build ./... 全部通过。
  • 生产已部署 /opt/cmautobuy/releases/5528b4b/,服务 active/enabled,本机根路径 303、公网登录页 200、schema v12、近期应用错误 0。
  • 生产现有 2 条顺运宝明细关联成功采购任务,将直接由新代码推导为“采购完成”,不需要改历史数据。
  • 部署备份:autobuy-before-169-20260811T100957Z-notablespaces.sql.gz,权限 600,gzip 校验通过。首次因业务账号无 tablespace PROCESS 权限产生的不合格备份已删除。
  • 部署过程中首次发布目录受 umask 077 影响为 700,systemd 报 203/EXEC;改为 755 后恢复正常,未发生数据库写入或回滚。
  • 未验证:未使用生产采购员账号登录后进行真实浏览器人工视觉验收;模板、状态推导、筛选和服务端门禁均已自动化覆盖。
## 1. 基本信息 - 类型:缺陷修复 - 父级大工单:#14 - 所属 MVP/版本:#15 Admin 四模块可用闭环 - 阶段:顺运宝货运单与采购任务 - 当前状态:待验收 ## 2. 要解决什么 顺运宝明细创建采购任务并成功完成后,顺运宝列表没有显示采购完成。当前阶段判断只识别 `pending/assigned/claimed` 采购任务;任务进入 `succeeded` 后便回退到“采购就绪”,导致采购员误以为还可以再次采购,并且伪造表单请求也可能创建重复采购任务。 复现: 1. 从顺运宝明细创建采购任务。 2. Client 领取并成功提交采购结果。 3. 回到顺运宝数据页面。 4. 实际:状态回退为“可创建采购任务”;预期:显示采购完成,且不能再次创建采购任务。 生产核对已确认存在成功采购任务而顺运宝上下文不再视其为活动任务。本缺陷涉及重复采购风险。 ## 3. 做什么 / 不做什么 做: - 顺运宝阶段新增“采购完成”和“采购待人工核对”。 - 成功任务显示采购完成,并提供查看采购结果入口。 - `manual_review` 显示待人工核对,明确禁止重新采购。 - Admin 服务端拒绝为已有成功或待人工核对采购任务的同一顺运宝明细再次创建采购任务。 - 补充阶段筛选、列表交互、测试和 Admin 文档。 不做: - 不改变 Client 结果/失败提交接口及其“已派发结果必须接收”的契约。 - 不自动付款,不增加重试下单逻辑。 - 不改变 `failed/cancelled` 后现有人工重新创建策略。 - 不新增数据库迁移,不修改历史任务结果。 ## 4. 已确认的实现方案 - `admin/repository/syb.go`:在顺运宝上下文中分别查询是否存在 `succeeded`、`manual_review` 和活动采购任务。 - `admin/service/syb.go`:按“成功 → 待人工核对 → 活动任务 → 其他准备阶段”的优先级计算阶段;新增筛选项和明确说明。 - `admin/service/purchase_workflow.go`:在事务内复用顺运宝上下文,服务端拦截已有成功或待核对任务的重复采购请求。 - `admin/templates/syb.html`:完成和待核对状态只提供查看任务/结果入口,不显示创建采购动作。 - 更新对应 service/repository/handler 测试及 `docs/admin` 稳定需求、界面说明。 预计修改: - `admin/repository/syb.go` - `admin/service/syb.go` - `admin/service/purchase_workflow.go` - `admin/templates/syb.html` - 对应测试文件 - `docs/admin/01-requirements.md` - `docs/admin/05-ui-specification.md` ## 5. 验收标准 - [x] 顺运宝明细存在成功采购任务时显示“采购完成”,不能勾选或创建采购任务。 - [x] “采购完成”可进入采集采购页面查看对应任务及 PDD 订单结果。 - [x] 顺运宝明细存在 `manual_review` 采购任务时显示“采购待人工核对”,明确禁止重新采购。 - [x] 直接构造请求时,服务端仍拒绝成功/待核对明细重复创建采购任务,且任务数量不增加。 - [x] 活动采购任务继续显示“已创建采购任务”。 - [x] `failed/cancelled` 的现有人工处理策略不变。 - [x] 新阶段可在顺运宝列表筛选,计数和分页正确。 - [x] Client 四接口请求、响应和提交语义不变。 - [x] 固定 Go 1.23 的格式化、测试、构建和 vet 通过。 - [x] 生产部署后,已有成功采购的顺运宝明细无需数据修复即可显示“采购完成”。 ## 6. 验证方式 从仓库根目录执行: ```powershell $env:GOTOOLCHAIN='go1.23.0' Set-Location admin gofmt -w repository/syb.go service/syb.go service/purchase_workflow.go go test ./repository ./service ./handler go test ./... go vet ./... go build ./cmd/admin ``` 生产部署后,以已有成功采购任务的顺运宝货运单做只读页面核对;不得重新下单。 ## 风险和回退 - 风险:阶段优先级错误可能把历史失败任务误判为完成,或放开可能已经下单的任务。 - 控制:只把 `succeeded` 判为完成、`manual_review` 判为待核对;活动、失败、取消状态维持各自现有语义,并以服务端校验作为最终门禁。 - 回退:回退本工单代码并重启 Admin;无数据库迁移和历史数据写入需要回滚。 ## 实施记录 - 实现提交:`5528b4b`(顺运宝采购完成/待核对阶段、服务端重复采购门禁、测试和基线文档)。 - 归档提交:`b2c9984`,归档:`docs/task/169-采购完成状态与重复采购保护.md`。 - 固定 Go 1.23.0:`go test ./... -count=1`、`go vet ./...`、`go build ./...` 全部通过。 - 生产已部署 `/opt/cmautobuy/releases/5528b4b/`,服务 active/enabled,本机根路径 303、公网登录页 200、schema v12、近期应用错误 0。 - 生产现有 2 条顺运宝明细关联成功采购任务,将直接由新代码推导为“采购完成”,不需要改历史数据。 - 部署备份:`autobuy-before-169-20260811T100957Z-notablespaces.sql.gz`,权限 600,gzip 校验通过。首次因业务账号无 tablespace `PROCESS` 权限产生的不合格备份已删除。 - 部署过程中首次发布目录受 `umask 077` 影响为 700,systemd 报 `203/EXEC`;改为 755 后恢复正常,未发生数据库写入或回滚。 - 未验证:未使用生产采购员账号登录后进行真实浏览器人工视觉验收;模板、状态推导、筛选和服务端门禁均已自动化覆盖。
Author
Owner

实施进度(2026-08-11):

  • 已从 tasks 实时识别成功、待人工核对和活动采购任务,并按安全优先级推导顺运宝阶段。
  • 已增加“采购完成 / 采购待人工核对”筛选、列表文字和只读查看入口;两种状态均不可勾选采购。
  • 已在采购任务创建服务端拦截 succeeded/manual_review,直接构造请求也不会新增任务。
  • 保持 failed/cancelled 现有人工处理策略,不改 Client 四接口,不增加数据库迁移。
  • 固定 Go 1.23.0 已通过 go test ./... -count=1、go vet ./...、go build ./...。

下一步:提交实现、归档,然后部署生产并用已有成功采购记录做只读核对。

实施进度(2026-08-11): - 已从 `tasks` 实时识别成功、待人工核对和活动采购任务,并按安全优先级推导顺运宝阶段。 - 已增加“采购完成 / 采购待人工核对”筛选、列表文字和只读查看入口;两种状态均不可勾选采购。 - 已在采购任务创建服务端拦截 `succeeded/manual_review`,直接构造请求也不会新增任务。 - 保持 `failed/cancelled` 现有人工处理策略,不改 Client 四接口,不增加数据库迁移。 - 固定 Go 1.23.0 已通过 `go test ./... -count=1`、`go vet ./...`、`go build ./...`。 下一步:提交实现、归档,然后部署生产并用已有成功采购记录做只读核对。
Author
Owner

用户于 2026-08-12 明确验收通过。已确认本地归档 docs/task/169-采购完成状态与重复采购保护.md 存在,现关闭工单。

用户于 2026-08-12 明确验收通过。已确认本地归档 `docs/task/169-采购完成状态与重复采购保护.md` 存在,现关闭工单。
ila closed this issue 2026-08-12 10:32:21 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#169