Admin:优化顺运宝当天分页漂移重试与默认日期 #192

Closed
opened 2026-08-12 18:07:50 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷修复
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:顺运宝同步稳定性

要解决什么

顺运宝当天货运单持续新增时,分页预检总数和最后一页实际条数发生漂移。例如页长 20、预检 727 张时第 37 页预期 7 行,但实际已增至 9 行。现有严格保护会停止整次同步,采购员反复重试仍可能失败,并重复拉取已经稳定的历史日期。

同时把顺运宝数据页面同步范围的开始日期默认改为昨天,结束日期仍默认今天。

做什么 / 不做什么

  • 做:开始日期默认昨天、结束日期默认今天;不再默认最近三天,也不因旧游标把页面默认开始日扩展到更早日期。
  • 做:历史日期继续执行严格页长、前后总数和唯一 ID 完整性校验。
  • 做:仅当天发生总数或页长漂移时自动重试当天,最多 3 次;已经完成的历史日期不重复拉取。
  • 做:当天重试仍不稳定时,写入最后一次尝试中已经取得且 ID 合法、可成功取得完整明细的数据;报告清楚说明当天仍在变化,并且不推进覆盖游标。
  • 做:后续同步继续覆盖当天,所有写入使用既有 upsert 幂等路径。
  • 不做:不放宽历史日期完整性,不静默把当天标记为完整,不新增数据库字段,不修改顺运宝账号配置。
  • 不做:不触发真实顺运宝同步或采购任务。

已确认实现方案

  1. 调整 DefaultSybSyncRange,页面首次打开固定预填“昨天~今天”;保留日期合法性和最多 31 天校验。
  2. 抽取单日列表分页结果。历史日仍使用现有严格模式。
  3. 当计划日期等于顺运宝 UTC+8 的今天时,列表分页发生页长/总数漂移自动重新执行该日列表获取,最多 3 次。
  4. 重试之间不重复处理已经完成的历史日;每次当天尝试使用独立 map/slice,避免把失败尝试的 ID 混入下一次。
  5. 第 3 次仍漂移时,使用最后一次已取得的合法唯一 ID 拉取完整明细并走既有 upsert;同步报告返回明确警告性质错误,cursor_advanced=false,下一次仍覆盖今天。
  6. 若当天响应存在非法 ID、重复 ID 后唯一数量异常、明细缺失或网络/业务错误,仍按失败处理,不把不完整明细写成成功数据。
  7. 更新顺运宝接口基线、服务测试和页面默认日期测试。

预计修改:

  • admin/service/syb.go
  • admin/service/syb_test.go
  • admin/handler/web/others_test.go(如默认值由 handler 覆盖)
  • docs/admin/08-顺运宝接口.md

验收标准

  • 页面首次打开时开始日期为昨天、结束日期为今天。
  • 历史日期页长或总数漂移仍立即失败且不推进游标。
  • 当天前两次分页漂移、第三次稳定时同步成功,并且历史日期只拉取一次。
  • 当天连续 3 次漂移时,最后一次已确认取得且明细完整的数据被 upsert,报告明确提示当天未形成稳定快照,游标不推进。
  • 重试之间不混入前次 ID,不突破 max_matches,网络、非法 ID、重复 ID和明细缺失保护保持有效。
  • 固定 Go 1.23.0 的 vet、build 和全量 test 通过。
  • 未执行真实同步、采集或采购操作。

验证方式

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go vet ./...
go build ./...
go test ./... -count=1
Remove-Item Env:GOTOOLCHAIN

使用假顺运宝服务构造历史日期漂移、当天两次漂移后稳定、当天三次持续漂移及明细缺失场景。

风险���回退

  • 风险:当天持续新增时最后一次 ID 集合仍不是完整快照。控制:只写入能取得完整明细的合法 ID,明确标记本次失败且不推进游标,下次继续覆盖今天。
  • 风险:自动重试放大接口请求量。控制:只重试今天、最多 3 次,历史日期不重拉。
  • 回退:恢复严格单次分页校验和原页面默认日期;本任务不改 schema,可直接代码回退。

实施结果

  • 实现提交:30711df
  • 归档提交:9ba7419
  • 归档文档:docs/task/192-admin顺运宝当天分页漂移重试.md
  • 页面默认范围已改为昨天到今天,旧游标不再改写默认输入。
  • 历史日期保持严格完整性校验;今天最多重试 3 次且只重试当天。
  • 连续漂移时只保存最后一次取得并通过完整明细校验的数据,同步记录保持失败、游标不推进。
  • 增长后重新校验 max_matches,超限数据不写入。
  • 固定 Go 1.23.0 的 go vet ./...、go build ./...、go test ./... -count=1 全部通过。
  • 未执行真实顺运宝同步、采集或采购;未部署生产。

状态:待用户验收。

