fix(syb): 当天跨页重复有界恢复并补充脱敏分页诊断 #235

Open
opened 2026-09-07 14:17:04 +08:00 by ila · 4 comments
Owner

来源、事实与依赖

2026-09-07 用户反馈本地同步 #339 失败:当天货运单列表重复 ID。#339 完成昨天后在今天分页退出,下一轮 #340 成功。当前只证明返回集合重复,旧诊断不能区分同页/跨页,不把动态分页漂移当成已证实的上游根因。
关联已验收 #145;其原方案明确将所有重复 ID 排除在快照恢复外。本次用户已确认窄化更新:当天跨页重复可有界重拉,同页与历史日期重复仍失败。
基线 origin/main bf58ad0(#234 集成版本)。只涉及 Server 同步算法、测试及 SYB 接口 Wiki,不涉及 Web/Android、接口字段、数据库、权限、并发模型、真实重同步或发布重启。无前置阻塞;同一同步文件修改不并行。

方案与设计证据

复用既有 loadDailyListWithRecovery 最多 3 次尝试,不叠加新的重试循环:当天跨页重复作为不完整快照丢弃,重新读取总数并从第 1 页拉取;每次独立 ID 集合。持续重复不得降级保存当天残缺列表或报告成功,既有历史日期成果保留。
同页重复优先判定为硬错误;即使同一页还存在跨页重叠,也不能被提前返回的可恢复错误遮蔽。非法 ID、条数不自洽、历史日期重复、网络及会话错误边界不放宽。
错误只记录日期、尝试次数、首次/再次页码、行位置、pageSize/start、初始总数、已取得唯一数;不保存原始响应、订单编号、商品/个人信息或凭据。用户给出的货运单 ID 不再作为新增诊断必需字段。
非 UI 后端需求,无需原型。保留既有严格数量/唯一性/最终总数验证,禁止简单去重后标记成功。

验收与验证

  • 当天跨页重复后下一次稳定则成功,确实从第一页重拉且集合不混用。
  • 连续 3 次跨页重复后失败,不返回不完整当天列表、不请求当天明细。
  • 同页重复(包括先跨页再同页的混合页)及历史日期跨页重复不恢复。
  • 无重复正常分页、既有总数漂移/降级保存、网络重试、非法 ID 与明细完整性回归通过。
  • 记录可定位的脱敏页码/行位置/尝试次数。
  • 受影响 Server 测试、构建、diff 与模板检查;提交推送并回写结果,停在待验收。

风险与文档

只增加当天异常时有界只读拉取;不扩大数据库写入资格、不更改任务终态语义。实际本地重启/权限启动对账、线上发布或人工触发同步均不在本次授权内。
需更新 Wiki SYB-ERP-Interface-Contract 的重复 ID 例外与诊断边界,在线回读后一次 sync 与一次 sync --check;不创建任务快照。
Gitea MCP 当前不可用,回退项目忽略配置的 API;凭据不输出。

## 来源、事实与依赖 2026-09-07 用户反馈本地同步 #339 失败:当天货运单列表重复 ID。#339 完成昨天后在今天分页退出,下一轮 #340 成功。当前只证明返回集合重复,旧诊断不能区分同页/跨页,不把动态分页漂移当成已证实的上游根因。 关联已验收 #145;其原方案明确将所有重复 ID 排除在快照恢复外。本次用户已确认窄化更新:当天跨页重复可有界重拉,同页与历史日期重复仍失败。 基线 origin/main bf58ad0(#234 集成版本)。只涉及 Server 同步算法、测试及 SYB 接口 Wiki,不涉及 Web/Android、接口字段、数据库、权限、并发模型、真实重同步或发布重启。无前置阻塞;同一同步文件修改不并行。 ## 方案与设计证据 复用既有 loadDailyListWithRecovery 最多 3 次尝试,不叠加新的重试循环:当天跨页重复作为不完整快照丢弃,重新读取总数并从第 1 页拉取;每次独立 ID 集合。持续重复不得降级保存当天残缺列表或报告成功,既有历史日期成果保留。 同页重复优先判定为硬错误;即使同一页还存在跨页重叠,也不能被提前返回的可恢复错误遮蔽。非法 ID、条数不自洽、历史日期重复、网络及会话错误边界不放宽。 错误只记录日期、尝试次数、首次/再次页码、行位置、pageSize/start、初始总数、已取得唯一数;不保存原始响应、订单编号、商品/个人信息或凭据。用户给出的货运单 ID 不再作为新增诊断必需字段。 非 UI 后端需求,无需原型。保留既有严格数量/唯一性/最终总数验证,禁止简单去重后标记成功。 ## 验收与验证 - 当天跨页重复后下一次稳定则成功,确实从第一页重拉且集合不混用。 - 连续 3 次跨页重复后失败,不返回不完整当天列表、不请求当天明细。 - 同页重复(包括先跨页再同页的混合页)及历史日期跨页重复不恢复。 - 无重复正常分页、既有总数漂移/降级保存、网络重试、非法 ID 与明细完整性回归通过。 - 记录可定位的脱敏页码/行位置/尝试次数。 - 受影响 Server 测试、构建、diff 与模板检查;提交推送并回写结果,停在待验收。 ## 风险与文档 只增加当天异常时有界只读拉取;不扩大数据库写入资格、不更改任务终态语义。实际本地重启/权限启动对账、线上发布或人工触发同步均不在本次授权内。 需更新 Wiki SYB-ERP-Interface-Contract 的重复 ID 例外与诊断边界,在线回读后一次 sync 与一次 sync --check;不创建任务快照。 Gitea MCP 当前不可用,回退项目忽略配置的 API;凭据不输出。
Author
Owner

范围补充(2026-09-07 用户明确授权):将 #235 移入本地实际运行分支并重启 Admin/API,包含既有启动权限对账;不发布线上、不执行真实同步。本地 Supervisor 仍使用 D:/OPC/goauto,不改变运维路径。仅 cherry-pick ff2d0ca,落地提交 5f4d69b;保留现有 settings.yml 与 Wiki 头部未提交改动。只读预检:无 pending/running 采集/采购任务、无 running SYB 同步,全部已登记迁移均已执行,无待追加迁移。定时任务启停配置保持原样。

范围补充(2026-09-07 用户明确授权):将 #235 移入本地实际运行分支并重启 Admin/API,包含既有启动权限对账;不发布线上、不执行真实同步。本地 Supervisor 仍使用 D:/OPC/goauto,不改变运维路径。仅 cherry-pick ff2d0ca,落地提交 5f4d69b;保留现有 settings.yml 与 Wiki 头部未提交改动。只读预检:无 pending/running 采集/采购任务、无 running SYB 同步,全部已登记迁移均已执行,无待追加迁移。定时任务启停配置保持原样。
Author
Owner

已实现并本地启用,待验收

  • 实现/推送:fix/235-syb-pagination-overlap ff2d0ca;本地运行分支仅移入该提交后为 5f4d69b,已推送。不改 origin/main,不发布线上。
  • 当天跨页重复复用最多 3 次列表尝试;页内重复、非法 ID 和历史重复严格失败;持续重复不导入当天残缺结果。诊断含脱敏页/行位置,不再输出重复真实 ID。
  • 新增 6 个测试场景:恢复后集合独立、持续重复保留昨天但不读当天明细、页内重复、混合重复、混合非法 ID、历史重复。SYB/client/jobs 测试通过;隔离工作树及实际运行工作树均通过完整 Server go test ./... 和构建。最初测试字段误写导致编译失败,已修正后重跑通过。
  • DevHarness check --strict、diff --check 通过。Wiki SYB-ERP-Interface-Contract revision df0fe874c7f3f3e9c031f2f793f8f6a0511ace25 在线回读通过;唯一一轮 sync / sync --check 通过。未创建任务归档。
  • 2026-09-07 14:28 本地 Supervisor goauto-admin-api 已重启;实际 API PID 19216。运行二进制 SHA256 b8f481666b4a92b89561ef6400b5bd28c7c9ec5484728a42962d08e8025eca68,含本次跨页/同页重复诊断。启动迁移检查完成(无待追加迁移),既有权限对账未阻断启动;JobCore start success。
  • 直连绕过系统代理验证 /api/v1/health HTTP 200,Admin 9527 HTTP 200。首次 PowerShell HTTP 检查连接提前结束,curl --noproxy 直连通过,不视为服务失败。定时任务配置未更改,原关闭项保持关闭。
  • 原工作区 settings.yml 和 Wiki 额外头部及所有无关未跟踪文件保留;Wiki 头部恢复冲突已仅按原改动合并,未提交用户改动,恢复用 stash 保留。
  • 未触发真实 SYB 同步,未重放 #339;旧日志不足以证明当时具体是哪种重复。请用下一轮定时同步或手动同步验收;工单保持打开。
## 已实现并本地启用,待验收 - 实现/推送:fix/235-syb-pagination-overlap ff2d0ca;本地运行分支仅移入该提交后为 5f4d69b,已推送。不改 origin/main,不发布线上。 - 当天跨页重复复用最多 3 次列表尝试;页内重复、非法 ID 和历史重复严格失败;持续重复不导入当天残缺结果。诊断含脱敏页/行位置,不再输出重复真实 ID。 - 新增 6 个测试场景:恢复后集合独立、持续重复保留昨天但不读当天明细、页内重复、混合重复、混合非法 ID、历史重复。SYB/client/jobs 测试通过;隔离工作树及实际运行工作树均通过完整 Server go test ./... 和构建。最初测试字段误写导致编译失败,已修正后重跑通过。 - DevHarness check --strict、diff --check 通过。Wiki SYB-ERP-Interface-Contract revision df0fe874c7f3f3e9c031f2f793f8f6a0511ace25 在线回读通过;唯一一轮 sync / sync --check 通过。未创建任务归档。 - 2026-09-07 14:28 本地 Supervisor goauto-admin-api 已重启;实际 API PID 19216。运行二进制 SHA256 b8f481666b4a92b89561ef6400b5bd28c7c9ec5484728a42962d08e8025eca68,含本次跨页/同页重复诊断。启动迁移检查完成(无待追加迁移),既有权限对账未阻断启动;JobCore start success。 - 直连绕过系统代理验证 /api/v1/health HTTP 200,Admin 9527 HTTP 200。首次 PowerShell HTTP 检查连接提前结束,curl --noproxy 直连通过,不视为服务失败。定时任务配置未更改,原关闭项保持关闭。 - 原工作区 settings.yml 和 Wiki 额外头部及所有无关未跟踪文件保留;Wiki 头部恢复冲突已仅按原改动合并,未提交用户改动,恢复用 stash 保留。 - 未触发真实 SYB 同步,未重放 #339;旧日志不足以证明当时具体是哪种重复。请用下一轮定时同步或手动同步验收;工单保持打开。
Author
Owner

2026-09-07 用户追加明确授权:合并 #235、重新构建发布并重启线上 GoAuto。origin/main 已由 bf58ad0 快进至 ff2d0ca;仅包含本单 4 文件改动。线上旧版本 20260907-bf58ad0-234,7 类活动任务计数均为 0。采用既有版本目录及 current 原子切换,失败回滚旧目录;不执行迁移、不改任务开关,不触发真实同步,不更新 Web/APK 或 Nginx 配置。运维方法与长期契约未改变,复用本单已完成 Wiki 闭环,不重复同步。Gitea MCP 不可用,延续 API 回退。

2026-09-07 用户追加明确授权:合并 #235、重新构建发布并重启线上 GoAuto。origin/main 已由 bf58ad0 快进至 ff2d0ca;仅包含本单 4 文件改动。线上旧版本 20260907-bf58ad0-234,7 类活动任务计数均为 0。采用既有版本目录及 current 原子切换,失败回滚旧目录;不执行迁移、不改任务开关,不触发真实同步,不更新 Web/APK 或 Nginx 配置。运维方法与长期契约未改变,复用本单已完成 Wiki 闭环,不重复同步。Gitea MCP 不可用,延续 API 回退。
Author
Owner

线上发布完成(2026-09-07 14:46,待业务验收)

  • origin/main 已快进合入 ff2d0ca。复用同提交已通过的 Server 全量测试,本次重新 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath 成功。
  • 当前发布目录 /home/goauto/releases/20260907-ff2d0ca-235;GoAuto PID 3327,运行中 /proc/PID/exe SHA256 与构建产物一致:945472b4c29d19c597b48846851c237dfd94418d4577dd04c6edc7b0028c1eee。
  • 内部 /api/v1/health 200,公网 Nginx 入口 Admin 及 /api/v1/health 均 200,systemd active。
  • 每次切换前 7 类活动任务计数均为 0。迁移版本列表、定时任务启停/Cron/调用目标/参数指纹均保持不变;未执行迁移、未触发真实同步、未操作手机。
  • Web 静态资源保持 #234 版本并校验 index 一致(本单无 Web 变化);配置复制旧发布,var 指向既有共享目录;APK 与 Nginx 配置未改,不需要重启 Nginx。
  • 前两次切换因临时校验脚本使用旧 systemctl 不支持的 --value 参数失败并自动恢复旧版;只读确认 unrecognized option 后修正参数,第三次发布验证全部通过。新服务自身启动未见该错误。
  • 回滚目录 /home/goauto/releases/20260907-bf58ad0-234 完整保留,可按既有原子 current 切换方式恢复。没有删除发布或业务数据。
  • 未重放真实 #339 或模拟线上重复响应,恢复业务效果待下一轮定时/人工同步验收。工单仍打开,不自动关闭。
## 线上发布完成(2026-09-07 14:46,待业务验收) - origin/main 已快进合入 ff2d0ca。复用同提交已通过的 Server 全量测试,本次重新 GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath 成功。 - 当前发布目录 /home/goauto/releases/20260907-ff2d0ca-235;GoAuto PID 3327,运行中 /proc/PID/exe SHA256 与构建产物一致:945472b4c29d19c597b48846851c237dfd94418d4577dd04c6edc7b0028c1eee。 - 内部 /api/v1/health 200,公网 Nginx 入口 Admin 及 /api/v1/health 均 200,systemd active。 - 每次切换前 7 类活动任务计数均为 0。迁移版本列表、定时任务启停/Cron/调用目标/参数指纹均保持不变;未执行迁移、未触发真实同步、未操作手机。 - Web 静态资源保持 #234 版本并校验 index 一致(本单无 Web 变化);配置复制旧发布,var 指向既有共享目录;APK 与 Nginx 配置未改,不需要重启 Nginx。 - 前两次切换因临时校验脚本使用旧 systemctl 不支持的 --value 参数失败并自动恢复旧版;只读确认 unrecognized option 后修正参数,第三次发布验证全部通过。新服务自身启动未见该错误。 - 回滚目录 /home/goauto/releases/20260907-bf58ad0-234 完整保留,可按既有原子 current 切换方式恢复。没有删除发布或业务数据。 - 未重放真实 #339 或模拟线上重复响应,恢复业务效果待下一轮定时/人工同步验收。工单仍打开,不自动关闭。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#235