Page:
T-224
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
同步来源:
docs/tasks/T-224.md· commitafc651f75a3a
id: T-224 title: ERP 日期增量同步 phase: 2 deps:
- T-223
status: DONE
created: 2026-07-28
context_ref:
78dc595work_branch: null write_paths: - erp-connector/**
- backend-api/internal/domain/**
- backend-api/internal/usecase/**
- backend-api/internal/repository/sqlite/**
- backend-api/internal/transport/httpapi/**
- backend-api/internal/transport/webui/**
- backend-api/migrations/**
- docs/api.md
- docs/routes.md
- docs/tasks/T-224.md
- docs/current-state.md
问题 / 背景
精确单号适合第一版人工导入,但日常运营需要按时间发现新货运单。已验证 HAR 使用
t_stock.created 日期区间条件;增量同步必须处理分页过程中数据变化、重复窗口、
失败重试和服务端时区,不能简单保存“最后一页”。
关联需求与交互
- 功能:F-011、F-012
- 用户故事:US-011、US-012
- 交互:IX-012、IX-013
- 架构/API:日期查询、sync watermark 和重叠窗口
方案
- Connector 增加日期区间请求,严格使用已验证字段:
colName=created, op=0, type=3, optType=0,日期使用 Asia/Shanghai。 - 单次窗口最大 7 天,分页/总数均设上限,按 stock id 去重后批量取详情。
- 后端保存 last successful watermark;每次从成功水位前回看 10 分钟/至少同一自然日, 依靠外部 ID + hash 去重更新。
- 只有整批事务成功才推进水位;认证、网络、协议、超限或明细缺失时保留旧水位并 显示可重试错误。
- Admin 提供手动日期范围和“同步至现在”,不在本任务引入系统级计划任务;定时器 后置到运行稳定后。
验收要点
- 日期 query 与脱敏 HAR 合约一致,时区和闭区间规则有测试。
- 重叠窗口、重复页、来源更新、空窗口和中途失败不丢单/不重复。
- 失败不推进 watermark,成功重放得到相同货运与采购需求集合。
- Admin 可查看范围、状态、计数和匿名错误,不显示 PII/秘密。
- Python、Go 全量测试、race/vet、根验证和响应式 SSR 验收通过。
边界
- 不做无人值守验证码 OCR、cron、消息队列或多 ERP 租户。
- 不承诺逆向页面接口 SLA;正式生产前仍需确认 ERP 开放 API 和数据使用权限。
- 不因时间同步自动领取或执行 Roubao 任务。
执行记录
- 2026-07-28:任务合约已冻结,等待 T-223。
- 2026-07-28:Connector 增加
CREATED_RANGE,严格复现t_stock.created/op=0/type=3/optType=0和最多 7 个自然日闭区间;分页按 stock id 去重,空范围不请求详情,输出继续使用 allowlist schema。 - 2026-07-28:v14 将同步运行扩展为
ORDER_NUMBER/CREATED_RANGE并新增 creator 级成功水位。后端“同步至现在”从水位前 10 分钟所在自然日回看,超过 7 天自动切窗; 货运 upsert、同步成功和水位推进处于同一 SQLite 事务,失败和较旧成功任务不推进。 - 2026-07-28:Admin JSON/SSR 支持手动日期范围、“同步至现在”、范围/计数/稳定错误码
和水位查看。SSR 实测发现并修复预填日期与
sync_to_now同时提交的 422,API 仍严格 拒绝混合语义。 - 2026-07-28:Python 22 项伪响应测试、Go 全量测试、race、vet 和根
init.ps1通过。隔离 Gin/SQLite + 本地伪 Connector 验证成功/失败水位;Playwright 在 1440×900、390×844、360×800 无横向溢出、页头遮挡、过小命令控件或 PII 文本。 未访问真实 ERP。