Files
zyt/artifacts/wecom-member-sync/README.md
T
2026-09-09 12:18:17 +08:00

3.0 KiB

企业微信成员范围同步修复

原因与处理

截图中的“待移出”来自本地禁用状态与上次企微范围不一致。批量修改原来只写入同步队列,依赖后台分钟任务;单独保存忽略了同步器的 noop/未完成状态。另有两个一致性缺陷:同步期间配置版本变化后仍返回 synced;周期重算可能将超时租约或尚未应用的版本直接视为完成。

本次修改:

  • 新增 POST /firstvisit.wecomPromotion/syncMemberRange,只向当前有权限操作的方案推送完整可用成员名单,再回读确认。不使用会导入其他链接的 syncRemoteLinks
  • 批量保存后由页面最多 2 并发调用专用同步接口,等待每个方案结果,不以后台任务启动为本次修改立即生效的前提。
  • 单独保存、批量保存、手动同步均返回明确的 synced / pending / failed / blocked 状态。保存本地成功与远端确认分开显示。
  • 已下线成员从推送名单排除,部门范围清空;回读仍含旧成员或部门时判失败,不能标同步成功。
  • 同步完成时检查租约、令牌、配置版本。过期工作不能覆盖新确认快照;变更未完成时继续排队。
  • 同样的开关状态再次批量保存仍会重算,以修复之前留下的待同步任务。
  • 页面新增“同步成员范围”按钮和批量失败结果重试,并展示当前计划、上次确认的远端范围与具体同步错误。

部署与现有方案

本次修改源代码,未部署,未读取业务数据库或调用真实企业微信修改接口。不新增表结构或权限菜单,沿用获客助手页面和方案操作范围权限;需将 admin 构建及 server 修改一起部署。已有队列表仍按原项目要求安装。

部署后,对已经出现“待移出”的方案点击“同步成员范围”;只有显示“企微成员范围已确认同步”,才能认为当前计划已经由企业微信回读确认。批量重新保存也会主动同步各方案。后台分钟任务仍用于上限、有效期和失败补偿。

验证记录

前端验证隔离数据库验证。所有测试使用虚构数据,未向真实企业微信发送请求。

生产构建通过(Vite,2 分 4 秒),输出到任务临时目录,未覆盖线上目录。完整输出保留在 build.log;仍有既有的大体积分包警告。前端 7 项回归与后端 24 个场景、52 个断言均通过。全量类型检查仍有其他模块的已有报错,详情见前端验证记录。

浏览器隔离验证已通过:使用实际 Vue 页面和本地 API 替身,初始仅“测试许可”上线、“测试旧医助”仍在远端快照中。手动同步成功后,页面显示仅许可在企微范围,旧医助变为“未在企微范围”;模拟接口失败后,页面保留旧医助“待移出(仍在企微)”,展示具体错误和“重试同步”。验证页及临时服务已关闭。复现入口为 ui-preview.mjs,使用本机回环地址和虚构数据。