[缺陷] SYB 同步逐页保存有效成果、跨日期继续与部分成功状态 #239

Open
opened 2026-09-08 09:17:34 +08:00 by ila · 5 comments
Owner

目标与非目标

现实现先取齐当天列表再获取明细,尾页超时导致已读取列表不能用于导入,并阻止后续日期。改为逐页保存有效成果,同时保留最终完整性检查;不以部分数据冒充完整同步。

方案与设计证据(待实施前确认)

  1. 全日期总数预检和上限保留;每页先验证条数、合法 ID、同页重复和跨页重复,再按既有店铺过滤获取明细。
  2. 页面数据及明细全部验证后按页事务入库;沿用 (order_code, detail_id) 幂等和人工确认保护,页事务成功后再累计已保存数。事务中不执行外部请求。
  3. 日期内遇到分页/明细失败停止该日期,保留已提交页并继续后续日期;数据库故障、上下文取消、总时限、进度持久化失败等全局故障不得当成普通页面失败继续。
  4. 最终检查唯一数、总数变化与跨页重复;不完整不得成功。重新同步重新扫描日期,不沿用旧页码。不得把快照恢复重复导入计为新增成果;保持有界恢复或明确停止该日期。
  5. 状态建议 succeeded / partial_success / failed / interrupted;有错误且已提交有效成果为部分成功,无错误且全范围完整为成功,无有效成果且有错误为失败。无符合店铺数据的完整同步仍为成功。
  6. 保留原有接口字段含义,明确读取数、保存数、完成日期数口径;记录失败日期/页码/阶段与脱敏限长错误。检查现有列容量,能复用则不追加迁移,不能复用先申请迁移授权。
  7. Web 复用 SYB 同步记录列表、详情与筛选,增加“部分成功”状态及已保存数量/失败说明;正常、空、加载、错误、无权限行为沿用现有页面。因新增状态和异常展示,须补充可审核设计证据并取得用户确认后实施对应 UI。

依赖与并行

依赖现有 SYB 导入与 #235 完整性边界。与尾页诊断可独立推进,但同一导入代码修改串行集成,避免重复覆盖。

影响与风险

Server/Web、同步状态/API 及事务边界;不改变同步互斥锁、活动槽或权限。按页事务属于生产数据写入路径变化,正式实施前再次确认。

验收与测试

  • 前页成功尾页超时:已提交页保留,部分成功,后续日期继续。
  • 页明细失败/缺失、页事务回滚、数据库失败、取消/超时、重启恢复均准确收敛并释放原有活动槽。
  • 重复同步无重复行,人工确认不覆盖;跨页重复、总数漂移不假成功,不重复计数。
  • 无数据/全被过滤仍可完整成功;零成果故障为失败;筛选和详情识别新增状态。
  • 运行受影响 Go 单元/契约和 Web 测试,记录未执行线上验证。

文档与交付

更新长期 SYB 接口说明、业务规则、必要的架构/API 与运行说明;Wiki 在线更新回读后一次 sync/check,提交推送并回写哈希,保持待验收。用户已确认并授权,已实现、提交和推送,待人工验收;未合并 main、未部署。

来源、基线与边界

  • 来源:用户于 2026-09-08 确认“按照你的建议建工单,做”,此前同意拆分逐页保存和尾页超时两个关联任务。
  • 核验线上 release 20260907-29ba16e-236,代码 29ba16e;开发应基于最新 main 复核,保留其他工单改动。
  • 不影响 Android、采购、订单或付款;不修改店铺授权范围,不覆盖人工规格确认。禁止输出 Cookie、账号、订单明细或原始响应。
  • 本会话未发现可用 Gitea MCP,按仓库规则回退 Gitea API;凭据从被忽略的 gitea.env 读取。
  • 用户未授权本次线上写入、手动同步、发布或重启。相关操作需要独立确认。
