You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.5 KiB
5.5 KiB
Handoff — 线索模块 grill-with-docs(G1–G5 批量操作 + 视图统计)实现收官
生成时间:2026-08-14 18:01
仓库:D:/code/crm-backend-matt(多模块 Maven monorepo)
分支:见 git status(工作区未提交,尚未 commit/push)
一句话现状
grill-with-docs 会话已全流程闭环:决策 grill → ADR-0023(accepted) → 拆 5 张 ticket(10–14) → 逐张实现+测试闭环。ticket 10–14 全部 resolved,代码未提交。剩下的是人工 review + 提交(本会话按铁律不做 git 操作)。
别重复读的既有产物(按路径引用,勿抄写)
- 决策全景 / 逐页比对结论:
.scratch/clue-module/map.md→## Decisions so far(ticket 10–14 一行一条)+## 逐页比对(ticket 14 收口)(原型 15 页 vs 已实现接口的对照表 + G1–G5 闭环结论)。 - ADR:
docs/adr/0023-lead-batch-operations-and-view-stats.md(D1–D5 决策;status: accepted)。注意docs/adr/0022-...read-write-separation...是别人的读写分离重构 ADR,非本会话产出。 - Ticket 底稿 + Answer:
.scratch/clue-module/issues/10-..~14-..md,每张## Answer已写明交付内容与验收结果。 - PRD:
.scratch/clue-module/线索业务-PRD.md§13(v1.2,B1–B9 决策)。 - 领域语言:
crm-lead/CONTEXT.md、crm-rule/CONTEXT.md(含批量/统计新术语)。 - 生成的 API 文档:独立 docs 仓
D:/code/crm-api-docs(bruno collection),本会话新增 32 个.bru(4 个 tag 文件夹:线索管理/线索规则-公海池配置/线索规则-行政区划/列偏好)。该仓也未提交。
已完成(ticket 10–14)
代码文件见 git status(下方"工作区注意")。要点:
- 10 crm-base
BatchResult<F>(total/successCount/failCount/List<F> failures),仿PageResult风格。 - 11 crm-lead 6 个
-batch端点 +LeadBatchFailReason(8 值,回指 65xxx) +LeadBatchFailItem;impl 用@Lazy self+ 私有runBatch(List<Long>, Consumer<Long>),逐条 CAS、非原子、部分成功。 - 12
LeadPageParam.status→statusIn(List<Integer>);LeadStatsDTO+POST /api/lead/stats;抽buildViewWrapper()使统计口径=列表口径+@DataScope。 - 13 crm-rule
POST /api/rule/pool/delete-batch(D5 方案 A:crm-rule 自建PoolBatchFailReason/PoolBatchFailItem,复用 crm-baseBatchResult,避 crm-rule→crm-lead 反向依赖)。 - 14 bruno-sync
sourceRoots扩容 + 生成 32 个.bru+ 原型 15 页逐页比对;G1–G5 全闭环,G6/G7/G8 维持 Out of scope(线索导入/池导入/池导出——原型有按钮≠本期交付)。
铁律 / 陷阱(下个 agent 必读)
.java必须 UTF-8 无 BOM(见AGENTS.md)。写/改后跑 BOM 扫描:head -c 3 file | od -An -tx1(期望非efbbbf)。docs 仓的.bru不受此约束(那个仓的既有文件本就带 BOM)。- grep 前须
export LC_ALL=C.UTF-8。 - 依赖方向单向:crm-lead→crm-rule;crm-rule 禁止依赖 crm-lead(否则 cycle,D5 因此选方案 A)。
- 别
git checkout整文件:工作区含别人的读写分离重构(ADR-0022)——crm-lead/.../history/、.../query/、.../state/、LeadViewType.java、TransitionCmd.java、LeadTransitionImpl.java、LeadConstants.java、相关测试——非本会话产出,勿动勿清。 - crm-auth 测试发现失败(预存在,与本工作无关):
mvn -pl crm-auth test→ junit-jupiter discovery / SurefireBooterForkException(forked-JVM 环境问题)。这会污染-am链式测试。工作区跑测试的姿势:先mvn -pl <mod> -am install -DskipTests -q,再mvn -pl <mod> test(只跑目标模块)。 edit多改一组原子:任一oldText匹配失败则整组回滚。mvn -pl X -am test -Dtest=...会对-am依赖模块也套同一-Dtest导致 "No tests matching";加-Dsurefire.failIfNoSpecifiedTests=false。
验收状态
mvn -q compile(全模块)通过;全*.java无 BOM。- 各 ticket 单测:
BatchResultTest4/4、LeadBatchServiceTest5/5、LeadServiceImplTest44/44、LeadViewQueryImplTest6/6、LeadPoolBatchDeleteTest4/4、LeadPoolServiceImplTest15/15。 - 未做:整仓
mvn test汇总(受 crm-auth 环境问题阻塞,需用上面的 install-then-test 姿势);git commit;docs 仓提交。
下一步(按优先级)
- 人工 review 两个仓的 diff:
D:/code/crm-backend-matt(代码)+D:/code/crm-api-docs(32 个新.bru),确认后分别提交。提交要把本会话代码与别人的 ADR-0022 重构分开(工作区混杂,注意别一把git add .)。 - 若要整仓测试汇总:
mvn -pl crm-base,crm-lead,crm-rule,crm-preference -am install -DskipTests -q后逐模块mvn -pl <mod> test。 - G6/G7/G8(导入导出)若未来要做,需新开 ADR + ticket,不在本会话范围。
- crm-auth 测试发现失败值得独立排查(与本工作无关,但阻塞 CI 全量测试)。
Suggested skills
code-review:review 自固定点以来的改动(标准轴 + spec 轴),正好对接"人工 review 后提交"。起点可用本会话开始前的 commit 或 merge-base。tdd:若继续做 G6/G7/G8 或补测,走红-绿-重构。request-refactor-plan/ domain 相关:如需把 ADR-0022 读写分离重构单独整理成可提交的原子 commit 序列。