docs: record continuous temporary collection rules #250
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Architecture-and-Code-Map
|
||||
wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Architecture-and-Code-Map.-
|
||||
wiki_revision: 20a1ca65dccde9ca1ecd93419cc1b164a5717fdf
|
||||
synchronized_at: 2026-09-07T13:34:45Z
|
||||
wiki_revision: 8c016819cad4d9fe04fb3a4e1a5fe5f52c4601fc
|
||||
synchronized_at: 2026-09-09T06:21:04Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 架构与代码地图
|
||||
@@ -68,6 +68,8 @@ Android Portal/Agent
|
||||
| `pdd_account` | 可选的账号调度引用,只保存名称和状态,不保存凭据 |
|
||||
| `purchase_task` | 商品外键和不可变快照、执行模式、状态/租约 guard、价格边界、订单、人工支付复核、物流与回填事实 |
|
||||
| `purchase_task_attempt` | `task_id + attempt_id` 幂等执行记录、阶段、规则哈希、固化规格决策和结构化错误 |
|
||||
|
||||
> #241 新增:`server/app/goauto/purchase/order_backfill.go` 与 `order_backfill_handler.go` 提供 `POST /api/agent/v1/purchase-tasks/order-backfill`(Device Token 鉴权,逐条事务、逐条结果);`server/app/goauto/models/purchase_order_guard.go` 在 `PurchaseTask.BeforeSave` 上全局强制订单号唯一,以 `purchase_rule_setting` 单例行串行化订单号分配,避免新增唯一索引迁移;`purchasecontract.ParseAddressSuffix` 为 `AddressSuffix` 的反解,通过回比而非负向前瞻实现(Go RE2 不支持前瞻)。
|
||||
| `ai_matching_setting` | 唯一单例的启用状态、OpenAI-compatible Base URL、模型、超时、内部部署明文 API Key 和更新人;仅管理员设置接口可以读取该字段 |
|
||||
|
||||
`collection_task` 的状态仅为 `pending`、`running`、`completed`、`completed_partial`、`failed`。设备身份和心跳表属于 Agent 领取任务的必要基础,不承载 PDD 业务数据。
|
||||
@@ -352,3 +354,26 @@ PddProductDetailCollector
|
||||
`GoAutoAccessibilityService.swipePurchase` 的失败分类由 `PurchaseSwipeFailureReason` 枚举提供;共享 `swipeNode` 仅增加可选分类回调,不改变手势目标、轨迹、1500ms 回调等待或其他调用者行为。`GoAutoPurchasePanel` 日志经 `AgentForegroundService` 关联 task、attempt、device 与规则快照哈希,新增预滑动跳过/必需滑动失败标量;不记录节点文字、坐标、原始控件树、截图或凭据。
|
||||
|
||||
Server/Web、数据库和任务快照不变;旧 APK 仍有预滑动行为,必须更新 Agent 才生效。相关验证在 `PurchaseRehearsalExecutorTest`,Android 全量测试与 APK 构建入口不变。
|
||||
|
||||
## SYB 逐页保存与部分成功(#239)
|
||||
|
||||
实现绑定 c6a962d;代码已实现不代表当前线上已部署。每页完整明细在外部请求结束后按页事务保存;页回滚不累计明细/新增/覆盖数,已提交页保留。日期局部读取失败继续下一日期,全局数据库/进度/会话/取消故障停止。当天漂移不在一次运行内重扫;后续运行重新扫描并幂等补齐。
|
||||
|
||||
同步状态增加 `partial_success`(部分成功,15 字符,复用现有 varchar(16),无需迁移)。有错误且 created+updated>0 为部分成功;有错误无已提交明细为 failed;完整且无错误为 succeeded(包括无符合店铺的数据)。中断仍为 interrupted,不把中断追认为成功。所有终态沿用活动槽释放规则。
|
||||
|
||||
`orderCount` 是已验证页的原始列表读取数量;`detailCount`、`created`、`updated` 为已提交明细及其新增/覆盖数量;`daysProcessed` 是完整通过的日期数,不是已尝试日期数。失败日期/页码/阶段写入现有脱敏限长 errorMessage。部分成功不刷新店铺的完整同步统计。
|
||||
|
||||
Web 唯一展示位置为“采集采购 → SYB 同步记录”:列表状态、状态筛选及详情支持部分成功,详情保留已保存数量、错误原因与重新同步补齐提示。定时任务日志只表示异步任务受理,不等于最终业务同步成功。
|
||||
|
||||
入口为 `SyncWithShopSnapshot → loadDailyList → importSyncPage`;`server/app/goauto/sybimport/sync_page.go` 封装页事务和提交后计数;`import_handler.go` 判定终态,`sync_run.go` 保存及筛选,Web 复用 `web/src/views/goauto/syb-sync-runs/index.vue`。
|
||||
|
||||
## Android 连续临时采集收尾(#250)
|
||||
|
||||
实现绑定 `074e5aa`(0.9.68 / 81)。仅 Android;无 Admin/API/权限/数据库迁移。
|
||||
|
||||
- `AgentSettingsFragment` 在采集间隔后复用卡片加入 MaterialSwitch、范围说明及保存反馈;`AgentSettingsStore` 在私有 `goauto_agent_settings` 保存 `continuous_collection`,缺省 false,commit 失败恢复先前值。无网络配置或批次表。
|
||||
- `requestCurrentPageCollection` 在现有互斥锁内依据 `ContinuousCollectionPolicy.applies` 固定本次是否连续;其他 executeTask 调用维持默认 false。`executeTaskWhileAwake` 仍先提交结果并结束图片上传,再返回带 resultStatus 的 `TaskExecutionSummary`;连续模式只抑制 idle-return,不改变采集 cooldown。
|
||||
- `ContinuousCollectionPolicy.finish` 仅对 acknowledged completed 调用 `PddCollectionHomeNavigator`;导航失败/异常只影响提示,不改变 successful、error code 或 resultStatus。调用在 executeTask 的唤醒锁与原任务互斥范围内,结束后沿原 finally 释放,不与下一任务竞争页面。
|
||||
- `PddCollectionHomeNavigator` 只使用现有 PddCollectorDriver.capture/back/clickFresh;前台和安全页面证据每步重查,最多 4 次、每步 500ms,终点用底部首页选中子节点与顶部拍照搜索验证。无 OCR/VLM、深链、启动 Intent、点击坐标、订单/付款动作。
|
||||
- 返回结果只记 taskId、attemptNumber、deviceId、规则快照 SHA-256 与 continuousHome 布尔值(GoAutoCollector Logcat),不记录节点文案、坐标、原始树或整屏截图;不扩大 #249 采购诊断存储范围。
|
||||
- 本地验证:`:app:testDebugUnitTest :app:assembleDebug`,372 tests 通过(新增 13 项),包括偏好持久化/失败回退、范围与终态分流、实际首页结构、逐步返回/动作上限、前台变化和导航异常隔离。真机只读首页证据已核对,新 APK 未安装、完整连续采集尚未验证。
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Business-Rules-and-Glossary
|
||||
wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Business-Rules-and-Glossary.-
|
||||
wiki_revision: a445dfe3b76336f5c7387a2da9760c5d6e383ff6
|
||||
synchronized_at: 2026-09-09T02:47:12Z
|
||||
wiki_revision: c56c0ff9f12d86560b0d597fa83c9add5d5b71d9
|
||||
synchronized_at: 2026-09-09T06:21:09Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 业务规则与术语
|
||||
@@ -511,3 +511,15 @@ Web 唯一展示位置为“采集采购 → SYB 同步记录”:列表状态
|
||||
- 旧文案无候选时,只接受弹层底部固定区域内一个独立、可见启用、非滚动的可点击容器;不在规格滚动区内选择按钮,不取控件树末项,不使用固定屏幕点击坐标。文字与人民币金额子节点合并为一个按钮;支持如“复购价,”及非支付展示文字变化,但单独价格、多个操作按钮或支付/付款/地址/返回等非提交动作均不放行。
|
||||
- 地址返回检查、最终复核和提交共用目标定位。结构路径保留原文字节点为重新定位锚点,由已有无障碍点击重新查找其可点击父级;不新增下单手势兜底。最终复核成功后才允许该结构路径提交;提交前再次检查路径、类别、文字与边界,发生变化即停止;复核失败清除本地结构提交锚点。
|
||||
- 既有规格、数量、价格和地址复核,任务租约、服务端/本地不可逆边界及单次提交规则不变。结构识别不支持支付,不增加采购员操作、配置或审批;不改变 Admin、接口、数据库、规则 JSON、通用解析器及滑动执行器。原始控件树、整屏截图、地址全文和凭据不得落盘或上传。
|
||||
|
||||
## 临时采集连续模式(#250)
|
||||
|
||||
实现绑定 `074e5aa`,Agent 0.9.68 / versionCode 81;代码、单元测试和 Debug 构建通过,真机连续采集闭环尚待验收。
|
||||
|
||||
- 设置页“连续采集”默认关闭,本机保存;切换即时保存,失败恢复原值,任务执行时禁用。只作用于本次从采集 Tab 新建的普通临时采集(source=agent_current_page、attemptNumber=1、无替换来源)。Admin 下发、历史重新采集、替代商品采集和采购不进入连续模式。
|
||||
- 开启时完整 completed、服务端确认提交、既有图片上传流程结束后,尝试回到 PDD 首页;图片上传失败仍按既有非致命规则处理,不因回首页流程重写结果。部分成功、失败、提交未确认均保留现场,不启动自动返回 Agent 的倒计时。关闭开关保持原行为;采集间隔不改变、不绕过。
|
||||
- 导航仍在原任务本地互斥保护内完成,随后释放占位;不修改服务端租约/调度。前台不是 PDD、Activity 不可得或存在登录/验证码/风险/地址编辑/订单详情/付款页证据时停止,不抢回前台。
|
||||
- 首页成功证据来自目标手机只读结构:底部唯一首页文字位于可点击父节点内且 selected=true,底部同时有聊天、个人中心,顶部有独立可点击拍照搜索。不是启动 App 请求成功即完成,也不把屏幕任意“首页”文案视为首页。
|
||||
- 最多 4 个导航动作,每个动作后等待 500ms 并重新读取页面。已确认底部导航可点首页;否则只在规则证据匹配的商品/规格页面或有唯一顶部“返回”控件时执行一次返回。页面不变、目标歧义、未知页面或动作失败立即停止,不猜测坐标、不使用手势兜底、不清除应用数据。
|
||||
- 回首页失败仅提示“采集已完成,请手动返回拼多多首页”,不得把成功采集改成失败或自动重采。回到首页后由人工拍照搜索、选商品、再次发起采集;不自动搜索、不自动创建下一任务,不触发采购或付款。
|
||||
- 首页结构只读验证不等于商品页经拍照搜索结果页返回首页的整段真机验证;真实路径、横屏/大字体设置显示和两次连续采集仍需验收。
|
||||
|
||||
Reference in New Issue
Block a user