## 目标与非目标 现实现先取齐当天列表再获取明细,尾页超时导致已读取列表不能用于导入,并阻止后续日期。改为逐页保存有效成果,同时保留最终完整性检查;不以部分数据冒充完整同步。 ## 方案与设计证据(待实施前确认) 1. 全日期总数预检和上限保留;每页先验证条数、合法 ID、同页重复和跨页重复,再按既有店铺过滤获取明细。 2. 页面数据及明细全部验证后按页事务入库;沿用 (order_code, detail_id) 幂等和人工确认保护,页事务成功后再累计已保存数。事务中不执行外部请求。 3. 日期内遇到分页/明细失败停止该日期,保留已提交页并继续后续日期;数据库故障、上下文取消、总时限、进度持久化失败等全局故障不得当成普通页面失败继续。 4. 最终检查唯一数、总数变化与跨页重复;不完整不得成功。重新同步重新扫描日期,不沿用旧页码。不得把快照恢复重复导入计为新增成果;保持有界恢复或明确停止该日期。 5. 状态建议 succeeded / partial_success / failed / interrupted;有错误且已提交有效成果为部分成功,无错误且全范围完整为成功,无有效成果且有错误为失败。无符合店铺数据的完整同步仍为成功。 6. 保留原有接口字段含义,明确读取数、保存数、完成日期数口径;记录失败日期/页码/阶段与脱敏限长错误。检查现有列容量,能复用则不追加迁移,不能复用先申请迁移授权。 7. Web 复用 SYB 同步记录列表、详情与筛选,增加“部分成功”状态及已保存数量/失败说明;正常、空、加载、错误、无权限行为沿用现有页面。因新增状态和异常展示,须补充可审核设计证据并取得用户确认后实施对应 UI。 ## 依赖与并行 依赖现有 SYB 导入与 #235 完整性边界。与尾页诊断可独立推进,但同一导入代码修改串行集成,避免重复覆盖。 ## 影响与风险 Server/Web、同步状态/API 及事务边界;不改变同步互斥锁、活动槽或权限。按页事务属于生产数据写入路径变化,正式实施前再次确认。 ## 验收与测试 - 前页成功尾页超时:已提交页保留,部分成功,后续日期继续。 - 页明细失败/缺失、页事务回滚、数据库失败、取消/超时、重启恢复均准确收敛并释放原有活动槽。 - 重复同步无重复行,人工确认不覆盖;跨页重复、总数漂移不假成功,不重复计数。 - 无数据/全被过滤仍可完整成功;零成果故障为失败;筛选和详情识别新增状态。 - 运行受影响 Go 单元/契约和 Web 测试,记录未执行线上验证。 ## 文档与交付 更新长期 SYB 接口说明、业务规则、必要的架构/API 与运行说明;Wiki 在线更新回读后一次 sync/check,提交推送并回写哈希,保持待验收。用户已确认并授权,已实现、提交和推送,待人工验收;未合并 main、未部署。 ## 来源、基线与边界 - 来源:用户于 2026-09-08 确认“按照你的建议建工单,做”,此前同意拆分逐页保存和尾页超时两个关联任务。 - 核验线上 release 20260907-29ba16e-236,代码 29ba16e;开发应基于最新 main 复核,保留其他工单改动。 - 不影响 Android、采购、订单或付款;不修改店铺授权范围,不覆盖人工规格确认。禁止输出 Cookie、账号、订单明细或原始响应。 - 本会话未发现可用 Gitea MCP,按仓库规则回退 Gitea API;凭据从被忽略的 gitea.env 读取。 - 用户未授权本次线上写入、手动同步、发布或重启。相关操作需要独立确认。
Author
Owner

关联尾页根因诊断工单 #240。本单降低失败损失,关联单定位失败来源;不得把部分保存当成尾页故障已经修复。

关联尾页根因诊断工单 #240。本单降低失败损失,关联单定位失败来源;不得把部分保存当成尾页故障已经修复。
Author
Owner

用户于 2026-09-08 明确授权实施 #239/#240。开发基线 origin/main 9d5242b,隔离分支 fix/239-syb-partial-sync。 #239 复用 web/src/views/goauto/syb-sync-runs/index.vue(基线 9d5242b)的既有布局、el-tag、筛选和详情 el-alert;确认覆盖列表/筛选/详情“部分成功”及失败原因、已保存数量,不增加页面。正常/空/加载/无权限沿用既有行为,部分成功用文字+warning 标签,保留错误原因及重新同步提示。按页事务授权已取得;不改变并发互斥/权限,不执行线上迁移、同步写入、发布或重启。核验模型后修正:状态列 varchar(16),内部状态值使用 partial_success(15 字符),页面仍为“部分成功”,无需迁移;工单初稿 partially_succeeded 仅为建议值。当天快照变化明确停止该日期、继续下一日期,避免一次运行内重复写入/计数;下次运行完整重扫。

