# 02 — crm-dict 代码功能与接口现状盘点 **Type:** research (AFK) **Status:** resolved **Blocked by:** — ## Question crm-dict 现在到底实现了什么?产出可与票 01 清单逐条比对的现状盘点(`.scratch/dict-alignment/assets/code-inventory.md`): 1. **端点表**:全部端点的路径/方法/入参(名称/类型/必填性)/出参 DTO 字段(`DictGroupController`、`DictItemController` 及相关 Param/DTO)。 2. **服务规则**:saveOrUpdate 校验(必填/格式/唯一,含二级项 parentId 约束)、默认项处理(设默认/停用时/换默认的事务行为)、启停规则(**含「默认项停用」当前行为**)、删除阻断(引用判定 `dict_ref_count`)与强制删除、`enabled-list` 语义(effectiveSelectable)、列表排序实现、分页查询现有过滤参数、Caffeine 缓存。 3. **消费方接线**:crm-lead / crm-opportunity / crm-customer 哪里调用 `DictQueryService` / `DictReferenceService`,ref_count 增减的事务接线点。 4. **SEED_GROUPS** 现有分组编码清单(只要分组编码,不要项值)。 5. **接口文档现状**:dict 端点在 bruno 文档/菜单绑定中的现状与缺口(`bruno-sync.config.json` menuBindings、controller 的 tag、现有生成文档的位置与 dict 覆盖情况)。 6. **测试清单**:crm-dict 现有测试文件与覆盖面(一句话/文件)。 ## Answer 现状盘点已产出:`.scratch/dict-alignment/assets/code-inventory.md`(6 节,含端点表/服务规则/消费方接线/SEED_GROUPS/文档现状/测试清单)。要点: - **端点**:共 12 个(分组 5 + 字典项 7),全部扁平动作动词风格、无 @PathVariable/@RequestBody,符合 ADR-0017。 - **最显著发现 1(分页排序)**:两个分页端点把 orderBy/asc 强制置 null,排序固定 `sort_no 空排最后 ASC, create_time ASC`(DictGroupServiceImpl.java:49-58、DictItemServiceImpl.java:56-68);过滤参数现状 = keyword+status(分组)/ keyword+groupId+status(字典项),无 builtin/isDefault/层级过滤。keyword 对字典项实际匹配 name/code/value 三列。 - **最显著发现 2(默认项停用行为)**:停用**字典项**若为默认 → 同事务自动取消默认(不阻断停用,US-27,DictItemServiceImpl.java:196-199);停用**分组**则保留默认记录休眠、重启自动恢复(US-28)。 - **最显著发现 3(ref_count 零接线)**:业务模块(lead/opportunity/customer)目前只在读路径调 `getNames` 做名称回显,**没有任何 increment/decrement/batchApply 调用**——referenced 标记恒 false、被引用删除阻断与值只读实际从不触发。 - **文档缺口**:bruno 生成物已 12/12 全覆盖(外部仓 crm-api-docs/A7 后台管理/,2026-08-31 提交),但 menuBindings 无数据字典条目;.bru 文档有漂移(keyword 少写 value 列、响应表缺 parentId/children、orderBy/asc 收了不用仍列示)。 - **SEED_GROUPS** 24 组;测试 7 文件 54 用例(H2 集成)覆盖管理写路径/读缓存/引用计数/种子幂等/权限种子。