feat: 移除 Client 真实采购手工授权 (#114)

This commit is contained in:
chengma
2026-08-10 18:37:35 +08:00
parent 8188153b08
commit 10bb892e6c
29 changed files with 124 additions and 702 deletions
+4 -4
View File
@@ -235,8 +235,8 @@ PDD 商品之所以单独一个模块,是因为它在数据上就是**独立
- 预选不会自动保存或创建采购任务。页面必须显示推荐理由,采购员点击保存后才写映射和只追加的决策审计。
**创建采购任务:** 只有映射仍有效且没有进行中采购任务的行可勾选。确认弹窗列出
当前账号可见的客户端:声明 live 的客户端可选择,暂时离线也可提前指派;非 live
客户端显示但禁用。新任务固定为真实下单(不支付),提交表单即表示创建真实采购任务,
当前账号可见的全部客户端都可选择,暂时离线或尚未就绪也可提前指派并等待其就绪后领取。
新任务固定为真实下单(不支付),提交表单即表示创建真实采购任务,
不再额外要求风险复选框或确认短语;服务端仍按 §5 全量复核。
**底部状态条:** 最近同步时间、待匹配条数。
@@ -353,13 +353,13 @@ PDD 商品之所以单独一个模块,是因为它在数据上就是**独立
4. 数量大于 0;
5. **价格上限已填且大于 0** —— 默认从当前映射的 PDD 规格价格带出,操作员可改,但不允许为空;
6. 已选择分配的客户端;
7. 所选客户端存在、在当前账号可见范围内,且声明 `purchase_mode=live`;暂时离线只影响领取时间,不阻止提前指派;
7. 所选客户端存在且在当前账号可见范围内;其在线状态和 `purchase_mode` 只影响何时领取,不阻止提前指派;
8. 同一顺运宝明细没有 `pending` / `assigned` / `claimed` 的采购任务。
Admin 新建采购任务固定使用不可变的 `execution_mode=live`,不向采购员提供模式选择:
- `live` 会创建真实未付款订单,管理员和其他正常状态用户均可创建;点击明确标注的创建按钮并提交表单即表示创建,不再要求额外复选框或确认短语;
- 必须显式指定当前账号可见且最后登记能力为 `purchase_mode=live` 的 Client;离线 live Client 可提前指派并在上线后领取;
- 必须显式指定当前账号可见的 Client;不按最后登记的 `purchase_mode` 限制创建,未就绪或离线 Client 等待就绪后领取;
- 创建时记录操作用户和操作时间。取消、重派和结果回传均不得修改执行模式。
- 数据库和 API 继续保留 `dry_run/live`,历史任务和缺省兼容值仍按 `dry_run`,不得批量升级历史任务。
+3 -1
View File
@@ -113,6 +113,8 @@ UPDATE tasks
`execution_mode` 只允许 `dry_run` / `live`;Admin Web 新建采购任务固定为 `live`,历史任务和接口缺省兼容值仍为 `dry_run`。领取查询必须按
Client 上报的 `capabilities.purchase_mode` 过滤:`dry_run` Client 只能看到演练任务,
`live` Client 可以看到两种;过滤只决定能否领取,绝不改变任务自身模式。
Admin Web 可以把 live 任务预先指派给当前账号可见的任意 Client,不在创建时按该字段
拒绝;尚未就绪的指定 Client 不会领取,待其设备与真实采购执行器就绪并自动上报 live 后领取。
`[必须]` `payload.goods_url` 必须有值;采购任务的 `quantity` 和 `max_price_cent` 必须有值。
这些在建任务时就该校验住(见 [01 需求](01-requirements.md) §5),
@@ -310,7 +312,7 @@ Client 契约里散落的 Admin 侧硬要求,汇总在这里,**可以直接
- [ ] 响应不含租约、不含 Admin 侧状态
- [ ] `payload.goods_url` 必有值
- [ ] 采购任务的 `quantity`、`max_price_cent` 必有值,且是人民币分整数
- [ ] 不向只声明 `dry_run` 的客户端分配需要真实下单的任务
- [ ] 可以预先指派 live 任务给可见 Client,但领取时不向只声明 `dry_run` 的客户端返回 live 任务
- [ ] `result` / `failure` 幂等:同键同内容返回同结果
- [ ] 同键不同内容返回 `409`
- [ ] **任务已取消,仍接受结果**
+5 -5
View File
@@ -555,8 +555,8 @@ HTML 片段,只替换弹窗内部的表格、总数和分页。主货运单表
### 6.4 创建采购任务
只有“可创建采购任务”的行可勾选。勾选后打开服务端渲染的确认弹窗:选择当前账号
可见且声明 live 能力的客户端,并逐行确认人民币价格上限。离线 live Client 也可提前
指派,待其上线后领取;非 live Client 显示为禁用项并说明原因。默认价格来自映射规格
可见的任意客户端,并逐行确认人民币价格上限。离线或尚未就绪的 Client 也可提前
指派,待其就绪后领取;选项继续显示在线状态但不因能力状态禁用。默认价格来自映射规格
的 PDD 采集价;没有价格时留空强制填写。新任务固定为真实下单(不支付),不显示执行
模式选择,也不再要求额外风险复选框、确认短语或浏览器二次确认。
@@ -578,13 +578,13 @@ grid 样式不得覆盖 `hidden`,关闭后改变勾选再打开也不得残留
· SO-...-009 规格未匹配
```
`[必须]` 创建前弹出确认框,让操作员选**分配给哪个 live Client**,并确认价格上限。
`[必须]` 创建前弹出确认框,让操作员选**分配给哪个当前账号可见的 Client**,并确认价格上限。
价格上限默认从当前映射的 PDD 规格采集价带出,可改,**不允许为空**。
可采购行的“下一步”显示“创建采购任务”。点击后复用同一个确认弹窗并只带入当前明细,
不改变表格复选框状态;顶部批量入口仍按已勾选明细打开。客户端选项显示名称和 Client
ID;live Client 可选择且只有一个时自动选中,非 live Client 显示“未启用真实采购”并
禁用。没有符合条件的 Client 时禁用提交并说明如何在 Client 设置页启用。已有未
ID 和在线状态;所有可见 Client 都可选择且只有一个时自动选中。没有可见 Client 时禁用
提交并说明需要管理员先绑定客户端。已有未
结束任务的行显示“查看采购任务”并进入“采集采购”页,不得再次创建。服务端仍必须重新
校验映射、数量、人民币价格上限、客户端权限、固定 live 模式、创建审计和重复任务,不能
信任列表页的旧状态。
+1 -1
View File
@@ -91,7 +91,7 @@ Admin 使用它作为 `clients.client_id` 主键。设备号变化会产生一
- `supported_types` 必须非空,只允许 `collect`、`purchase`;
- `device` 可选,提供时当前只支持 `android`;
- `purchase_mode` 只允许 `dry_run`、`live`,MVP 固定 `dry_run`;
- `purchase_mode` 只允许 `dry_run`、`live`;Client 未选择设备或真实采购执行器未就绪时为 `dry_run`,就绪后自动为 `live`;
- `schema_versions` 只包含正整数,当前使用 `[1]`。
---