用户于 2026-09-08 明确授权实施 #239/#240。开发基线 origin/main 9d5242b,隔离分支 fix/239-syb-partial-sync。 #239 复用 web/src/views/goauto/syb-sync-runs/index.vue(基线 9d5242b)的既有布局、el-tag、筛选和详情 el-alert;确认覆盖列表/筛选/详情“部分成功”及失败原因、已保存数量,不增加页面。正常/空/加载/无权限沿用既有行为,部分成功用文字+warning 标签,保留错误原因及重新同步提示。按页事务授权已取得;不改变并发互斥/权限,不执行线上迁移、同步写入、发布或重启。核验模型后修正:状态列 varchar(16),内部状态值使用 partial_success(15 字符),页面仍为“部分成功”,无需迁移;工单初稿 partially_succeeded 仅为建议值。当天快照变化明确停止该日期、继续下一日期,避免一次运行内重复写入/计数;下次运行完整重扫。
Author
Owner

实施完成,待验收(2026-09-08)

  • 实现 c6a962d;Wiki 镜像 d403f3b;已推送 fix/239-syb-partial-sync,未合并 main/发布/重启。
  • 全范围容量预检保留;每页校验原始 ID/条数后过滤店铺并完整读取明细,外部请求结束后才开启页事务。事务失败回滚整页;已提交成果保留,新增/覆盖/明细计数不含回滚数据。
  • 日期局部读取/快照失败停止当前日期、继续后续日期;数据库、进度、会话失效或取消/总超时停止全任务。当天不在同次运行内反复重扫;下次按唯一键重新扫描补齐。原 #235 漂移重扫测试已按批准的新停止策略替换,跨页重复等检查仍保留。
  • 新状态 partial_success,16 字符现有列可容纳,不需要迁移。原有单任务互斥、活动槽、店铺准入和人工确认保护不变。运行结束有错误且有已提交明细才部分成功;无数据的完整同步仍成功。
  • 原有页面列表、状态筛选、详情都支持“部分成功”,详情给出保存数量、失败原因、重跑补齐提示。已核对 Playwright 合成数据页面截图;UI/UX 核验采用现有 warning 标签加文字,不单靠颜色表达。

验证

  • go test ./app/goauto/sybimport ./app/goauto/sybclient:166 个测试/子测试通过。包含前页保留/后续日期、幂等重跑、页回滚、明细缺失、进度失败、取消、终态释放与状态筛选。
  • go build ./...:通过。
  • 页面 ESLint、Web 生产构建:通过;构建仍有既有 CSS 与大包告警。
  • 相关 Playwright 页面用例 6 项通过(部分成功、原失败详情、管理员/采购员手动同步、权限及失败恢复);新增用例已在完整抽屉展开后截图核对。
  • 同文件另一个“SYB 定时任务可进入执行记录”用例首次运行失败,落到 dashboard;该用例及调度页面未修改,不在本次修复范围,未宣称全部 Web E2E 通过。
  • 无线上完整同步写入验证、无真实生产数据变更;仅 #240 做了少量现有会话的只读查询。

文档

线上 Wiki 更新并回读后,已完成一次 harness sync、一次 sync --check 及 check --strict。

  • SYB-ERP-Interface-Contract: dd53eaaaf9e81afa0f286bbabba1d0e48aa17b9c
  • Business-Rules-and-Glossary: acd4730253a1ee9c806b823fbee97f59d8bc5d07
  • Architecture-and-Code-Map: f465790ee95fef0f1a501626da50cc66d740f0fc
  • Android-Agent-API-Contract: 217239a85b50c880e004ecc19a559fb5e03555e1

#240 的上游尾页超时尚未修复,本单仅降低失败损失;不得把本单完成当作尾页故障解决。等待用户验收,不关闭工单。

