Files
cmautobuy/docs
chengmaandClaude Opus 5 e40ce5a13c fix: 商品卡在「采集中」无法恢复 (#24)
MarkCollecting 原本只在 pending/failed 时成功,而全库只有客户端提交结果
才会把 collecting 改走。客户端离线、崩溃、任务被删都是常态——一旦发生,
这个商品就永久报废,界面上没有任何入口能救,只能改数据库。

改成 collecting 超过 15 分钟视为已超时,允许重新创建采集任务。

判定在读取那一刻现算,仍是同一条原子 UPDATE,不加后台清理协程:
后台扫要处理"扫到一半客户端正好提交了"的竞态,本项目已经在并发上
栽过两次,能不引入并发就不引入。

15 分钟写成有名字的常量并注明理由:采集本身几十秒到两分钟,加上排队
等客户端来领。宁可短也不要长——采集是只读的,多采一次没有副作用,
而卡死的代价是商品永久报废。

已知取舍:超时后老任务还在队列里,客户端上线可能两个都领走、采两次。
可接受(只读,后一次覆盖前一次),已写进代码注释和 03-data-model.md,
免得后来人当成 bug 去"修"成加锁或加租约——租约和心跳是被明确移除的设计。

时间比较用字符串,依赖 NowISO 产出定宽 UTC。已在 NowISO 上加注释:
改成带时区偏移的本地时间会让这个比较静默失效,不报错但判断全错。

界面两处:超时的显示「采集中(超时)」,否则操作员盯着「采集中」
不知道它已经死了;跳过原因按正在采集/已采集/已删除分类计数,
一个都没建成时告诉操作员还要等多久。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 14:42:54 +08:00
..
2026-08-07 14:42:37 +08:00

项目文档索引

本目录保存项目级文档。长期稳定的基线文档按子项目放在 docs/client 和 docs/admin, 实施过程和完成记录放在 docs/task,两者不得混用。

项目由两部分组成

子项目 是什么 技术栈 规则文件
Client Windows 桌面客户端,控制安卓设备在拼多多采集和下单 Python 3.10 + PyQt5 client/AGENTS.md
Admin 本地 Web 管理端,管理商品、货运单、采购任务和客户端 Go + Gin + HTML 模板 admin/AGENTS.md

两者通过三个 HTTP 接口交互,契约以 Client 侧的接口契约 为准。

两个子项目技术栈完全不同,规则不通用。 别拿 Client 的经验套 Admin,反之亦然。

新人从这里开始

我要做 先读
上手 Client Client 上手指南 + Client 术语表
上手 Admin Admin 上手指南 + Admin 术语表
搞清楚整条业务链路 Admin 需求 §3

按任务找文档

不用通读全部文档,按你要做的事挑:

Client(桌面客户端)

我要做的事 主要看 顺带看
第一次把项目跑起来 00 上手指南 —
改界面、加页面、调表格 05 界面交互规范 02 架构 §5 线程
加字段、改表、写 SQL 03 数据模型 02 架构 §7 数据所有权
对接 Admin、写 Gateway 04 接口契约 07 联调手册
写自动化、控制手机 02 架构 §9 06 质量与安全 §4
碰采购、下单相关代码 06 质量与安全 §3 01 需求 §4.2
写测试 06 质量与安全 §2 —
搞不清这功能到底要不要做 01 产品需求基线 —
打包成 exe、改文件路径 01 需求 §8.1 03 数据模型 §2

Admin(Web 管理端)

我要做的事 主要看 顺带看
第一次把项目跑起来 00 上手指南 —
改页面、加表格列 05 界面规范 02 架构 §4 模板
加字段、改表、写 SQL 03 数据模型 02 架构 §2 分层
改 Excel 导入 03 数据模型 §3.3 00 术语表 §3 upsert
改给 Client 的接口 04 Client 接口实现 Client 侧契约
和 Admin 联调、登记新设备 07 设备登记联调手册 Client 侧契约 §5
写测试 06 质量与安全 §2 —
搞不清这功能到底要不要做 01 产品需求基线 —

通用

我要做的事 看这里
建工单、写归档 模板 + 根目录 AGENTS.md

无论做哪一样,都必须先看一遍对应子项目的 AGENTS.md(技术栈和红线)。

Client 基线文档

文档 用途
00 上手指南 装环境、连手机、跑起来、常见报错
00 术语表 Outbox、幂等、不可逆阶段等
01 产品需求基线 目标、范围、任务类型、打包策略
02 系统架构 分层、线程模型、Worker 模板
03 数据模型 SQLite 表、状态机、pdd_data 结构
04 Admin 接口契约 两个子项目的接口边界,改动需同步 Admin
05 界面交互规范 PDD 任务页、设置页、表格交互
06 质量、安全与测试 测试策略、采购安全、发布门禁

Admin 基线文档

文档 用途
00 上手指南 装 Go、跑起来、常见报错
00 术语表 货运单、upsert、SKU 映射等
01 产品需求基线 业务链路、四个模块、状态定义
02 系统架构 分层、目录、模板组织、前端约束
03 数据模型 SQLite 表、Excel 导入规则
04 Client 接口实现 服务端怎么实现那三个接口
05 界面规范 三段式布局、四个页面、弹窗
06 质量、安全与测试 测试、Web 安全、发布门禁
07 设备登记联调手册 给 Client 开发者:怎么让新设备登记成功

文档标注说明

基线文档中的条目按下面三档标注,没有标注的默认是 [必须]:

标注 含义
[必须] 不许改。要改先走工单,并经用户确认
[建议] 默认这么做;有更合适的做法可以换,但要在工单里说明原因
[待定] 还没定下来。文档会给一个临时默认值,先按临时值做,别停工

文档生命周期

  • docs/client 和 docs/admin 只记录不随单个任务频繁变化的产品和技术基线。
  • 日常需求、缺陷、进度、阻塞和方案变更以 Gitea 工单为事实来源。
  • 单元任务完成后,按 AGENTS.md 归档到 docs/task/<工单号>-<简短名称>.md。
  • 基线发生实质变化时,必须先更新对应 Gitea 工单并完成评审,再在同一任务中更新这里的相关文档。
  • 接口契约改动必须两边同步:docs/client/04-* 和 docs/admin/04-* 在同一个工单里一起改。

文档和代码对不上怎么办

现在的代码还没做到文档描述的目标状态,对不上是正常的。 Client 的已知差异列在 02 架构 §3.1; Admin 目前尚未开始编码。

按下面处理,不要一发现不一致就停工:

情况 怎么办
差异已经列在差异清单里 按代码现状继续做,不用停
差异不在清单里,但只影响写法、不影响业务结果 按文档做,并在工单里记一句
差异会影响业务结果(金额、数量、状态、下单与否、数据结构) 停下来,在工单里说明,等用户确认哪边是对的

判断不了算不算"影响业务结果"时,按最后一行处理。

文档状态

Client 和 Admin 文档均为 基线草案。

Admin 尚未开始编码;顺运宝同步方式、认证方式和部分字段仍需确认, 这些事项已在对应文档中标注为 [待定],并给出了临时默认值。