处理 P2.5 评审遗留的 P1 项
P1.1: CLAUDE.md 补充 SaveLabList 的 byId/byLabProject 字典快照行为
- 明确说明字典是循环前的一次性快照,同批重复提交时第一道防线看不到
循环内刚插入的行,会降级到 SaveQcDistributionRegister 的第二道防线
兜底(触发 LogHelper.Error 告警)。
- 明确告诫后续开发者不要"为了一致性"把第一道防线改成循环内动态刷新
字典——那反而会放大并发窗口。
- 也说明了 byLabProject.OrderByDescending(p.Id).First() 的确定性意图,
避免未来被"没意义的简化"改回 First()。
P1.2: QCDistributionInfoViewModel.ToEntity 的 byLabProject 查重改为
OrderByDescending(p.Id).First()
- 如果数据库里历史上出现未清理的重复(防御性假设),这个顺序保证永远
命中 Id 最大(最新插入)的那一条,消除命中顺序不确定的理论风险。
- 实际上清理后全库已无重复,但代码层面不再依赖"没有重复"这个假设。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>