## 实施完成,待验收(2026-09-08) - 实现 c6a962d;Wiki 镜像 d403f3b;已推送 fix/239-syb-partial-sync,未合并 main/发布/重启。 - 全范围容量预检保留;每页校验原始 ID/条数后过滤店铺并完整读取明细,外部请求结束后才开启页事务。事务失败回滚整页;已提交成果保留,新增/覆盖/明细计数不含回滚数据。 - 日期局部读取/快照失败停止当前日期、继续后续日期;数据库、进度、会话失效或取消/总超时停止全任务。当天不在同次运行内反复重扫;下次按唯一键重新扫描补齐。原 #235 漂移重扫测试已按批准的新停止策略替换,跨页重复等检查仍保留。 - 新状态 partial_success,16 字符现有列可容纳,不需要迁移。原有单任务互斥、活动槽、店铺准入和人工确认保护不变。运行结束有错误且有已提交明细才部分成功;无数据的完整同步仍成功。 - 原有页面列表、状态筛选、详情都支持“部分成功”,详情给出保存数量、失败原因、重跑补齐提示。已核对 Playwright 合成数据页面截图;UI/UX 核验采用现有 warning 标签加文字,不单靠颜色表达。 ### 验证 - go test ./app/goauto/sybimport ./app/goauto/sybclient:166 个测试/子测试通过。包含前页保留/后续日期、幂等重跑、页回滚、明细缺失、进度失败、取消、终态释放与状态筛选。 - go build ./...:通过。 - 页面 ESLint、Web 生产构建:通过;构建仍有既有 CSS 与大包告警。 - 相关 Playwright 页面用例 6 项通过(部分成功、原失败详情、管理员/采购员手动同步、权限及失败恢复);新增用例已在完整抽屉展开后截图核对。 - 同文件另一个“SYB 定时任务可进入执行记录”用例首次运行失败,落到 dashboard;该用例及调度页面未修改,不在本次修复范围,未宣称全部 Web E2E 通过。 - 无线上完整同步写入验证、无真实生产数据变更;仅 #240 做了少量现有会话的只读查询。 ### 文档 线上 Wiki 更新并回读后,已完成一次 harness sync、一次 sync --check 及 check --strict。 - SYB-ERP-Interface-Contract: dd53eaaaf9e81afa0f286bbabba1d0e48aa17b9c - Business-Rules-and-Glossary: acd4730253a1ee9c806b823fbee97f59d8bc5d07 - Architecture-and-Code-Map: f465790ee95fef0f1a501626da50cc66d740f0fc - Android-Agent-API-Contract: 217239a85b50c880e004ecc19a559fb5e03555e1 #240 的上游尾页超时尚未修复,本单仅降低失败损失;不得把本单完成当作尾页故障解决。等待用户验收,不关闭工单。
Author
Owner

本地 main 合并、构建与重启验证(2026-09-08)

用户明确授权“先合并 #239,再重新构建 Server/Web,最后重启本地服务”。

  • main-runtime 工作区干净,main 从 9d5242b 快进到 d403f3b,已推送 origin/main;原 D:/OPC/goauto 用户改动未动。
  • Server go build -o temp/goauto-239.exe . 与 Web pnpm run build:prod 均成功。常驻进程继续沿用已批准的 go run/Vite 启动脚本,从 main-runtime 加载最新源代码,未改变运维拓扑。
  • 重启前本机 127.0.0.1:3307/goauto 的 running SYB/采集/采购数量均为 0;仅 Supervisor goauto-admin-api/goauto-admin-ui 定向 restart,SkipMigration 保持开启。重启后两者 Running,新 PID 分别 41388/22988。
  • 绕过本机 HTTP 代理直连验证:8010/api/v1/health 返回 200,9527 Web 返回 200,实际提供的同步记录模块包含 partial_success。首次未绕过代理的检查出现 response ended prematurely,改为 -NoProxy 后通过,不是服务启动失败。
  • sys_job 启停状态前后相同:1/2 关闭,3/4/5 开启;没有手动触发同步或修改任务状态。
  • 无数据库迁移、无线上发布/重启,#240 未修复。本次复用已记录的本机运行方式,没有新的长期契约/命令变更,跳过重复 Wiki 同步。
  • #239 保持待验收。
## 本地 main 合并、构建与重启验证(2026-09-08) 用户明确授权“先合并 #239,再重新构建 Server/Web,最后重启本地服务”。 - main-runtime 工作区干净,main 从 9d5242b 快进到 d403f3b,已推送 origin/main;原 D:/OPC/goauto 用户改动未动。 - Server go build -o temp/goauto-239.exe . 与 Web pnpm run build:prod 均成功。常驻进程继续沿用已批准的 go run/Vite 启动脚本,从 main-runtime 加载最新源代码,未改变运维拓扑。 - 重启前本机 127.0.0.1:3307/goauto 的 running SYB/采集/采购数量均为 0;仅 Supervisor goauto-admin-api/goauto-admin-ui 定向 restart,SkipMigration 保持开启。重启后两者 Running,新 PID 分别 41388/22988。 - 绕过本机 HTTP 代理直连验证:8010/api/v1/health 返回 200,9527 Web 返回 200,实际提供的同步记录模块包含 partial_success。首次未绕过代理的检查出现 response ended prematurely,改为 -NoProxy 后通过,不是服务启动失败。 - sys_job 启停状态前后相同:1/2 关闭,3/4/5 开启;没有手动触发同步或修改任务状态。 - 无数据库迁移、无线上发布/重启,#240 未修复。本次复用已记录的本机运行方式,没有新的长期契约/命令变更,跳过重复 Wiki 同步。 - #239 保持待验收。
Author
Owner

