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.
 
 
 
 
 
 

3.1 KiB

02 — crm-dict 代码功能与接口现状盘点

Type: research (AFK) Status: resolved Blocked by:

Question

crm-dict 现在到底实现了什么?产出可与票 01 清单逐条比对的现状盘点(.scratch/dict-alignment/assets/code-inventory.md):

  1. 端点表:全部端点的路径/方法/入参(名称/类型/必填性)/出参 DTO 字段(DictGroupControllerDictItemController 及相关 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 集成)覆盖管理写路径/读缓存/引用计数/种子幂等/权限种子。