feat(huya): 批量查询拆成「查积分」与「查兑换记录」两个按钮
前端工具栏原来一个按钮同时查两件事,拆开后每次只查一半,所以重点在 「没查的那一半不能被当成没查到」: - 接口加 scope(both / score / records),默认 both 保持原行为; 只查积分时不产生判定(空串「未判定」,与 unknown「无法判定」分开), 也**不会**自动改业务状态(连判定都没有,凭什么改)。 - 列表的积分与判定各取「最近一条查到过它的」快照:点「查积分」不再把 整页判定徽标冲成未判定,点「查兑换记录」也不再清空积分;但新的 unknown 仍会盖掉旧的 success(抖动结果不许藏)。 - 结果弹窗 / 积分列 Tooltip / 生命周期时间线都按 scope 显示, 不再把「本次没查」显示成「积分 -」「兑换记录 0 条」。 - 新增 12 例测试(TestCollabActivityScopeSplit),并做了 4 次反向验证 (去掉判定分支 / 判定跟随最新 / 积分跟随最新 / 删掉响应字段),全部确认变红。 顺带修掉文档漂移:AGENTS.md 的迁移 head 早就过期(main 实际 20261016_0059、dev 20261008_0053),并补上「两侧已分叉成两个 head、 合并 dev 前必须先 alembic merge」这条;设计文档补 §11.9。
This commit is contained in:
@@ -872,6 +872,38 @@ CK 失效了业务上可能仍然有效。列表上只做**显式提示**(红
|
||||
**待跟进**:导出动作目前只写审计;如果以后要做"谁在什么时候导出了什么"的专门报表,
|
||||
`audit_logs.action = 'huya:collab:ck_export'` 已经可以直接筛(不用加表)。
|
||||
|
||||
### 11.9 2026-10-17 第六轮:批量查询拆成「查积分」+「查兑换记录」两个按钮
|
||||
|
||||
需求原文:"批量查积分/兑换 改成两个按钮,一个查询积分,一个查询兑换记录。"
|
||||
|
||||
原先是**一个按钮查两件事**(`POST /external-orders/activity/query` 一次打两个接口)。
|
||||
拆开之后,**一半的查询必然缺另一半的数据**,所以这一轮的重点不是按钮,而是三件事:
|
||||
|
||||
| 面 | 落地 |
|
||||
| --- | --- |
|
||||
| 服务层 | `query_order_activity(scope=...)` / `query_activity_batch(scope=...)`:`both`(默认,原行为)/ `score` / `records`;没查的那一半**不写值** |
|
||||
| 判定 | 只查积分时 `verdict` 写**空串**(`VERDICT_NOT_QUERIED`),显示名「未判定」——与 `unknown`「无法判定」(查了但判不了)**必须分开**;`ok` 改看"这次要查的东西查到没有" |
|
||||
| 列表回填 | `order_metric_views()`:`latest`(时间/结论)+ `score`(最近一条查过积分的)+ `verdict`(最近一条**有判定结论**的),三条线索各发一次分组查询 |
|
||||
| 接口 | 请求加 `scope`;响应条目加 `scope/scope_label`,汇总加 `not_judged`;`serialize_order` 加 `last_verdict_at/last_verdict_message`;`serialize_metric` 加 `scope` |
|
||||
| 前端 | 工具栏拆成「批量查积分(N)」「批量查兑换记录(N)」;结果弹窗按 scope 换标题与正文;列表「积分」列 Tooltip 分别写清"最新查询"与"判定"各自的时间;详情时间线按 `scope` 决定显示哪几段(不再把"没查"显示成"积分 -""0 条") |
|
||||
| 测试 | 新增 `TestCollabActivityScopeSplit`(11 例);全量 `pytest` 978 passed / 6 skipped |
|
||||
|
||||
**这一轮定下的四条口径**(改这块前先读):
|
||||
|
||||
1. **只查积分永远不自动改状态**:判定都没有,凭什么改?`target` 为空,连"因为状态不是已上脚本所以没改"
|
||||
那套提示都不会出现。反向验证:去掉这个分支后,一个"兑换记录里明明有它礼包"的已上脚本单
|
||||
会被判成 `failed` 并自动改成「抢购失败」—— 6 个用例同时变红。
|
||||
2. **「没查」不是「没有」**:只查积分时不许拿"兑换记录是空的"去判失败;`records_total` 保持 0 但
|
||||
`verdict` 留空,汇总里那行进 `not_judged`(**不计入 `unknown`**)。
|
||||
3. **列表上的判定徽标取「最近一条真的查过兑换记录的快照」**:否则点一次「查积分」就会把整页
|
||||
「兑换成功 / 兑换失败」冲成「未判定」,等于把结论抹掉。**但新的 `unknown` 照样盖掉旧的 `success`**
|
||||
—— 不能为了"保住徽标"把抖动的结果藏起来(两条都有专门用例钉着,各注入一次反向验证)。
|
||||
同理,列表上的积分取「最近一条查到过积分的快照」,只查兑换记录时不清空。
|
||||
4. **时间线按 `raw.scope` 取舍,不靠"字段是不是空"猜**:快照行是只追加的,`raw.scope` 记着当时查了哪一半。
|
||||
|
||||
**没有动的地方**:单行「查积分 / 兑换记录」与详情抽屉里的按钮仍是 `both`(一个动作查两件事),
|
||||
`scope` 是**可选参数**、默认值就是原来的行为 —— 老的调用方一个字段不加也照旧。
|
||||
|
||||
---
|
||||
|
||||
## 12. 风险
|
||||
|
||||
Reference in New Issue
Block a user