2026-09-08 已授权线上发布,待验收

  • 用户明确授权最新 Server/Web 发布、#237 迁移和 GoAuto/Nginx 重启。Gitea MCP 不可用,沿用安全配置中的 API 凭据回写,未输出凭据。
  • 发布源码 main d403f3b3a04aad2f81eccf712da159cf60590643;Linux Server 与 Web 生产构建通过;clientkey/clientapi/迁移/sybimport/sybclient Go 测试通过。未将 Android 独立分支混入本次发布。
  • 新 release /home/goauto/releases/20260908-d403f3b-239;Server SHA256 6184524f190b8d2ec48e2334bbdc43c003c55179c87e2608639cf93e4471b619;Web 包 SHA256 fb0aee1135d8c08817e7b4c9a5b33b70525684c4e8b9749e444865608eb2f12b;上传后摘要一致。
  • 发布前无运行中的 SYB/采集/采购/AI 批任务;停止 API 后完成全库备份 /home/goauto/backups/goauto-before-20260908-d403f3b.sql.gz(4022745 bytes,0600),再执行唯一待执行迁移 1788798000000。迁移记录、client_api_key/client_api_key_audit、仅 admin 菜单关联已核对。
  • current 原子切换,GoAuto active/running,Nginx 重启及配置检查通过;外部 HTTP 9527 页面和健康接口均 200。214 个 JS 资源中已核对 partial_success。未登录密钥管理请求 HTTP 200、JSON 业务码 401,未返回密钥数据。
  • 定时任务状态保持原值:1/2 关闭,3/4/5 开启。未主动触发同步、创建密钥、采集、采购或订单。真实客户端密钥业务闭环和线上部分成功场景未执行验收。
  • 旧 release /home/goauto/releases/20260907-29ba16e-236 保留;数据库备份保留,未删除持久化目录。回退程序不等于回退追加迁移。
  • #239 页级保存已上线;#240 上游尾页超时仍未修复。工单保持待验收,不关闭。

Wiki 在线回读、镜像检查和提交:fdd26af(已推送 main);sync 与 sync --check 均通过;Deployment df033d06fd94a4b02a447a27ced8d711521342f3;SYB 214485db630141aeb03d4b49b22a65e572fb592a;Business 7d7f515652a2b24880e55cfd95e94d3c25cbbc4d

## 2026-09-08 已授权线上发布,待验收 - 用户明确授权最新 Server/Web 发布、#237 迁移和 GoAuto/Nginx 重启。Gitea MCP 不可用,沿用安全配置中的 API 凭据回写,未输出凭据。 - 发布源码 main d403f3b3a04aad2f81eccf712da159cf60590643;Linux Server 与 Web 生产构建通过;clientkey/clientapi/迁移/sybimport/sybclient Go 测试通过。未将 Android 独立分支混入本次发布。 - 新 release /home/goauto/releases/20260908-d403f3b-239;Server SHA256 6184524f190b8d2ec48e2334bbdc43c003c55179c87e2608639cf93e4471b619;Web 包 SHA256 fb0aee1135d8c08817e7b4c9a5b33b70525684c4e8b9749e444865608eb2f12b;上传后摘要一致。 - 发布前无运行中的 SYB/采集/采购/AI 批任务;停止 API 后完成全库备份 /home/goauto/backups/goauto-before-20260908-d403f3b.sql.gz(4022745 bytes,0600),再执行唯一待执行迁移 1788798000000。迁移记录、client_api_key/client_api_key_audit、仅 admin 菜单关联已核对。 - current 原子切换,GoAuto active/running,Nginx 重启及配置检查通过;外部 HTTP 9527 页面和健康接口均 200。214 个 JS 资源中已核对 partial_success。未登录密钥管理请求 HTTP 200、JSON 业务码 401,未返回密钥数据。 - 定时任务状态保持原值:1/2 关闭,3/4/5 开启。未主动触发同步、创建密钥、采集、采购或订单。真实客户端密钥业务闭环和线上部分成功场景未执行验收。 - 旧 release /home/goauto/releases/20260907-29ba16e-236 保留;数据库备份保留,未删除持久化目录。回退程序不等于回退追加迁移。 - #239 页级保存已上线;#240 上游尾页超时仍未修复。工单保持待验收,不关闭。 Wiki 在线回读、镜像检查和提交:fdd26af(已推送 main);sync 与 sync --check 均通过;Deployment df033d06fd94a4b02a447a27ced8d711521342f3;SYB 214485db630141aeb03d4b49b22a65e572fb592a;Business 7d7f515652a2b24880e55cfd95e94d3c25cbbc4d
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#239