## 基本信息 - 类型:缺陷修复 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:顺运宝同步稳定性 ## 要解决什么 顺运宝当天货运单持续新增时,分页预检总数和最后一页实际条数发生漂移。例如页长 20、预检 727 张时第 37 页预期 7 行,但实际已增至 9 行。现有严格保护会停止整次同步,采购员反复重试仍可能失败,并重复拉取已经稳定的历史日期。 同时把顺运宝数据页面同步范围的开始日期默认改为昨天,结束日期仍默认今天。 ## 做什么 / 不做什么 - 做:开始日期默认昨天、结束日期默认今天;不再默认最近三天,也不因旧游标把页面默认开始日扩展到更早日期。 - 做:历史日期继续执行严格页长、前后总数和唯一 ID 完整性校验。 - 做:仅当天发生总数或页长漂移时自动重试当天,最多 3 次;已经完成的历史日期不重复拉取。 - 做:当天重试仍不稳定时,写入最后一次尝试中已经取得且 ID 合法、可成功取得完整明细的数据;报告清楚说明当天仍在变化,并且不推进覆盖游标。 - 做:后续同步继续覆盖当天,所有写入使用既有 upsert 幂等路径。 - 不做:不放宽历史日期完整性,不静默把当天标记为完整,不新增数据库字段,不修改顺运宝账号配置。 - 不做:不触发真实顺运宝同步或采购任务。 ## 已确认实现方案 1. 调整 `DefaultSybSyncRange`,页面首次打开固定预填“昨天~今天”;保留日期合法性和最多 31 天校验。 2. 抽取单日列表分页结果。历史日仍使用现有严格模式。 3. 当计划日期等于顺运宝 UTC+8 的今天时,列表分页发生页长/总数漂移自动重新执行该日列表获取,最多 3 次。 4. 重试之间不重复处理已经完成的历史日;每次当天尝试使用独立 map/slice,避免把失败尝试的 ID 混入下一次。 5. 第 3 次仍漂移时,使用最后一次已取得的合法唯一 ID 拉取完整明细并走既有 upsert;同步报告返回明确警告性质错误,`cursor_advanced=false`,下一次仍覆盖今天。 6. 若当天响应存在非法 ID、重复 ID 后唯一数量异常、明细缺失或网络/业务错误,仍按失败处理,不把不完整明细写成成功数据。 7. 更新顺运宝接口基线、服务测试和页面默认日期测试。 预计修改: - `admin/service/syb.go` - `admin/service/syb_test.go` - `admin/handler/web/others_test.go`(如默认值由 handler 覆盖) - `docs/admin/08-顺运宝接口.md` ## 验收标准 - [x] 页面首次打开时开始日期为昨天、结束日期为今天。 - [x] 历史日期页长或总数漂移仍立即失败且不推进游标。 - [x] 当天前两次分页漂移、第三次稳定时同步成功,并且历史日期只拉取一次。 - [x] 当天连续 3 次漂移时,最后一次已确认取得且明细完整的数据被 upsert,报告明确提示当天未形成稳定快照,游标不推进。 - [x] 重试之间不混入前次 ID,不突破 `max_matches`,网络、非法 ID、重复 ID和明细缺失保护保持有效。 - [x] 固定 Go 1.23.0 的 vet、build 和全量 test 通过。 - [x] 未执行真实同步、采集或采购操作。 ## 验证方式 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go vet ./... go build ./... go test ./... -count=1 Remove-Item Env:GOTOOLCHAIN ``` 使用假顺运宝服务构造历史日期漂移、当天两次漂移后稳定、当天三次持续漂移及明细缺失场景。 ## 风险���回退 - 风险:当天持续新增时最后一次 ID 集合仍不是完整快照。控制:只写入能取得完整明细的合法 ID,明确标记本次失败且不推进游标,下次继续覆盖今天。 - 风险:自动重试放大接口请求量。控制:只重试今天、最多 3 次,历史日期不重拉。 - 回退:恢复严格单次分页校验和原页面默认日期;本任务不改 schema,可直接代码回退。 ## 实施结果 - 实现提交:`30711df` - 归档提交:`9ba7419` - 归档文档:`docs/task/192-admin顺运宝当天分页漂移重试.md` - 页面默认范围已改为昨天到今天,旧游标不再改写默认输入。 - 历史日期保持严格完整性校验;今天最多重试 3 次且只重试当天。 - 连续漂移时只保存最后一次取得并通过完整明细校验的数据,同步记录保持失败、游标不推进。 - 增长后重新校验 `max_matches`,超限数据不写入。 - 固定 Go 1.23.0 的 `go vet ./...`、`go build ./...`、`go test ./... -count=1` 全部通过。 - 未执行真实顺运宝同步、采集或采购;未部署生产。 状态:待用户验收。
Author
Owner

实施进度:

  • 已把页面默认同步范围改为“昨天~今天”,旧游标不再自动改写页面日期。
  • 已抽取单日列表快照校验;历史日期仍严格失败。
  • 今天发生页长、前后总数或唯一 ID 漂移时,只重试今天,最多 3 次,每次使用独立 ID 集合。
  • 第 3 次仍漂移时,先对最后一次取得的合法唯一 ID 验证完整明细并 upsert,再把同步记录标记为失败且不推进游标。
  • 已补增长后 max_matches 二次校验,超限数据不写入。
  • 已更新 Admin UI 与顺运宝接口基线。
  • 固定 Go 1.23.0 已通过 go vet、go build、全量 go test。

未执行真实顺运宝同步、采集或采购操作。待提交代码和归档。

实施进度: - 已把页面默认同步范围改为“昨天~今天”,旧游标不再自动改写页面日期。 - 已抽取单日列表快照校验;历史日期仍严格失败。 - 今天发生页长、前后总数或唯一 ID 漂移时,只重试今天,最多 3 次,每次使用独立 ID 集合。 - 第 3 次仍漂移时,先对最后一次取得的合法唯一 ID 验证完整明细并 upsert,再把同步记录标记为失败且不推进游标。 - 已补增长后 max_matches 二次校验,超限数据不写入。 - 已更新 Admin UI 与顺运宝接口基线。 - 固定 Go 1.23.0 已通过 go vet、go build、全量 go test。 未执行真实顺运宝同步、采集或采购操作。待提交代码和归档。
Author
Owner

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。
ila closed this issue 2026-08-13 15:56:32 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#192