我的技术博客

记录学习与成长

导读

钉钉同步两个故事:(1) 15000+ 用户同步时 HTTP 超时——根因是 toUpdateUsers 循环内 3 次 DB 查询每人 = 46000 次 SQL round-trip 在一个事务内串行执行,两步优化:异步化(HTTP 立即返回”已受理”,后台静默执行)+ 批量化(循环前 IN 批量预加载到 Map,循环内 O(1) 查 Map),计划阶段就识别出 4 个潜在 bug(路径双重前缀、BaseResultMap 错映射、dirty-check 破坏恢复语义、peek 污染原始 DB 状态)。(2) 头像回填接口返回 200 但成功数始终为 0——admin 服务器在内网,DNS 无法解析钉钉 CDN 域名 static-legacy.dingtalk.com,所有用户全部被静默跳过。

阅读全文 »

导读

6/22 暴露的 PDEPARTS 下线问题,今天给出完整修复:废弃所有依赖 PDEPARTS 的解析,改用部门 UUID 沿 sys_organization.parent_id 递归上溯查 sys_park_organization 桥表(MySQL 8 CTE)。一个 commit 改了 8 个文件、+167/-33,把昨天识别出的 4 个 Bug 全部修完。同时顺手把头像同步 bug(setFacePic 误写为 setFacePicAuditStatus)修了,并补充 face_pic='2' 历史脏数据的处理策略。

阅读全文 »

导读

今天捅了两个马蜂窝:中台 Dataphin 下线了 PDEPARTS 字段,导致所有依赖该字段解析公司归属的 Java 逻辑静默失效(getCompanyIdFromPDeparts / getDepartmentAsList 返回 null),1542 个 Ding 用户 100% 缺 sys_user_park;用真实格式跑 12 个端到端测试用例,又挖出 4 个新 bug(增量更新取消删除标记失效、园区链路仍依赖 PDEPARTS、pass_user 链路同样依赖 PDEPARTS、部门 vs 公司数据源不一致)。修复方案是改用部门 UUID 沿 parent_id 递归上溯查桥表(CTE),以及补回 synSysUserToPassUser ADD 分支漏设的 distSyncStatus。

阅读全文 »

导读

dist_sync 分支自 6/10 起的所有改动(19 个提交 + 6/16 未提交的”部门+园区更新”),今天做端到端集成测试。9 项功能 12 个用例全过,未发现阻断性缺陷。1 处 dist_sync_status 表现差异已查明为下游消费者正常行为(非 bug)。这篇不是技术深挖,是测试方法 + DB 证据 + 关键发现的完整记录,适合需要做类似集成测试的同行参考。

阅读全文 »

导读

今天三个主题:钉钉同步补 pass_user 的手机号和部门(折中方案)、人员列表页面部门下拉按园区联动(前端 import 来源同名坑)、代码审查记录(已合并改动)。其中最值得记录的是折中方案的取舍——为什么”换部门同步”主动放弃,以及前端 import 同名函数指向不同后端接口这种隐蔽问题。

阅读全文 »

导读

6/11 实现的”钉钉同步触发 pass_user 同步”功能本身端到端跑通,但暴露出 6/11 spec 文档第 46 行的一个事实错误判断:把 PassUserServiceImpl.synSysUserToPassUser() 里的 setParkId(DEFAULT_PARK_ID) 误判为”无效死代码”。实际是有效过滤。更糟的是下午挖出了真正的死亡覆盖链:admin 端 UserMapperExt.xmllistByConditionExt SQL 没 select urp.park_id,导致 user.getParkId() 永远是 NULL,421 条 pass_user.park_id 全被污染成 NULL。

阅读全文 »

导读

今天一口气做了 2 个 feature + 1 个构建命令摸清:钉钉同步补 sys_user_park 占位记录、园区绑定一级公司(顶级 org + 互斥)、admin-service 打包 fat jar。feature 走的是 spec-first + subagent-driven,3 轮 spec review + 3 轮 code review。但 06-11 集成测试第一次就跑出 500——saveCompanyBindupdateParkOrganization 时,generic mapper 对 Date 字段 OGNL 求值崩了。**1 行 fix:删掉多余的 WebExtUtils.iniCreate(model);**。这条经验已经写进全局 CLAUDE.md。

阅读全文 »

导读

链路通了,admin 也起来了,但登录返回的响应没有 token——因为 token 是 Gateway 加的,不是 admin 加的。本篇解决:登录 token 补齐 + Nacos 分组统一 + admin 注册 Nacos + 980.sql 数据导入,以及一份完整的项目改动清单(5 个我们改的代码文件 + 3 个 dist_sync 分支已有的改动)。

阅读全文 »

导读

编译跑绿后,启动链路又冒出 6 个连环坑:MySQL 没 building_* 用户、property-service 写死内网 IP、admin 种子用户密码是 SHA512×2、is_enable=1 居然是禁用、gateway 报 JWT NPE、前端访问报 401。本篇一次性梳理这 6 个坑的根因、修复方案、排查顺序,以及哪些是”反直觉的项目约定”。

阅读全文 »

导读

接手一个停更 2 年的 Spring Cloud Alibaba 微服务项目,13 个业务服务、11 个独立数据库、26 个 Maven 模块,本地 Maven 仓库空空如也,mvn compile 一跑就是红海一片。这篇记录我从零搭建编译环境的完整过程,包括 Maven 配置重写、私有依赖安装、22 个 SNAPSHOT jar 的手工恢复,以及最终 26 模块 BUILD SUCCESS 的关键命令。

阅读全文 »
0%